Use full paths to all system utilities
Otherwise you run the risk of not running the exact version / make of the utility you planned. Fixes Homebrew/homebrew#48 Really we need to do this formula too, so I guess a make and cmake function are on the way…
This commit is contained in:
		
							parent
							
								
									034fc40ae1
								
							
						
					
					
						commit
						44a1fa418e
					
				@ -95,7 +95,7 @@ def info name
 | 
			
		||||
  require 'formula'
 | 
			
		||||
 | 
			
		||||
  user=''
 | 
			
		||||
  user=`git config --global github.user`.chomp if system "which git > /dev/null"
 | 
			
		||||
  user=`git config --global github.user`.chomp if system "/usr/bin/which -s git"
 | 
			
		||||
  user='mxcl' if user.empty?
 | 
			
		||||
  # FIXME it would be nice if we didn't assume the default branch is master
 | 
			
		||||
  history="http://github.com/#{user}/homebrew/commits/master/Library/Formula/#{Formula.path(name).basename}"
 | 
			
		||||
 | 
			
		||||
@ -187,5 +187,5 @@ def inreplace(path, before, after)
 | 
			
		||||
  after.gsub! "$", "\\$"
 | 
			
		||||
 | 
			
		||||
  # FIXME use proper Ruby for teh exceptions!
 | 
			
		||||
  safe_system "perl", "-pi", "-e", "s/#{before}/#{after}/g", path
 | 
			
		||||
  safe_system "/usr/bin/perl", "-pi", "-e", "s/#{before}/#{after}/g", path
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -51,11 +51,11 @@ class HttpDownloadStrategy <AbstractDownloadStrategy
 | 
			
		||||
  def stage
 | 
			
		||||
    case `file -b #{@dl}`
 | 
			
		||||
      when /^Zip archive data/
 | 
			
		||||
        safe_system 'unzip', '-qq', @dl
 | 
			
		||||
        safe_system '/usr/bin/unzip', '-qq', @dl
 | 
			
		||||
        chdir
 | 
			
		||||
      when /^(gzip|bzip2) compressed data/
 | 
			
		||||
        # TODO do file -z now to see if it is in fact a tar
 | 
			
		||||
        safe_system 'tar', 'xf', @dl
 | 
			
		||||
        safe_system '/usr/bin/tar', 'xf', @dl
 | 
			
		||||
        chdir
 | 
			
		||||
      else
 | 
			
		||||
        # we are assuming it is not an archive, use original filename
 | 
			
		||||
@ -94,7 +94,7 @@ class SubversionDownloadStrategy <AbstractDownloadStrategy
 | 
			
		||||
    ohai "Checking out #{@url}"
 | 
			
		||||
    @co=HOMEBREW_CACHE+@unique_token
 | 
			
		||||
    unless @co.exist?
 | 
			
		||||
      safe_system 'svn', 'checkout', @url, @co
 | 
			
		||||
      safe_system '/usr/bin/svn', 'checkout', @url, @co
 | 
			
		||||
    else
 | 
			
		||||
      # TODO svn up?
 | 
			
		||||
      puts "Repository already checked out"
 | 
			
		||||
@ -102,7 +102,7 @@ class SubversionDownloadStrategy <AbstractDownloadStrategy
 | 
			
		||||
  end
 | 
			
		||||
  def stage
 | 
			
		||||
    # Force the export, since the target directory will already exist
 | 
			
		||||
    safe_system 'svn', 'export', '--force', @co, Dir.pwd
 | 
			
		||||
    safe_system '/usr/bin/svn', 'export', '--force', @co, Dir.pwd
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -217,7 +217,7 @@ private
 | 
			
		||||
    # I used /tmp rather than mktemp -td because that generates a directory
 | 
			
		||||
    # name with exotic characters like + in it, and these break badly written
 | 
			
		||||
    # scripts that don't escape strings before trying to regexp them :(
 | 
			
		||||
    tmp=Pathname.new `mktemp -d /tmp/homebrew-#{name}-#{version}-XXXX`.strip
 | 
			
		||||
    tmp=Pathname.new `/usr/bin/mktemp -d /tmp/homebrew-#{name}-#{version}-XXXX`.strip
 | 
			
		||||
    raise "Couldn't create build sandbox" if not tmp.directory? or $? != 0
 | 
			
		||||
    begin
 | 
			
		||||
      wd=Dir.pwd
 | 
			
		||||
