diff options
| author | Jack Nagel | 2013-11-13 10:38:14 -0600 | 
|---|---|---|
| committer | Jack Nagel | 2013-11-13 10:38:14 -0600 | 
| commit | 2fb5ead38a7632ff6f941909474767883a9e0252 (patch) | |
| tree | a0d68b8b81609b978e494b75973f8d4cd0668622 /Library/Homebrew | |
| parent | c137f030bce74646416099e2c459ded6072e6c4f (diff) | |
| download | brew-2fb5ead38a7632ff6f941909474767883a9e0252.tar.bz2 | |
Prevent deps of build-time deps from leaking into the build environment
When decided what dependencies should be part of the build environment
(and have appropriate entries added to variables like PKG_CONFIG_PATH),
we select the entire dependency tree except for
 (1) inactive optional and recommended deps (2) indirect build-time deps
 (i.e., build-time deps of other deps)
There is a third category that sould be excluded: dependencies of direct
build-time deps. These are irrelevant to the build, and including them
can cause unexpected linkages.
Diffstat (limited to 'Library/Homebrew')
| -rwxr-xr-x | Library/Homebrew/build.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/dependency.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_dependency_expansion.rb | 13 | 
3 files changed, 22 insertions, 0 deletions
diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index 8a4267bac..e75a6841e 100755 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -100,6 +100,8 @@ class Build          Dependency.prune        elsif dep.build? && dependent != f          Dependency.prune +      elsif dep.build? +        Dependency.keep_but_prune_recursive_deps        end      end    end diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb index df22eed90..fda491b99 100644 --- a/Library/Homebrew/dependency.rb +++ b/Library/Homebrew/dependency.rb @@ -82,6 +82,8 @@ class Dependency            next []          when :skip            expand(dep.to_formula, &block) +        when :keep_but_prune_recursive_deps +          [dep]          else            expand(dep.to_formula, &block) << dep          end @@ -110,6 +112,11 @@ class Dependency        throw(:action, :skip)      end +    # Keep a dependency, but prune its dependencies +    def keep_but_prune_recursive_deps +      throw(:action, :keep_but_prune_recursive_deps) +    end +      def merge_repeats(deps)        grouped = deps.group_by(&:name) diff --git a/Library/Homebrew/test/test_dependency_expansion.rb b/Library/Homebrew/test/test_dependency_expansion.rb index 90d4dcc36..cf22b6170 100644 --- a/Library/Homebrew/test/test_dependency_expansion.rb +++ b/Library/Homebrew/test/test_dependency_expansion.rb @@ -95,4 +95,17 @@ class DependencyExpansionTests < Test::Unit::TestCase      assert_equal [@bar, @baz], deps    end + +  def test_keep_dep_but_prune_recursive_deps +    f = stub(:deps => [ +      build_dep(:foo, [:build], [@bar]), +      build_dep(:baz, [:build]), +    ]) + +    deps = Dependency.expand(f) do |dependent, dep| +      Dependency.keep_but_prune_recursive_deps if dep.build? +    end + +    assert_equal [@foo, @baz], deps +  end  end  | 
