class Setup::Configuration
Stores platform information and general install settings.
Constants
- META_CONFIG_FILE
Custom configuration file.
- RBCONFIG
Ruby System
Configuration
Attributes
begin File.foreach(CONFIG_FILE) do |line| k, v = *line.split(/=/, 2) k.gsub!('-','_') __send__("#{k}=",v.strip) #self[k] = v.strip end rescue Errno::ENOENT raise Error, $!.message + "\n#{File.basename($0)} config first" end
end
Public Class Methods
New ConfigTable
# File lib/setup/configuration.rb, line 112 def initialize(values={}) initialize_metaconfig initialize_defaults initialize_environment initialize_configfile unless values[:reset] values.each{ |k,v| __send__("#{k}=", v) } yield(self) if block_given? end
TODO: better methods for path type
# File lib/setup/configuration.rb, line 32 def self.option(name, *args) #type, description) options << [name.to_s, *args] #type, description] attr_accessor(name) end
# File lib/setup/configuration.rb, line 25 def self.options @@options ||= [] end
Public Instance Methods
Base
bin directory
# File lib/setup/configuration.rb, line 198 def base_bindir @base_bindir ||= subprefix('bindir') end
# File lib/setup/configuration.rb, line 208 def base_datadir @base_datadir ||= subprefix('datadir') end
NOTE: This removed the trailing $(PACKAGE)
.
# File lib/setup/configuration.rb, line 218 def base_docdir @base_docdir || File.dirname(subprefix('docdir')) end
Base
libdir
# File lib/setup/configuration.rb, line 203 def base_libdir @base_libdir ||= subprefix('libdir') end
Base
directory for local state data
# File lib/setup/configuration.rb, line 238 def base_localstatedir @base_localstatedir ||= subprefix('localstatedir') end
# File lib/setup/configuration.rb, line 213 def base_mandir @base_mandir ||= subprefix('mandir') end
# File lib/setup/configuration.rb, line 228 def base_rubyarchdir @base_rubyarchdir ||= subprefix('archdir') end
# File lib/setup/configuration.rb, line 223 def base_rubylibdir @rubylibdir ||= subprefix('rubylibdir') end
Base
directory for system configuration files
# File lib/setup/configuration.rb, line 233 def base_sysconfdir @base_sysconfdir ||= subprefix('sysconfdir') end
Directory for commands
# File lib/setup/configuration.rb, line 365 def bindir @bindir || File.join(prefix, base_bindir) end
Set directory for commands
# File lib/setup/configuration.rb, line 370 def bindir=(path) @bindir = pathname(path) end
Compile native extensions?
# File lib/setup/configuration.rb, line 554 def compile? !no_ext end
Directory for shared data
# File lib/setup/configuration.rb, line 385 def datadir @datadir || File.join(prefix, base_datadir) end
Set directory for shared data
# File lib/setup/configuration.rb, line 390 def datadir=(path) @datadir = pathname(path) end
Install doc directory?
# File lib/setup/configuration.rb, line 569 def doc? !no_doc end
Directory for documentation
# File lib/setup/configuration.rb, line 405 def docdir @docdir || File.join(prefix, base_docdir) end
Set directory for documentation
# File lib/setup/configuration.rb, line 410 def docdir=(path) @docdir = pathname(path) end
Does the configuration file exist?
# File lib/setup/configuration.rb, line 611 def exist? File.exist?(CONFIG_FILE) end
# File lib/setup/configuration.rb, line 484 def extconfopt @extconfopt ||= '' end
# File lib/setup/configuration.rb, line 489 def extconfopt=(string) @extconfopt = string end
Load configuration.
# File lib/setup/configuration.rb, line 153 def initialize_configfile if exist? erb = ERB.new(File.read(CONFIG_FILE)) txt = erb.result(binding) dat = YAML.load(txt) dat.each do |k, v| next if 'type' == k next if 'installdirs' == k k = k.gsub('-','_') __send__("#{k}=", v) end # do these last if dat['type'] self.type = dat['type'] end if dat['installdirs'] self.installdirs = dat['installdirs'] end #else # raise Error, $!.message + "\n#{File.basename($0)} config first" end end
By default installation is to site locations, tests will not be run, ri documentation will not be generated, but the doc/
directory will be installed.
# File lib/setup/configuration.rb, line 133 def initialize_defaults self.type = 'site' self.no_ri = true self.no_test = true self.no_doc = true self.no_ext = false #@rbdir = siterubyver #'$siterubyver' #@sodir = siterubyverarch #'$siterubyverarch' end
Get configuration from environment.
# File lib/setup/configuration.rb, line 144 def initialize_environment options.each do |name, *args| if value = ENV["RUBYSETUP_#{name.to_s.upcase}"] __send__("#{name}=", value) end end end
# File lib/setup/configuration.rb, line 123 def initialize_metaconfig if File.exist?(META_CONFIG_FILE) script = File.read(META_CONFIG_FILE) (class << self; self; end).class_eval(script) end end
Directory for libraries
# File lib/setup/configuration.rb, line 375 def libdir @libdir || File.join(prefix, base_libdir) end
Set directory for libraries
# File lib/setup/configuration.rb, line 380 def libdir=(path) @libdir = pathname(path) end
Directory for ruby libraries
# File lib/setup/configuration.rb, line 299 def libruby @libruby ||= RBCONFIG['prefix'] + "/lib/ruby" end
Set directory for ruby libraries
# File lib/setup/configuration.rb, line 304 def libruby=(path) path = pathname(path) @librubyver = librubyver.sub(libruby, path) @librubyverarch = librubyverarch.sub(libruby, path) @libruby = path end
Directory for standard ruby libraries
# File lib/setup/configuration.rb, line 312 def librubyver @librubyver ||= RBCONFIG['rubylibdir'] end
Set directory for standard ruby libraries
# File lib/setup/configuration.rb, line 317 def librubyver=(path) @librubyver = pathname(path) end
Directory for standard ruby extensions
# File lib/setup/configuration.rb, line 322 def librubyverarch @librubyverarch ||= RBCONFIG['archdir'] end
Set directory for standard ruby extensions
# File lib/setup/configuration.rb, line 327 def librubyverarch=(path) @librubyverarch = pathname(path) end
Directory for local state data TODO: Can this be prefixed?
# File lib/setup/configuration.rb, line 437 def localstatedir @localstatedir ||= base_localstatedir end
Set directory for local state data
# File lib/setup/configuration.rb, line 442 def localstatedir=(path) @localstatedir = pathname(path) end
TODO: Does this handle ‘nmake’ on windows?
# File lib/setup/configuration.rb, line 468 def makeprog @makeprog ||= ( if arg = RBCONFIG['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg } arg.sub(/'/, '').split(/=/, 2)[1] else 'make' end ) end
# File lib/setup/configuration.rb, line 479 def makeprog=(command) @makeprog = command end
Directory for man pages
# File lib/setup/configuration.rb, line 395 def mandir @mandir || File.join(prefix, base_mandir) end
Set directory for man pages
# File lib/setup/configuration.rb, line 400 def mandir=(path) @mandir = pathname(path) end
# File lib/setup/configuration.rb, line 528 def no_doc @no_doc end
# File lib/setup/configuration.rb, line 533 def no_doc=(val) @no_doc = boolean(val) end
# File lib/setup/configuration.rb, line 508 def no_ext @no_ext end
# File lib/setup/configuration.rb, line 513 def no_ext=(val) @no_ext = boolean(val) end
@deprecated Will be remove in future version. Currently ignored.
# File lib/setup/configuration.rb, line 539 def no_ri @no_ri end
@deprecated Will be remove in future version. Currently ignored.
# File lib/setup/configuration.rb, line 544 def no_ri=(val) @no_ri = boolean(val) end
# File lib/setup/configuration.rb, line 518 def no_test @no_test end
# File lib/setup/configuration.rb, line 523 def no_test=(val) @no_test = boolean(val) end
# File lib/setup/configuration.rb, line 104 def options #(class << self ; self ; end).options self.class.options end
Path prefix of target environment
# File lib/setup/configuration.rb, line 289 def prefix @prefix ||= RBCONFIG['prefix'] end
Set path prefix of target environment
# File lib/setup/configuration.rb, line 294 def prefix=(path) @prefix = pathname(path) end
Directory for ruby scripts
# File lib/setup/configuration.rb, line 415 def rbdir @rbdir || File.join(prefix, base_rubylibdir) end
# File lib/setup/configuration.rb, line 447 def rubypath #@rubypath ||= RBCONFIG['libexecdir'] @rubypath ||= File.join(RBCONFIG['bindir'], RBCONFIG['ruby_install_name'] + RBCONFIG['EXEEXT']) end
# File lib/setup/configuration.rb, line 453 def rubypath=(path) @rubypath = pathname(path) end
# File lib/setup/configuration.rb, line 458 def rubyprog @rubyprog || rubypath end
# File lib/setup/configuration.rb, line 463 def rubyprog=(command) @rubyprog = command end
Save configuration.
# File lib/setup/configuration.rb, line 596 def save_config out = to_yaml dir = File.dirname(CONFIG_FILE) unless File.exist?(dir) FileUtils.mkdir_p(dir) end if File.exist?(CONFIG_FILE) txt = File.read(CONFIG_FILE) return nil if txt == out end File.open(CONFIG_FILE, 'w'){ |f| f << out } true end
Default is ruby
.
# File lib/setup/configuration.rb, line 494 def shebang @shebang ||= 'ruby' end
There are three options: all
, ruby
, never
.
# File lib/setup/configuration.rb, line 499 def shebang=(val) if %w(all ruby never).include?(val) @shebang = val else raise Error, "bad config: use SHEBANG=(all|ruby|never) [#{val}]" end end
Directory for version-independent aux ruby libraries
# File lib/setup/configuration.rb, line 332 def siteruby @siteruby ||= RBCONFIG['sitedir'] end
Set directory for version-independent aux ruby libraries
# File lib/setup/configuration.rb, line 337 def siteruby=(path) path = pathname(path) @siterubyver = siterubyver.sub(siteruby, path) @siterubyverarch = siterubyverarch.sub(siteruby, path) @siteruby = path end
Directory for aux ruby libraries
# File lib/setup/configuration.rb, line 345 def siterubyver @siterubyver ||= RBCONFIG['sitelibdir'] end
Set directory for aux ruby libraries
# File lib/setup/configuration.rb, line 350 def siterubyver=(path) @siterubyver = pathname(path) end
Directory for aux ruby binary libraries
# File lib/setup/configuration.rb, line 355 def siterubyverarch @siterubyverarch ||= RBCONFIG['sitearchdir'] end
Set directory for aux arch ruby binaries
# File lib/setup/configuration.rb, line 360 def siterubyverarch=(path) @siterubyverarch = pathname(path) end
Directory for ruby extentions
# File lib/setup/configuration.rb, line 420 def sodir @sodir || File.join(prefix, base_rubyarchdir) end
Directory for system configuration files TODO: Can this be prefixed?
# File lib/setup/configuration.rb, line 426 def sysconfdir @sysconfdir ||= base_sysconfdir end
Set directory for system configuration files
# File lib/setup/configuration.rb, line 431 def sysconfdir=(path) @sysconfdir = pathname(path) end
Run unit tests?
# File lib/setup/configuration.rb, line 559 def test? !no_test end
# File lib/setup/configuration.rb, line 577 def to_h h = {} options.each do |name, *args| h[name.to_s] = __send__(name) end h end
# File lib/setup/configuration.rb, line 586 def to_s to_yaml.sub(/\A---\s*\n/,'') end
# File lib/setup/configuration.rb, line 591 def to_yaml(*args) to_h.to_yaml(*args) end
# File lib/setup/configuration.rb, line 246 def type @type ||= 'site' end
# File lib/setup/configuration.rb, line 251 def type=(val) @type = val case val.to_s when 'std', 'ruby' @rbdir = librubyver #'$librubyver' @sodir = librubyverarch #'$librubyverarch' when 'site' @rbdir = siterubyver #'$siterubyver' @sodir = siterubyverarch #'$siterubyverarch' when 'home' self.prefix = File.join(home, '.local') # TODO: Use XDG @rbdir = nil #'$libdir/ruby' @sodir = nil #'$libdir/ruby' #when 'local' # rbdir = subprefix(librubyver, '') # sodir = subprefix(librubyverarch, '') # self.prefix = '/usr/local' # FIXME: how? # self.rbdir = File.join(prefix, rbdir) #'$libdir/ruby' # self.sodir = File.join(prefix, sodir) #'$libdir/ruby' else raise Error, "bad config: use type=(std|site|home) [#{val}]" end end
Private Instance Methods
Boolean attribute. Can be assigned true, false, nil, or a string matching yes|true|y|t or no|false|n|f.
# File lib/setup/configuration.rb, line 645 def boolean(val, name=nil) case val when true, false, nil val else case val.to_s.downcase when 'y', 'yes', 't', 'true' true when 'n', 'no', 'f', 'false' false else raise Error, "bad config: use --#{name}=(yes|no) [\#{val}]" end end end
# File lib/setup/configuration.rb, line 670 def home ENV['HOME'] || raise(Error, 'HOME is not set.') end
def show
fmt = "%-20s %s\n" OPTIONS.each do |name| value = self[name] reslv = __send__(name) case reslv when String reslv = "(none)" if reslv.empty? when false, nil reslv = "no" when true reslv = "yes" end printf fmt, name, reslv end
end
# File lib/setup/configuration.rb, line 635 def pathname(path) path.gsub(%r<\\$([^/]+)>){ self[$1] } end
# File lib/setup/configuration.rb, line 662 def subprefix(path, with='') val = RBCONFIG[path] raise "Unknown path -- #{path}" if val.nil? prefix = Regexp.quote(RBCONFIG['prefix']) val.sub(/\A#{prefix}/, with) end