diff options
| author | samueljohn | 2012-02-26 21:04:15 +0100 |
|---|---|---|
| committer | Adam Vandenberg | 2012-06-24 19:11:06 -0700 |
| commit | 725feb3db1da1577a3e1b376934e16aedbd9ded9 (patch) | |
| tree | 442b4168dde06a09e242a0ab7d4204e274ad60ce /Library/Homebrew/extend | |
| parent | 3147dd134a6e919c974b4a8abc93338d489cc31a (diff) | |
| download | brew-725feb3db1da1577a3e1b376934e16aedbd9ded9.tar.bz2 | |
Core change: XCode only install, with CLT or both
Allow XCode without the Command Line Tools to
work with homebrew, so it's not necessary
to register an Apple Dev ID and/or go to the
XCode prefs and download the CLT. Yay!
Further, this commit allows to use the CLT
solely (without the need for XCode).
Saves quite some megs.
(Some furmulae require xcodebuild)
Of course XCode together with the CLT is still
fine and has been tested on 10.7 and 10.6
with Xcode 4 and Xcode 3.
Only on Lion or above, tell the user about the options,
which are
- Xcode without CLT
- CLT without Xcode
- both (ok, it's not directly stated, but implicit)
So if no Xcode is found and we are on Lion or above,
we don't fail but check for the CLTs now.
For older Macs, the old message that Xcode is needed
and the installer should be run is still displayed.
If the CLT are not found but Xcode is, then we
print out about the experimental status of this setup.
Closes Homebrew/homebrew#10510.
Signed-off-by: Adam Vandenberg <flangy@gmail.com>
Diffstat (limited to 'Library/Homebrew/extend')
| -rw-r--r-- | Library/Homebrew/extend/ENV.rb | 167 |
1 files changed, 113 insertions, 54 deletions
diff --git a/Library/Homebrew/extend/ENV.rb b/Library/Homebrew/extend/ENV.rb index 898da6237..ca0a51e99 100644 --- a/Library/Homebrew/extend/ENV.rb +++ b/Library/Homebrew/extend/ENV.rb @@ -32,8 +32,8 @@ module HomebrewEnvExtension unless self['CC'] @compiler = MacOS.default_compiler self.send @compiler - self['CC'] = '/usr/bin/cc' - self['CXX'] = '/usr/bin/c++' + self['CC'] = MacOS.locate("cc") + self['CXX'] = MacOS.locate("c++") self['OBJC'] = self['CC'] end @@ -42,6 +42,17 @@ module HomebrewEnvExtension # build more successfully because we are changing CC and many build systems # don't react properly to that. self['LD'] = self['CC'] + + # Add lib and include etc. from the current macosxsdk to compiler flags: + macosxsdk MacOS.version + + # For Xcode 4.3 (*without* the "Command Line Tools for Xcode") compiler and tools inside of Xcode: + if not MacOS.clt_installed? and MacOS.xcode_installed? and MacOS.xcode_version >= "4.3" + # Some tools (clang, etc.) are in the xctoolchain dir of Xcode + append 'PATH', "#{MacOS.xctoolchain_path}/usr/bin", ":" if MacOS.xctoolchain_path + # Others are now at /Applications/Xcode.app/Contents/Developer/usr/bin + append 'PATH', "#{MacOS.dev_tools_path}", ":" + end end def deparallelize @@ -86,7 +97,7 @@ module HomebrewEnvExtension end def gcc_4_0_1 - # we don't use xcrun because gcc 4.0 has not been provided since Xcode 4 + # we don't use locate because gcc 4.0 has not been provided since Xcode 4 self['CC'] = "#{MacOS.dev_tools_path}/gcc-4.0" self['LD'] = self['CC'] self['CXX'] = "#{MacOS.dev_tools_path}/g++-4.0" @@ -97,33 +108,6 @@ module HomebrewEnvExtension end alias_method :gcc_4_0, :gcc_4_0_1 - def xcrun tool - if File.executable? "/usr/bin/#{tool}" - "/usr/bin/#{tool}" - elsif not MacOS.xctools_fucked? and system "/usr/bin/xcrun -find #{tool} 1>/dev/null 2>&1" - # xcrun was provided first with Xcode 4.3 and allows us to proxy - # tool usage thus avoiding various bugs - "/usr/bin/xcrun #{tool}" - else - # otherwise lets try and figure it out ourselves - fn = "#{MacOS.dev_tools_path}/#{tool}" - if File.executable? fn - fn - else - # This is for the use-case where xcode-select is not set up with - # Xcode 4.3. The tools in Xcode 4.3 are split over two locations, - # usually xcrun would figure that out for us, but it won't work if - # xcode-select is not configured properly. - fn = "#{MacOS.xcode_prefix}/Toolchains/XcodeDefault.xctoolchain/usr/bin/#{tool}" - if File.executable? fn - fn - else - nil - end - end - end - end - # if your formula doesn't like CC having spaces use this def expand_xcrun self['CC'] =~ %r{/usr/bin/xcrun (.*)} @@ -139,9 +123,9 @@ module HomebrewEnvExtension # However they still provide a gcc symlink to llvm # But we don't want LLVM of course. - self['CC'] = xcrun "gcc-4.2" + self['CC'] = MacOS.locate "gcc-4.2" self['LD'] = self['CC'] - self['CXX'] = xcrun "g++-4.2" + self['CXX'] = MacOS.locate "g++-4.2" self['OBJC'] = self['CC'] unless self['CC'] @@ -149,7 +133,7 @@ module HomebrewEnvExtension self['LD'] = self['CC'] self['CXX'] = "#{HOMEBREW_PREFIX}/bin/g++-4.2" self['OBJC'] = self['CC'] - raise "GCC could not be found" if not File.exist? self['CC'] + raise "GCC could not be found" unless File.exist? self['CC'] end if not self['CC'] =~ %r{^/usr/bin/xcrun } @@ -163,18 +147,18 @@ module HomebrewEnvExtension alias_method :gcc_4_2, :gcc def llvm - self['CC'] = xcrun "llvm-gcc" + self['CC'] = MacOS.locate "llvm-gcc" self['LD'] = self['CC'] - self['CXX'] = xcrun "llvm-g++" + self['CXX'] = MacOS.locate "llvm-g++" self['OBJC'] = self['CC'] set_cpu_cflags 'core2 -msse4', :penryn => 'core2 -msse4.1', :core2 => 'core2', :core => 'prescott' @compiler = :llvm end def clang - self['CC'] = xcrun "clang" + self['CC'] = MacOS.locate "clang" self['LD'] = self['CC'] - self['CXX'] = xcrun "clang++" + self['CXX'] = MacOS.locate "clang++" self['OBJC'] = self['CC'] replace_in_cflags(/-Xarch_i386 (-march=\S*)/, '\1') # Clang mistakenly enables AES-NI on plain Nehalem @@ -238,39 +222,114 @@ Please take one of the following actions: end end - def osx_10_4 - self['MACOSX_DEPLOYMENT_TARGET']="10.4" + def remove_macosxsdk v=MacOS.version + # Clear all lib and include dirs from CFLAGS, CPPFLAGS, LDFLAGS that were + # previously added by macosxsdk + v = v.to_s remove_from_cflags(/ ?-mmacosx-version-min=10\.\d/) - append_to_cflags('-mmacosx-version-min=10.4') + self['MACOSX_DEPLOYMENT_TARGET'] = nil + remove 'CPPFLAGS', "-isystem #{HOMEBREW_PREFIX}/include" + remove 'LDFLAGS', "-L#{HOMEBREW_PREFIX}/lib" + sdk = MacOS.sdk_path(v) + unless sdk.nil? + self['SDKROOT'] = nil + remove 'CPPFLAGS', "-isysroot #{sdk}" + remove 'CPPFLAGS', "-isystem #{sdk}/usr/include" + remove 'CPPFLAGS', "-I#{sdk}/usr/include" + remove_from_cflags "-isystem #{sdk}/usr/include" + remove_from_cflags "-isysroot #{sdk}" + remove_from_cflags "-L#{sdk}/usr/lib" + remove_from_cflags "-I#{sdk}/usr/include" + remove 'LDFLAGS', "-L#{sdk}/usr/lib" + remove 'LDFLAGS', "-I#{sdk}/usr/include" + if HOMEBREW_PREFIX.to_s == '/usr/local' + self['CMAKE_PREFIX_PATH'] = nil + else + # It was set in setup_build_environment, so we have to restore it here. + self['CMAKE_PREFIX_PATH'] = "#{HOMEBREW_PREFIX}" + end + remove 'CMAKE_FRAMEWORK_PATH', "#{sdk}/System/Library/Frameworks" + end end - def osx_10_5 - self['MACOSX_DEPLOYMENT_TARGET']="10.5" - remove_from_cflags(/ ?-mmacosx-version-min=10\.\d/) - append_to_cflags('-mmacosx-version-min=10.5') + + def macosxsdk v=MacOS.version + # Sets all needed lib and include dirs to CFLAGS, CPPFLAGS, LDFLAGS. + remove_macosxsdk + # Allow cool style of ENV.macosxsdk 10.8 here (no "" :) + v = v.to_s + append_to_cflags("-mmacosx-version-min=#{v}") + self['MACOSX_DEPLOYMENT_TARGET'] = v + append 'CPPFLAGS', "-isystem #{HOMEBREW_PREFIX}/include" + prepend 'LDFLAGS', "-L#{HOMEBREW_PREFIX}/lib" + sdk = MacOS.sdk_path(v) + unless sdk.nil? + # Extra setup to support Xcode 4.3+ without CLT. + self['SDKROOT'] = sdk + # Teach the preprocessor and compiler (some don't respect CPPFLAGS) + # where system includes are: + append 'CPPFLAGS', "-isysroot #{sdk}" + append_to_cflags "-isysroot #{sdk}" + append 'CPPFLAGS', "-isystem #{sdk}/usr/include" + # Suggested by mxcl (https://github.com/mxcl/homebrew/pull/10510#issuecomment-4187996): + append_to_cflags "-isystem #{sdk}/usr/include" + # Some software needs this (e.g. python shows error: /usr/include/zlib.h: No such file or directory) + append 'CPPFLAGS', "-I#{sdk}/usr/include" + # Needed because CC passes this to the linker and some projects + # forget to use the LDFLAGS explicitly: + append_to_cflags "-L#{sdk}/usr/lib" + # And finally the "normal" things one expects for the CFLAGS and LDFLAGS: + append_to_cflags "-I#{sdk}/usr/include" + prepend 'LDFLAGS', "-L#{sdk}/usr/lib" + # Believe it or not, sometime only the LDFLAGS are used :/ + prepend 'LDFLAGS', "-I#{sdk}/usr/include" + # Needed to build cmake itself and perhaps some cmake projects: + append 'CMAKE_PREFIX_PATH', "#{sdk}/usr", ':' + append 'CMAKE_FRAMEWORK_PATH', "#{sdk}/System/Library/Frameworks", ':' + end end def minimal_optimization self['CFLAGS'] = self['CXXFLAGS'] = "-Os #{SAFE_CFLAGS_FLAGS}" + macosxsdk unless MacOS.clt_installed? end def no_optimization self['CFLAGS'] = self['CXXFLAGS'] = SAFE_CFLAGS_FLAGS + macosxsdk unless MacOS.clt_installed? end # Some configure scripts won't find libxml2 without help def libxml2 - append 'CPPFLAGS', '-I/usr/include/libxml2' + if MacOS.clt_installed? + append 'CPPFLAGS', '-I/usr/include/libxml2' + else + # Use the includes form the sdk + append 'CPPFLAGS', "-I#{MacOS.sdk_path}/usr/include/libxml2" + end end def x11 - opoo "You do not have X11 installed, this formula may not build." if not MacOS.x11_installed? - - # There are some config scripts (e.g. freetype) here that should go in the path - prepend 'PATH', '/usr/X11/bin', ':' - # CPPFLAGS are the C-PreProcessor flags, *not* C++! - append 'CPPFLAGS', '-I/usr/X11/include' - append 'LDFLAGS', '-L/usr/X11/lib' - # CMake ignores the variables above - append 'CMAKE_PREFIX_PATH', '/usr/X11', ':' + opoo "You do not have X11 installed, this formula may not build." unless MacOS.x11_installed? + + if MacOS.clt_installed? + # For Xcode < 4.3 clt_installed? is true. So here is the old style /usr/X11: + # There are some config scripts (e.g. freetype) here that should go in the path + # (note we don't use MacOS.sdk_path here, because there is no ./usr/bin in there) + prepend 'PATH', "/usr/X11/bin", ':' + # CPPFLAGS are the C-PreProcessor flags, *not* C++! + append 'CPPFLAGS', "-I/usr/X11/include" + # Even without Xcode or the CLTs, /usr/X11/lib is there + append 'LDFLAGS', "-L/usr/X11/lib" + else + # For Xcode 4.3 and above *without* CLT, we find the includes in the SDK: + # Only the SDK has got include files. (they are no longer in /usr/X11/include !) + # Todo: do we need to add cairo, fontconfig, GL, libpng15, pixman-1, VG, xcb, too? + append 'CFLAGS', "-I#{MacOS.sdk_path}/usr/X11/include" + append 'CPPFLAGS', "-I#{MacOS.sdk_path}/usr/X11/include" + append 'CPPFLAGS', "-I#{MacOS.sdk_path}/usr/X11/include/freetype2" + # The libs are still in /usr/X11/lib but to be consistent with the includes, we use the SDK, right? + append 'LDFLAGS', "-L#{MacOS.sdk_path}/usr/X11/lib" + append 'CMAKE_INCLUDE_PATH', "#{MacOS.sdk_path}/usr/X11/include", ':' + end end alias_method :libpng, :x11 |
