diff options
| author | Max Howell | 2009-09-18 19:16:39 +0100 |
|---|---|---|
| committer | Max Howell | 2009-09-21 18:27:48 +0100 |
| commit | 68108e109839a901313b9933cbb1e3202aed90cf (patch) | |
| tree | 124d204c43534f4e8171c5d278d4cb09d46f06a2 /Library/Homebrew/brew.h.rb | |
| parent | 0d1ec9641403ea2de9588ffdb22b68a23e6c2547 (diff) | |
| download | homebrew-68108e109839a901313b9933cbb1e3202aed90cf.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 'Library/Homebrew/brew.h.rb')
| -rw-r--r-- | Library/Homebrew/brew.h.rb | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/Library/Homebrew/brew.h.rb b/Library/Homebrew/brew.h.rb index 875f61be0..0d977ae95 100644 --- a/Library/Homebrew/brew.h.rb +++ b/Library/Homebrew/brew.h.rb @@ -144,31 +144,12 @@ def clean f end -# NOTE this is ugly code, and inefficient too, and can have infinite cycles -# I have no time currently to improve it, feel free to submit a more elegant -# solution. Thanks! --mxcl -def expand_deps fae +def expand_deps ff deps = [] - fae.each do |f| - case f.deps - when String, Array - f.deps.each do |name| - f = Formula.factory name - deps << expand_deps(f) if f.deps # hideous inefficient - deps << f unless f.installed? - end - when Hash - # TODO implement optional and recommended - names = [] - f.deps.each_value {|v| names << v} - ff=names.flatten.collect {|name| Formula.factory name} - deps << expand_deps(ff) - end - deps << f + ff.deps.collect do |f| + deps += expand_deps(Formula.factory(f)) end - - # TODO much more efficient to use a set and not recurse stuff already done - return deps.flatten.uniq + deps << ff end |
