summaryrefslogtreecommitdiff
path: root/mkconfig.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-11-10 23:22:03 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-11-10 23:22:03 +0000
commitbf203228cfa6003b79f363161ccda944d01f89d9 (patch)
treed070717cd1e7b08a30947d8d5643f35a1cdf2bc9 /mkconfig.rb
parent0535fc9cac00ca44938713ebc0a849272baf9b8b (diff)
* Makefile.in (OUTFLAG): keep trailing spaces. [ruby-dev:27666]
* mkconfig.rb: substitution refereces added. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'mkconfig.rb')
-rw-r--r--mkconfig.rb37
1 files changed, 21 insertions, 16 deletions
diff --git a/mkconfig.rb b/mkconfig.rb
index 4a8062e9fa..0060b608b3 100644
--- a/mkconfig.rb
+++ b/mkconfig.rb
@@ -16,10 +16,10 @@ unless File.directory?(dir = File.dirname(rbconfig_rb))
end
version = RUBY_VERSION
-rbconfig_rb_tmp = rbconfig_rb + '.tmp'
-config = open(rbconfig_rb_tmp, "w")
-$orgout = $stdout.dup
-$stdout.reopen(config)
+def (config = "").write(arg)
+ concat(arg.to_s)
+end
+$stdout = config
fast = {'prefix'=>TRUE, 'ruby_install_name'=>TRUE, 'INSTALL'=>TRUE, 'EXEEXT'=>TRUE}
print %[
@@ -120,10 +120,13 @@ print <<EOS
val.gsub!(/\\$\\$|\\$\\(([^()]+)\\)|\\$\\{([^{}]+)\\}/) do |var|
if !(v = $1 || $2)
'$'
- elsif key = config[v]
+ elsif key = config[v = v[/\\A[^:]+(?=(?::(.*?)=(.*))?\\z)/]]
+ pat, sub = $1, $2
config[v] = false
Config::expand(key, config)
config[v] = key
+ key = key.gsub(/\#{Regexp.quote(pat)}(?=\\s|\\z)/n) {sub} if pat
+ key
else
var
end
@@ -136,17 +139,19 @@ print <<EOS
end
CROSS_COMPILING = nil unless defined? CROSS_COMPILING
EOS
-$stdout.flush
-$stdout.reopen($orgout)
-config.close
-if $timestamp and
- File.exist?(rbconfig_rb) and
- FileUtils.compare_file(rbconfig_rb, rbconfig_rb_tmp)
- puts "#{rbconfig_rb} unchanged"
- File.unlink(rbconfig_rb_tmp)
-else
- puts "#{rbconfig_rb} updated"
- File.rename(rbconfig_rb_tmp, rbconfig_rb)
+
+$stdout = STDOUT
+mode = IO::RDWR|IO::CREAT
+mode |= IO::BINARY if defined?(IO::BINARY)
+open(rbconfig_rb, mode) do |f|
+ if $timestamp and f.stat.size == config.size and f.read == config
+ puts "#{rbconfig_rb} unchanged"
+ else
+ puts "#{rbconfig_rb} updated"
+ f.rewind
+ f.truncate(0)
+ f.print(config)
+ end
end
if String === $timestamp
FileUtils.touch($timestamp)