diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-15 19:08:43 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-15 19:08:43 +0000 |
commit | d464704f111d211c1f1ff9ef23ef1d755054be00 (patch) | |
tree | b58b17b645dc463322e5fca57fe282360db659c9 /ruby_1_8_5/instruby.rb | |
parent | e4f06b3f2dec4b5d6334c5e9907e1cecbf649fc4 (diff) |
add tag v1_8_5_54
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_54@12952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_5/instruby.rb')
-rw-r--r-- | ruby_1_8_5/instruby.rb | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/ruby_1_8_5/instruby.rb b/ruby_1_8_5/instruby.rb new file mode 100644 index 0000000000..1237b01abc --- /dev/null +++ b/ruby_1_8_5/instruby.rb @@ -0,0 +1,244 @@ +#!./miniruby + +load "./rbconfig.rb" +include Config + +srcdir = File.dirname(__FILE__) +$:.unshift File.expand_path("lib", srcdir) +require 'fileutils' +require 'shellwords' +require 'optparse' +require 'optparse/shellwords' +require 'tempfile' + +STDOUT.sync = true +File.umask(0) + +def parse_args() + $mantype = 'doc' + $destdir = nil + $make = 'make' + $mflags = [] + $install = [] + opt = OptionParser.new + opt.on('-n') {$dryrun = true} + opt.on('--dest-dir=DIR') {|dir| $destdir = dir} + opt.on('--make=COMMAND') {|make| $make = make} + opt.on('--mantype=MAN') {|man| $mantype = man} + opt.on('--make-flags=FLAGS', '--mflags', Shellwords) do |v| + if arg = v.first + arg.insert(0, '-') if /\A[^-][^=]*\Z/ =~ arg + end + $mflags.concat(v) + end + opt.on('--install=TYPE', [:bin, :lib, :man]) {|ins| $install << ins} + opt.parse! rescue abort [$!.message, opt].join("\n") + + $make, *rest = Shellwords.shellwords($make) + $mflags.unshift(*rest) unless rest.empty? + + def $mflags.set?(flag) + grep(/\A-(?!-).*#{'%c' % flag}/i) { return true } + false + end + + if $mflags.set?(?n) + $dryrun = true + else + $mflags << '-n' if $dryrun + end + + $mflags << "DESTDIR=#{$destdir}" + + $continue = $mflags.set?(?k) +end + +parse_args() + +include FileUtils::Verbose +include FileUtils::NoWrite if $dryrun +@fileutils_output = STDOUT +@fileutils_label = '' + +def install?(type) + yield if $install.empty? or $install.include?(type) +end + +def install(src, dest, options = {}) + options[:preserve] = true + super +end + +$made_dirs = {} +def makedirs(dirs) + dirs = fu_list(dirs) + dirs.reject! do |dir| + $made_dirs.fetch(dir) do + $made_dirs[dir] = true + File.directory?(dir) + end + end + super(dirs, :mode => 0755, :verbose => true) unless dirs.empty? +end + +def with_destdir(dir) + return dir if !$destdir or $destdir.empty? + dir = dir.sub(/\A\w:/, '') if File::PATH_SEPARATOR == ';' + $destdir + dir +end + +exeext = CONFIG["EXEEXT"] + +ruby_install_name = CONFIG["ruby_install_name"] +rubyw_install_name = CONFIG["rubyw_install_name"] + +version = CONFIG["ruby_version"] +bindir = with_destdir(CONFIG["bindir"]) +libdir = with_destdir(CONFIG["libdir"]) +rubylibdir = with_destdir(CONFIG["rubylibdir"]) +archlibdir = with_destdir(CONFIG["archdir"]) +sitelibdir = with_destdir(CONFIG["sitelibdir"]) +sitearchlibdir = with_destdir(CONFIG["sitearchdir"]) +mandir = with_destdir(File.join(CONFIG["mandir"], "man")) +configure_args = Shellwords.shellwords(CONFIG["configure_args"]) +enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' +dll = CONFIG["LIBRUBY_SO"] +lib = CONFIG["LIBRUBY"] +arc = CONFIG["LIBRUBY_A"] + +makedirs [bindir, libdir, rubylibdir, archlibdir, sitelibdir, sitearchlibdir] + +install?(:bin) do + ruby_bin = File.join(bindir, ruby_install_name) + + install ruby_install_name+exeext, ruby_bin+exeext, :mode => 0755 + if File.exist?(ruby_install_name+exeext+".manifest") + install ruby_install_name+exeext+".manifest", bindir, :mode => 0644 + end + if rubyw_install_name and !rubyw_install_name.empty? + install rubyw_install_name+exeext, bindir, :mode => 0755 + if File.exist?(rubyw_install_name+exeext+".manifest") + install rubyw_install_name+exeext+".manifest", bindir, :mode => 0644 + end + end + if enable_shared and dll != lib + install dll, bindir, :mode => 0755 + if File.exist?(dll+".manifest") + install dll+".manifest", bindir, :mode => 0644 + end + end + install lib, libdir, :mode => 0755 unless lib == arc + install arc, libdir, :mode => 0644 + install "config.h", archlibdir, :mode => 0644 + install "rbconfig.rb", archlibdir, :mode => 0644 + if CONFIG["ARCHFILE"] + for file in CONFIG["ARCHFILE"].split + install file, archlibdir, :mode => 0644 + end + end + + if dll == lib and dll != arc + for link in CONFIG["LIBRUBY_ALIASES"].split + ln_sf(dll, File.join(libdir, link)) + end + end +end + +Dir.chdir srcdir + +install?(:lib) do +ruby_shebang = File.join(CONFIG["bindir"], ruby_install_name) +if File::ALT_SEPARATOR + ruby_bin_dosish = 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 => 0755 + + next if $dryrun + + shebang = '' + body = '' + open(dest, "r+") { |f| + shebang = f.gets + body = f.read + + 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(CONFIG["bindir"], name + ".bat") + open(with_destdir(batfile), "w") { |b| + b.print <<EOH, shebang, body, <<EOF +@echo off +if not "%~d0" == "~d0" goto WinNT +#{ruby_bin_dosish} -x "#{batfile}" %1 %2 %3 %4 %5 %6 %7 %8 %9 +goto endofruby +:WinNT +"%~dp0#{ruby_install_name}" -x "%~f0" %* +goto endofruby +EOH +__END__ +:endofruby +EOF + } + end +end + +for f in Dir["lib/**/*{.rb,help-message}"] + dir = File.dirname(f).sub!(/\Alib/, rubylibdir) || rubylibdir + makedirs dir + install f, dir, :mode => 0644 +end +end + +install?(:bin) do +for f in Dir["*.h"] + install f, archlibdir, :mode => 0644 +end + +if RUBY_PLATFORM =~ /mswin32|mingw|bccwin32/ + makedirs File.join(archlibdir, "win32") + install "win32/win32.h", File.join(archlibdir, "win32"), :mode => 0644 +end +end + +install?(:man) do +for mdoc in Dir["*.[1-9]"] + next unless File.file?(mdoc) and open(mdoc){|fh| fh.read(1) == '.'} + + section = mdoc[-1,1] + + destdir = mandir + section + destfile = File.join(destdir, mdoc.sub(/ruby/, ruby_install_name)) + + makedirs destdir + + if $mantype == "doc" + install mdoc, destfile, :mode => 0644 + else + require 'mdoc2man.rb' + + w = Tempfile.open(mdoc) + + open(mdoc) { |r| + Mdoc2Man.mdoc2man(r, w) + } + + w.close + + install w.path, destfile, :mode => 0644 + end +end +end + +# vi:set sw=2: |