aboutsummaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorMax Howell2009-09-18 19:16:39 +0100
committerMax Howell2009-09-21 18:27:48 +0100
commit77dd27e8e6e9e2f31fc8ca90bb6d63399922d013 (patch)
tree95da1d90b212516c0e725fca444af4625d4e97f5 /bin
parenta793e3040513f72a5108944a8c3ee1cbfb37ebb2 (diff)
downloadbrew-77dd27e8e6e9e2f31fc8ca90bb6d63399922d013.tar.bz2
Dependency resolution with fancy syntax
Is it a DSL? No. But people call it that apparently. To add a dependency: class Doe <Formula depends_on 'ray' depends_on 'mee' => :optional depends_on 'far' => :recommended depends_on Sew.new end Sew would be a formula you have defined in this Formula file. This is useful, eg. see Python's formula. Formula specified in this fashion cannot be linked into the HOMEBREW_PREFIX, they are considered private libraries. This allows you to create custom installations that are very specific to your formula. More features to come, like specifying versions
Diffstat (limited to 'bin')
-rwxr-xr-xbin/brew23
1 files changed, 14 insertions, 9 deletions
diff --git a/bin/brew b/bin/brew
index bf3a449c2..722544615 100755
--- a/bin/brew
+++ b/bin/brew
@@ -38,6 +38,7 @@ unless system "which -s gcc-4.2" and $?.success?
abort "Sorry, Homebrew requires gcc 4.2, which is provided by Xcode 3.1"
end
+
begin
case ARGV.shift
when '--prefix' then puts HOMEBREW_PREFIX
@@ -104,7 +105,7 @@ begin
unless system "which #{ENV['CC'] or 'cc'} &> /dev/null" and $?.success?
raise "We cannot find a c compiler, have you installed the latest Xcode?"
end
- fae = ARGV.formulae.reject do |f|
+ formulae = ARGV.formulae.reject do |f|
if f.installed?
message = "Formula already installed: #{f.prefix}"
if ARGV.formulae.count > 1
@@ -115,20 +116,24 @@ begin
true
end
end
- exit 0 if fae.empty?
+ exit 0 if formulae.empty?
else
- fae=ARGV.formulae
+ formulae = ARGV.formulae
end
- # the resulting order will be optimal for super-deps and deps
- fae=expand_deps fae
+ deps = []
+ formulae.each { |f| deps += expand_deps f }
+ formulae = deps.reject { |f| f.installed? }
- require 'beer_events'
+ require 'set'
+ done = Set.new
+ require 'beer_events'
watch_out_for_spill do
- fae.each do |f|
- # we need to ensure a pristine ENV for each process or the formula
- # will start with the ENV from the previous build
+ formulae.each do |f|
+ next if done.include? f.class
+ done << f.class
+
pid=fork
if pid.nil?
exec __FILE__, "install-just-one", f.name, *ARGV.options