summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-17 10:46:23 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-17 10:46:23 +0000
commitb025ce46786ced077d67c2a2bbe53af3f819f9d7 (patch)
tree242aef5fa2be80f10e11f4f52598f299fc66a118 /tool
parent6e738bf2b19fdb8c15a00e08b417596e00452ea0 (diff)
* common.mk (ID_H_TARGET): phony target to update id.h.
* tool/ifchange, win32/ifchange.bat: --timestamp option added. * tool/generic_erb.rb: --timestamp, --output and --if-change options added. * template/id.h.tmpl: moved from id.h. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19822 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool')
-rw-r--r--tool/generic_erb.rb32
-rwxr-xr-xtool/ifchange8
2 files changed, 39 insertions, 1 deletions
diff --git a/tool/generic_erb.rb b/tool/generic_erb.rb
index 7ea33fbc5f..c234f3a52f 100644
--- a/tool/generic_erb.rb
+++ b/tool/generic_erb.rb
@@ -1,4 +1,34 @@
require 'erb'
+require 'optparse'
+require 'fileutils'
+timestamp = nil
+output = nil
+ifchange = nil
+opt = OptionParser.new do |o|
+ o.on('-t', '--timestamp[=PATH]') {|v| timestamp = v || true}
+ o.on('-o', '--output=PATH') {|v| output = v}
+ o.on('-c', '--[no-]if-change') {|v| ifchange = v}
+ o.order!(ARGV)
+end or abort opt.opt_s
template = ARGV.shift
-ERB.new(File.read(template), nil, '%').run
+erb = ERB.new(File.read(template), nil, '%')
+erb.filename = template
+result = erb.result
+if output
+ if ifchange
+ if (IO.read(output) rescue nil) == result
+ puts "#{output} unchanged"
+ else
+ open(output, "wb") {|f| f.print result}
+ puts "#{output} updated"
+ end
+ end
+ if timestamp
+ if timestamp == true
+ dir, base = File.split(output)
+ timestamp = File.join(dir, ".time." + base)
+ end
+ FileUtils.touch(timestamp)
+ end
+end
diff --git a/tool/ifchange b/tool/ifchange
index 544513ad15..8bfca26703 100755
--- a/tool/ifchange
+++ b/tool/ifchange
@@ -1,6 +1,11 @@
#!/bin/sh
# usage: ifchange target temporary
+unset timestamp
+if [ "$1" = --timestamp ]; then
+ timestamp=yes
+ shift
+fi
target="$1"
temp="$2"
if [ "$temp" = - ]; then
@@ -15,3 +20,6 @@ else
echo "$target updated"
mv -f "$temp" "$target"
fi
+if [ $timestamp ]; then
+ touch `dirname "$target"`/.time.`basename "$target"`
+fi