# File lib/main/program/class_methods.rb, line 47
        def build(*args, &block)
          argv = (args.shift || ARGV).map{|arg| arg.dup}
          env = (args.shift || ENV).to_hash.dup
          opts = (args.shift || {}).to_hash.dup

          factory = self

          program = Class.new(Program)

          program.factory = factory
          program.argv = argv
          program.env = env
          program.opts = opts

          program.module_eval(&factory)

          program.module_eval do
            dynamically_extend_via_commandline_modes!
            program.set_default_options!
            define_method(:run, &block) if block
            wrap_run!
          end
          program
        end