diff options
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Formula/ack.rb | 10 | ||||
| -rw-r--r-- | Library/Formula/asciidoc.rb | 12 | ||||
| -rw-r--r-- | Library/Formula/boost.rb | 16 | ||||
| -rw-r--r-- | Library/Formula/cmake.rb | 13 | ||||
| -rw-r--r-- | Library/Formula/dmd.rb | 42 | ||||
| -rw-r--r-- | Library/Formula/fftw.rb | 21 | ||||
| -rw-r--r-- | Library/Formula/git.rb | 20 | ||||
| -rw-r--r-- | Library/Formula/grc.rb | 70 | ||||
| -rw-r--r-- | Library/Formula/lame.rb | 12 | ||||
| -rw-r--r-- | Library/Formula/liblastfm.rb | 19 | ||||
| -rw-r--r-- | Library/Formula/libogg.rb | 12 | ||||
| -rw-r--r-- | Library/Formula/libsamplerate.rb | 12 | ||||
| -rw-r--r-- | Library/Formula/mad.rb | 12 | ||||
| -rw-r--r-- | Library/Formula/pkg-config.rb | 14 | ||||
| -rw-r--r-- | Library/Formula/pngcrush.rb | 12 | ||||
| -rw-r--r-- | Library/Formula/qt.rb | 43 | ||||
| -rw-r--r-- | Library/Formula/taglib.rb | 12 | ||||
| -rw-r--r-- | Library/Formula/term.rb | 10 | ||||
| -rw-r--r-- | Library/Formula/wget.rb | 13 | ||||
| -rw-r--r-- | Library/Formula/xmlrpc-c.rb | 16 | ||||
| -rw-r--r-- | Library/Formula/yajl.rb | 21 | ||||
| -rw-r--r-- | Library/Homebrew/brewkit.rb | 359 | ||||
| -rw-r--r-- | Library/Homebrew/env.rb | 22 | ||||
| -rwxr-xr-x | Library/Homebrew/unittest.rb | 72 |
24 files changed, 865 insertions, 0 deletions
diff --git a/Library/Formula/ack.rb b/Library/Formula/ack.rb new file mode 100644 index 000000000..4bab09c89 --- /dev/null +++ b/Library/Formula/ack.rb @@ -0,0 +1,10 @@ +require 'brewkit' + +class Ack <UncompressedScriptFormula + def initialize + @version='1.88' + @url="http://ack.googlecode.com/svn/tags/#{@version}/ack" + @md5='8009a13ab0fc66047bea0ea2ad89419c' + @homepage='http://betterthangrep.com/' + end +end
\ No newline at end of file diff --git a/Library/Formula/asciidoc.rb b/Library/Formula/asciidoc.rb new file mode 100644 index 000000000..6b53ff83c --- /dev/null +++ b/Library/Formula/asciidoc.rb @@ -0,0 +1,12 @@ +require 'brewkit' + +class Asciidoc <Formula + @url='http://www.methods.co.nz/asciidoc/asciidoc-8.4.4.tar.gz' + @md5='579bcd5762b177ee0ddccece8c34724b' + @homepage='http://www.methods.co.nz/asciidoc' + + def install + system "./configure --disable-debug --prefix='#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/boost.rb b/Library/Formula/boost.rb new file mode 100644 index 000000000..2022ef952 --- /dev/null +++ b/Library/Formula/boost.rb @@ -0,0 +1,16 @@ +require 'brewkit' + +class Boost <Formula + @homepage='http://www.boost.org' + @url='http://kent.dl.sourceforge.net/sourceforge/boost/boost_1_39_0.tar.bz2' + @md5='a17281fd88c48e0d866e1a12deecbcc0' + + def install + #TODO we can save 6300 links if we just had the intelligence to symlink + #the include/boost dir and not more + + # we specify libdir too because the script is apparently broken + system "./bootstrap.sh --prefix='#{prefix}' --libdir='#{lib}'" + system "./bjam --layout=system --prefix='#{prefix}' --libdir='#{lib}' install" + end +end
\ No newline at end of file diff --git a/Library/Formula/cmake.rb b/Library/Formula/cmake.rb new file mode 100644 index 000000000..ee35e3eef --- /dev/null +++ b/Library/Formula/cmake.rb @@ -0,0 +1,13 @@ +require 'brewkit' + +class Cmake <Formula + @url='http://www.cmake.org/files/v2.6/cmake-2.6.3.tar.gz' + @md5='5ba47a94ce276f326abca1fd72a7e7c6' + + def install + system "./bootstrap --prefix=#{prefix} --system-libs" + system "make install" + + ['man','doc'].each { |d| (prefix+d).mv prefix+'share' } + end +end
\ No newline at end of file diff --git a/Library/Formula/dmd.rb b/Library/Formula/dmd.rb new file mode 100644 index 000000000..9ad5784be --- /dev/null +++ b/Library/Formula/dmd.rb @@ -0,0 +1,42 @@ +require 'brewkit' + +class Dmd <Formula + @homepage='http://www.digitalmars.com/d/' + @url='http://ftp.digitalmars.com/dmd.1.043.zip' + @md5='6c83b7296cb84090a9ebc11ab0fb94a2' + + def doc + #use d and not dmd, rationale: meh + prefix+'share'+'doc'+'d' + end + + def install + ohai "install" + FileUtils.cp_r 'osx/bin', prefix + FileUtils.cp_r 'osx/lib', prefix + FileUtils.cp_r 'man/man1', man + FileUtils.cp_r 'src', prefix + + #lol + man5=man+'man5' + man5.mkpath + (man+'man1'+'dmd.conf.5').mv man5 + #lol ends + + html=doc+'html' + samples=doc+'examples' #examples is the more typical directory name + html.mkpath + samples.mkpath + + FileUtils.cp_r Dir['html/d/*'], html unless ARGV.include? '--no-html' + FileUtils.cp_r Dir['samples/d/*'], samples unless ARGV.include? '--no-samples' + + # zip files suck TODO FileUtils.chmod + Dir.chdir(bin) { `chmod u+x dmd dumpobj obj2asm` } + + (prefix+'bin'+'dmd.conf').open('w') do |f| + f.puts "[Environment]" + f.puts "DFLAGS=-I#{prefix}/src/phobos -L-L#{prefix}/lib" + end + end +end
\ No newline at end of file diff --git a/Library/Formula/fftw.rb b/Library/Formula/fftw.rb new file mode 100644 index 000000000..e79002fc4 --- /dev/null +++ b/Library/Formula/fftw.rb @@ -0,0 +1,21 @@ +require 'brewkit' + +class Fftw <Formula + @homepage='http://www.fftw.org' + @url='http://www.fftw.org/fftw-3.2.1.tar.gz' + @md5='712d3f33625a0a76f5758648d4b925f7' + + def install + configure=<<-EOS + ./configure --enable-shared --disable-debug --prefix='#{prefix}' + --enable-threads --enable-single --enable-sse + --disable-dependency-tracking + --disable-fortran + EOS + system configure.gsub("\n", ' ').strip.squeeze(' ') + system "make install" + + #wtf file? + (prefix+'share'+'info'+'dir').unlink + end +end
\ No newline at end of file diff --git a/Library/Formula/git.rb b/Library/Formula/git.rb new file mode 100644 index 000000000..56cf84e95 --- /dev/null +++ b/Library/Formula/git.rb @@ -0,0 +1,20 @@ +require 'brewkit' + +class GitManuals <Formula + @url='http://kernel.org/pub/software/scm/git/git-manpages-1.6.3.1.tar.bz2' + @md5='971d573e8f261feb83290a59728c2b33' +end + +class Git <Formula + @url='http://kernel.org/pub/software/scm/git/git-1.6.3.1.tar.bz2' + @md5='c1f4aab741359c29f0fbf28563ac7387' + @homepage='http://git-scm.com' + + def install + # the manuals come separately, well sort of, it's easier this way though + GitManuals.new.brew { FileUtils.mv Dir['*'], man } + + system "./configure --prefix='#{prefix}' --disable-debug" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/grc.rb b/Library/Formula/grc.rb new file mode 100644 index 000000000..87a146567 --- /dev/null +++ b/Library/Formula/grc.rb @@ -0,0 +1,70 @@ +require 'brewkit' + +def profile_string + <<-sput +################################################################## >> Homebrew +GRC=`which grc` +if [ "$TERM" != dumb ] && [ -n GRC ] +then + alias colourify="$GRC -es --colour=auto" + alias configure='colourify ./configure' + alias diff='colourify diff' + alias make='colourify make' + alias gcc='colourify gcc' + alias g++='colourify g++' + alias as='colourify as' + alias gas='colourify gas' + alias ld='colourify ld' + alias netstat='colourify netstat' + alias ping='colourify ping' + alias traceroute='colourify /usr/sbin/traceroute' +fi +################################################################## << Homebrew + sput +end + +######################################################################### ARGV +case ARGV[0] + when '--profile' then + puts profile_string + exit 0 +end + +######################################################################### cook +class Grc <Formula + @homepage='http://korpus.juls.savba.sk/~garabik/software/grc.html' + @url='http://korpus.juls.savba.sk/~garabik/software/grc/grc_1.1.tar.gz' + @md5='eeb612aba2fff14cbaf1f3bec7e1eb60' + + def install + ohai "make" + #TODO we should deprefixify since it's python and thus possible + inreplace 'grc', '/etc', prefix+'etc' + inreplace 'grc.1', '/etc', prefix+'etc' + inreplace 'grcat', '/usr/local', prefix + inreplace 'grcat.1', '/usr/local', prefix + + FileUtils.mkpath prefix + Dir.chdir prefix do + FileUtils.mkpath 'bin' + FileUtils.mkpath 'share/grc' + FileUtils.mkpath 'share/man/man1' + FileUtils.mkpath 'etc' + end + + `cp -fv grc grcat #{prefix}/bin` + `cp -fv conf.* #{prefix}/share/grc` + `cp -fv grc.conf #{prefix}/etc` + `cp -fv grc.1 grcat.1 #{prefix}/share/man/man1` + end + + def caveats + <<-EOS + grc won't work as is. One option is to add some aliases to your ~/.profile + file. Homebrew can do that for you, just execute this command: + + brew grc --profile >> ~/.profile + + EOS + end +end
\ No newline at end of file diff --git a/Library/Formula/lame.rb b/Library/Formula/lame.rb new file mode 100644 index 000000000..2c248285c --- /dev/null +++ b/Library/Formula/lame.rb @@ -0,0 +1,12 @@ +require 'brewkit' + +class Lame <Formula + @homepage='http://lame.sourceforge.net/' + @url='http://kent.dl.sourceforge.net/sourceforge/lame/lame-398-2.tar.gz' + @md5='719dae0ee675d0c16e0e89952930ed35' + + def install + system "./configure --disable-debug --prefix='#{prefix}' --enable-nasm" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/liblastfm.rb b/Library/Formula/liblastfm.rb new file mode 100644 index 000000000..6f2b6a375 --- /dev/null +++ b/Library/Formula/liblastfm.rb @@ -0,0 +1,19 @@ +require 'brewkit' + +class Liblastfm <Formula + @homepage='http://github.com/mxcl/liblastfm/' + @url='http://static.last.fm/src/liblastfm-0.3.0.tar.bz2' + @md5='3f73222ebc31635941832b01e7a494b6' + + def deps + dep_test_bin 'qmake' or 'qt' + dep_test_lib 'fftw3f' or 'fftw' + dep_test_lib 'samplerate' or 'libsamplerate' + end + + def install + system "./configure --release --prefix '#{prefix}'" + system "make" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/libogg.rb b/Library/Formula/libogg.rb new file mode 100644 index 000000000..178835342 --- /dev/null +++ b/Library/Formula/libogg.rb @@ -0,0 +1,12 @@ +require 'brewkit' + +class Libogg <Formula + @homepage='http://www.xiph.org/ogg/' + @url='http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz' + @md5='eaf7dc6ebbff30975de7527a80831585' + + def install + system "./configure --disable-debug --prefix='#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/libsamplerate.rb b/Library/Formula/libsamplerate.rb new file mode 100644 index 000000000..d6dedc6c7 --- /dev/null +++ b/Library/Formula/libsamplerate.rb @@ -0,0 +1,12 @@ +require 'brewkit' + +class Libsamplerate <Formula + @homepage='http://www.mega-nerd.com/SRC' + @url='http://www.mega-nerd.com/SRC/libsamplerate-0.1.7.tar.gz' + @md5='ad093e60ec44f0a60de8e29983ddbc0f' + + def install + system "./configure --disable-debug --prefix='#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/mad.rb b/Library/Formula/mad.rb new file mode 100644 index 000000000..0bbcab8f9 --- /dev/null +++ b/Library/Formula/mad.rb @@ -0,0 +1,12 @@ +require 'brewkit' + +class Mad <Formula + @homepage='http://www.underbit.com/products/mad/' + @url='http://kent.dl.sourceforge.net/sourceforge/mad/libmad-0.15.1b.tar.gz' + @md5='1be543bc30c56fb6bea1d7bf6a64e66c' + + def install + system "./configure --disable-debugging --enable-fpm=intel --prefix='#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/pkg-config.rb b/Library/Formula/pkg-config.rb new file mode 100644 index 000000000..9254c5a65 --- /dev/null +++ b/Library/Formula/pkg-config.rb @@ -0,0 +1,14 @@ +require 'brewkit' + +class PkgConfig <Formula + @homepage='http://pkgconfig.freedesktop.org' + @url='http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz' + @md5='d922a88782b64441d06547632fd85744' + + #TODO depend on our glib? --with-installed-glib + + def install + system "./configure --with-pc-path=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:#{$root}/lib/pkgconfig --disable-debug --prefix='#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/pngcrush.rb b/Library/Formula/pngcrush.rb new file mode 100644 index 000000000..00a889403 --- /dev/null +++ b/Library/Formula/pngcrush.rb @@ -0,0 +1,12 @@ +require 'brewkit' + +class Pngcrush <Formula + @homepage='http://pmt.sourceforge.net/pngcrush/' + @url='http://kent.dl.sourceforge.net/sourceforge/pmt/pngcrush-1.6.17.tar.bz2' + @md5='8ba31ae9b1b14e7648df320fd1ed27c7' + + def install + system "make" + FileUtils.cp 'pngcrush', bin + end +end
\ No newline at end of file diff --git a/Library/Formula/qt.rb b/Library/Formula/qt.rb new file mode 100644 index 000000000..9ce82d600 --- /dev/null +++ b/Library/Formula/qt.rb @@ -0,0 +1,43 @@ +require 'brewkit' + +class Qt <Formula + @url='http://get.qtsoftware.com/qt/source/qt-mac-opensource-src-4.5.1.tar.gz' + @md5='9fc0e96197df6db48a0628ac4d63e0dd' + @homepage='http://www.qtsoftware.com' + + def install + if version == '4.5.1' + # Reported 6 months ago (at 4.5.0-rc1), still not fixed in the this release! :( + makefiles=['plugins/sqldrivers/sqlite/sqlite.pro', '3rdparty/webkit/WebCore/WebCore.pro'] + makefiles.each { |makefile| `echo 'LIBS += -lsqlite3' >> src/#{makefile}` } + end + + configure=<<-EOS + ./configure -prefix '#{prefix}' + -system-sqlite -system-libpng -system-zlib + -nomake demos -nomake examples -no-qt3support + -release -cocoa -arch x86 + -confirm-license -opensource + -I /usr/X11R6/include -L /usr/X11R6/lib + -fast + EOS + + system configure.gsub("\n", ' ').strip.squeeze(' ') + system "make install" + + # fuck weird prl files + `find #{lib} -name \*.prl -delete` + # fuck crazy disk usage + `rm -r #{prefix+'doc'+'html'} #{prefix+'doc'+'src'}` + # wtf are these anyway? + `rm -r #{bin}/Assistant_adp.app #{bin}/pixeltool.app #{bin}/qhelpconverter.app` + # we specified no debug already! :P + `rm #{lib}/libQtUiTools_debug.a` + # meh + `rm #{prefix}/q3porting.xml` + end + + def caveats + "We agreed to the Qt opensource license for you.\nIf this is unacceptable you should uninstall :P" + end +end
\ No newline at end of file diff --git a/Library/Formula/taglib.rb b/Library/Formula/taglib.rb new file mode 100644 index 000000000..2811decec --- /dev/null +++ b/Library/Formula/taglib.rb @@ -0,0 +1,12 @@ +require 'brewkit' + +class Taglib <Formula + @url='http://developer.kde.org/~wheeler/files/src/taglib-1.5.tar.gz' + @md5='7b557dde7425c6deb7bbedd65b4f2717' + @homepage='http://developer.kde.org/~wheeler/taglib.html' + + def install + system "./configure --disable-debug --prefix='#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/term.rb b/Library/Formula/term.rb new file mode 100644 index 000000000..427d3607a --- /dev/null +++ b/Library/Formula/term.rb @@ -0,0 +1,10 @@ +require 'brewkit' + +class Term <UncompressedScriptFormula + def initialize + @url='http://github.com/liyanage/macosx-shell-scripts/raw/e29f7eaa1eb13d78056dec85dc517626ab1d93e3/term' + @md5='1bbf4509a50224b27ac8c20d3fe8682e' + @version='2.1' + @homepage='http://gist.github.com/116587' + end +end
\ No newline at end of file diff --git a/Library/Formula/wget.rb b/Library/Formula/wget.rb new file mode 100644 index 000000000..2ba5722e0 --- /dev/null +++ b/Library/Formula/wget.rb @@ -0,0 +1,13 @@ +require 'brewkit' + +class Wget <Formula + @homepage='http://www.gnu.org/software/wget/' + @url='http://ftp.gnu.org/gnu/wget/wget-1.11.4.tar.bz2' + @md5='f5076a8c2ec2b7f334cb6e3059820f9c' + + def install + system "./configure --disable-debug --prefix='#{prefix}'" + system "make" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/xmlrpc-c.rb b/Library/Formula/xmlrpc-c.rb new file mode 100644 index 000000000..27d6f3a1e --- /dev/null +++ b/Library/Formula/xmlrpc-c.rb @@ -0,0 +1,16 @@ +require 'brewkit' + +class XmlrpcC <Formula + @url='http://kent.dl.sourceforge.net/sourceforge/xmlrpc-c/xmlrpc-c-1.06.33.tgz' + @md5='7dda4d8c5d26ae877d3809e428ce7962' + @homepage='http://xmlrpc-c.sourceforge.net/' + + def install + ENV['MAKEFLAGS']='' #parallel build doesn't work + # choosing --enable-libxml2-backend to lose some weight and not statically + # link in expat + #NOTE seemingly it isn't possible to build dylibs with this thing + system "./configure --disable-debug --enable-libxml2-backend --prefix='#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Formula/yajl.rb b/Library/Formula/yajl.rb new file mode 100644 index 000000000..f72432dda --- /dev/null +++ b/Library/Formula/yajl.rb @@ -0,0 +1,21 @@ +require 'brewkit' + +class Yajl <Formula + @homepage='http://lloyd.github.com/yajl/' + @url='http://github.com/lloyd/yajl/tarball/1.0.5' + @md5='f4a3cbc764c43231ed1aedc54438b69b' + + def deps + dep_test_bin 'cmake' + end + + def install + ENV['MAKEFLAGS']='' # can't do parallel builds + + # I have pushed this fix upstream + inreplace 'configure', 'cmake \.\.', "cmake -DCMAKE_INSTALL_PREFIX='#{prefix}' \.\." if @version == "1.0.5" + + system "./configure --prefix '#{prefix}'" + system "make install" + end +end
\ No newline at end of file diff --git a/Library/Homebrew/brewkit.rb b/Library/Homebrew/brewkit.rb new file mode 100644 index 000000000..8ca71d332 --- /dev/null +++ b/Library/Homebrew/brewkit.rb @@ -0,0 +1,359 @@ +# Copyright 2009 Max Howell <max@methylblue.com> +# +# 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 <http://www.gnu.org/licenses/>. + +require 'pathname' +require 'osx/cocoa' # to get number of cores +require "#{File.dirname __FILE__}/env" + +HOMEBREW_VERSION='0.1' + +# 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.0.1/gcc/i386-and-x86_002d64-Options.html +ENV['MACOSX_DEPLOYMENT_TARGET']='10.5' +ENV['CFLAGS']=ENV['CXXFLAGS']='-O3 -w -pipe -fomit-frame-pointer -march=prescott' + +# lets use gcc 4.2, it is newer and "better", at least I believe so, mail me +# if I'm wrong +ENV['CC']='gcc-4.2' +ENV['CXX']='g++-4.2' +ENV['MAKEFLAGS']="-j#{OSX::NSProcessInfo.processInfo.processorCount}" + +unless $root.to_s == '/usr/local' + ENV['CPPFLAGS']='-I'+$root+'include' + ENV['LDFLAGS']='-L'+$root+'lib' +end + + +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 + +def appsupport + appsupport = File.expand_path "~/Library/Application Support/Homebrew" + FileUtils.mkpath appsupport unless File.exist? appsupport + return appsupport +end + + +# make our code neater +class Pathname + def mv dst + FileUtils.mv to_s, dst + end + def cp dst + if file? + FileUtils.cp to_s, dst + else + FileUtils.cp_r to_s, dst + end + end +end + + +class Formula + require 'find' + require 'fileutils' + + # fuck knows, ruby is weird + def self.url + @url + end + def url + self.class.url + end + def self.md5 + @md5 + end + def md5 + self.class.md5 + end + def self.homepage + @homepage + end + def homepage + self.class.homepage + end + # end ruby is weird section + + def initialize + # fuck knows, ruby is weird + @url=url if @url.nil? + raise "@url.nil?" if @url.nil? + @md5=md5 if @md5.nil? + # end ruby is weird section + + # pls improve this version extraction crap + filename=File.basename @url + i=filename.index /[-_]\d/ + unless i.nil? + /^((\d+[._])*(\d+-)?\d+[abc]?)/.match filename[i+1,1000] #1000 because rubysucks + @version=$1 + # if there are no dots replace underscores, boost do this, the bastards! + @version.gsub!('_', '.') unless @version.include? '.' + else + # no divisor or a '.' divisor, eg. dmd.1.11.zip + /^[a-zA-Z._-]*((\d+\.)*\d+)/.match filename + @version = $1 + end + end + +private + def maybe_mkpath path + path.mkpath unless path.exist? + return path + end + +public + def prefix + raise "@name.nil!" if @name.nil? + raise "@version.nil?" if @version.nil? + $cellar+@name+@version + end + def bin + maybe_mkpath prefix+'bin' + end + def doc + maybe_mkpath prefix+'share'+'doc'+name + end + def man + maybe_mkpath prefix+'share'+'man' + end + def lib + maybe_mkpath prefix+'lib' + end + def include + maybe_mkpath prefix+'include' + end + + def name=name + raise "Name assigned twice, I'm not letting you do that!" if @name + @name=name + end + +protected + def caveats + nil + end + +public + #yields a Pathname object for the installation prefix + def brew + # disabled until the regexp makes sense :P + #raise "@name does not validate to our regexp" unless /^\w+$/ =~ @name + + ohai "Downloading #{@url}" + + Dir.chdir appsupport do + tgz=Pathname.new(fetch()).realpath + md5=`md5 -q "#{tgz}"`.strip + raise "MD5 mismatch: #{md5}" unless md5 and md5 == @md5.downcase + + # we make an additional subdirectory so know exactly what we are + # recursively deleting later + # we use mktemp rather than appsupport/blah because some build scripts + # can't handle being built in a directory with spaces in it :P + tmp=nil + begin + tmp=`mktemp -dt #{File.basename @url}`.strip + Dir.chdir tmp do + Dir.chdir uncompress(tgz) do + yield self + if caveats + ohai "Caveats" + puts caveats + end + #TODO copy changelog or CHANGES file to pkg root, + #TODO maybe README, etc. to versioned root + end + end + rescue Interrupt, RuntimeError + if ARGV.include? '--debug' + # debug mode allows the packager to intercept a failed build and + # investigate the problems + puts "Rescued build at: #{tmp}" + exit! 1 + else + FileUtils.rm_rf prefix + raise + end + ensure + FileUtils.rm_rf tmp if tmp + FileUtils.rm tgz if tgz and not self.cache? + end + end + end + + def clean + prefix.find do |path| + if path==prefix #rubysucks + next + elsif path.file? + if path.extname == '.la' + path.unlink + else + fo=`file -h #{path}` + args=nil + args='-SxX' if fo =~ /Mach-O dynamically linked shared library/ + args='' if fo =~ /Mach-O executable/ #defaults strip everything + if args + puts "Stripping: #{path}" if ARGV.include? '--verbose' + `strip #{args} #{path}` + end + end + elsif path.directory? and path!=prefix+'bin' and path!=prefix+'lib' + Find.prune + end + end + end + + def version + @version + end + def name + @name + end + +protected + def fetch + %r[http://(www.)?github.com/.*/(zip|tar)ball/].match @url + if $2 + # curl doesn't do the redirect magic that we would like, so we get a + # stupidly named file, this is why wget would be beter, but oh well + tgz="#{@name}-#{@version}.#{$2=='tar' ? 'tgz' : $2}" + oarg="-o #{tgz}" + else + oarg='-O' #use the filename that curl gets + tgz=File.expand_path File.basename(@url) + end + + agent="Homebrew #{HOMEBREW_VERSION} (Ruby #{VERSION}; Mac OS X 10.5 Leopard)" + + unless File.exists? tgz + `curl -#LA "#{agent}" #{oarg} "#{@url}"` + raise "Download failed" unless $? == 0 + else + puts "File already downloaded and cached" + end + return tgz + end + + def uncompress(path) + if path.extname == '.zip' + `unzip -qq "#{path}"` + else + `tar xf "#{path}"` + end + + raise "Compression tool failed" if $? != 0 + + entries=Dir['*'] + if entries.nil? or entries.length == 0 + raise "Empty tarball!" + elsif entries.length == 1 + # if one dir enter it as that will be where the build is + entries.first + else + # if there's more than one dir, then this is the build directory already + Dir.pwd + end + end + + def cache? + true + end + +private + def method_added(method) + raise 'You cannot override Formula.brew' if method == 'brew' + end +end + +# see ack.rb for an example usage +class UncompressedScriptFormula <Formula + def uncompress path + path.dirname + end + def cache? + false + end + def install + FileUtils.cp name, bin + (bin+name).chmod 0544 + end +end + +class GithubGistFormula <Formula + def initialize(url, md5) + @url=url + @name=File.basename url + @version=File.basename(File.dirname(url))[0,6] + @md5=md5 + + brew do |prefix| + bin=prefix+'bin' + bin.mkpath + FileUtils.cp @name, bin + (bin+@name).chmod 0544 + nil + end + end + + def uncompress path + path.dirname + end +end + +def inreplace(path, before, after) + before=before.to_s.gsub('"', '\"').gsub('/', '\/') + after=after.to_s.gsub('"', '\"').gsub('/', '\/') + + # we're not using Ruby because the perl script is more concise + #TODO the above escapes are worse, use a proper ruby script :P + #TODO optimise it by taking before and after as arrays + #Bah, just make the script writers do it themselves with a standard collect block + #TODO use ed -- less to escape + `perl -pi -e "s/#{before}/#{after}/g" "#{path}"` +end + +def system cmd + ohai cmd + + out='' + IO.popen("#{cmd} 2>&1") do |f| + until f.eof? + s=f.gets + out+=s + puts s if ARGV.include? '--verbose' + end + end + + unless $? == 0 + puts out unless ARGV.include? '--verbose' #already did that above + raise "Failure during: #{cmd}" + end +end + +########################################################################script +if $0 == __FILE__ + d=$cellar.parent+'bin' + d.mkpath unless d.exist? + Dir.chdir d + Pathname.new('brew').make_symlink Pathname.new('../Cellar')+'homebrew'+'brew' +end
\ No newline at end of file diff --git a/Library/Homebrew/env.rb b/Library/Homebrew/env.rb new file mode 100644 index 000000000..e1beac1c1 --- /dev/null +++ b/Library/Homebrew/env.rb @@ -0,0 +1,22 @@ +# Copyright 2009 Max Howell <max@methylblue.com> +# +# 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 <http://www.gnu.org/licenses/>. + +require 'pathname' + +$root=Pathname.new(__FILE__).dirname.parent.parent.realpath +$formula=$root+'Library'+'Formula' +$cellar=$root+'Cellar'
\ No newline at end of file diff --git a/Library/Homebrew/unittest.rb b/Library/Homebrew/unittest.rb new file mode 100755 index 000000000..5ec8f0e5d --- /dev/null +++ b/Library/Homebrew/unittest.rb @@ -0,0 +1,72 @@ +#!/usr/bin/ruby +require 'test/unit' +require "#{__FILE__}/../brewkit" + +class TestFormula <Formula + def initialize url, md5 + @url=url + @md5=md5 + @name='test' + super() + end +end + + +class BeerTasting <Test::Unit::TestCase + def test_version_all_dots + r=TestFormula.new "http://example.com/foo.bar.la.1.14.zip", 'nomd5' + assert_equal '1.14', r.version + end + + def test_version_underscore_separator + r=TestFormula.new "http://example.com/grc_1.1.tar.gz", 'nomd5' + assert_equal '1.1', r.version + end + + def test_version_underscores_all_the_way + r=TestFormula.new "http://example.com/boost_1_39_0.tar.bz2", 'nomd5' + assert_equal '1.39.0', r.version + end + + def test_version_internal_dash + r=TestFormula.new "http://example.com/foo-arse-1.1-2.tar.gz", 'nomd5' + assert_equal '1.1-2', r.version + end + + def test_version_single_digit + r=TestFormula.new "http://example.com/foo_bar.45.tar.gz", 'nomd5' + assert_equal '45', r.version + end + + def test_noseparator_single_digit + r=TestFormula.new "http://example.com/foo_bar45.tar.gz", 'nomd5' + assert_equal '45', r.version + end + + def test_version_developer_that_hates_us_format + r=TestFormula.new "http://example.com/foo-bar-la.1.2.3.tar.gz", 'nomd5' + assert_equal '1.2.3', r.version + end + + def test_version_regular + r=TestFormula.new "http://example.com/foo_bar-1.21.tar.gz", 'nomd5' + assert_equal '1.21', r.version + end + + def test_yet_another_version + r=TestFormula.new "http://example.com/mad-0.15.1b.tar.gz", 'nomd5' + assert_equal '0.15.1b', r.version + end + + def test_prefix + url='http://www.methylblue.com/test-0.1.tar.gz' + md5='d496ea538a21dc4bb8524a8888baf88c' + + TestFormula.new(url, md5).brew do |f| + prefix=f.prefix + # we test for +/unittest/0.1 because we derive @name from $0 + assert_equal File.expand_path(prefix), ($cellar+'test'+'0.1').to_s + assert_kind_of Pathname, prefix + end + end +end
\ No newline at end of file |
