-
Notifications
You must be signed in to change notification settings - Fork 0
/
boost-libstdcxx.rb
158 lines (125 loc) · 4.53 KB
/
boost-libstdcxx.rb
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
155
156
157
158
require 'formula'
class BoostLibstdcxx < Formula
homepage 'http://www.boost.org'
url 'https://downloads.sourceforge.net/project/boost/boost/1.56.0/boost_1_56_0.tar.bz2'
sha256 '134732acaf3a6e7eba85988118d943f0fa6b7f0850f65131fff89823ad30ff1d'
head 'https://github.com/boostorg/boost.git'
bottle do
cellar :any
sha256 "68c626ad06f13687ff529174ddfef2ecf91d6e22" => :mavericks
sha256 "cb657544a41c58c7422c16e46b96341e8fe9297d" => :mountain_lion
sha256 "e23c15575d465efa43ffe7fcfce068e2fe5d4073" => :lion
end
env :userpaths
option :universal
option 'with-icu', 'Build regexp engine with icu support'
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
if build.with? 'icu'
if build.cxx11?
depends_on 'icu4c' => 'c++11'
else
depends_on 'icu4c'
end
end
if build.with? 'mpi'
if build.cxx11?
depends_on 'open-mpi' => 'c++11'
else
depends_on :mpi => [:cc, :cxx, :optional]
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
ENV.universal_binary if build.universal?
# Force boost to compile with the desired compiler
open("user-config.jam", "a") do |file|
file.write "using darwin : : #{ENV.cxx} ;\n"
file.write "using mpi ;\n" if build.with? 'mpi'
end
# libdir should be set by --prefix but isn't
bootstrap_args = ["--prefix=#{prefix}", "--libdir=#{lib}"]
if build.with? 'icu'
icu4c_prefix = Formula['icu4c'].opt_prefix
bootstrap_args << "--with-icu=#{icu4c_prefix}"
else
bootstrap_args << '--without-icu'
end
# Handle libraries that will not be built.
without_libraries = ["python"]
# The context library is implemented as x86_64 ASM, so it
# won't build on PPC or 32-bit builds
# see https://github.com/Homebrew/homebrew/issues/17646
if Hardware::CPU.ppc? || Hardware::CPU.is_32_bit? || build.universal?
without_libraries << "context"
# The coroutine library depends on the context library.
without_libraries << "coroutine"
end
# Boost.Log cannot be built using Apple GCC at the moment. Disabled
# on such systems.
without_libraries << "log" if ENV.compiler == :gcc || ENV.compiler == :llvm
without_libraries << "mpi" if build.without? 'mpi'
bootstrap_args << "--without-libraries=#{without_libraries.join(',')}"
# layout should be synchronized with boost-python
args = ["--prefix=#{prefix}",
"--libdir=#{lib}",
"-d2",
"-j#{ENV.make_jobs}",
"--layout=tagged",
"--user-config=user-config.jam",
"install"]
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=libstdc++" << "linkflags=-stdlib=libstdc++"
end
end
# args << "cxxflags=-stdlib=libstdc++" << "linkflags=-stdlib=libstdc++"
args << "cxxflags=-arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5" << "linkflags=-arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5"
system "./bootstrap.sh", *bootstrap_args
system "./b2", *args
end
def caveats
s = ''
# ENV.compiler doesn't exist in caveats. Check library availability
# instead.
if Dir["#{lib}/libboost_log*"].empty?
s += <<-EOS.undent
Building of Boost.Log is disabled because it requires newer GCC or Clang.
EOS
end
if Hardware::CPU.ppc? || Hardware::CPU.is_32_bit? || build.universal?
s += <<-EOS.undent
Building of Boost.Context and Boost.Coroutine is disabled as they are
only supported on x86_64.
EOS
end
s
end
end