From 543a113712635b64bcfe0804acea0d8079b8bd44 Mon Sep 17 00:00:00 2001 From: Max Howell Date: Thu, 15 Oct 2009 12:36:09 +0100 Subject: Some subdirs and renames to aid homebrew n00bs The classes better reflect their contents. I'm sure this change may be contentious, but I am a sucker for trying to create source bases that are easy to get to grips with and easy to navigate. brewkit.rb is now a deprecated file. --- Library/Homebrew/ARGV+yeast.rb | 118 ------ Library/Homebrew/brewkit.rb | 228 +---------- Library/Homebrew/extend/ARGV.rb | 116 ++++++ Library/Homebrew/extend/ENV.rb | 207 ++++++++++ Library/Homebrew/extend/pathname.rb | 196 ++++++++++ Library/Homebrew/formula_test.rb | 52 --- Library/Homebrew/global.rb | 7 +- Library/Homebrew/install.rb | 27 +- Library/Homebrew/pathname+yeast.rb | 196 ---------- Library/Homebrew/test/formula_test.rb | 49 +++ Library/Homebrew/test/testball-0.1.tbz | Bin 0 -> 1400 bytes Library/Homebrew/test/unittest.rb | 691 +++++++++++++++++++++++++++++++++ Library/Homebrew/testball-0.1.tbz | Bin 1400 -> 0 bytes Library/Homebrew/unittest.rb | 688 -------------------------------- Library/Homebrew/utils.rb | 14 + 15 files changed, 1293 insertions(+), 1296 deletions(-) delete mode 100644 Library/Homebrew/ARGV+yeast.rb create mode 100644 Library/Homebrew/extend/ARGV.rb create mode 100644 Library/Homebrew/extend/ENV.rb create mode 100644 Library/Homebrew/extend/pathname.rb delete mode 100755 Library/Homebrew/formula_test.rb delete mode 100644 Library/Homebrew/pathname+yeast.rb create mode 100755 Library/Homebrew/test/formula_test.rb create mode 100644 Library/Homebrew/test/testball-0.1.tbz create mode 100755 Library/Homebrew/test/unittest.rb delete mode 100644 Library/Homebrew/testball-0.1.tbz delete mode 100755 Library/Homebrew/unittest.rb (limited to 'Library') diff --git a/Library/Homebrew/ARGV+yeast.rb b/Library/Homebrew/ARGV+yeast.rb deleted file mode 100644 index 5616039b3..000000000 --- a/Library/Homebrew/ARGV+yeast.rb +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright 2009 Max Howell and other contributors. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -module HomebrewArgvExtension - def named - raise UsageError if _named.empty? - _named - end - def named_empty? - _named.empty? - end - def options - select {|arg| arg[0..0] == '-'} - end - def formulae - require 'formula' - @formulae ||= named.collect {|name| Formula.factory name} - end - def kegs - require 'keg' - @kegs ||= named.collect do |name| - d=HOMEBREW_CELLAR+name - raise "#{name} is not installed" if not d.directory? or d.children.length == 0 - raise "#{name} has multiple installed versions" if d.children.length > 1 - Keg.new d.children[0] - end - end - - # self documenting perhaps? - def include? arg - @n=index arg - end - def next - at @n+1 - end - - def force? - flag? '--force' - end - def verbose? - flag? '--verbose' or ENV['HOMEBREW_VERBOSE'] - end - def debug? - flag? '--debug' or ENV['HOMEBREW_DEBUG'] - end - def quieter? - flag? '--quieter' - end - def interactive? - flag? '--interactive' - end - - def flag? flag - options.each do |arg| - return true if arg == flag - next if arg[1..1] == '-' - return true if arg.include? flag[2..2] - end - return false - end - - def usage - <<-EOS -Usage: brew command [formula] ... -Usage: brew [--prefix] [--cache] [--version|-v] -Usage: brew [--verbose|-v] - -Commands: - install formula ... [--debug|-d] [--interactive|-i] [--ignore-dependencies] - remove formula ... - search [/regex/] [substring] - list [--brewed] [--unbrewed] [formula] ... - link formula ... - unlink formula ... - home formula ... - info [formula] [--github] - prune - update - -Commands useful when contributing: - log formula - create URL - edit [formula] - -To visit the Homebrew homepage type: - brew home - EOS - end - -private - def _named - @named ||= reject{|arg| arg[0..0] == '-'}.collect{|arg| arg.downcase}.uniq - end -end - -class UsageError = 10.6 or ENV['HOMEBREW_USE_LLVM'] - # you can install Xcode wherever you like you know. - prefix = `/usr/bin/xcode-select -print-path`.chomp - prefix = "/Developer" if prefix.to_s.empty? - - ENV['CC'] = "#{prefix}/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2" - ENV['CXX'] = "#{prefix}/usr/llvm-gcc-4.2/bin/llvm-g++-4.2" - cflags = ['-O4'] # O4 baby! -else - ENV['CC']="gcc-4.2" - ENV['CXX']="g++-4.2" - cflags = ['-O3'] -end -# in rare cases this may break your builds, as the tool for some reason wants -# to use a specific linker, however doing this in general causes formula to -# build more successfully because we are changing CC and many build systems -# don't react properly to that -ENV['LD']=ENV['CC'] - -# optimise all the way to eleven, references: -# http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel -# http://forums.mozillazine.org/viewtopic.php?f=12&t=577299 -# http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/i386-and-x86_002d64-Options.html -if MACOS_VERSION >= 10.6 - case Hardware.intel_family - when :penryn, :core2 - # no need to add -mfpmath it happens automatically with 64 bit compiles - cflags << "-march=core2" - when :core - cflags<<"-march=prescott"<<"-mfpmath=sse" - end -else - case Hardware.intel_family - when :penryn, :core2 - cflags<<"-march=nocona" - when :core - cflags<<"-march=prescott" - end - cflags<<"-mfpmath=sse" -end -cflags<<"-mmmx" -case Hardware.intel_family -when :nehalem - cflags<<"-msse4.2" -when :penryn - cflags<<"-msse4.1" -when :core2, :core - cflags<<"-msse3" -end - -# -w: keep signal to noise high -# -fomit-frame-pointer: we are not debugging this software, we are using it -BREWKIT_SAFE_FLAGS="-w -pipe -fomit-frame-pointer -mmacosx-version-min=#{MACOS_VERSION}" -ENV['CFLAGS']=ENV['CXXFLAGS']="#{cflags*' '} #{BREWKIT_SAFE_FLAGS}" - -# compile faster -ENV['MAKEFLAGS']="-j#{Hardware.processor_count}" - - -# you can use these functions for packages that have build issues -module HomebrewEnvExtension - def deparallelize - remove 'MAKEFLAGS', /-j\d+/ - end - alias_method :j1, :deparallelize - def gcc_4_0_1 - case MACOS_VERSION - when 10.5 - self['CC']=nil - self['CXX']=nil - self['LD']=nil - when 10.6..11.0 - self['CC']='gcc-4.0' - self['CXX']='g++-4.0' - self['LD']=self['CC'] - remove_from_cflags '-march=core2' - self.O3 - end - remove_from_cflags '-msse4.1' - remove_from_cflags '-msse4.2' - end - def O3 - # Sometimes O4 just takes fucking forever - remove_from_cflags '-O4' - append_to_cflags '-O3' - end - def O2 - # Sometimes O3 doesn't work or produces bad binaries - remove_from_cflags '-O4' - remove_from_cflags '-O3' - append_to_cflags '-O2' - end - def gcc_4_2 - # Sometimes you want to downgrade from LLVM to GCC 4.2 - self['CC']="gcc-4.2" - self['CXX']="g++-4.2" - self['LD']=self['CC'] - self.O3 - end - def osx_10_4 - self['MACOSX_DEPLOYMENT_TARGET']=nil - remove_from_cflags(/ ?-mmacosx-version-min=10\.\d/) - end - def minimal_optimization - self['CFLAGS']=self['CXXFLAGS']="-Os #{BREWKIT_SAFE_FLAGS}" - end - def no_optimization - self['CFLAGS']=self['CXXFLAGS']=BREWKIT_SAFE_FLAGS - end - def libxml2 - append_to_cflags ' -I/usr/include/libxml2' - end - def x11 - # CPPFLAGS are the C-PreProcessor flags, *not* C++! - append 'CPPFLAGS', '-I/usr/X11R6/include' - append 'LDFLAGS', '-L/usr/X11R6/lib' - end - alias_method :libpng, :x11 - # we've seen some packages fail to build when warnings are disabled! - def enable_warnings - remove_from_cflags '-w' - end - # Snow Leopard defines an NCURSES value the opposite of most distros - # See: http://bugs.python.org/issue6848 - def ncurses_define - append 'CPPFLAGS', "-DNCURSES_OPAQUE=0" - end - # returns the compiler we're using - def cc - ENV['CC'] or "gcc" - end - def cxx - ENV['cxx'] or "g++" - end - # in case you need it - def m64 - append_to_cflags '-m64' - ENV['LDFLAGS'] += '-arch x86_64' - end - -private - def append key, value - ref=self[key] - if ref.nil? or ref.empty? - self[key]=value - else - self[key]=ref+' '+value - end - end - def append_to_cflags f - append 'CFLAGS', f - append 'CXXFLAGS', f - end - def remove key, value - return if self[key].nil? - self[key]=self[key].sub value, '' # can't use sub! on ENV - self[key]=nil if self[key].empty? # keep things clean - end - def remove_from_cflags f - remove 'CFLAGS', f - remove 'CXXFLAGS', f - end -end - -ENV.extend HomebrewEnvExtension - - -# Clear CDPATH to avoid make issues that depend on changing directories -ENV.delete('CDPATH') - -def inreplace(path, before, after) - before=Regexp.escape before.to_s - before.gsub! "/", "\\/" # I guess not escaped as delimiter varies - after=after.to_s - after.gsub! "\\", "\\\\" - after.gsub! "/", "\\/" - after.gsub! "$", "\\$" - - # FIXME use proper Ruby for teh exceptions! - safe_system "/usr/bin/perl", "-pi", "-e", "s/#{before}/#{after}/g", path -end +require 'utils' +opoo "brewkit.rb is deprecated please require 'formula' instead" +puts "This file will be removed at version 0.7" +require 'formula' diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb new file mode 100644 index 000000000..b8ccbda53 --- /dev/null +++ b/Library/Homebrew/extend/ARGV.rb @@ -0,0 +1,116 @@ +# Copyright 2009 Max Howell and other contributors. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +module HomebrewArgvExtension + def named + raise UsageError if _named.empty? + _named + end + def named_empty? + _named.empty? + end + def options + select {|arg| arg[0..0] == '-'} + end + def formulae + require 'formula' + @formulae ||= named.collect {|name| Formula.factory name} + end + def kegs + require 'keg' + @kegs ||= named.collect do |name| + d=HOMEBREW_CELLAR+name + raise "#{name} is not installed" if not d.directory? or d.children.length == 0 + raise "#{name} has multiple installed versions" if d.children.length > 1 + Keg.new d.children[0] + end + end + + # self documenting perhaps? + def include? arg + @n=index arg + end + def next + at @n+1 + end + + def force? + flag? '--force' + end + def verbose? + flag? '--verbose' or ENV['HOMEBREW_VERBOSE'] + end + def debug? + flag? '--debug' or ENV['HOMEBREW_DEBUG'] + end + def quieter? + flag? '--quieter' + end + def interactive? + flag? '--interactive' + end + + def flag? flag + options.each do |arg| + return true if arg == flag + next if arg[1..1] == '-' + return true if arg.include? flag[2..2] + end + return false + end + + def usage + <<-EOS +Usage: brew command [formula] ... +Usage: brew [--prefix] [--cache] [--version|-v] +Usage: brew [--verbose|-v] + +Commands: + install formula ... [--debug|-d] [--interactive|-i] [--ignore-dependencies] + remove formula ... + search [/regex/] [substring] + list [--brewed] [--unbrewed] [formula] ... + link formula ... + unlink formula ... + home formula ... + info [formula] [--github] + prune + update + +Commands useful when contributing: + log formula + create URL + edit [formula] + +To visit the Homebrew homepage type: + brew home + EOS + end + +private + def _named + @named ||= reject{|arg| arg[0..0] == '-'}.collect{|arg| arg.downcase}.uniq + end +end + +class UsageError = 10.6 or ENV['HOMEBREW_USE_LLVM'] + # you can install Xcode wherever you like you know. + prefix = `/usr/bin/xcode-select -print-path`.chomp + prefix = "/Developer" if prefix.to_s.empty? + + ENV['CC'] = "#{prefix}/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2" + ENV['CXX'] = "#{prefix}/usr/llvm-gcc-4.2/bin/llvm-g++-4.2" + cflags = ['-O4'] # O4 baby! + else + ENV['CC']="gcc-4.2" + ENV['CXX']="g++-4.2" + cflags = ['-O3'] + end + # in rare cases this may break your builds, as the tool for some reason wants + # to use a specific linker, however doing this in general causes formula to + # build more successfully because we are changing CC and many build systems + # don't react properly to that + ENV['LD']=ENV['CC'] + + # optimise all the way to eleven, references: + # http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel + # http://forums.mozillazine.org/viewtopic.php?f=12&t=577299 + # http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/i386-and-x86_002d64-Options.html + if MACOS_VERSION >= 10.6 + case Hardware.intel_family + when :penryn, :core2 + # no need to add -mfpmath it happens automatically with 64 bit compiles + cflags << "-march=core2" + when :core + cflags<<"-march=prescott"<<"-mfpmath=sse" + end + else + case Hardware.intel_family + when :penryn, :core2 + cflags<<"-march=nocona" + when :core + cflags<<"-march=prescott" + end + cflags<<"-mfpmath=sse" + end + cflags<<"-mmmx" + case Hardware.intel_family + when :nehalem + cflags<<"-msse4.2" + when :penryn + cflags<<"-msse4.1" + when :core2, :core + cflags<<"-msse3" + end + + ENV['CFLAGS']=ENV['CXXFLAGS']="#{cflags*' '} #{SAFE_CFLAGS_FLAGS}" + end + + def deparallelize + remove 'MAKEFLAGS', /-j\d+/ + end + alias_method :j1, :deparallelize + def gcc_4_0_1 + case MACOS_VERSION + when 10.5 + self['CC']=nil + self['CXX']=nil + self['LD']=nil + when 10.6..11.0 + self['CC']='gcc-4.0' + self['CXX']='g++-4.0' + self['LD']=self['CC'] + remove_from_cflags '-march=core2' + self.O3 + end + remove_from_cflags '-msse4.1' + remove_from_cflags '-msse4.2' + end + def O3 + # Sometimes O4 just takes fucking forever + remove_from_cflags '-O4' + append_to_cflags '-O3' + end + def O2 + # Sometimes O3 doesn't work or produces bad binaries + remove_from_cflags '-O4' + remove_from_cflags '-O3' + append_to_cflags '-O2' + end + def gcc_4_2 + # Sometimes you want to downgrade from LLVM to GCC 4.2 + self['CC']="gcc-4.2" + self['CXX']="g++-4.2" + self['LD']=self['CC'] + self.O3 + end + def osx_10_4 + self['MACOSX_DEPLOYMENT_TARGET']=nil + remove_from_cflags(/ ?-mmacosx-version-min=10\.\d/) + end + def minimal_optimization + self['CFLAGS']=self['CXXFLAGS']="-Os #{SAFE_CFLAGS_FLAGS}" + end + def no_optimization + self['CFLAGS']=self['CXXFLAGS'] = SAFE_CFLAGS_FLAGS + end + def libxml2 + append_to_cflags ' -I/usr/include/libxml2' + end + def x11 + # CPPFLAGS are the C-PreProcessor flags, *not* C++! + append 'CPPFLAGS', '-I/usr/X11R6/include' + append 'LDFLAGS', '-L/usr/X11R6/lib' + end + alias_method :libpng, :x11 + # we've seen some packages fail to build when warnings are disabled! + def enable_warnings + remove_from_cflags '-w' + end + # Snow Leopard defines an NCURSES value the opposite of most distros + # See: http://bugs.python.org/issue6848 + def ncurses_define + append 'CPPFLAGS', "-DNCURSES_OPAQUE=0" + end + # returns the compiler we're using + def cc + ENV['CC'] or "gcc" + end + def cxx + ENV['cxx'] or "g++" + end + # in case you need it + def m64 + append_to_cflags '-m64' + ENV['LDFLAGS'] += '-arch x86_64' + end + + def prepend key, value, separator = ' ' + unless self[key].to_s.empty? + self[key] = value + separator + self[key] + else + self[key] = value + end + end + def append key, value + ref=self[key] + if ref.nil? or ref.empty? + self[key]=value + else + self[key]=ref+' '+value + end + end + def append_to_cflags f + append 'CFLAGS', f + append 'CXXFLAGS', f + end + def remove key, value + return if self[key].nil? + self[key]=self[key].sub value, '' # can't use sub! on ENV + self[key]=nil if self[key].empty? # keep things clean + end + def remove_from_cflags f + remove 'CFLAGS', f + remove 'CXXFLAGS', f + end +end diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb new file mode 100644 index 000000000..bfbba61bf --- /dev/null +++ b/Library/Homebrew/extend/pathname.rb @@ -0,0 +1,196 @@ +# Copyright 2009 Max Howell and other contributors. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +require 'pathname' + +# we enhance pathname to make our code more readable +class Pathname + def install src + if src.is_a? Array + src.collect {|src| install src } + else + raise "#{src} does not exist" unless 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! + raise unless Kernel.system 'mv', src, to_s and $? == 0 + 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 + src=Pathname.new src + return self+src.basename + end + end + + # we assume this pathname object is a file obviously + def write content + raise "Will not overwrite #{to_s}" if exist? and not ARGV.force? + dirname.mkpath + File.open(self, 'w') {|f| f.write content } + end + + def cp dst + if file? + FileUtils.cp to_s, dst + else + FileUtils.cp_r to_s, dst + end + return dst + 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 + + # I don't trust the children.length == 0 check particularly, not to mention + # it is slow to enumerate the whole directory just to see if it is empty, + # instead rely on good ol' libc and the filesystem + def rmdir_if_possible + rmdir + true + rescue SystemCallError => e + raise unless e.errno == Errno::ENOTEMPTY::Errno or e.errno == Errno::EACCES::Errno + false + end + + def chmod_R perms + require 'fileutils' + FileUtils.chmod_R perms, to_s + end + + def abv + out='' + n=`find #{to_s} -type f | wc -l`.to_i + out<<"#{n} files, " if n > 1 + out<<`du -hd0 #{to_s} | cut -d"\t" -f1`.strip + end + + # attempts to retrieve the version component of this path, so generally + # you'll call it on tarballs or extracted tarball directories, if you add + # to this please provide amend the unittest + def version + if directory? + # directories don't have extnames + stem=basename.to_s + else + stem=self.stem + end + + # github tarballs are special + # we only support numbered tagged downloads + %r[github.com/.*/tarball/((\d\.)+\d)$].match to_s + return $1 if $1 + + # eg. boost_1_39_0 + /((\d+_)+\d+)$/.match stem + return $1.gsub('_', '.') if $1 + + # eg. foobar-4.5.1-1 + # eg. ruby-1.9.1-p243 + /-((\d+\.)*\d\.\d+-(p|rc)?\d+)$/.match stem + return $1 if $1 + + # eg. lame-398-1 + /-((\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 foobar-4.5.0-bin + /-((\d+\.)+\d+[abc]?)[-.](bin|src|sources)$/.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 + + nil + end + + if '1.9' <= RUBY_VERSION + alias_method :to_str, :to_s + end +end + +# sets $n and $d so you can observe creation of stuff +module ObserverPathnameExtension + def unlink + super + puts "rm #{to_s}" if ARGV.verbose? + $n+=1 + end + def rmdir + super + puts "rmdir #{to_s}" if ARGV.verbose? + $d+=1 + end + def resolved_path_exists? + (dirname+readlink).exist? + end + def mkpath + super + puts "mkpath #{to_s}" if ARGV.verbose? + $d+=1 + end + def make_relative_symlink src + dirname.mkpath + Dir.chdir dirname do + # TODO use Ruby function so we get exceptions + # NOTE Ruby functions may work, but I had a lot of problems + rv=system 'ln', '-sf', src.relative_path_from(dirname) + raise "Could not create symlink #{to_s}" unless rv and $? == 0 + puts "ln #{to_s}" if ARGV.verbose? + $n+=1 + end + end +end + +$n=0 +$d=0 diff --git a/Library/Homebrew/formula_test.rb b/Library/Homebrew/formula_test.rb deleted file mode 100755 index e63b183f4..000000000 --- a/Library/Homebrew/formula_test.rb +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/ruby -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. - -$:.unshift File.dirname(__FILE__) -require 'test/unit' -require 'global' -require 'pathname+yeast' -require 'formula' -require 'utils' - -require 'ARGV+yeast' # needs to be after test/unit to avoid conflict with OptionsParser - - -# NOTE duplicated in unittest.rb (we need to refactor the tests anyway) -def nostdout - if ARGV.include? '-V' - yield - end - begin - require 'stringio' - tmpo=$stdout - tmpe=$stderr - $stdout=StringIO.new - yield - ensure - $stdout=tmpo - end -end - - -class FormulaNames e - raise unless e.errno == Errno::ENOTEMPTY::Errno or e.errno == Errno::EACCES::Errno - false - end - - def chmod_R perms - require 'fileutils' - FileUtils.chmod_R perms, to_s - end - - def abv - out='' - n=`find #{to_s} -type f | wc -l`.to_i - out<<"#{n} files, " if n > 1 - out<<`du -hd0 #{to_s} | cut -d"\t" -f1`.strip - end - - # attempts to retrieve the version component of this path, so generally - # you'll call it on tarballs or extracted tarball directories, if you add - # to this please provide amend the unittest - def version - if directory? - # directories don't have extnames - stem=basename.to_s - else - stem=self.stem - end - - # github tarballs are special - # we only support numbered tagged downloads - %r[github.com/.*/tarball/((\d\.)+\d)$].match to_s - return $1 if $1 - - # eg. boost_1_39_0 - /((\d+_)+\d+)$/.match stem - return $1.gsub('_', '.') if $1 - - # eg. foobar-4.5.1-1 - # eg. ruby-1.9.1-p243 - /-((\d+\.)*\d\.\d+-(p|rc)?\d+)$/.match stem - return $1 if $1 - - # eg. lame-398-1 - /-((\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 foobar-4.5.0-bin - /-((\d+\.)+\d+[abc]?)[-.](bin|src|sources)$/.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 - - nil - end - - if '1.9' <= RUBY_VERSION - alias_method :to_str, :to_s - end -end - -# sets $n and $d so you can observe creation of stuff -module ObserverPathnameExtension - def unlink - super - puts "rm #{to_s}" if ARGV.verbose? - $n+=1 - end - def rmdir - super - puts "rmdir #{to_s}" if ARGV.verbose? - $d+=1 - end - def resolved_path_exists? - (dirname+readlink).exist? - end - def mkpath - super - puts "mkpath #{to_s}" if ARGV.verbose? - $d+=1 - end - def make_relative_symlink src - dirname.mkpath - Dir.chdir dirname do - # TODO use Ruby function so we get exceptions - # NOTE Ruby functions may work, but I had a lot of problems - rv=system 'ln', '-sf', src.relative_path_from(dirname) - raise "Could not create symlink #{to_s}" unless rv and $? == 0 - puts "ln #{to_s}" if ARGV.verbose? - $n+=1 - end - end -end - -$n=0 -$d=0 diff --git a/Library/Homebrew/test/formula_test.rb b/Library/Homebrew/test/formula_test.rb new file mode 100755 index 000000000..15cafae13 --- /dev/null +++ b/Library/Homebrew/test/formula_test.rb @@ -0,0 +1,49 @@ +#!/usr/bin/ruby +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. + +$:.unshift File.dirname(__FILE__)+'/..' +require 'test/unit' +require 'global' +require 'formula' +require 'utils' + + +# NOTE duplicated in unittest.rb (we need to refactor the tests anyway) +def nostdout + if ARGV.include? '-V' + yield + end + begin + require 'stringio' + tmpo=$stdout + tmpe=$stderr + $stdout=StringIO.new + yield + ensure + $stdout=tmpo + end +end + + +class FormulaNames " + end +end + +def nostdout + if ARGV.include? '-V' + yield + end + begin + require 'stringio' + tmpo=$stdout + tmpe=$stderr + $stdout=StringIO.new + yield + ensure + $stdout=tmpo + end +end + +module ExtendArgvPlusYeast + def reset + @named=nil + @formulae=nil + @kegs=nil + while ARGV.length > 0 + ARGV.shift + end + end +end +ARGV.extend ExtendArgvPlusYeast + + +class BeerTasting = 10.6 + assert f <= 10.6 + assert_equal 10.5, f-0.1 + assert_equal 10.7, f+0.1 + end + + def test_arch_for_command + arches=arch_for_command '/usr/bin/svn' + if `sw_vers -productVersion` =~ /10\.(\d+)/ and $1.to_i >= 6 + assert_equal 3, arches.length + assert arches.include?(:x86_64) + else + assert_equal 2, arches.length + end + assert arches.include?(:i386) + assert arches.include?(:ppc7400) + end + + def test_pathname_plus_yeast + nostdout do + assert_nothing_raised do + assert !Pathname.getwd.rmdir_if_possible + assert !Pathname.getwd.abv.empty? + + abcd=orig_abcd=HOMEBREW_CACHE+'abcd' + FileUtils.cp ABS__FILE__, abcd + abcd=HOMEBREW_PREFIX.install abcd + assert (HOMEBREW_PREFIX+orig_abcd.basename).exist? + assert abcd.exist? + assert_equal HOMEBREW_PREFIX+'abcd', abcd + + assert_raises(RuntimeError) {abcd.write 'CONTENT'} + abcd.unlink + abcd.write 'HELLOWORLD' + assert_equal 'HELLOWORLD', File.read(abcd) + + assert !orig_abcd.exist? + rv=abcd.cp orig_abcd + assert orig_abcd.exist? + assert_equal rv, orig_abcd + + orig_abcd.unlink + assert !orig_abcd.exist? + abcd.cp HOMEBREW_CACHE + assert orig_abcd.exist? + + foo1=HOMEBREW_CACHE+'foo-0.1.tar.gz' + FileUtils.cp ABS__FILE__, foo1 + assert foo1.file? + + assert_equal '.tar.gz', foo1.extname + assert_equal 'foo-0.1', foo1.stem + assert_equal '0.1', foo1.version + + HOMEBREW_CACHE.chmod_R 0777 + end + end + + assert_raises(RuntimeError) {Pathname.getwd.install 'non_existant_file'} + end + + def test_omega_version_style + f=MockFormula.new 'http://www.alcyone.com/binaries/omega/omega-0.80.2-src.tar.gz' + assert_equal '0.80.2', f.version + end + + def test_formula_class_func + assert_equal Formula.class_s('s-lang'), 'SLang' + assert_equal Formula.class_s('pkg-config'), 'PkgConfig' + assert_equal Formula.class_s('foo_bar'), 'FooBar' + end + + def test_version_style_rc + f=MockFormula.new 'http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz' + assert_equal '1.8.0-rc1', f.version + end + + def test_updater_update_homebrew_without_any_changes + outside_prefix do + updater = RefreshBrewMock.new + updater.in_prefix_expect("git checkout master") + updater.in_prefix_expect("git pull origin master", "Already up-to-date.\n") + + assert_equal false, updater.update_from_masterbrew! + assert updater.expectations_met? + assert updater.updated_formulae.empty? + assert updater.added_formulae.empty? + end + end + + def test_updater_update_homebrew_without_formulae_changes + outside_prefix do + updater = RefreshBrewMock.new + updater.in_prefix_expect("git checkout master") + output = fixture('update_git_pull_output_without_formulae_changes') + updater.in_prefix_expect("git pull origin master", output) + + assert_equal true, updater.update_from_masterbrew! + assert !updater.pending_formulae_changes? + assert updater.updated_formulae.empty? + assert updater.added_formulae.empty? + end + end + + def test_updater_update_homebrew_with_formulae_changes + outside_prefix do + updater = RefreshBrewMock.new + updater.in_prefix_expect("git checkout master") + output = fixture('update_git_pull_output_with_formulae_changes') + updater.in_prefix_expect("git pull origin master", output) + + assert_equal true, updater.update_from_masterbrew! + assert updater.pending_formulae_changes? + assert_equal %w{ xar yajl }, updater.updated_formulae + assert_equal %w{ antiword bash-completion ddrescue dict lua }, updater.added_formulae + end + end + + def test_updater_returns_current_revision + outside_prefix do + updater = RefreshBrewMock.new + updater.in_prefix_expect('git log -l -1 --pretty=format:%H', 'the-revision-hash') + assert_equal 'the-revision-hash', updater.current_revision + end + end + + def test_angband_version_style + f = MockFormula.new 'http://rephial.org/downloads/3.0/angband-3.0.9b-src.tar.gz' + assert_equal '3.0.9b', f.version + end + + private + + OUTSIDE_PREFIX = '/tmp' + def outside_prefix + Dir.chdir(OUTSIDE_PREFIX) { yield } + end + + def fixture(name) + self.class.fixture_data[name] + end + + def self.fixture_data + unless @fixture_data + require 'yaml' + @fixture_data = YAML.load(DATA) + end + @fixture_data + end + + def test_ENV_options + ENV.gcc_4_0_1 + ENV.gcc_4_2 + ENV.O3 + ENV.minimal_optimization + ENV.no_optimization + ENV.libxml2 + ENV.x11 + ENV.enable_warnings + assert !ENV.cc.empty? + assert !ENV.cxx.empty? + end +end + +__END__ +update_git_pull_output_without_formulae_changes: | + remote: counting objects: 58, done. + remote: Compressing objects: 100% (35/35), done. + remote: Total 39 (delta 20), reused 0 (delta 0) + Unpacking objects: 100% (39/39), done. + From git://github.com/mxcl/homebrew + * branch master -> FETCH_HEAD + Updating 14ef7f9..f414bc8 + Fast forward + Library/Homebrew/ARGV+yeast.rb | 35 ++-- + Library/Homebrew/beer_events.rb | 181 +++++++++++++ + Library/Homebrew/hardware.rb | 71 ++++++ + Library/Homebrew/hw.model.c | 17 -- + README | 337 +++++++++++++------------ + bin/brew | 137 ++++++++--- + 40 files changed, 1107 insertions(+), 426 deletions(-) + create mode 100644 Library/Homebrew/beer_events.rb + create mode 100644 Library/Homebrew/hardware.rb + delete mode 100644 Library/Homebrew/hw.model.c + delete mode 100644 Library/Homebrew/hw.model.rb +update_git_pull_output_with_formulae_changes: | + remote: counting objects: 58, done. + remote: Compressing objects: 100% (35/35), done. + remote: Total 39 (delta 20), reused 0 (delta 0) + Unpacking objects: 100% (39/39), done. + From git://github.com/mxcl/homebrew + * branch master -> FETCH_HEAD + Updating 14ef7f9..f414bc8 + Fast forward + Library/Contributions/brew_bash_completion.sh | 6 +- + Library/Formula/antiword.rb | 13 + + Library/Formula/bash-completion.rb | 25 ++ + Library/Formula/xar.rb | 19 ++ + Library/Formula/yajl.rb | 2 +- + Library/Homebrew/ARGV+yeast.rb | 35 ++-- + Library/Homebrew/beer_events.rb | 181 +++++++++++++ + Library/Homebrew/hardware.rb | 71 ++++++ + Library/Homebrew/hw.model.c | 17 -- + Library/Homebrew/pathname+yeast.rb | 28 ++- + Library/Homebrew/unittest.rb | 106 ++++++++- + Library/Homebrew/utils.rb | 36 ++- + README | 337 +++++++++++++------------ + bin/brew | 137 ++++++++--- + 40 files changed, 1107 insertions(+), 426 deletions(-) + create mode 100644 Library/Formula/antiword.rb + create mode 100644 Library/Formula/bash-completion.rb + create mode 100644 Library/Formula/ddrescue.rb + create mode 100644 Library/Formula/dict.rb + create mode 100644 Library/Formula/lua.rb + delete mode 100644 Library/Formula/antiword.rb + delete mode 100644 Library/Formula/bash-completion.rb + delete mode 100644 Library/Formula/xar.rb + delete mode 100644 Library/Formula/yajl.rb + create mode 100644 Library/Homebrew/beer_events.rb + create mode 100644 Library/Homebrew/hardware.rb + delete mode 100644 Library/Homebrew/hw.model.c + delete mode 100644 Library/Homebrew/hw.model.rb \ No newline at end of file diff --git a/Library/Homebrew/testball-0.1.tbz b/Library/Homebrew/testball-0.1.tbz deleted file mode 100644 index 2f1e57358..000000000 Binary files a/Library/Homebrew/testball-0.1.tbz and /dev/null differ diff --git a/Library/Homebrew/unittest.rb b/Library/Homebrew/unittest.rb deleted file mode 100755 index dfbf0e101..000000000 --- a/Library/Homebrew/unittest.rb +++ /dev/null @@ -1,688 +0,0 @@ -#!/usr/bin/ruby -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. - -ABS__FILE__=File.expand_path(__FILE__) - -$:.unshift File.dirname(ABS__FILE__) -require 'pathname+yeast' -require 'formula' -require 'download_strategy' -require 'keg' -require 'utils' -require 'brew.h' -require 'hardware' -require 'update' - -# these are defined in global.rb, but we don't want to break our actual -# homebrew tree, and we do want to test everything :) -HOMEBREW_PREFIX=Pathname.new '/private/tmp/testbrew/prefix' -HOMEBREW_REPOSITORY=HOMEBREW_PREFIX -HOMEBREW_CACHE=HOMEBREW_PREFIX.parent+"cache" -HOMEBREW_CELLAR=HOMEBREW_PREFIX.parent+"cellar" -HOMEBREW_USER_AGENT="Homebrew" -MACOS_VERSION=10.6 - -(HOMEBREW_PREFIX+'Library'+'Formula').mkpath -Dir.chdir HOMEBREW_PREFIX -at_exit { HOMEBREW_PREFIX.parent.rmtree } - -require 'test/unit' # must be after at_exit -require 'ARGV+yeast' # needs to be after test/unit to avoid conflict with OptionsParser - - -class MockFormula " - end -end - -def nostdout - if ARGV.include? '-V' - yield - end - begin - require 'stringio' - tmpo=$stdout - tmpe=$stderr - $stdout=StringIO.new - yield - ensure - $stdout=tmpo - end -end - -module ExtendArgvPlusYeast - def reset - @named=nil - @formulae=nil - @kegs=nil - while ARGV.length > 0 - ARGV.shift - end - end -end -ARGV.extend ExtendArgvPlusYeast - - -class BeerTasting = 10.6 - assert f <= 10.6 - assert_equal 10.5, f-0.1 - assert_equal 10.7, f+0.1 - end - - def test_arch_for_command - arches=arch_for_command '/usr/bin/svn' - if `sw_vers -productVersion` =~ /10\.(\d+)/ and $1.to_i >= 6 - assert_equal 3, arches.length - assert arches.include?(:x86_64) - else - assert_equal 2, arches.length - end - assert arches.include?(:i386) - assert arches.include?(:ppc7400) - end - - def test_pathname_plus_yeast - nostdout do - assert_nothing_raised do - assert !Pathname.getwd.rmdir_if_possible - assert !Pathname.getwd.abv.empty? - - abcd=orig_abcd=HOMEBREW_CACHE+'abcd' - FileUtils.cp ABS__FILE__, abcd - abcd=HOMEBREW_PREFIX.install abcd - assert (HOMEBREW_PREFIX+orig_abcd.basename).exist? - assert abcd.exist? - assert_equal HOMEBREW_PREFIX+'abcd', abcd - - assert_raises(RuntimeError) {abcd.write 'CONTENT'} - abcd.unlink - abcd.write 'HELLOWORLD' - assert_equal 'HELLOWORLD', File.read(abcd) - - assert !orig_abcd.exist? - rv=abcd.cp orig_abcd - assert orig_abcd.exist? - assert_equal rv, orig_abcd - - orig_abcd.unlink - assert !orig_abcd.exist? - abcd.cp HOMEBREW_CACHE - assert orig_abcd.exist? - - foo1=HOMEBREW_CACHE+'foo-0.1.tar.gz' - FileUtils.cp ABS__FILE__, foo1 - assert foo1.file? - - assert_equal '.tar.gz', foo1.extname - assert_equal 'foo-0.1', foo1.stem - assert_equal '0.1', foo1.version - - HOMEBREW_CACHE.chmod_R 0777 - end - end - - assert_raises(RuntimeError) {Pathname.getwd.install 'non_existant_file'} - end - - def test_omega_version_style - f=MockFormula.new 'http://www.alcyone.com/binaries/omega/omega-0.80.2-src.tar.gz' - assert_equal '0.80.2', f.version - end - - def test_formula_class_func - assert_equal Formula.class_s('s-lang'), 'SLang' - assert_equal Formula.class_s('pkg-config'), 'PkgConfig' - assert_equal Formula.class_s('foo_bar'), 'FooBar' - end - - def test_version_style_rc - f=MockFormula.new 'http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz' - assert_equal '1.8.0-rc1', f.version - end - - def test_updater_update_homebrew_without_any_changes - outside_prefix do - updater = RefreshBrewMock.new - updater.in_prefix_expect("git checkout master") - updater.in_prefix_expect("git pull origin master", "Already up-to-date.\n") - - assert_equal false, updater.update_from_masterbrew! - assert updater.expectations_met? - assert updater.updated_formulae.empty? - assert updater.added_formulae.empty? - end - end - - def test_updater_update_homebrew_without_formulae_changes - outside_prefix do - updater = RefreshBrewMock.new - updater.in_prefix_expect("git checkout master") - output = fixture('update_git_pull_output_without_formulae_changes') - updater.in_prefix_expect("git pull origin master", output) - - assert_equal true, updater.update_from_masterbrew! - assert !updater.pending_formulae_changes? - assert updater.updated_formulae.empty? - assert updater.added_formulae.empty? - end - end - - def test_updater_update_homebrew_with_formulae_changes - outside_prefix do - updater = RefreshBrewMock.new - updater.in_prefix_expect("git checkout master") - output = fixture('update_git_pull_output_with_formulae_changes') - updater.in_prefix_expect("git pull origin master", output) - - assert_equal true, updater.update_from_masterbrew! - assert updater.pending_formulae_changes? - assert_equal %w{ xar yajl }, updater.updated_formulae - assert_equal %w{ antiword bash-completion ddrescue dict lua }, updater.added_formulae - end - end - - def test_updater_returns_current_revision - outside_prefix do - updater = RefreshBrewMock.new - updater.in_prefix_expect('git log -l -1 --pretty=format:%H', 'the-revision-hash') - assert_equal 'the-revision-hash', updater.current_revision - end - end - - def test_angband_version_style - f = MockFormula.new 'http://rephial.org/downloads/3.0/angband-3.0.9b-src.tar.gz' - assert_equal '3.0.9b', f.version - end - - private - - OUTSIDE_PREFIX = '/tmp' - def outside_prefix - Dir.chdir(OUTSIDE_PREFIX) { yield } - end - - def fixture(name) - self.class.fixture_data[name] - end - - def self.fixture_data - unless @fixture_data - require 'yaml' - @fixture_data = YAML.load(DATA) - end - @fixture_data - end - - def test_ENV_options - ENV.gcc_4_0_1 - ENV.gcc_4_2 - ENV.O3 - ENV.minimal_optimization - ENV.no_optimization - ENV.libxml2 - ENV.x11 - ENV.enable_warnings - assert !ENV.cc.empty? - assert !ENV.cxx.empty? - end -end - -__END__ -update_git_pull_output_without_formulae_changes: | - remote: counting objects: 58, done. - remote: Compressing objects: 100% (35/35), done. - remote: Total 39 (delta 20), reused 0 (delta 0) - Unpacking objects: 100% (39/39), done. - From git://github.com/mxcl/homebrew - * branch master -> FETCH_HEAD - Updating 14ef7f9..f414bc8 - Fast forward - Library/Homebrew/ARGV+yeast.rb | 35 ++-- - Library/Homebrew/beer_events.rb | 181 +++++++++++++ - Library/Homebrew/hardware.rb | 71 ++++++ - Library/Homebrew/hw.model.c | 17 -- - README | 337 +++++++++++++------------ - bin/brew | 137 ++++++++--- - 40 files changed, 1107 insertions(+), 426 deletions(-) - create mode 100644 Library/Homebrew/beer_events.rb - create mode 100644 Library/Homebrew/hardware.rb - delete mode 100644 Library/Homebrew/hw.model.c - delete mode 100644 Library/Homebrew/hw.model.rb -update_git_pull_output_with_formulae_changes: | - remote: counting objects: 58, done. - remote: Compressing objects: 100% (35/35), done. - remote: Total 39 (delta 20), reused 0 (delta 0) - Unpacking objects: 100% (39/39), done. - From git://github.com/mxcl/homebrew - * branch master -> FETCH_HEAD - Updating 14ef7f9..f414bc8 - Fast forward - Library/Contributions/brew_bash_completion.sh | 6 +- - Library/Formula/antiword.rb | 13 + - Library/Formula/bash-completion.rb | 25 ++ - Library/Formula/xar.rb | 19 ++ - Library/Formula/yajl.rb | 2 +- - Library/Homebrew/ARGV+yeast.rb | 35 ++-- - Library/Homebrew/beer_events.rb | 181 +++++++++++++ - Library/Homebrew/hardware.rb | 71 ++++++ - Library/Homebrew/hw.model.c | 17 -- - Library/Homebrew/pathname+yeast.rb | 28 ++- - Library/Homebrew/unittest.rb | 106 ++++++++- - Library/Homebrew/utils.rb | 36 ++- - README | 337 +++++++++++++------------ - bin/brew | 137 ++++++++--- - 40 files changed, 1107 insertions(+), 426 deletions(-) - create mode 100644 Library/Formula/antiword.rb - create mode 100644 Library/Formula/bash-completion.rb - create mode 100644 Library/Formula/ddrescue.rb - create mode 100644 Library/Formula/dict.rb - create mode 100644 Library/Formula/lua.rb - delete mode 100644 Library/Formula/antiword.rb - delete mode 100644 Library/Formula/bash-completion.rb - delete mode 100644 Library/Formula/xar.rb - delete mode 100644 Library/Formula/yajl.rb - create mode 100644 Library/Homebrew/beer_events.rb - create mode 100644 Library/Homebrew/hardware.rb - delete mode 100644 Library/Homebrew/hw.model.c - delete mode 100644 Library/Homebrew/hw.model.rb \ No newline at end of file diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 976adaa3a..6ce87f190 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -122,3 +122,17 @@ def arch_for_command cmd return archs end + + +# replaces before with after for the file path +def inreplace path, before, after + before=Regexp.escape before.to_s + before.gsub! "/", "\\/" # I guess not escaped as delimiter varies + after=after.to_s + after.gsub! "\\", "\\\\" + after.gsub! "/", "\\/" + after.gsub! "$", "\\$" + + # FIXME use proper Ruby for teh exceptions! + safe_system "/usr/bin/perl", "-pi", "-e", "s/#{before}/#{after}/g", path +end -- cgit v1.2.3