diff --git a/Library/Formula/pkg-config.rb b/Library/Formula/pkg-config.rb index d95229e4c883..eb08fc5f54e8 100644 --- a/Library/Formula/pkg-config.rb +++ b/Library/Formula/pkg-config.rb @@ -8,7 +8,7 @@ class PkgConfig . -require 'pathname' - -$root=Pathname.new(__FILE__).dirname.parent.parent.realpath -$formula=$root+'Library'+'Formula' -$cellar=$root+'Cellar' +require 'pathname+yeast' +require 'utils' HOMEBREW_VERSION='0.3' HOMEBREW_CACHE=File.expand_path "~/Library/Caches/Homebrew" - - -######################################################################## utils -def ohai title - n=`tput cols`.strip.to_i-4 - puts "\033[0;34m==>\033[0;0;1m #{title[0,n]}\033[0;0m" -end - - -############################################################### class Pathname -# we enhance Pathname to make our code more legible -# of course this kind of thing is evil, but meh -class Pathname - def mv dst - FileUtils.mv to_s, dst - end - - def rename dst - dst=Pathname.new dst - dst.unlink if dst.exist? - mv dst - end - - def install src - if src.is_a? Array - src.each {|src| install src } - elsif File.exist? src - mkpath - if File.symlink? src - # we use the BSD mv command because FileUtils copies the target and - # not the link! I'm beginning to wish I'd used Python quite honestly! - `mv #{src} #{to_s}` - else - # we mv when possible as it is faster and you should only be using - # this function when installing from the temporary build directory - FileUtils.mv src, to_s - end - end - end - - def cp dst - if file? - FileUtils.cp to_s, dst - else - FileUtils.cp_r to_s, dst - end - end - - # extended to support the double extensions .tar.gz and .tar.bz2 - def extname - /(\.tar\.(gz|bz2))$/.match to_s - return $1 if $1 - return File.extname(to_s) - end - - # for filetypes we support, basename without extension - def stem - return File.basename(to_s, extname) - end - - def version - # eg. boost_1_39_0 - /((\d+_)+\d+)$/.match stem - return $1.gsub('_', '.') if $1 - - # eg. foobar-4.5.1-1 - /-((\d+\.)*\d+-\d+)$/.match stem - return $1 if $1 - - # eg. foobar-4.5.1 - /-((\d+\.)*\d+)$/.match stem - return $1 if $1 - - # eg. foobar-4.5.1b - /-((\d+\.)*\d+([abc]|rc\d))$/.match stem - return $1 if $1 - - # eg foobar-4.5.0-beta1 - /-((\d+\.)*\d+-beta\d+)$/.match stem - return $1 if $1 - - # eg. foobar4.5.1 - /((\d+\.)*\d+)$/.match stem - return $1 if $1 - - # eg. otp_src_R13B (this is erlang's style) - # eg. astyle_1.23_macosx.tar.gz - stem.scan /_([^_]+)/ do |match| - return match.first if /\d/.match $1 - end - end -end +HOMEBREW_PREFIX=Pathname.new(__FILE__).dirname.parent.parent.realpath +HOMEBREW_CELLAR=HOMEBREW_PREFIX+'Cellar' diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index ad975ef007f2..f2763f8993f1 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -15,8 +15,6 @@ # You should have received a copy of the GNU General Public License # along with Homebrew. If not, see . -require 'env' - class BuildError . -require 'env' require 'formula' class Keg @@ -29,7 +28,7 @@ def initialize formula elsif formula.is_a? Pathname # TODO elsif formula.is_a? String - path=$cellar+formula + path=HOMEBREW_CELLAR+formula kids=path.children raise "Empty installation: #{path}" if kids.length < 1 raise "Multiple versions installed" if kids.length > 1 @@ -83,12 +82,12 @@ def clean def rm # don't rmtree shit if we aren't positive about our location! - raise "Bad stuff!" unless path.parent.parent == $cellar + raise "Bad stuff!" unless path.parent.parent == HOMEBREW_CELLAR if path.directory? FileUtils.chmod_R 0777, path # ensure we have permission to delete - path.rmtree # $cellar/foo/1.2.0 - path.parent.rmdir if path.parent.children.length == 0 # $cellar/foo + path.rmtree # HOMEBREW_CELLAR/foo/1.2.0 + path.parent.rmdir if path.parent.children.length == 0 # HOMEBREW_CELLAR/foo end end @@ -109,13 +108,14 @@ def __ln start start=path+start return unless start.directory? + root=Pathname.new HOMEBREW_PREFIX start.find do |from| next if from == start prune=false relative_path=from.relative_path_from path - to=$root+relative_path + to=root+relative_path if from.file? __symlink_relative_to from, to diff --git a/Library/Homebrew/pathname+yeast.rb b/Library/Homebrew/pathname+yeast.rb new file mode 100644 index 000000000000..75eb98bba95b --- /dev/null +++ b/Library/Homebrew/pathname+yeast.rb @@ -0,0 +1,100 @@ +# Copyright 2009 Max Howell +# +# This file is part of Homebrew. +# +# Homebrew is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Homebrew is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Homebrew. If not, see . + +require 'pathname' + +# we enhance pathname to make our code more readable +class Pathname + def mv dst + FileUtils.mv to_s, dst + end + + def rename dst + dst=Pathname.new dst + dst.unlink if dst.exist? + mv dst + end + + def install src + if src.is_a? Array + src.each {|src| install src } + elsif File.exist? src + mkpath + if File.symlink? src + # we use the BSD mv command because FileUtils copies the target and + # not the link! I'm beginning to wish I'd used Python quite honestly! + `mv #{src} #{to_s}` + else + # we mv when possible as it is faster and you should only be using + # this function when installing from the temporary build directory + FileUtils.mv src, to_s + end + end + end + + def cp dst + if file? + FileUtils.cp to_s, dst + else + FileUtils.cp_r to_s, dst + end + end + + # extended to support the double extensions .tar.gz and .tar.bz2 + def extname + /(\.tar\.(gz|bz2))$/.match to_s + return $1 if $1 + return File.extname(to_s) + end + + # for filetypes we support, basename without extension + def stem + return File.basename(to_s, extname) + end + + def version + # eg. boost_1_39_0 + /((\d+_)+\d+)$/.match stem + return $1.gsub('_', '.') if $1 + + # eg. foobar-4.5.1-1 + /-((\d+\.)*\d+-\d+)$/.match stem + return $1 if $1 + + # eg. foobar-4.5.1 + /-((\d+\.)*\d+)$/.match stem + return $1 if $1 + + # eg. foobar-4.5.1b + /-((\d+\.)*\d+([abc]|rc\d))$/.match stem + return $1 if $1 + + # eg foobar-4.5.0-beta1 + /-((\d+\.)*\d+-beta\d+)$/.match stem + return $1 if $1 + + # eg. foobar4.5.1 + /((\d+\.)*\d+)$/.match stem + return $1 if $1 + + # eg. otp_src_R13B (this is erlang's style) + # eg. astyle_1.23_macosx.tar.gz + stem.scan /_([^_]+)/ do |match| + return match.first if /\d/.match $1 + end + end +end diff --git a/Library/Homebrew/unittest.rb b/Library/Homebrew/unittest.rb index 7b15b2949733..dcaf036de065 100755 --- a/Library/Homebrew/unittest.rb +++ b/Library/Homebrew/unittest.rb @@ -1,9 +1,16 @@ #!/usr/bin/ruby - $:.unshift File.dirname(__FILE__) -require 'test/unit' require 'formula' +require 'pathname+yeast' require 'stringio' +require 'test/unit' +require 'utils' + +# these are defined in env usually, but we want a fake place for everything init +HOMEBREW_VERSION='1t' +HOMEBREW_CACHE="/tmp/testbrew" +HOMEBREW_PREFIX=Pathname.new(HOMEBREW_CACHE)+'prefix' +HOMEBREW_CELLAR=Pathname.new(HOMEBREW_CACHE)+'cellar' class TestFormula +# +# This file is part of Homebrew. +# +# Homebrew is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Homebrew is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Homebrew. If not, see . + +def ohai title + n=`tput cols`.strip.to_i-4 + puts "\033[0;34m==>\033[0;0;1m #{title[0,n]}\033[0;0m" +end diff --git a/bin/brew b/bin/brew index 0797422aea23..bb89d3712072 100755 --- a/bin/brew +++ b/bin/brew @@ -1,8 +1,7 @@ #!/usr/bin/ruby -require 'find' -require 'pathname' -$:.unshift Pathname.new(__FILE__).dirname.parent.realpath+'Library'+'Homebrew' +$:.unshift __FILE__+'/../../Library/Homebrew' require 'env' +require 'find' # often causes Ruby to throw exception ffs Dir.chdir '/' unless File.directory? ENV['PWD'] @@ -11,9 +10,9 @@ Dir.chdir '/' unless File.directory? ENV['PWD'] def prune n=0 dirs=Array.new - $root.find do |path| + HOMEBREW_PREFIX.find do |path| if path.directory? - name=path.relative_path_from($root).to_s + name=path.relative_path_from(HOMEBREW_PREFIX).to_s if name == '.git' or name == 'Cellar' or name == 'Library' Find.prune else @@ -60,7 +59,7 @@ def extract_kegs end def abv keg=nil - path=keg ? keg.path : $cellar + path=keg ? keg.path : HOMEBREW_CELLAR if path.directory? `find #{path} -type f | wc -l`.strip+' files, '+`du -hd0 #{path} | cut -d"\t" -f1`.strip else @@ -203,7 +202,8 @@ begin when 'edit' if ARGV.empty? - exec "mate #{$formula} #{$root}/Library/Homebrew #{$root}/bin/brew #{$root}/README" + r=HOMEBREW_PREFIX + exec "mate #{r}/Library/Formula #{r}/Library/Homebrew #{r}/bin/brew #{r}/README" else require 'formula' paths=extract_named_args.collect {|name| Formula.path(name).to_s.gsub ' ', '\\ '} @@ -258,7 +258,7 @@ begin when 'info', 'abv' if ARGV.empty? - puts `ls #{$cellar} | wc -l`.strip+" kegs, "+abv + puts `ls #{HOMEBREW_CELLAR} | wc -l`.strip+" kegs, "+abv elsif ARGV[0][0..6] == 'http://' puts Pathname.new(ARGV.shift).version else @@ -292,4 +292,4 @@ rescue StandardError, Interrupt => e else raise end -end \ No newline at end of file +end