1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
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 Boost < Formula
homepage 'http://www.boost.org'
url 'http://downloads.sourceforge.net/project/boost/boost/1.54.0/boost_1_54_0.tar.bz2'
sha1 '230782c7219882d0fab5f1effbe86edb85238bf4'
head 'http://svn.boost.org/svn/boost/trunk'
bottle do
cellar :any
sha1 '767a67f4400e5273db3443e10a6e07704b4cbd0f' => :mountain_lion
sha1 '5f487b4a1d131722dd673d7ee2de418adf3b5322' => :lion
sha1 'cedd9bd34e6dbebc073beeb12fb3aa7a3cb5ecb6' => :snow_leopard
end
env :userpaths
option :universal
option 'with-icu', 'Build regexp engine with icu support'
option 'with-c++11', 'Compile using Clang, std=c++11 and stdlib=libc++' if MacOS.version >= :lion
option 'without-single', 'Disable building single-threading variant'
option 'without-static', 'Disable building static library variant'
depends_on :python => :recommended
depends_on UniversalPython if build.universal? and build.with? "python"
depends_on "icu4c" if build.with? 'icu'
depends_on :mpi => [:cc, :cxx, :optional]
fails_with :llvm do
build 2335
cause "Dropped arguments to functions when linking with boost"
end
def patches
# upstream backported patches for 1.54.0: http://www.boost.org/patches
[
'http://www.boost.org/patches/1_54_0/001-coroutine.patch',
'http://www.boost.org/patches/1_54_0/002-date-time.patch',
'http://www.boost.org/patches/1_54_0/003-log.patch',
'http://www.boost.org/patches/1_54_0/004-thread.patch'
]
end
def pour_bottle?
# Don't use the bottle if there is a Homebrew python installed as users
# will probably want to link against that instead.
not Formula.factory('python').installed?
end
def install
# Adjust the name the libs are installed under to include the path to the
# Homebrew lib directory so executables will work when installed to a
# non-/usr/local location.
#
# otool -L `which mkvmerge`
# /usr/local/bin/mkvmerge:
# libboost_regex-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
# libboost_filesystem-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
# libboost_system-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
#
# becomes:
#
# /usr/local/bin/mkvmerge:
# /usr/local/lib/libboost_regex-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
# /usr/local/lib/libboost_filesystem-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
# /usr/local/lib/libboost_system-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
inreplace 'tools/build/v2/tools/darwin.jam', '-install_name "', "-install_name \"#{HOMEBREW_PREFIX}/lib/"
# boost will try to use cc, even if we'd rather it use, say, gcc-4.2
inreplace 'tools/build/v2/engine/build.sh', 'BOOST_JAM_CC=cc', "BOOST_JAM_CC=#{ENV.cc}"
inreplace 'tools/build/v2/engine/build.jam', 'toolset darwin cc', "toolset darwin #{ENV.cc}"
# 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'
end
# we specify libdir too because the script is apparently broken
bargs = ["--prefix=#{prefix}", "--libdir=#{lib}"]
bargs << "--with-toolset=clang" if build.with? "c++11"
if build.with? 'icu'
icu4c_prefix = Formula.factory('icu4c').opt_prefix
bargs << "--with-icu=#{icu4c_prefix}"
else
bargs << '--without-icu'
end
# The context library is implemented as x86_64 ASM, so it
# won't build on PPC or 32-bit builds
# see https://github.com/mxcl/homebrew/issues/17646
if Hardware::CPU.type == :ppc || Hardware::CPU.bits == 32 || build.universal?
bargs << "--without-libraries=context"
# The coroutine library depends on the context library.
bargs << "--without-libraries=coroutine"
end
# Boost.Log cannot be built using Apple GCC at the moment. Disabled
# on such systems.
bargs << "--without-libraries=log" if MacOS.version <= :snow_leopard
args = ["--prefix=#{prefix}",
"--libdir=#{lib}",
"-d2",
"-j#{ENV.make_jobs}",
"--layout=tagged",
"--user-config=user-config.jam",
"install"]
if build.include? 'without-single'
args << "threading=multi"
else
args << "threading=multi,single"
end
if build.include? 'without-static'
args << "link=shared"
else
args << "link=shared,static"
end
if MacOS.version >= :lion and build.with? 'c++11'
args << "toolset=clang" << "cxxflags=-std=c++11"
args << "cxxflags=-stdlib=libc++" << "cxxflags=-fPIC"
args << "cxxflags=-arch x86_64" if MacOS.prefer_64_bit? or build.universal?
args << "cxxflags=-arch i386" if !MacOS.prefer_64_bit? or build.universal?
args << "linkflags=-stdlib=libc++"
args << "linkflags=-headerpad_max_install_names"
args << "linkflags=-arch x86_64" if MacOS.prefer_64_bit? or build.universal?
args << "linkflags=-arch i386" if !MacOS.prefer_64_bit? or build.universal?
end
args << "address-model=32_64" << "architecture=x86" << "pch=off" if build.universal?
args << "--without-python" if build.without? 'python'
system "./bootstrap.sh", *bargs
system "./b2", *args
end
end
|