ruby-changes:53504
From: nobu <ko1@a...>
Date: Wed, 14 Nov 2018 13:42:20 +0900 (JST)
Subject: [ruby-changes:53504] nobu:r65720 (trunk): Add RbConfig.fire_update!
nobu 2018-11-14 13:42:14 +0900 (Wed, 14 Nov 2018) New Revision: 65720 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=65720 Log: Add RbConfig.fire_update! Modified files: trunk/tool/fake.rb trunk/tool/mkconfig.rb Index: tool/fake.rb =================================================================== --- tool/fake.rb (revision 65719) +++ tool/fake.rb (revision 65720) @@ -12,20 +12,9 @@ end https://github.com/ruby/ruby/blob/trunk/tool/fake.rb#L12 static = !!(defined?($static) && $static) $:.unshift(builddir) posthook = proc do - config = RbConfig::CONFIG - mkconfig = RbConfig::MAKEFILE_CONFIG - [ - ["top_srcdir", $top_srcdir], - ["topdir", $topdir], - ].each do |var, val| - next unless val - mkconfig[var] = config[var] = val - t = /\A#{Regexp.quote(val)}(?=\/)/ - $hdrdir.sub!(t) {"$(#{var})"} - mkconfig.keys.grep(/dir\z/) do |k| - mkconfig[k] = "$(#{var})#$'" if t =~ mkconfig[k] - end - end + RbConfig.fire_update!("top_srcdir", $top_srcdir) + RbConfig.fire_update!("topdir", $topdir) + $hdrdir.sub!(/\A#{Regexp.quote($top_srcdir)}(?=\/)/, "$(top_srcdir)") if $extmk $ruby = "$(topdir)/miniruby -I'$(topdir)' -I'$(top_srcdir)/lib' -I'$(extout)/$(arch)' -I'$(extout)/common'" else @@ -54,16 +43,14 @@ prehook = proc do |extmk| https://github.com/ruby/ruby/blob/trunk/tool/fake.rb#L43 $extout_prefix = '$(extout)$(target_prefix)/' config = RbConfig::CONFIG mkconfig = RbConfig::MAKEFILE_CONFIG - mkconfig["builddir"] = config["builddir"] = builddir - mkconfig["buildlibdir"] = config["buildlibdir"] = builddir - mkconfig["libdir"] = config["libdir"] = builddir - mkconfig["top_srcdir"] = $top_srcdir if $top_srcdir - mkconfig["extout"] ||= $extout - config["top_srcdir"] = File.expand_path($top_srcdir ||= top_srcdir) - config["rubyhdrdir"] = join[$top_srcdir, "include"] - config["rubyarchhdrdir"] = join[builddir, config["EXTOUT"], "include", config["arch"]] - config["extout"] ||= join[$topdir, ".ext"] - mkconfig["libdirname"] = "buildlibdir" + RbConfig.fire_update!("builddir", builddir) + RbConfig.fire_update!("buildlibdir", builddir) + RbConfig.fire_update!("libdir", builddir) + RbConfig.fire_update!("top_srcdir", $top_srcdir ||= top_srcdir) + RbConfig.fire_update!("extout", $extout) + RbConfig.fire_update!("rubyhdrdir", "$(top_srcdir)/include") + RbConfig.fire_update!("rubyarchhdrdir", "$(extout)/include/$(arch)") + RbConfig.fire_update!("libdirname", "buildlibdir") trace_var(:$ruby, posthook) untrace_var(:$extmk, prehook) end Index: tool/mkconfig.rb =================================================================== --- tool/mkconfig.rb (revision 65719) +++ tool/mkconfig.rb (revision 65720) @@ -310,6 +310,38 @@ print <<EOS https://github.com/ruby/ruby/blob/trunk/tool/mkconfig.rb#L310 RbConfig::expand(val) end + # :nodoc: + # call-seq: + # + # RbConfig.fire_update!(key, val) -> string + # RbConfig.fire_update!(key, val, mkconf, conf) -> string + # + # updates +key+ in +mkconf+ with +val+, and all values depending on + # the +key+ in +mkconf+. + # + # RbConfig::MAKEFILE_CONFIG.values_at("CC", "LDSHARED") # => ["gcc", "$(CC) -shared"] + # RbConfig::CONFIG.values_at("CC", "LDSHARED") # => ["gcc", "gcc -shared"] + # RbConfig.fire_update!("CC", "gcc-8") # => ["CC", "LDSHARED"] + # RbConfig::MAKEFILE_CONFIG.values_at("CC", "LDSHARED") # => ["gcc-8", "$(CC) -shared"] + # RbConfig::CONFIG.values_at("CC", "LDSHARED") # => ["gcc-8", "gcc-8 -shared"] + # + # returns updated keys list, or +nil+ if nothing changed. + def RbConfig.fire_update!(key, val, mkconf = MAKEFILE_CONFIG, conf = CONFIG) + return if (old = mkconf[key]) == val + mkconf[key] = val + keys = [key] + deps = [] + begin + re = Regexp.new("\\\\$\\\\((?:%1$s)\\\\)|\\\\$\\\\{(?:%1$s)\\\\}" % keys.join('|')) + deps |= keys + keys.clear + mkconf.each {|k,v| keys << k if re =~ v} + end until keys.empty? + deps.each {|k| conf[k] = mkconf[k].dup} + deps.each {|k| expand(conf[k])} + deps + end + # call-seq: # # RbConfig.ruby -> path -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/