@ -311,12 +311,12 @@ private
 | 
			
		||||
 | 
			
		||||
    patch_list.each do |p|
 | 
			
		||||
      case p[:compression]
 | 
			
		||||
        when :gzip  then safe_system "gunzip",  p[:filename]+'.gz'
 | 
			
		||||
        when :bzip2 then safe_system "bunzip2", p[:filename]+'.bz2'
 | 
			
		||||
        when :gzip  then safe_system "/usr/bin/gunzip",  p[:filename]+'.gz'
 | 
			
		||||
        when :bzip2 then safe_system "/usr/bin/bunzip2", p[:filename]+'.bz2'
 | 
			
		||||
      end
 | 
			
		||||
      # -f means it doesn't prompt the user if there are errors, if just
 | 
			
		||||
      # exits with non-zero status
 | 
			
		||||
      safe_system 'patch', '-f', *(p[:args])
 | 
			
		||||
      safe_system '/usr/bin/patch', '-f', *(p[:args])
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@ end
 | 
			
		||||
class TestZip <Formula
 | 
			
		||||
  def initialize
 | 
			
		||||
    zip=HOMEBREW_CACHE.parent+'test-0.1.zip'
 | 
			
		||||
    Kernel.system 'zip', '-0', zip, ABS__FILE__
 | 
			
		||||
    Kernel.system '/usr/bin/zip', '-0', zip, ABS__FILE__
 | 
			
		||||
    @url="file://#{zip}"
 | 
			
		||||
    super 'testzip'
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@
 | 
			
		||||
 | 
			
		||||
# args are additional inputs to puts until a nil arg is encountered
 | 
			
		||||
def ohai title, *sput
 | 
			
		||||
  title = title[0, `tput cols`.strip.to_i-4] unless ARGV.verbose?
 | 
			
		||||
  title = title[0, `/usr/bin/tput cols`.strip.to_i-4] unless ARGV.verbose?
 | 
			
		||||
  puts "\033[0;34m==>\033[0;0;1m #{title}\033[0;0m"
 | 
			
		||||
  puts *sput unless sput.empty?
 | 
			
		||||
end
 | 
			
		||||
@ -59,12 +59,12 @@ end
 | 
			
		||||
# Kernel.system but with exceptions
 | 
			
		||||
def safe_system cmd, *args
 | 
			
		||||
  puts "#{cmd} #{args*' '}" if ARGV.verbose?
 | 
			
		||||
  exec_success=Kernel.system cmd, *args
 | 
			
		||||
  exec_success = Kernel.system cmd, *args
 | 
			
		||||
  # some tools, eg. tar seem to confuse ruby and it doesn't propogate the
 | 
			
		||||
  # CTRL-C interrupt to us too, so execution continues, but the exit code os
 | 
			
		||||
  # still 2 so we raise our own interrupt
 | 
			
		||||
  raise Interrupt, cmd if $?.termsig == 2
 | 
			
		||||
  unless exec_success and $?.success?
 | 
			
		||||
  unless exec_success
 | 
			
		||||
    puts "Exit code: #{$?}"
 | 
			
		||||
    raise ExecutionError.new(cmd, args)
 | 
			
		||||
  end 
 | 
			
		||||
