1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add RbConfig.fire_update!

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65720 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-11-14 04:42:14 +00:00
parent 7a823be8d0
commit f34e8ff672
2 changed files with 43 additions and 24 deletions

View file

@ -12,20 +12,9 @@ end
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|
$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

View file

@ -310,6 +310,38 @@ print <<EOS
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