aboutsummaryrefslogtreecommitdiffstats
path: root/Cellar/homebrew/brewkit.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Cellar/homebrew/brewkit.rb')
-rw-r--r--Cellar/homebrew/brewkit.rb116
1 files changed, 116 insertions, 0 deletions
diff --git a/Cellar/homebrew/brewkit.rb b/Cellar/homebrew/brewkit.rb
new file mode 100644
index 000000000..92ab72104
--- /dev/null
+++ b/Cellar/homebrew/brewkit.rb
@@ -0,0 +1,116 @@
+# Copyright 2009 Max Howell <max@methylblue.com>
+# Licensed as per the GPL version 3
+require 'FileUtils'
+require 'Find'
+require 'Pathname'
+$agent = "Homebrew 0.1 (Ruby; Mac OS X 10.5 Leopard)"
+$cellar = Pathname.new(__FILE__).dirname.parent.realpath
+
+class Formula
+ # if you reimplement, assign @name, @version, @url and @md5
+ def initialize(url, md5)
+ @name = File.basename $0, '.rb' #original script that the interpreter started
+ @url = url
+ @md5 = md5
+
+ # pls improve this version extraction crap
+ filename=File.basename url
+ i=filename.index /[-_]\d/
+ unless i.nil?
+ /^((\d+[.-])*\d+)/.match filename[i+1,1000] #1000 because rubysucks
+ @version = $1
+ else
+ # no divisor or a '.' divisor, eg. dmd.1.11.zip
+ /^[a-zA-Z._-]*((\d+\.)*\d+)/.match filename
+ @version = $1
+ end
+ end
+
+ #yields a Pathname object for the installation prefix
+ def brew
+ raise "@name.nil?" if @name.nil?
+ raise "@version.nil?" if @version.nil?
+ raise "@name does not validate to our regexp" unless /^\w+$/ =~ @name
+
+ prefix=$cellar+@name+@version
+ raise "#{prefix} already exists!" if prefix.exist?
+
+ appsupport = File.expand_path "~/Library/Application Support/Homebrew"
+ FileUtils.mkpath appsupport unless File.exist? appsupport
+ Dir.chdir appsupport do
+ tgz=Pathname.new self.fetch
+ raise "MD5 mismatch" unless `md5 -q "#{tgz}"`.strip == @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 #{@name}-#{@version}`.strip
+ Dir.chdir tmp do
+ Dir.chdir uncompress(tgz) do
+ yield prefix
+ #TODO copy changelog or CHANGES file to pkg root,
+ #TODO maybe README, etc. to versioned root
+ end
+ end
+ ensure
+ FileUtils.rm_rf tmp
+ end
+
+ # stay in appsupport in case any odd files gets created etc.
+ `#{$cellar}/homebrew/brew ln #{prefix}` if prefix.exist?
+
+ puts "#{prefix}: "+`find #{prefix} | wc -l`.strip+' files, '+`du -hd0 #{prefix} | cut -d"\t" -f1`.strip
+ end
+ end
+
+ def version
+ @version
+ end
+ def name
+ @name
+ end
+
+protected
+ def fetch
+ tgz=File.expand_path File.basename(@url)
+ `curl -LOA "#{$agent}" "#{@url}"` unless File.exists? tgz
+ 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['*']
+ raise "Empty tar!" if entries.nil? or entries.length == 0
+ raise "Too many folders in uncompressed result. You need to reimplement the Recipe.uncompress function." if entries.length > 1
+ return entries.first
+ end
+
+private
+ def method_added(method)
+ raise 'You cannot override Formula.brew' if method == 'brew'
+ end
+end
+
+
+def inreplace(path, before, after)
+ # we're not using Ruby because the perl script is more concise
+ `perl -pi -e "s|#{before}|#{after}|g" "#{path}"`
+end
+
+
+########################################################################script
+if $0 == __FILE__
+ d=$cellar.parent+'bin'
+ d.mkpath unless d.exist?
+ (d+'brew').make_symlink $cellar+'homebrew'+'brew'
+end \ No newline at end of file