[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]