# File lib/chef/provider.rb, line 181
      def build_from_file(cookbook_name, filename, run_context)
        pname = filename_to_qualified_string(cookbook_name, filename)

        # Add log entry if we override an existing light-weight provider.
        class_name = convert_to_class_name(pname)
        overriding = Chef::Provider.const_defined?(class_name)
        Chef::Log.info("#{class_name} light-weight provider already initialized -- overriding!") if overriding

        new_provider_class = Class.new self do |cls|

          include Chef::Mixin::RecipeDefinitionDSLCore

          def load_current_resource
            # silence Chef::Exceptions::Override exception
          end

          class << cls
            include Chef::Mixin::FromFile

            # setup DSL's shortcut methods
            def action(name, &block)
              define_method("action_#{name.to_s}") do
                instance_eval(&block)
              end
            end
          end

          # load provider definition from file
          cls.class_from_file(filename)
        end

        # register new class as a Chef::Provider
        pname = filename_to_qualified_string(cookbook_name, filename)
        class_name = convert_to_class_name(pname)
        Chef::Provider.const_set(class_name, new_provider_class)
        Chef::Log.debug("Loaded contents of #{filename} into a provider named #{pname} defined in Chef::Provider::#{class_name}")

        new_provider_class
      end