aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisty De Meo2013-04-13 21:11:14 -0500
committerMisty De Meo2013-06-08 19:10:38 -0500
commit30c79ab65b7bf121cf80f8be051facf4e542c8b5 (patch)
treec1ed4367b2247775dbf98239a21dd7700444d080
parentaa866da68bab78a28081c67a42bf6dc14194d14e (diff)
downloadhomebrew-30c79ab65b7bf121cf80f8be051facf4e542c8b5.tar.bz2
Add :ld64 dependency
This allows formulae which won't build with Tiger's ld to conditionally request a dependency on the ld64 formula. This modifies the build environment appropriately, and will only be active on Tiger.
-rw-r--r--Library/Homebrew/dependency_collector.rb3
-rw-r--r--Library/Homebrew/extend/ENV.rb7
-rw-r--r--Library/Homebrew/requirements/ld64_dependency.rb11
-rw-r--r--Library/Homebrew/test/test_dependency_collector.rb10
4 files changed, 31 insertions, 0 deletions
diff --git a/Library/Homebrew/dependency_collector.rb b/Library/Homebrew/dependency_collector.rb
index 74f94dc63..539cd2f73 100644
--- a/Library/Homebrew/dependency_collector.rb
+++ b/Library/Homebrew/dependency_collector.rb
@@ -2,6 +2,7 @@ require 'dependency'
require 'dependencies'
require 'requirement'
require 'requirements'
+require 'requirements/ld64_dependency'
require 'set'
## A dependency is a formula that another formula needs to install.
@@ -95,6 +96,8 @@ class DependencyCollector
when :python then PythonInstalled.new(tags)
when :python2 then PythonInstalled.new("2", tags)
when :python3 then PythonInstalled.new("3", tags)
+ # Tiger's ld is too old to properly link some software
+ when :ld64 then LD64Dependency.new if MacOS.version < :leopard
else
raise "Unsupported special dependency #{spec}"
end
diff --git a/Library/Homebrew/extend/ENV.rb b/Library/Homebrew/extend/ENV.rb
index 35f14bf0d..db17f2255 100644
--- a/Library/Homebrew/extend/ENV.rb
+++ b/Library/Homebrew/extend/ENV.rb
@@ -375,6 +375,13 @@ module HomebrewEnvExtension
Hardware.processor_count
end
end
+
+ # ld64 is a newer linker provided for Xcode 2.5
+ def ld64
+ ld64 = Formula.factory('ld64')
+ self['LD'] = ld64.bin/'ld'
+ append "LDFLAGS", "-B#{ld64.bin.to_s+"/"}"
+ end
end
class << ENV
diff --git a/Library/Homebrew/requirements/ld64_dependency.rb b/Library/Homebrew/requirements/ld64_dependency.rb
new file mode 100644
index 000000000..28440321d
--- /dev/null
+++ b/Library/Homebrew/requirements/ld64_dependency.rb
@@ -0,0 +1,11 @@
+require 'dependency'
+
+# This special dependency ensures that the Tigerbrew ld64
+# formula is used as gcc's ld in place of the old version
+# that comes with the OS.
+class LD64Dependency < Dependency
+ def initialize(name='ld64', tags=[:build])
+ @env_proc = proc { ENV.ld64 }
+ super
+ end
+end
diff --git a/Library/Homebrew/test/test_dependency_collector.rb b/Library/Homebrew/test/test_dependency_collector.rb
index e780ed5a3..0b4c19ebf 100644
--- a/Library/Homebrew/test/test_dependency_collector.rb
+++ b/Library/Homebrew/test/test_dependency_collector.rb
@@ -111,6 +111,16 @@ class DependencyCollectorTests < Test::Unit::TestCase
assert_equal X11Dependency::Proxy.new(:libpng), @d.build(:libpng)
end
+ def test_ld64_dep_pre_leopard
+ MacOS.stubs(:version).returns(MacOS::Version.new(10.4))
+ assert_equal LD64Dependency.new, @d.build(:ld64)
+ end
+
+ def test_ld64_dep_leopard_or_newer
+ MacOS.stubs(:version).returns(MacOS::Version.new(10.5))
+ assert_nil @d.build(:ld64)
+ end
+
def test_raises_typeerror_for_unknown_classes
assert_raises(TypeError) { @d.add(Class.new) }
end