diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-03-09 07:03:39 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-03-09 07:03:39 +0000 |
commit | e09da0d0924ed046f10129536fe2512966123ddf (patch) | |
tree | e16833f915c1c83bbb8f3022e8c2682c145148c6 /lib/rubygems | |
parent | 3b759e62ac4f530075eaab1a4c4b5fee65664b73 (diff) |
* lib/rubygems/installer.rb (Gem::Installer#initialize): env may
not be under /usr/bin.
* lib/rubygems/installer.rb (Gem::Installer#shebang): uses /bin/sh
if shebang has any options, since env shebang trick does not
work with options.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22853 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems')
-rw-r--r-- | lib/rubygems/installer.rb | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index bb08549c21..37264103b4 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -98,7 +98,12 @@ class Gem::Installer :source_index => Gem.source_index, }.merge options - @env_shebang = options[:env_shebang] + if @env_shebang = options[:env_shebang] + unless File.executable?(shebang = "/usr/bin/env") + shebang = "/bin/env" + end + @env_shebang = shebang + end @force = options[:force] gem_home = options[:install_dir] @gem_home = Pathname.new(gem_home).expand_path @@ -387,22 +392,24 @@ class Gem::Installer # necessary. def shebang(bin_file_name) - if @env_shebang then - "#!/usr/bin/env " + Gem::ConfigMap[:ruby_install_name] + ruby_name = Gem::ConfigMap[:ruby_install_name] unless @env_shebang + path = File.join @gem_dir, @spec.bindir, bin_file_name + first_line = File.open(path, "rb") {|file| file.gets} + if /\A#!/ =~ first_line then + # Preserve extra words on shebang line, like "-w". Thanks RPA. + shebang = first_line.sub(/\A\#!.*?ruby\S*(?=\s*(\S+))/, "#!#{Gem.ruby}") + shebang.strip! # Avoid nasty ^M issues. + if ruby_name and $1 + %{#!/bin/sh\n'exec' '#{ruby_name}' '-x' "$0" "$@"\n#{shebang}} + else + shebang + end else - path = File.join @gem_dir, @spec.bindir, bin_file_name - - File.open(path, "rb") do |file| - first_line = file.gets - if first_line =~ /^#!/ then - # Preserve extra words on shebang line, like "-w". Thanks RPA. - shebang = first_line.sub(/\A\#!.*?ruby\S*/, "#!#{Gem.ruby}") - else - # Create a plain shebang line. - shebang = "#!#{Gem.ruby}" - end - - shebang.strip # Avoid nasty ^M issues. + # Create a plain shebang line. + if ruby_name + "#!#@env_shebang #{ruby_name}" + else + "#!#{Gem.ruby}" end end end |