@ -75,23 +75,23 @@ def curl *args
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def puts_columns items, cols = 4
 | 
			
		||||
  items = items.join("\n") if items.is_a?(Array)
 | 
			
		||||
  items.concat("\n") unless items.empty?
 | 
			
		||||
  if $stdout.tty?
 | 
			
		||||
    width=`stty size`.chomp.split(" ").last
 | 
			
		||||
    IO.popen("pr -#{cols} -t", "w"){|io| io.write(items) }
 | 
			
		||||
    items = items.join("\n") if items.is_a?(Array)
 | 
			
		||||
    items.concat("\n") unless items.empty?
 | 
			
		||||
    width=`/bin/stty size`.chomp.split(" ").last
 | 
			
		||||
    IO.popen("/usr/bin/pr -#{cols} -t", "w"){|io| io.write(items) }
 | 
			
		||||
  else
 | 
			
		||||
    items.each { |i| $stdout.write(i) }
 | 
			
		||||
    puts *items
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def exec_editor *args
 | 
			
		||||
  editor=ENV['EDITOR']
 | 
			
		||||
  if editor.nil?
 | 
			
		||||
    if system "which -s mate" and $?.success?
 | 
			
		||||
    if system "/usr/bin/which -s mate"
 | 
			
		||||
      editor='mate'
 | 
			
		||||
    else
 | 
			
		||||
      editor='vim'
 | 
			
		||||
      editor='/usr/bin/vim'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  # we split the editor because especially on mac "mate -w" is common
 | 
			
		||||
@ -103,9 +103,9 @@ end
 | 
			
		||||
# provide an absolute path to a command or this function will search the PATH
 | 
			
		||||
def arch_for_command cmd
 | 
			
		||||
    archs = []
 | 
			
		||||
    cmd = `which #{cmd}` if not Pathname.new(cmd).absolute?
 | 
			
		||||
    cmd = `/usr/bin/which #{cmd}` if not Pathname.new(cmd).absolute?
 | 
			
		||||
 | 
			
		||||
    IO.popen("file #{cmd}").readlines.each do |line|
 | 
			
		||||
    IO.popen("/usr/bin/file #{cmd}").readlines.each do |line|
 | 
			
		||||
      case line
 | 
			
		||||
      when /Mach-O executable ppc/
 | 
			
		||||
        archs << :ppc7400
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								bin/brew
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								bin/brew
									
									
									
									
									
								
							@ -11,20 +11,20 @@ if %w[/ /usr].include? HOMEBREW_PREFIX.to_s then abort <<-EOS
 | 
			
		||||
  #{HOMEBREW_WWW}
 | 
			
		||||
  EOS
 | 
			
		||||
end
 | 
			
		||||
if `sw_vers -productVersion` =~ /10\.(\d)\.(\d+)/ and $1.to_i < 5
 | 
			
		||||
 | 
			
		||||
# remove MacPorts and Fink from the PATH, this prevents issues like:
 | 
			
		||||
# http://github.com/mxcl/homebrew/issues/#issue/13
 | 
			
		||||
# http://github.com/mxcl/homebrew/issues/#issue/48
 | 
			
		||||
fix_PATH
 | 
			
		||||
 | 
			
		||||
if `/usr/bin/sw_vers -productVersion` =~ /10\.(\d)\.(\d+)/ and $1.to_i < 5
 | 
			
		||||
  onoe "Homebrew requires Leopard or higher"
 | 
			
		||||
  abort "But thanks for your interest anyway!"
 | 
			
		||||
end
 | 
			
		||||
if Hardware.cpu_type == :ppc or Hardware.cpu_type == :dunno
 | 
			
		||||
  abort "Sorry, Homebrew does not support your computer's CPU architecture."
 | 
			
		||||
end
 | 
			
		||||
unless system "which -s gcc-4.2" and $?.success?
 | 
			
		||||
unless system "/usr/bin/which -s gcc-4.2"
 | 
			
		||||
  abort "Sorry, Homebrew requires gcc 4.2, which is provided by Xcode 3.1"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,7 @@ begin
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      unless ARGV.force?
 | 
			
		||||
        unless system "which #{ENV['CC'] or 'cc'} &> /dev/null" and $?.success?
 | 
			
		||||
        unless system "/usr/bin/which -s #{ENV.cc}"
 | 
			
		||||
          raise "We cannot find a c compiler, have you installed the latest Xcode?"
 | 
			
		||||
        end
 | 
			
		||||
        formulae = ARGV.formulae.reject do |f|
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user