update.
[chise/ruby.git] / install.rb
index e624774..e69de29 100755 (executable)
-#
-# This file is automatically generated. DO NOT MODIFY!
-#
-# install.rb
-#
-#   Copyright (c) 2000-2003 Minero Aoki <aamine@loveruby.net>
-#
-#   This program is free software.
-#   You can distribute/modify this program under the terms of
-#   the GNU Lesser General Public License version 2.
-#
-
-### begin compat.rb
-
-module Enumerable
-  methods = instance_methods()
-
-  unless methods.include?('map')
-    alias map collect
-  end
-
-  unless methods.include?('select')
-    alias select find_all
-  end
-
-  unless methods.include?('reject')
-    def reject
-      result = []
-      each do |i|
-        result.push i unless yield(i)
-      end
-      result
-    end
-  end
-
-  unless methods.include?('inject')
-    def inject( result )
-      each do |i|
-        result = yield(result, i)
-      end
-      result
-    end
-  end
-
-  unless methods.include?('any?')
-    def any?
-      each do |i|
-        return true if yield(i)
-      end
-      false
-    end
-  end
-end
-
-def File.read_all( fname )
-  File.open(fname, 'rb') {|f| return f.read }
-end
-
-def File.write( fname, str )
-  File.open(fname, 'wb') {|f| f.write str }
-end
-
-### end compat.rb
-### begin config.rb
-
-if i = ARGV.index(/\A--rbconfig=/)
-  file = $'
-  ARGV.delete_at(i)
-  require file
-else
-  require 'rbconfig'
-end
-
-
-class ConfigTable
-
-  c = ::Config::CONFIG
-
-  rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
-  major = c['MAJOR'].to_i
-  minor = c['MINOR'].to_i
-  teeny = c['TEENY'].to_i
-  version = "#{major}.#{minor}"
-
-  # ruby ver. >= 1.4.4?
-  newpath_p = ((major >= 2) or
-               ((major == 1) and
-                ((minor >= 5) or
-                 ((minor == 4) and (teeny >= 4)))))
-  
-  re = Regexp.new('\A' + Regexp.quote(c['prefix']))
-  subprefix = lambda {|path|
-      re === path and path.sub(re, '$prefix')
-  }
-
-  if c['rubylibdir']
-    # V < 1.6.3
-    stdruby    = subprefix.call(c['rubylibdir'])
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = subprefix.call(c['sitelibdir'])
-    sodir      = subprefix.call(c['sitearchdir'])
-  elsif newpath_p
-    # 1.4.4 <= V <= 1.6.3
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = siteruby + '/' + version
-    sodir      = "$site-ruby/#{c['arch']}"
-  else
-    # V < 1.4.4
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = "$prefix/lib/ruby/#{version}/site_ruby"
-    versite    = siteruby
-    sodir      = "$site-ruby/#{c['arch']}"
-  end
-
-  DESCRIPTER = [
-    [ 'prefix',    [ c['prefix'],
-                     'path',
-                     'path prefix of target environment' ] ],
-    [ 'std-ruby',  [ stdruby,
-                     'path',
-                     'the directory for standard ruby libraries' ] ],
-    [ 'site-ruby-common', [ siteruby,
-                     'path',
-                     'the directory for version-independent non-standard ruby libraries' ] ],
-    [ 'site-ruby', [ versite,
-                     'path',
-                     'the directory for non-standard ruby libraries' ] ],
-    [ 'bin-dir',   [ '$prefix/bin',
-                     'path',
-                     'the directory for commands' ] ],
-    [ 'rb-dir',    [ '$site-ruby',
-                     'path',
-                     'the directory for ruby scripts' ] ],
-    [ 'so-dir',    [ sodir,
-                     'path',
-                     'the directory for ruby extentions' ] ],
-    [ 'data-dir',  [ '$prefix/share',
-                     'path',
-                     'the directory for shared data' ] ],
-    [ 'ruby-path', [ rubypath,
-                     'path',
-                     'path to set to #! line' ] ],
-    [ 'ruby-prog', [ rubypath,
-                     'name',
-                     'the ruby program using for installation' ] ],
-    [ 'make-prog', [ 'make',
-                     'name',
-                     'the make program to compile ruby extentions' ] ],
-    [ 'without-ext', [ 'no',
-                       'yes/no',
-                       'does not compile/install ruby extentions' ] ]
-  ]
-
-  SAVE_FILE = 'config.save'
-
-  def ConfigTable.each_name( &block )
-    keys().each(&block)
-  end
-
-  def ConfigTable.keys
-    DESCRIPTER.map {|k,*dummy| k }
-  end
-
-  def ConfigTable.each_definition( &block )
-    DESCRIPTER.each(&block)
-  end
-
-  def ConfigTable.get_entry( name )
-    name, ent = DESCRIPTER.assoc(name)
-    ent
-  end
-
-  def ConfigTable.get_entry!( name )
-    get_entry(name) or raise ArgumentError, "no such config: #{name}"
-  end
-
-  def ConfigTable.add_entry( name, vals )
-    ConfigTable::DESCRIPTER.push [name,vals]
-  end
-
-  def ConfigTable.remove_entry( name )
-    get_entry name or raise ArgumentError, "no such config: #{name}"
-    DESCRIPTER.delete_if {|n,arr| n == name }
-  end
-
-  def ConfigTable.config_key?( name )
-    get_entry(name) ? true : false
-  end
-
-  def ConfigTable.bool_config?( name )
-    ent = get_entry(name) or return false
-    ent[1] == 'yes/no'
-  end
-
-  def ConfigTable.value_config?( name )
-    ent = get_entry(name) or return false
-    ent[1] != 'yes/no'
-  end
-
-  def ConfigTable.path_config?( name )
-    ent = get_entry(name) or return false
-    ent[1] == 'path'
-  end
-
-
-  class << self
-    alias newobj new
-
-    def new
-      c = newobj()
-      c.__send__ :init
-      c
-    end
-
-    def load
-      c = newobj()
-      raise InstallError, "#{File.basename $0} config first"\
-                                      unless FileTest.file?(SAVE_FILE)
-      File.foreach(SAVE_FILE) do |line|
-        k, v = line.split(/=/, 2)
-        c.instance_eval {
-            @table[k] = v.strip
-        }
-      end
-      c
-    end
-  end
-
-  def initialize
-    @table = {}
-  end
-
-  def init
-    DESCRIPTER.each do |k, (default, vname, desc, default2)|
-      @table[k] = default
-    end
-  end
-  private :init
-
-  def save
-    File.open(SAVE_FILE, 'w') {|f|
-        @table.each do |k, v|
-          f.printf "%s=%s\n", k, v if v
-        end
-    }
-  end
-
-  def []=( k, v )
-    ConfigTable.config_key? k or raise InstallError, "unknown config option #{k}"
-    if ConfigTable.path_config? k
-      @table[k] = (v[0,1] != '$') ? File.expand_path(v) : v
-    else
-      @table[k] = v
-    end
-  end
-    
-  def []( key )
-    @table[key] or return nil
-    @table[key].gsub(%r<\$([^/]+)>) { self[$1] }
-  end
-
-  def set_raw( key, val )
-    @table[key] = val
-  end
-
-  def get_raw( key )
-    @table[key]
-  end
-
-end
-
-
-module MetaConfigAPI
-
-  def eval_file_ifexist( fname )
-    instance_eval File.read_all(fname), fname, 1 if FileTest.file?(fname)
-  end
-
-  def config_names
-    ConfigTable.keys
-  end
-
-  def config?( name )
-    ConfigTable.config_key? name
-  end
-
-  def bool_config?( name )
-    ConfigTable.bool_config? name
-  end
-
-  def value_config?( name )
-    ConfigTable.value_config? name
-  end
-
-  def path_config?( name )
-    ConfigTable.path_config? name
-  end
-
-  def add_config( name, argname, default, desc )
-    ConfigTable.add_entry name,[default,argname,desc]
-  end
-
-  def add_path_config( name, default, desc )
-    add_config name, 'path', default, desc
-  end
-
-  def add_bool_config( name, default, desc )
-    add_config name, 'yes/no', default ? 'yes' : 'no', desc
-  end
-
-  def set_config_default( name, default )
-    if bool_config? name
-      ConfigTable.get_entry!(name)[0] = default ? 'yes' : 'no'
-    else
-      ConfigTable.get_entry!(name)[0] = default
-    end
-  end
-
-  def remove_config( name )
-    ent = ConfigTable.get_entry(name)
-    ConfigTable.remove_entry name
-    ent
-  end
-
-end
-
-### end config.rb
-### begin fileop.rb
-
-module FileOperations
-
-  def mkdir_p( dname, prefix = nil )
-    dname = prefix + dname if prefix
-    $stderr.puts "mkdir -p #{dname}" if verbose?
-    return if no_harm?
-
-    # does not check '/'... it's too abnormal case
-    dirs = dname.split(%r<(?=/)>)
-    if /\A[a-z]:\z/i === dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless dir? path
-    end
-  end
-
-  def rm_f( fname )
-    $stderr.puts "rm -f #{fname}" if verbose?
-    return if no_harm?
-
-    if File.exist? fname or File.symlink? fname
-      File.chmod 0777, fname
-      File.unlink fname
-    end
-  end
-
-  def rm_rf( dn )
-    $stderr.puts "rm -rf #{dn}" if verbose?
-    return if no_harm?
-
-    Dir.chdir dn
-    Dir.foreach('.') do |fn|
-      next if fn == '.'
-      next if fn == '..'
-      if dir? fn
-        verbose_off {
-            rm_rf fn
-        }
-      else
-        verbose_off {
-            rm_f fn
-        }
-      end
-    end
-    Dir.chdir '..'
-    Dir.rmdir dn
-  end
-
-  def mv( src, dest )
-    rm_f dest
-    begin
-      File.link src, dest
-    rescue
-      File.write dest, File.read_all(src)
-      File.chmod File.stat(src).mode, dest
-    end
-    rm_f src
-  end
-
-  def install( from, dest, mode, prefix = nil )
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix + dest if prefix
-    if dir? realdest
-      realdest += '/' + File.basename(from)
-    end
-    str = File.read_all(from)
-    if diff? str, realdest
-      verbose_off {
-          rm_f realdest if File.exist? realdest
-      }
-      File.write realdest, str
-      File.chmod mode, realdest
-
-      File.open(objdir + '/InstalledFiles', 'a') {|f| f.puts realdest }
-    end
-  end
-
-  def diff?( orig, targ )
-    return true unless File.exist? targ
-    orig != File.read_all(targ)
-  end
-
-  def command( str )
-    $stderr.puts str if verbose?
-    system str or raise RuntimeError, "'system #{str}' failed"
-  end
-
-  def ruby( str )
-    command config('ruby-prog') + ' ' + str
-  end
-
-  def dir?( dname )
-    # for corrupted windows stat()
-    File.directory?((dname[-1,1] == '/') ? dname : dname + '/')
-  end
-
-  def all_files_in( dname )
-    Dir.open(dname) {|d|
-        return d.select {|n| FileTest.file? "#{dname}/#{n}" }
-    }
-  end
-
-  REJECT_DIRS = %w(
-    CVS SCCS RCS CVS.adm
-  )
-
-  def all_dirs_in( dname )
-    Dir.open(dname) {|d|
-        return d.select {|n| dir? "#{dname}/#{n}" } - %w(. ..) - REJECT_DIRS
-    }
-  end
-
-end
-
-### end fileop.rb
-### begin base.rb
-
-class InstallError < StandardError; end
-
-
-class Installer
-
-  Version   = '3.1.4'
-  Copyright = 'Copyright (c) 2000-2003 Minero Aoki'
-
-
-  @toplevel = nil
-
-  def self.declare_toplevel_installer( inst )
-    raise ArgumentError, 'two toplevel installers declared' if @toplevel
-    @toplevel = inst
-  end
-
-  def self.toplevel_installer
-    @toplevel
-  end
-
-
-  FILETYPES = %w( bin lib ext data )
-
-  include FileOperations
-
-  def initialize( config, opt, srcroot, objroot )
-    @config = config
-    @options = opt
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__}>"
-  end
-
-  #
-  # configs/options
-  #
-
-  def get_config( key )
-    @config[key]
-  end
-
-  alias config get_config
-
-  def set_config( key, val )
-    @config[key] = val
-  end
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def verbose_off
-    save, @options['verbose'] = @options['verbose'], false
-    yield
-    @options['verbose'] = save
-  end
-
-  #
-  # srcdir/objdir
-  #
-
-  attr_reader :srcdir
-  alias srcdir_root srcdir
-  alias package_root srcdir
-
-  def curr_srcdir
-    "#{@srcdir}/#{@currdir}"
-  end
-
-  attr_reader :objdir
-  alias objdir_root objdir
-
-  def curr_objdir
-    "#{@objdir}/#{@currdir}"
-  end
-
-  def srcfile( path )
-    curr_srcdir + '/' + path
-  end
-
-  def srcexist?( path )
-    File.exist? srcfile(path)
-  end
-
-  def srcdirectory?( path )
-    dir? srcfile(path)
-  end
-  
-  def srcfile?( path )
-    FileTest.file? srcfile(path)
-  end
-
-  def srcentries( path = '.' )
-    Dir.open(curr_srcdir + '/' + path) {|d|
-        return d.to_a - %w(. ..) - hookfilenames
-    }
-  end
-
-  def srcfiles( path = '.' )
-    srcentries(path).select {|fname|
-        FileTest.file? File.join(curr_srcdir, path, fname)
-    }
-  end
-
-  def srcdirectories( path = '.' )
-    srcentries(path).select {|fname|
-        dir? File.join(curr_srcdir, path, fname)
-    }
-  end
-
-  def dive_into( rel )
-    return unless dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  def config_dir_bin( rel )
-  end
-
-  def config_dir_lib( rel )
-  end
-
-  def config_dir_ext( rel )
-    extconf if extdir? curr_srcdir
-  end
-
-  def extconf
-    opt = @options['config-opt'].join(' ')
-    command "#{config('ruby-prog')} #{curr_srcdir}/extconf.rb #{opt}"
-  end
-
-  def config_dir_data( rel )
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin( relpath )
-    all_files_in(curr_srcdir()).each do |fname|
-      add_rubypath "#{curr_srcdir}/#{fname}"
-    end
-  end
-
-  SHEBANG_RE = /\A\#!\s*\S*ruby\S*/
-
-  def add_rubypath( path )
-    $stderr.puts %Q<set #! line to "\#!#{config('ruby-path')}" for #{path} ...> if verbose?
-    return if no_harm?
-
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(path) {|r|
-      File.open(tmpfile, 'w') {|w|
-          first = r.gets
-          return unless SHEBANG_RE === first   # reject '/usr/bin/env ruby'
-
-          w.print first.sub(SHEBANG_RE, '#!' + config('ruby-path'))
-          w.write r.read
-      } }
-      mv tmpfile, File.basename(path)
-    ensure
-      rm_f tmpfile if File.exist? tmpfile
-    end
-  end
-
-  def setup_dir_lib( relpath )
-  end
-
-  def setup_dir_ext( relpath )
-    make if extdir?(curr_srcdir)
-  end
-
-  def setup_dir_data( relpath )
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin( rel )
-    install_files target_filenames(), config('bin-dir') + '/' + rel, 0755
-  end
-
-  def install_dir_lib( rel )
-    install_files target_filenames(), config('rb-dir') + '/' + rel, 0644
-  end
-
-  def install_dir_ext( rel )
-    install_dir_ext_main File.dirname(rel) if extdir?(curr_srcdir)
-  end
-
-  def install_dir_ext_main( rel )
-    install_files allext('.'), config('so-dir') + '/' + rel, 0555
-  end
-
-  def install_dir_data( rel )
-    install_files target_filenames(), config('data-dir') + '/' + rel, 0644
-  end
-
-  def install_files( list, dest, mode )
-    mkdir_p dest, @options['install-prefix']
-    list.each do |fname|
-      install fname, dest, mode, @options['install-prefix']
-    end
-  end
-
-  def target_filenames
-    if FileTest.file? "#{curr_srcdir()}/MANIFEST"
-      mapdir(target_filenames_MANIFEST())
-    else
-      mapdir(target_filenames_AUTO())
-    end
-  end
-
-  def mapdir( filelist )
-    filelist.map {|fname|
-        if File.exist? fname   # current objdir == '.'
-          fname
-        else
-          File.join(curr_srcdir(), fname)
-        end
-    }
-  end
-
-  def target_filenames_MANIFEST
-    File.read_all("#{curr_srcdir()}/MANIFEST").split
-  end
-  
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  REJECT_PATTERNS = %w( 
-      core RCSLOG tags TAGS .make.state
-      .nse_depinfo #* .#* cvslog.* ,* .del-* *.a *.olb *.o *.obj
-      *.so *.Z *~ *.old *.elc *.ln *.bak *.BAK *.orig *.rej *.exe _$* *$
-
-      *.org *.in .*
-  ).map {|pattern|
-      Regexp.compile('\A' + pattern.gsub(/[\.\$]/) {|s| '\\' + s }.gsub(/\*/, '.*') + '\z')
-  }
-
-  def target_filenames_AUTO
-    (existfiles() - hookfiles()).reject {|fname|
-        REJECT_PATTERNS.any? {|re| re === fname }
-    }
-  end
-
-  def existfiles
-    all_files_in(curr_srcdir()) | all_files_in(curr_objdir())
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-        %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def allext( dir )
-    _allext(dir) or raise InstallError,
-        "no extention exists: Have you done 'ruby #{$0} setup' ?"
-  end
-
-  DLEXT = /\.#{ ::Config::CONFIG['DLEXT'] }\z/
-
-  def _allext( dir )
-    Dir.open(dir) {|d|
-        return d.select {|fname| DLEXT === fname }
-    }
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def clean_dir_bin( rel )
-  end
-
-  def clean_dir_lib( rel )
-  end
-
-  def clean_dir_ext( rel )
-    make 'clean' if FileTest.file?('Makefile')
-  end
-
-  def clean_dir_data( rel )
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def distclean_dir_bin( rel )
-  end
-
-  def distclean_dir_lib( rel )
-  end
-
-  def distclean_dir_ext( rel )
-    make 'distclean' if FileTest.file?('Makefile')
-  end
-
-  #
-  # lib
-  #
-  
-  def make( task = '' )
-    command config('make-prog') + ' ' + task
-  end
-
-  def exec_task_traverse( task )
-    run_hook 'pre-' + task
-    FILETYPES.each do |type|
-      if config('without-ext') == 'yes' and type == 'ext'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, task + '_dir_' + type
-    end
-    run_hook 'post-' + task
-  end
-
-  def traverse( task, rel, mid )
-    dive_into(rel) {
-        run_hook 'pre-' + task
-        __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-        all_dirs_in(curr_srcdir()).each do |d|
-          traverse task, rel + '/' + d, mid
-        end
-        run_hook 'post-' + task
-    }
-  end
-
-  def run_hook( name )
-    try_run_hook curr_srcdir + '/' + name           or
-    try_run_hook curr_srcdir + '/' + name + '.rb'
-  end
-
-  def try_run_hook( fname )
-    return false unless FileTest.file?(fname)
-
-    env = self.dup
-    begin
-      env.instance_eval File.read_all(fname), fname, 1
-    rescue
-      raise InstallError, "hook #{fname} failed:\n" + $!.message
-    end
-    true
-  end
-
-  def extdir?( dir )
-    File.exist? dir + '/MANIFEST'
-  end
-
-end
-
-### end base.rb
-### begin toplevel.rb
-
-class ToplevelInstaller < Installer
-
-  def self.invoke
-    new(File.dirname($0)).invoke
-  end
-
-
-  TASKS = [
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles extention or else' ],
-    [ 'install',  'installs files' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-
-  def initialize( root )
-    super nil, {'verbose' => true}, root, '.'
-    Installer.declare_toplevel_installer self
-  end
-
-
-  def invoke
-    run_metaconfigs
-
-    case task = parsearg_global()
-    when 'config'
-      @config = ConfigTable.new
-    else
-      @config = ConfigTable.load
-    end
-    parsearg_TASK task
-
-    exectask task
-  end
-
-  include MetaConfigAPI
-
-  def run_metaconfigs
-    eval_file_ifexist "#{srcdir_root()}/metaconfig"
-  end
-
-
-  def exectask( task )
-    if task == 'show'
-      exec_show
-    else
-      try task
-    end
-  end
-
-  def try( task )
-    $stderr.printf "#{File.basename $0}: entering %s phase...\n", task if verbose?
-    begin
-      __send__ 'exec_' + task
-    rescue
-      $stderr.printf "%s failed\n", task
-      raise
-    end
-    $stderr.printf "#{File.basename $0}: %s done.\n", task if verbose?
-  end
-
-  #
-  # processing arguments
-  #
-
-  def parsearg_global
-    task_re = /\A(?:#{TASKS.map {|i| i[0] }.join '|'})\z/
-
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        task_re === arg or raise InstallError, "wrong task: #{arg}"
-        return arg
-
-      when '-q', '--quiet'
-        @options['verbose'] = false
-
-      when       '--verbose'
-        @options['verbose'] = true
-
-      when '-h', '--help'
-        print_usage $stdout
-        exit 0
-
-      when '-v', '--version'
-        puts "#{File.basename $0} version #{Version}"
-        exit 0
-      
-      when '--copyright'
-        puts Copyright
-        exit 0
-
-      else
-        raise InstallError, "unknown global option '#{arg}'"
-      end
-    end
-
-    raise InstallError, "No task or global option given.
-Typical installation procedure is:
-    $ ruby #{File.basename $0} config
-    $ ruby #{File.basename $0} setup
-    # ruby #{File.basename $0} install  (may require root privilege)
-"
-  end
-
-
-  def parsearg_TASK( task )
-    mid = "parsearg_#{task}"
-    if respond_to? mid, true
-      __send__ mid
-    else
-      ARGV.empty? or
-          raise InstallError, "#{task}:  unknown options: #{ARGV.join ' '}"
-    end
-  end
-
-  def parsearg_config
-    re = /\A--(#{ConfigTable.keys.join '|'})(?:=(.*))?\z/
-    @options['config-opt'] = []
-
-    while i = ARGV.shift
-      if /\A--?\z/ === i
-        @options['config-opt'] = ARGV.dup
-        break
-      end
-      m = re.match(i) or raise InstallError, "config: unknown option #{i}"
-      name, value = m.to_a[1,2]
-      if value
-        if ConfigTable.bool_config?(name)
-          /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i === value or raise InstallError, "config: --#{name} allows only yes/no for argument"
-          value = (/\Ay(es)?|\At(rue)/i === value) ? 'yes' : 'no'
-        end
-      else
-        ConfigTable.bool_config?(name) or raise InstallError, "config: --#{name} requires argument"
-        value = 'yes'
-      end
-      @config[name] = value
-    end
-  end
-
-  def parsearg_install
-    @options['no-harm'] = false
-    @options['install-prefix'] = ''
-    while a = ARGV.shift
-      case a
-      when /\A--no-harm\z/
-        @options['no-harm'] = true
-      when /\A--prefix=(.*)\z/
-        path = $1
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @options['install-prefix'] = path
-      else
-        raise InstallError, "install: unknown option #{a}"
-      end
-    end
-  end
-
-
-  def print_usage( out )
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-20s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '-h,--help',    'print this message'
-    out.printf fmt, '-v,--version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf "  %-10s  %s\n", name, desc
-    end
-
-    out.puts
-    out.puts 'Options for config:'
-    ConfigTable.each_definition do |name, (default, arg, desc, default2)|
-      out.printf "  %-20s %s [%s]\n",
-                 '--'+ name + (ConfigTable.bool_config?(name) ? '' : '='+arg),
-                 desc,
-                 default2 || default
-    end
-    out.printf "  %-20s %s [%s]\n",
-        '--rbconfig=path', 'your rbconfig.rb to load', "running ruby's"
-
-    out.puts
-    out.puts 'Options for install:'
-    out.printf "  %-20s %s [%s]\n",
-        '--no-harm', 'only display what to do if given', 'off'
-    out.printf "  %-20s %s [%s]\n",
-        '--prefix',  'install path prefix', '$prefix'
-
-    out.puts
-  end
-
-  #
-  # config
-  #
-
-  def exec_config
-    super
-    @config.save
-  end
-
-  #
-  # show
-  #
-
-  def exec_show
-    ConfigTable.each_name do |k|
-      v = @config.get_raw(k)
-      if not v or v.empty?
-        v = '(not specified)'
-      end
-      printf "%-10s %s\n", k, v
-    end
-  end
-
-end
-
-### end toplevel.rb
-
-if $0 == __FILE__
-  begin
-    ToplevelInstaller.invoke
-  rescue
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end