class Object

Constants

ARGS_NUM
PACKAGE_NAME
PROG_NAME
USAGE
VERSION

Public Instance Methods

parse_options(args) click to toggle source
# File lib/autotools/configure.rb, line 18
def parse_options(args)
    options = OpenStruct.new

    def options.eval_options
      list = marshal_dump

      list.each do |pair|
        opt = pair[0]
        val = pair[1]

        if(val.class == String)
          method("#{opt}=".to_sym).call eval('"' + val + '"')
        end
      end
    end

    opt_parser = OptionParser.new do |opts|
      opts.banner = USAGE
      options.verbose = false

      options.prefix         = '/usr/local'
      options.exec_prefix    = '#{prefix}'
      options.bindir         = '#{exec_prefix}/bin'
      options.sbindir        = '#{exec_prefix}/sbin'
      options.libexecdir     = '#{exec_prefix}/libexec'
      options.sysconfdir     = '#{prefix}/etc'
      options.sharedstatedir = '#{prefix}/com'
      options.localstatedir  = '#{prefix}/var'
      options.runstatedir    = '#{prefix}/run'
      options.libdir         = '#{exec_prefix}/lib'
      options.includedir     = '#{prefix}/include'
      options.oldincludedir  = '/usr/include'
      options.datarootdir    = '#{prefix}/share'
      options.datadir        = '#{datarootdir}'
      options.infodir        = '#{datarootdir}/info'
      options.localedir      = '#{datarootdir}/locale'
      options.mandir         = '#{datarootdir}/man'
      options.docdir         = '#{datarootdir}/doc/#{PACKAGE_NAME}'
      options.htmldir        = '#{docdir}'
      options.dvidir         = '#{docdir}'
      options.pdfdir         = '#{docdir}'
      options.psdir          = '#{docdir}'

      options.program_prefix = ''
      options.program_suffix = ''

      options.features = { 'foo' => false, 'bar' => true }
      options.libs = { 'foobar' => true, 'barbar' => false }

      diropts = {
        'prefix' => 'install architecture-independent files in DIR',
        'exec-prefix' => 'install architecture-dependent files in DIR',
        'bindir' => 'user executables',
        'sbindir' => 'system admin executables',
        'libexecdir' => 'program executables',
        'sysconfdir' => 'read-only single-machine data',
        'sharedstatedir' => 'modifiable architecture-independent data',
        'localstatedir' => 'modifiable single-machine data',
        'runstatedir' => nil,
        'libdir' => 'object code libraries',
        'includedir' => 'C header files',
        'oldincludedir' => 'C header files for non-gcc',
        'datarootdir' => 'read-only arch.-independent data root',
        'datadir' => 'read-only architecture-independent data',
        'infodir' => 'info documentation',
        'localedir' => 'locale-dependent data',
        'mandir' => 'man documentation',
        'docdir' => 'documentation root',
        'htmldir' => 'HTML documentation',
        'dvidir' => 'dvi documentation',
        'pdfdir' => 'PDF documentation',
        'psdir' => 'PS documentation'
      }

      features = {
        'foo' => 'foo feature',
        'bar' => 'foo feature'
      }

      libs = {
        'foobar' => 'foobar library',
        'barbar' => 'barbar library'
      }

      opts.separator ""
      opts.separator "Fine tuning of the installation directories:"

      diropts.each do |pair|
        opt = pair[0]
        opt_r = opt.sub '-', '_'
        desc = pair[1]
        opts.on("--#{opt}=DIR", String, "#{desc} [#{options.method(opt_r.to_sym).call}]") do |path|
          options.method("#{opt_r}=".to_sym).call(path)
        end
      end

      opts.separator ""
      opts.separator "Program names:"

      opts.on("--program-prefix=PREFIX", String, "prepend PREFIX to installed program names") do |prefix|
        options.program_prefix = prefix
      end

      opts.on("--program-suffix=SUFFIX", String, "append SUFFIX to installed program names") do |suffix|
        options.program_suffix = suffix
      end

      opts.separator ""
      opts.separator "Optional Features:"

      features.each do |pair|
        feature = pair[0]
        desc = pair[1]

        newval = !(options.features[feature] == true)
        actstr = newval ? 'enable' : 'disable'

        opts.on("--#{actstr}-#{feature}", "#{actstr} #{features[feature]}") do
          options.features[feature] = newval
        end
      end

      libs.each do |pair|
        lib = pair[0]
        desc = pair[1]

        newval = !(options.libs[lib] == true)
        actstr = newval ? 'with' : 'without'

        opts.on("--#{actstr}-#{lib}", "#{actstr} #{libs[lib]}") do
          options.libs[lib]= newval
        end
      end

      opts.separator ""
      opts.separator "Common options:"

      opts.on("--verbose", "Print maximum information") do
        options.verbose = true
      end

      opts.on_tail("-h", "--help", "Show this message") do
        puts opts
        exit
      end

      opts.on_tail("--version", "Show version") do
        puts VERSION
        exit
      end
    end

    opt_parser.parse!(args)
    [options, opt_parser]
  end