ruby-changes:4062
From: ko1@a...
Date: Wed, 20 Feb 2008 13:09:15 +0900 (JST)
Subject: [ruby-changes:4062] nobu - Ruby:r15552 (ruby_1_8, trunk): * instruby.rb (parse_args): added --dir-mode, --script-mode and
nobu 2008-02-20 13:08:54 +0900 (Wed, 20 Feb 2008) New Revision: 15552 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/instruby.rb branches/ruby_1_8/version.h trunk/ChangeLog trunk/instruby.rb Log: * instruby.rb (parse_args): added --dir-mode, --script-mode and --cmd-type options. [ruby-dev:33816] * instruby.rb (parse_args): added bin-arch and bin-comm to install type, for compiled files and script files. * instruby.rb (parse_args): deal with make style command line macros, and count as long syle options if prefixed with INSTALL_. * instruby.rb (makedirs): use $dir_mode. [ruby-dev:33805] * instruby.rb (open_for_install): set file mode, which is now permission mode instead of access mode. * instruby.rb (bin-comm): installs scripts with replacing shebang lines. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=15552&r2=15551&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15552&r2=15551&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/instruby.rb?r1=15552&r2=15551&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/version.h?r1=15552&r2=15551&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/instruby.rb?r1=15552&r2=15551&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15551) +++ ChangeLog (revision 15552) @@ -1,3 +1,22 @@ +Wed Feb 20 13:08:52 2008 Nobuyoshi Nakada <nobu@r...> + + * instruby.rb (parse_args): added --dir-mode, --script-mode and + --cmd-type options. [ruby-dev:33816] + + * instruby.rb (parse_args): added bin-arch and bin-comm to install + type, for compiled files and script files. + + * instruby.rb (parse_args): deal with make style command line macros, + and count as long syle options if prefixed with INSTALL_. + + * instruby.rb (makedirs): use $dir_mode. [ruby-dev:33805] + + * instruby.rb (open_for_install): set file mode, which is now + permission mode instead of access mode. + + * instruby.rb (bin-comm): installs scripts with replacing shebang + lines. + Wed Feb 20 10:04:22 2008 NAKAMURA Usaku <usa@r...> * io.c (open_key_args): set arg->io even if no options passed. Index: instruby.rb =================================================================== --- instruby.rb (revision 15551) +++ instruby.rb (revision 15552) @@ -14,7 +14,7 @@ STDOUT.sync = true File.umask(0) -def parse_args() +def parse_args(argv = ARGV) $mantype = 'doc' $destdir = nil $extout = nil @@ -26,6 +26,10 @@ $rdocdir = nil $data_mode = 0644 $prog_mode = 0755 + $dir_mode = nil + $script_mode = nil + $cmdtype = ('bat' if File::ALT_SEPARATOR == '\\') + mflags = [] opt = OptionParser.new opt.on('-n') {$dryrun = true} opt.on('--dest-dir=DIR') {|dir| $destdir = dir} @@ -39,7 +43,7 @@ $mflags.concat(v) end opt.on('-i', '--install=TYPE', - [:local, :bin, :lib, :man, :ext, :"ext-arch", :"ext-comm", :rdoc]) do |ins| + [:local, :bin, :"bin-arch", :"bin-comm", :lib, :man, :ext, :"ext-arch", :"ext-comm", :rdoc]) do |ins| $install << ins end opt.on('--data-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| @@ -48,20 +52,39 @@ opt.on('--prog-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| $prog_mode = mode end + opt.on('--dir-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| + $dir_mode = mode + end + opt.on('--script-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| + $script_mode = mode + end opt.on('--installed-list [FILENAME]') {|name| $installed_list = name} opt.on('--rdoc-output [DIR]') {|dir| $rdocdir = dir} + opt.on('--cmd-type=TYPE', %w[bat cmd plain]) {|cmd| $cmdtype = (cmd unless cmd == 'plain')} - opt.parse! rescue abort [$!.message, opt].join("\n") + opt.order!(argv) do |v| + case v + when /\AINSTALL[-_]([-\w]+)=(.*)/ + argv.unshift("--#{$1.tr('_', '-')}=#{$2}") + when /\A\w[-\w+]*=\z/ + mflags << v + when /\A\w[-\w+]*\z/ + $install << v.intern + else + raise OptionParser::InvalidArgument, v + end + end rescue abort [$!.message, opt].join("\n") $make, *rest = Shellwords.shellwords($make) $mflags.unshift(*rest) unless rest.empty? + $mflags.unshift(*mflags) def $mflags.set?(flag) grep(/\A-(?!-).*#{'%s' % flag}/i) { return true } false end def $mflags.defined?(var) - grep(/\A#{var}=(.*)/) {return $1} + grep(/\A#{var}=(.*)/) {return block_given? ? yield($1) : $1} false end @@ -85,6 +108,9 @@ end $rdocdir ||= $mflags.defined?('RDOCOUT') + + $dir_mode ||= $prog_mode | 0700 + $script_mode ||= $prog_mode end parse_args() @@ -127,7 +153,7 @@ File.directory?(realdir) end end.compact! - super(dirs, :mode => $prog_mode) unless dirs.empty? + super(dirs, :mode => $dir_mode) unless dirs.empty? end def install_recursive(srcdir, dest, options = {}) @@ -159,9 +185,10 @@ def open_for_install(path, mode, &block) unless $dryrun - open(with_destdir(path), mode, &block) + open(realpath = with_destdir(path), "wb", mode, &block) + File.chmod(mode, realpath) end - $installed_list.puts path if /^w/ =~ mode and $installed_list + $installed_list.puts path if $installed_list end def with_destdir(dir) @@ -194,7 +221,7 @@ lib = CONFIG["LIBRUBY"] arc = CONFIG["LIBRUBY_A"] -install?(:local, :arch, :bin) do +install?(:local, :arch, :bin, :'bin-arch') do puts "installing binary commands" makedirs [bindir, libdir, archlibdir] @@ -256,47 +283,41 @@ end end -install?(:local, :comm, :bin) do +install?(:local, :comm, :bin, :'bin-comm') do puts "installing command scripts" Dir.chdir srcdir makedirs [bindir, rubylibdir] ruby_shebang = File.join(bindir, ruby_install_name) - if File::ALT_SEPARATOR - ruby_bin_dosish = ruby_shebang.tr(File::SEPARATOR, File::ALT_SEPARATOR) + if $cmdtype + ruby_bin = ruby_shebang.tr(File::SEPARATOR, File::ALT_SEPARATOR) end for src in Dir["bin/*"] next unless File.file?(src) next if /\/[.#]|(\.(old|bak|orig|rej|diff|patch|core)|~|\/core)$/i =~ src name = ruby_install_name.sub(/ruby/, File.basename(src)) - dest = File.join(bindir, name) - install src, dest, :mode => $prog_mode - - next if $dryrun - shebang = '' body = '' - open_for_install(dest, "r+") { |f| + open(src, "rb") do |f| shebang = f.gets body = f.read + end + shebang.sub!(/^\#!.*?ruby\b/) {"#!" + ruby_shebang} + shebang.sub!(/\r$/, '') + body.gsub!(/\r$/, '') - if shebang.sub!(/^\#!.*?ruby\b/) {"#!" + ruby_shebang} - f.rewind - f.print shebang, body - f.truncate(f.pos) - end - } - - if ruby_bin_dosish - batfile = File.join(bindir, name + ".bat") - open_for_install(batfile, "wb") {|b| - b.print((<<EOH+shebang+body+<<EOF).gsub(/\r?\n/, "\r\n")) + cmd = File.join(bindir, name) + cmd << ".#{$cmdtype}" if $cmdtype + open_for_install(cmd, $script_mode) do |f| + case $cmdtype + when "bat" + f.print((<<EOH+shebang+body+<<EOF).gsub(/$/, "\r")) @echo off @if not "%~d0" == "~d0" goto WinNT -#{ruby_bin_dosish} -x "#{batfile}" %1 %2 %3 %4 %5 %6 %7 %8 %9 +#{ruby_bin} -x "#{cmd}" %1 %2 %3 %4 %5 %6 %7 %8 %9 @goto endofruby :WinNT "%~dp0#{ruby_install_name}" -x "%~f0" %* @@ -305,7 +326,14 @@ __END__ :endofruby EOF - } + when "cmd" + f.print(<<EOH, shebang, body) +@"%~dp0#{ruby_install_name}" -x "%~f0" %* +@exit /b %ERRORLEVEL% +EOH + else + f.print shebang, body + end end end end @@ -366,10 +394,12 @@ end end -$install.concat ARGV.collect {|n| n.intern} $install << :local << :ext if $install.empty? $install.each do |inst| - $install_procs[inst].each do |block| + if !(procs = $install_procs[inst]) || procs.empty? + next warn("unknown install target - #{inst}") + end + procs.each do |block| dir = Dir.pwd begin block.call Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 15551) +++ ruby_1_8/ChangeLog (revision 15552) @@ -1,3 +1,22 @@ +Wed Feb 20 13:08:52 2008 Nobuyoshi Nakada <nobu@r...> + + * instruby.rb (parse_args): added --dir-mode, --script-mode and + --cmd-type options. [ruby-dev:33816] + + * instruby.rb (parse_args): added bin-arch and bin-comm to install + type, for compiled files and script files. + + * instruby.rb (parse_args): deal with make style command line macros, + and count as long syle options if prefixed with INSTALL_. + + * instruby.rb (makedirs): use $dir_mode. [ruby-dev:33805] + + * instruby.rb (open_for_install): set file mode, which is now + permission mode instead of access mode. + + * instruby.rb (bin-comm): installs scripts with replacing shebang + lines. + Tue Feb 19 18:34:32 2008 Tanaka Akira <akr@f...> * gc.c (STACK_LENGTH) [SPARC] : 0x80 offset removed. [ruby-dev:33857] Index: ruby_1_8/version.h =================================================================== --- ruby_1_8/version.h (revision 15551) +++ ruby_1_8/version.h (revision 15552) @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.8.6" -#define RUBY_RELEASE_DATE "2008-02-19" +#define RUBY_RELEASE_DATE "2008-02-20" #define RUBY_VERSION_CODE 186 -#define RUBY_RELEASE_CODE 20080219 +#define RUBY_RELEASE_CODE 20080220 #define RUBY_PATCHLEVEL 5000 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 6 #define RUBY_RELEASE_YEAR 2008 #define RUBY_RELEASE_MONTH 2 -#define RUBY_RELEASE_DAY 19 +#define RUBY_RELEASE_DAY 20 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; Index: ruby_1_8/instruby.rb =================================================================== --- ruby_1_8/instruby.rb (revision 15551) +++ ruby_1_8/instruby.rb (revision 15552) @@ -14,7 +14,7 @@ STDOUT.sync = true File.umask(0) -def parse_args() +def parse_args(argv = ARGV) $mantype = 'doc' $destdir = nil $extout = nil @@ -26,6 +26,10 @@ $rdocdir = nil $data_mode = 0644 $prog_mode = 0755 + $dir_mode = nil + $script_mode = nil + $cmdtype = ('bat' if File::ALT_SEPARATOR == '\\') + mflags = [] opt = OptionParser.new opt.on('-n') {$dryrun = true} opt.on('--dest-dir=DIR') {|dir| $destdir = dir} @@ -39,7 +43,7 @@ $mflags.concat(v) end opt.on('-i', '--install=TYPE', - [:local, :bin, :lib, :man, :ext, :"ext-arch", :"ext-comm", :rdoc]) do |ins| + [:local, :bin, :"bin-arch", :"bin-comm", :lib, :man, :ext, :"ext-arch", :"ext-comm", :rdoc]) do |ins| $install << ins end opt.on('--data-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| @@ -48,20 +52,39 @@ opt.on('--prog-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| $prog_mode = mode end + opt.on('--dir-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| + $dir_mode = mode + end + opt.on('--script-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode| + $script_mode = mode + end opt.on('--installed-list [FILENAME]') {|name| $installed_list = name} opt.on('--rdoc-output [DIR]') {|dir| $rdocdir = dir} + opt.on('--cmd-type=TYPE', %w[bat cmd plain]) {|cmd| $cmdtype = (cmd unless cmd == 'plain')} - opt.parse! rescue abort [$!.message, opt].join("\n") + opt.order!(argv) do |v| + case v + when /\AINSTALL[-_]([-\w]+)=(.*)/ + argv.unshift("--#{$1.tr('_', '-')}=#{$2}") + when /\A\w[-\w+]*=\z/ + mflags << v + when /\A\w[-\w+]*\z/ + $install << v.intern + else + raise OptionParser::InvalidArgument, v + end + end rescue abort [$!.message, opt].join("\n") $make, *rest = Shellwords.shellwords($make) $mflags.unshift(*rest) unless rest.empty? + $mflags.unshift(*mflags) def $mflags.set?(flag) grep(/\A-(?!-).*#{'%c' % flag}/i) { return true } false end def $mflags.defined?(var) - grep(/\A#{var}=(.*)/) {return $1} + grep(/\A#{var}=(.*)/) {return block_given? ? yield($1) : $1} false end @@ -85,6 +108,9 @@ end $rdocdir ||= $mflags.defined?('RDOCOUT') + + $dir_mode ||= $prog_mode | 0700 + $script_mode ||= $prog_mode end parse_args() @@ -127,29 +153,42 @@ File.directory?(realdir) end end.compact! - super(dirs, :mode => $prog_mode) unless dirs.empty? + super(dirs, :mode => $dir_mode) unless dirs.empty? end -def install_recursive(src, dest, options = {}) - noinst = options.delete(:no_install) - subpath = src.size..-1 - Dir.glob("#{src}/**/*", File::FNM_DOTMATCH) do |src| - next if /\A\.{1,2}\z/ =~ (base = File.basename(src)) - next if noinst and File.fnmatch?(noinst, File.basename(src)) +def install_recursive(srcdir, dest, options = {}) + opts = options.clone + noinst = opts.delete(:no_install) + glob = opts.delete(:glob) || "*" + subpath = srcdir.size..-1 + Dir.glob("#{srcdir}/**/#{glob}") do |src| + case base = File.basename(src) + when /\A\#.*\#\z/, /~\z/ + next + end + if noinst + if Array === noinst + next if noinst.any? {|n| File.fnmatch?(n, base)} + else + next if File.fnmatch?(noinst, base) + end + end d = dest + src[subpath] if File.directory?(src) makedirs(d) else - install src, d + makedirs(File.dirname(d)) + install src, d, opts end end end def open_for_install(path, mode, &block) unless $dryrun - open(with_destdir(path), mode, &block) + open(realpath = with_destdir(path), "wb", mode, &block) + File.chmod(mode, realpath) end - $installed_list.puts path if /^w/ =~ mode and $installed_list + $installed_list.puts path if $installed_list end def with_destdir(dir) @@ -177,7 +216,7 @@ lib = CONFIG["LIBRUBY"] arc = CONFIG["LIBRUBY_A"] -install?(:local, :arch, :bin) do +install?(:local, :arch, :bin, :'bin-arch') do puts "installing binary commands" makedirs [bindir, libdir, archlibdir] @@ -214,12 +253,12 @@ if noinst = CONFIG["no_install_files"] and noinst.empty? noinst = nil end - install_recursive("#{extout}/#{CONFIG['arch']}", archlibdir, :no_install => noinst) + install_recursive("#{extout}/#{CONFIG['arch']}", archlibdir, :no_install => noinst, :mode => $prog_mode) end install?(:ext, :comm, :'ext-comm') do puts "installing extension scripts" makedirs [rubylibdir, sitelibdir] - install_recursive("#{extout}/common", rubylibdir) + install_recursive("#{extout}/common", rubylibdir, :mode => $data_mode) end end @@ -230,51 +269,45 @@ ridatadir = File.join(CONFIG['datadir'], 'ri/$(MAJOR).$(MINOR)/system') Config.expand(ridatadir) makedirs [ridatadir] - install_recursive($rdocdir, ridatadir) + install_recursive($rdocdir, ridatadir, :mode => $data_mode) end end -install?(:local, :comm, :bin) do +install?(:local, :comm, :bin, :'bin-comm') do puts "installing command scripts" Dir.chdir srcdir makedirs [bindir, rubylibdir] ruby_shebang = File.join(bindir, ruby_install_name) - if File::ALT_SEPARATOR - ruby_bin_dosish = ruby_shebang.tr(File::SEPARATOR, File::ALT_SEPARATOR) + if $cmdtype + ruby_bin = ruby_shebang.tr(File::SEPARATOR, File::ALT_SEPARATOR) end for src in Dir["bin/*"] next unless File.file?(src) next if /\/[.#]|(\.(old|bak|orig|rej|diff|patch|core)|~|\/core)$/i =~ src name = ruby_install_name.sub(/ruby/, File.basename(src)) - dest = File.join(bindir, name) - install src, dest, :mode => $prog_mode - - next if $dryrun - shebang = '' body = '' - open_for_install(dest, "r+") { |f| + open(src, "rb") do |f| shebang = f.gets body = f.read + end + shebang.sub!(/^\#!.*?ruby\b/) {"#!" + ruby_shebang} + shebang.sub!(/\r$/, '') + body.gsub!(/\r$/, '') - if shebang.sub!(/^\#!.*?ruby\b/) {"#!" + ruby_shebang} - f.rewind - f.print shebang, body - f.truncate(f.pos) - end - } - - if ruby_bin_dosish - batfile = File.join(bindir, name + ".bat") - open_for_install(batfile, "wb") {|b| - b.print((<<EOH+shebang+body+<<EOF).gsub(/\r?\n/, "\r\n")) + cmd = File.join(bindir, name) + cmd << ".#{$cmdtype}" if $cmdtype + open_for_install(cmd, $script_mode) do |f| + case $cmdtype + when "bat" + f.print((<<EOH+shebang+body+<<EOF).gsub(/$/, "\r")) @echo off @if not "%~d0" == "~d0" goto WinNT -#{ruby_bin_dosish} -x "#{batfile}" %1 %2 %3 %4 %5 %6 %7 %8 %9 +#{ruby_bin} -x "#{cmd}" %1 %2 %3 %4 %5 %6 %7 %8 %9 @goto endofruby :WinNT "%~dp0#{ruby_install_name}" -x "%~f0" %* @@ -283,7 +316,14 @@ __END__ :endofruby EOF - } + when "cmd" + f.print(<<EOH, shebang, body) +@"%~dp0#{ruby_install_name}" -x "%~f0" %* +@exit /b %ERRORLEVEL% +EOH + else + f.print shebang, body + end end end end @@ -347,10 +387,12 @@ end end -$install.concat ARGV.collect {|n| n.intern} $install << :local << :ext if $install.empty? $install.each do |inst| - $install_procs[inst].each do |block| + if !(procs = $install_procs[inst]) || procs.empty? + next warn("unknown install target - #{inst}") + end + procs.each do |block| dir = Dir.pwd begin block.call -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/