From 140bfc5592bea6837925e965b9d675094c659a5f Mon Sep 17 00:00:00 2001 From: Max Howell Date: Wed, 12 Aug 2009 13:43:51 +0100 Subject: [PATCH] brew diy command Automagically determines prefix to install to for DIY installations. README amended. --- Library/Contributions/brew_bash_completion.sh | 2 +- Library/Homebrew/brew.h.rb | 18 ++++++++++++++++++ README | 9 +++++++-- bin/brew | 4 ++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Library/Contributions/brew_bash_completion.sh b/Library/Contributions/brew_bash_completion.sh index f33204d369..7f03523fe1 100644 --- a/Library/Contributions/brew_bash_completion.sh +++ b/Library/Contributions/brew_bash_completion.sh @@ -15,7 +15,7 @@ _brew_to_completion() prev="${COMP_WORDS[COMP_CWORD-1]}" # We only complete unabbreviated commands... - actions="edit homepage info install list link make uninstall" + actions="diy edit homepage info install list link make uninstall" # Subcommand list if [[ ( ${COMP_CWORD} -eq 1 ) && ( ${COMP_WORDS[0]} == brew ) ]] ; then diff --git a/Library/Homebrew/brew.h.rb b/Library/Homebrew/brew.h.rb index f3dee102aa..9f981f1168 100644 --- a/Library/Homebrew/brew.h.rb +++ b/Library/Homebrew/brew.h.rb @@ -186,6 +186,24 @@ def prune end +def diy + path=Pathname.getwd + version=path.version + path.basename.to_s =~ /(.*?)-?#{version}/ + name=$1 + + raise "Couldn't determine version, try --set-version" if version.nil? or version.empty? + raise "Couldn't determine name, try --set-name" if name.nil? or name.empty? + + prefix=HOMEBREW_CELLAR+name+version + + if File.file? 'CMakeLists.txt' + "-DCMAKE_INSTALL_PREFIX=#{prefix}" + elsif File.file? 'Makefile.am' + "--prefix=#{prefix}" + end +end + ################################################################ class Cleaner class Cleaner def initialize f diff --git a/README b/README index e981eda098..8ff466ed1c 100644 --- a/README +++ b/README @@ -46,6 +46,11 @@ Here's why you may prefer Homebrew to the alternatives: make install brew ln wget + Or Homebrew can figure out the prefix: + + ./configure `brew diy` + cmake . `brew diy` + This means you can also install multiple versions of the same package and switch on demand. @@ -150,7 +155,7 @@ Update package list: cd /usr/local && git pull origin masterbrew [1] Delete a package: - brew rm wget OR rm -rf /usr/local/Cellar/wget && brew prune + brew rm wget OR rm -rf /usr/local/Cellar/wget && brew prune List all files in a package: brew list wget OR find /usr/local/Cellar/wget @@ -168,7 +173,7 @@ Show expensive packages: du -md1 /usr/local/Cellar View the packages brew has downloaded and cached: - ls `brew --cache` OR ls ~/Library/Caches/Homebrew + ls `brew --cache` OR ls ~/Library/Caches/Homebrew With Homebrew this is all Ruby. If you want to improve the package installation, amend the Ruby script. If you want to improve the brew command diff --git a/bin/brew b/bin/brew index 06c5a2cba2..575694fdb2 100755 --- a/bin/brew +++ b/bin/brew @@ -66,6 +66,7 @@ begin else Process.wait pid end + #FIXME I don't think $? represents the exit code from the child fork… exit! $? if $? != 0 # exception in other brew will be visible on screen end @@ -114,6 +115,9 @@ begin exec "mate", *ARGV.named.collect {|name| make name} end + when 'diy' + puts diy + when 'info', 'abv' if ARGV.named_empty? puts `ls #{HOMEBREW_CELLAR} | wc -l`.strip+" kegs, "+HOMEBREW_CELLAR.abv