Last active
August 29, 2015 14:03
-
-
Save tdsmith/a5634504aee00dac9a44 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "formula" | |
class UniversalPython < Requirement | |
satisfy(:build_env => false) { archs_for_command("python").universal? } | |
def message; <<-EOS.undent | |
A universal build was requested, but Python is not a universal build | |
Boost compiles against the Python it finds in the path; if this Python | |
is not a universal build then linking will likely fail. | |
EOS | |
end | |
end | |
class UniversalPython3 < Requirement | |
satisfy(:build_env => false) { archs_for_command("python3").universal? } | |
def message; <<-EOS.undent | |
A universal build was requested, but Python 3 is not a universal build | |
Boost compiles against the Python 3 it finds in the path; if this Python | |
is not a universal build then linking will likely fail. | |
EOS | |
end | |
end | |
class BoostPython < Formula | |
homepage 'http://www.boost.org' | |
url 'https://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2' | |
sha1 'cef9a0cc7084b1d639e06cd3bc34e4251524c840' | |
head 'https://github.com/boostorg/boost.git' | |
env :userpaths | |
option :universal | |
option 'without-single', 'Disable building single-threading variant' | |
option 'without-static', 'Disable building static library variant' | |
option 'with-mpi', 'Build with MPI support' | |
option :cxx11 | |
depends_on :python => :recommended | |
depends_on :python3 => :optional | |
depends_on UniversalPython if build.universal? and build.with? "python" | |
depends_on UniversalPython3 if build.universal? and build.with? "python3" | |
boost_dep_flags = [] | |
boost_dep_flags << "with-mpi" if build.with? "mpi" | |
["single", "static"].each{ |opt| boost_dep_flags << "without-#{opt}" if build.without? opt } | |
["cxx11", "universal"].each { |opt| boost_dep_flags << opt if build.include? opt } | |
depends_on "boost" => boost_dep_flags | |
stable do | |
# Patches boost::atomic for LLVM 3.4 as it is used on OS X 10.9 with Xcode 5.1 | |
# https://github.com/Homebrew/homebrew/issues/27396 | |
# https://github.com/Homebrew/homebrew/pull/27436 | |
patch :p2 do | |
url "https://github.com/boostorg/atomic/commit/6bb71fdd.diff" | |
sha1 "ca8679011d5293a7fd02cb3b97dde3515b8b2b03" | |
end | |
patch :p2 do | |
url "https://github.com/boostorg/atomic/commit/e4bde20f.diff" | |
sha1 "b68f5536474c9f543879698299bd4975538a89eb" | |
end | |
# Patch fixes upstream issue reported here (https://svn.boost.org/trac/boost/ticket/9698). | |
# Will be fixed in Boost 1.56 and can be removed once that release is available. | |
# See this issue (https://github.com/Homebrew/homebrew/issues/30592) for more details. | |
patch :p2 do | |
url "https://github.com/boostorg/chrono/commit/143260d.diff" | |
sha1 "2600214608e7706116831d6ffc302d099ba09950" | |
end | |
# Patch boost::serialization for Clang | |
# https://svn.boost.org/trac/boost/ticket/8757 | |
patch :p1 do | |
url "https://gist.githubusercontent.com/philacs/375303205d5f8918e700/raw/d6ded52c3a927b6558984d22efe0a5cf9e59cd8c/0005-Boost.S11n-include-missing-algorithm.patch" | |
sha1 "a37552d48e5c1c0507ee9d48fb82a3fa5e3bc9fa" | |
end | |
end | |
fails_with :llvm do | |
build 2335 | |
cause "Dropped arguments to functions when linking with boost" | |
end | |
def install | |
# https://svn.boost.org/trac/boost/ticket/8841 | |
if build.with? 'mpi' and build.with? 'single' | |
raise <<-EOS.undent | |
Building MPI support for both single and multi-threaded flavors | |
is not supported. Please use '--with-mpi' together with | |
'--without-single'. | |
EOS | |
end | |
if build.cxx11? and build.with? 'mpi' and (build.with? 'python' \ | |
or build.with? 'python3') | |
raise <<-EOS.undent | |
Building MPI support for Python using C++11 mode results in | |
failure and hence disabled. Please don't use this combination | |
of options. | |
EOS | |
end | |
ENV.universal_binary if build.universal? | |
# Force boost to compile using the appropriate GCC version. | |
open("user-config.jam", "a") do |file| | |
file.write "using darwin : : #{ENV.cxx} ;\n" | |
file.write "using mpi ;\n" if build.with? 'mpi' | |
# Link against correct version of Python if python3 build was requested | |
if build.with? 'python3' | |
py3executable = `which python3`.strip | |
py3version = `python3 -c "import sys; print(sys.version[:3])"`.strip | |
py3prefix = `python3 -c "import sys; print(sys.prefix)"`.strip | |
file.write <<-EOS.undent | |
using python : #{py3version} | |
: #{py3executable} | |
: #{py3prefix}/include/python#{py3version}m | |
: #{py3prefix}/lib ; | |
EOS | |
end | |
end | |
# we specify libdir too because the script is apparently broken | |
bargs = ["--prefix=#{prefix}", "--libdir=#{lib}"] | |
bargs << "--with-libraries=python" | |
args = ["--prefix=#{prefix}", | |
"--libdir=#{lib}", | |
"-d2", | |
"-j#{ENV.make_jobs}", | |
"--layout=tagged", | |
"--user-config=user-config.jam"] | |
if build.with? "single" | |
args << "threading=multi,single" | |
else | |
args << "threading=multi" | |
end | |
if build.with? "static" | |
args << "link=shared,static" | |
else | |
args << "link=shared" | |
end | |
args << "address-model=32_64" << "architecture=x86" << "pch=off" if build.universal? | |
# Trunk starts using "clang++ -x c" to select C compiler which breaks C++11 | |
# handling using ENV.cxx11. Using "cxxflags" and "linkflags" still works. | |
if build.cxx11? | |
args << "cxxflags=-std=c++11" | |
if ENV.compiler == :clang | |
args << "cxxflags=-stdlib=libc++" << "linkflags=-stdlib=libc++" | |
end | |
end | |
system "./bootstrap.sh", *bargs | |
system "./b2", *args | |
lib.install Dir["stage/lib/*"] | |
# already installed by the boost bottle | |
# (prefix/'include/boost/python').install Dir["boost/python/*"] | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment