1 | # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4 |
---|
2 | |
---|
3 | PortSystem 1.0 |
---|
4 | PortGroup select 1.0 |
---|
5 | PortGroup compiler_blacklist_versions 1.0 |
---|
6 | |
---|
7 | name gcc6 |
---|
8 | subport libgcc {} |
---|
9 | |
---|
10 | epoch 2 |
---|
11 | version 6.3.0 |
---|
12 | if {${name} eq ${subport}} { |
---|
13 | revision 2 |
---|
14 | } |
---|
15 | platforms darwin |
---|
16 | categories lang |
---|
17 | maintainers nomaintainer |
---|
18 | # an exception in the license allows dependents to not be GPL |
---|
19 | license {GPL-3+ Permissive} |
---|
20 | description The GNU compiler collection |
---|
21 | long_description The GNU compiler collection, including front ends for \ |
---|
22 | C, C++, Objective-C, Objective-C++, and Fortran. |
---|
23 | |
---|
24 | homepage http://gcc.gnu.org/ |
---|
25 | master_sites ftp://ftp.funet.fi/pub/mirrors/sources.redhat.com/pub/gcc/releases/gcc-${version}/ \ |
---|
26 | ftp://ftp.gwdg.de/pub/linux/gcc/releases/gcc-${version}/ \ |
---|
27 | ftp://gcc.ftp.nluug.nl/mirror/languages/gcc/releases/gcc-${version}/ \ |
---|
28 | ftp://gcc.gnu.org/pub/gcc/releases/gcc-${version}/ \ |
---|
29 | gnu:gcc/gcc-${version} |
---|
30 | |
---|
31 | distname gcc-${version} |
---|
32 | use_bzip2 yes |
---|
33 | |
---|
34 | checksums rmd160 38d297e66ff27786f52ccc2b3a006cd1b056b0f7 \ |
---|
35 | sha256 f06ae7f3f790fbf0f018f6d40e844451e6bc3b7bc96e128e63b09825c1f8b29f |
---|
36 | |
---|
37 | depends_lib port:cctools \ |
---|
38 | port:gmp \ |
---|
39 | path:lib/pkgconfig/isl.pc:isl \ |
---|
40 | port:ld64 \ |
---|
41 | path:lib/libgcc/libgcc_s.1.dylib:libgcc \ |
---|
42 | port:libiconv \ |
---|
43 | port:libmpc \ |
---|
44 | port:mpfr |
---|
45 | |
---|
46 | depends_skip_archcheck-append gcc_select ld64 cctools |
---|
47 | license_noconflict gmp mpfr ppl libmpc |
---|
48 | |
---|
49 | set major [lindex [split ${version} .-] 0] |
---|
50 | |
---|
51 | platform darwin { |
---|
52 | configure.pre_args-append --build=${build_arch}-apple-darwin${os.major} |
---|
53 | |
---|
54 | # see https://gcc.gnu.org/ml/gcc-patches/2012-05/msg00672.html |
---|
55 | patchfiles-append patch-float128.diff |
---|
56 | |
---|
57 | # Tiger intel sysconf fix |
---|
58 | patchfiles-append patch-libcilkrts-runtime-sysdep-tigerfix.diff |
---|
59 | } |
---|
60 | |
---|
61 | configure.dir ${workpath}/build |
---|
62 | configure.cmd ${worksrcpath}/configure |
---|
63 | configure.args --enable-languages=c,c++,objc,obj-c++,lto,fortran \ |
---|
64 | --libdir=${prefix}/lib/${name} \ |
---|
65 | --includedir=${prefix}/include/${name} \ |
---|
66 | --infodir=${prefix}/share/info \ |
---|
67 | --mandir=${prefix}/share/man \ |
---|
68 | --datarootdir=${prefix}/share/gcc-${major} \ |
---|
69 | --with-local-prefix=${prefix} \ |
---|
70 | --with-system-zlib \ |
---|
71 | --disable-nls \ |
---|
72 | --program-suffix=-mp-${major} \ |
---|
73 | --with-gxx-include-dir=${prefix}/include/${name}/c++/ \ |
---|
74 | --with-gmp=${prefix} \ |
---|
75 | --with-mpfr=${prefix} \ |
---|
76 | --with-mpc=${prefix} \ |
---|
77 | --with-isl=${prefix} \ |
---|
78 | --enable-stage1-checking \ |
---|
79 | --disable-multilib \ |
---|
80 | --enable-lto \ |
---|
81 | --enable-libstdcxx-time \ |
---|
82 | --with-build-config=bootstrap-debug \ |
---|
83 | --with-as=${prefix}/bin/as \ |
---|
84 | --with-ld=${prefix}/bin/ld \ |
---|
85 | --with-ar=${prefix}/bin/ar \ |
---|
86 | --with-bugurl=https://trac.macports.org/newticket |
---|
87 | |
---|
88 | configure.env-append \ |
---|
89 | AR_FOR_TARGET=${prefix}/bin/ar \ |
---|
90 | AS_FOR_TARGET=${prefix}/bin/as \ |
---|
91 | LD_FOR_TARGET=${prefix}/bin/ld \ |
---|
92 | NM_FOR_TARGET=${prefix}/bin/nm \ |
---|
93 | OBJDUMP_FOR_TARGET=${prefix}/bin/objdump \ |
---|
94 | RANLIB_FOR_TARGET=${prefix}/bin/ranlib \ |
---|
95 | STRIP_FOR_TARGET=${prefix}/bin/strip \ |
---|
96 | OTOOL=${prefix}/bin/otool \ |
---|
97 | OTOOL64=${prefix}/bin/otool |
---|
98 | |
---|
99 | pre-configure { |
---|
100 | configure.args-append --with-pkgversion="MacPorts ${name} ${version}_${revision}${portvariants}" |
---|
101 | |
---|
102 | if {${configure.sdkroot} ne ""} { |
---|
103 | # We should be using --with-build-sysroot here. Using --with-sysroot |
---|
104 | # changes the behavior of the installed gcc to look in that sysroot |
---|
105 | # by default instead of /. Using --with-build-sysroot is supposed |
---|
106 | # to be used during the build but not impact the installed product. |
---|
107 | # Unfortunately, the build fails because the value doesn't get |
---|
108 | # plumbed everywhere it is supposed to. |
---|
109 | # |
---|
110 | # https://trac.macports.org/ticket/53726 |
---|
111 | # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79885 |
---|
112 | # |
---|
113 | # Note that macports toolchains will fail to compile gcc unless |
---|
114 | # the DevSDK is installed due to another gcc build system bug: |
---|
115 | # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80203 |
---|
116 | configure.args-append --with-sysroot="${configure.sdkroot}" |
---|
117 | } |
---|
118 | |
---|
119 | # TODO: Remove when base automatically creates configure.dir (2.2.1?). |
---|
120 | file mkdir ${configure.dir} |
---|
121 | } |
---|
122 | |
---|
123 | # http://trac.macports.org/ticket/29067 |
---|
124 | compiler.blacklist-append gcc-4.0 |
---|
125 | |
---|
126 | # http://trac.macports.org/ticket/29104 |
---|
127 | compiler.blacklist-append {llvm-gcc-4.2 < 2336.1} |
---|
128 | |
---|
129 | # https://trac.macports.org/ticket/47996 |
---|
130 | compiler.blacklist-append {clang < 300} |
---|
131 | |
---|
132 | # "-stdlib" would be passed on to the bootstrap compiler if present |
---|
133 | configure.cxx_stdlib |
---|
134 | |
---|
135 | build.dir ${configure.dir} |
---|
136 | build.target bootstrap-lean |
---|
137 | |
---|
138 | #KEN - for Darwin 8 intel |
---|
139 | # build.pre_args BOOT_CFLAGS=" -g -O2 -mmacosx-version-min=10.4 -Wl,-read_only_relocs,suppress" CFLAGS_FOR_TARGET=" -g -O2 -pipe -Os -mmacosx-version-min=10.4 -Wl,-read_only_relocs,suppress" CXXFLAGS_FOR_TARGET=" -g -O2 -pipe -Os -mmacosx-version-min=10.4 -Wl,-read_only_relocs,suppress" |
---|
140 | use_parallel_build yes |
---|
141 | |
---|
142 | destroot.target install install-info-host |
---|
143 | |
---|
144 | if {${subport} eq "libgcc"} { |
---|
145 | conflicts libgcc-devel |
---|
146 | |
---|
147 | # http://trac.macports.org/ticket/35770 |
---|
148 | # http://trac.macports.org/ticket/38814 |
---|
149 | # While there can be multiple versions of these runtimes in a single |
---|
150 | # process, it is not possible to pass objects between different versions, |
---|
151 | # so we simplify this by having the libgcc port provide the newest version |
---|
152 | # of these runtimes for all versions of gcc to use. |
---|
153 | # |
---|
154 | # If there is a binary incompatible change to the runtime in a future |
---|
155 | # version of gcc, then the latest version of gcc to provide a given ABI |
---|
156 | # version should continue to provide a subport for that and older gcc |
---|
157 | # versions. |
---|
158 | |
---|
159 | depends_lib-delete path:lib/libgcc/libgcc_s.1.dylib:libgcc |
---|
160 | |
---|
161 | configure.args-delete --libdir=${prefix}/lib/${name} |
---|
162 | configure.args-append --libdir=${prefix}/lib/libgcc |
---|
163 | |
---|
164 | |
---|
165 | # TODO: Possibly disable bootstrap with appropriate configure flags. |
---|
166 | # the problem is that libstdc++'s configure script tests for tls support |
---|
167 | # using the running compiler (not gcc for which libstdc++ is being built). |
---|
168 | # Thus when we build with clang, we get a mismatch |
---|
169 | # http://trac.macports.org/ticket/36116 |
---|
170 | #compiler.blacklist-append {clang < 425} |
---|
171 | #configure.args-append --disable-bootstrap |
---|
172 | #build.target all |
---|
173 | |
---|
174 | post-destroot { |
---|
175 | file mkdir ${destroot}${prefix}/lib/libgcc.merged |
---|
176 | |
---|
177 | # Note that we really don't want to include libgcc_ext.10.[45].dylib here, but install_name_tool |
---|
178 | # doesn't know how to change the id of stubs, and it's easier than recreating them for each |
---|
179 | # gcc port. |
---|
180 | set dylibs {libgcc_ext.10.4.dylib libgcc_ext.10.5.dylib libgcc_s.1.dylib libgfortran.3.dylib libquadmath.0.dylib libstdc++.6.dylib libobjc-gnu.4.dylib libgomp.1.dylib libitm.1.dylib libssp.0.dylib libasan.0.dylib libatomic.1.dylib} |
---|
181 | |
---|
182 | foreach dylib ${dylibs} { |
---|
183 | # Different OS versions (eg: Leopard) or architectures (eg: PPC) don't produce all the dylibs |
---|
184 | # https://trac.macports.org/ticket/40098 |
---|
185 | # https://trac.macports.org/ticket/40100 |
---|
186 | if {! [file exists ${destroot}${prefix}/lib/libgcc/${dylib}]} { |
---|
187 | continue |
---|
188 | } |
---|
189 | |
---|
190 | move ${destroot}${prefix}/lib/libgcc/${dylib} ${destroot}${prefix}/lib/libgcc.merged |
---|
191 | if {[variant_isset universal]} { |
---|
192 | foreach archdir [glob ${destroot}${prefix}/lib/libgcc/*/] { |
---|
193 | set archdir_nodestroot [string map "${destroot}/ /" ${archdir}] |
---|
194 | if {[file exists ${archdir}/${dylib}]} { |
---|
195 | system "install_name_tool -id ${prefix}/lib/libgcc/${dylib} ${archdir}/${dylib}" |
---|
196 | foreach link ${dylibs} { |
---|
197 | system "install_name_tool -change ${archdir_nodestroot}${link} ${prefix}/lib/libgcc/${link} ${archdir}/${dylib}" |
---|
198 | } |
---|
199 | system "lipo -create -output ${destroot}${prefix}/lib/libgcc.merged/${dylib}~ ${destroot}${prefix}/lib/libgcc.merged/${dylib} ${archdir}/${dylib} && mv ${destroot}${prefix}/lib/libgcc.merged/${dylib}~ ${destroot}${prefix}/lib/libgcc.merged/${dylib}" |
---|
200 | } |
---|
201 | } |
---|
202 | } |
---|
203 | |
---|
204 | # strip debug symbols to supress debugger warnings: |
---|
205 | # http://trac.macports.org/attachment/ticket/34831 |
---|
206 | if {! [string match *libgcc_ext* ${dylib}]} { |
---|
207 | system "strip -x ${destroot}${prefix}/lib/libgcc.merged/${dylib}" |
---|
208 | } |
---|
209 | } |
---|
210 | |
---|
211 | file delete -force ${destroot}${prefix}/bin |
---|
212 | file delete -force ${destroot}${prefix}/share |
---|
213 | file delete -force ${destroot}${prefix}/include |
---|
214 | file delete -force ${destroot}${prefix}/lib/libgcc |
---|
215 | file delete -force ${destroot}${prefix}/libexec |
---|
216 | |
---|
217 | move ${destroot}${prefix}/lib/libgcc.merged ${destroot}${prefix}/lib/libgcc |
---|
218 | |
---|
219 | # For binary compatibility with binaries that linked against the old libstdcxx port |
---|
220 | ln -s libgcc/libstdc++.6.dylib ${destroot}${prefix}/lib/libstdc++.6.dylib |
---|
221 | } |
---|
222 | } else { |
---|
223 | depends_run-append port:gcc_select |
---|
224 | |
---|
225 | post-destroot { |
---|
226 | file delete ${destroot}${prefix}/share/info/dir |
---|
227 | |
---|
228 | foreach file [glob ${destroot}${prefix}/share/{info,man/man7}/*] { |
---|
229 | set extension [file extension ${file}] |
---|
230 | set newfile [regsub "${extension}$" ${file} "-mp-${major}${extension}"] |
---|
231 | |
---|
232 | file rename ${file} ${newfile} |
---|
233 | } |
---|
234 | |
---|
235 | foreach dylib {libgcc_ext.10.4.dylib libgcc_ext.10.5.dylib libgcc_s.1.dylib libgfortran.3.dylib libquadmath.0.dylib libstdc++.6.dylib libobjc-gnu.4.dylib libgomp.1.dylib libitm.1.dylib libssp.0.dylib libasan.0.dylib libatomic.1.dylib} { |
---|
236 | # Different OS versions (eg: Leopard) or architectures (eg: PPC) don't produce all the dylibs |
---|
237 | # https://trac.macports.org/ticket/40098 |
---|
238 | # https://trac.macports.org/ticket/40100 |
---|
239 | if {[file exists ${destroot}${prefix}/lib/${name}/${dylib}]} { |
---|
240 | delete ${destroot}${prefix}/lib/${name}/${dylib} |
---|
241 | ln -s ${prefix}/lib/libgcc/${dylib} ${destroot}${prefix}/lib/${name}/${dylib} |
---|
242 | } |
---|
243 | |
---|
244 | if {[variant_isset universal]} { |
---|
245 | foreach archdir [glob ${destroot}${prefix}/lib/${name}/*/] { |
---|
246 | if {[file exists ${archdir}/${dylib}]} { |
---|
247 | delete ${archdir}/${dylib} |
---|
248 | ln -s ${prefix}/lib/libgcc/${dylib} ${archdir}/${dylib} |
---|
249 | } |
---|
250 | } |
---|
251 | } |
---|
252 | } |
---|
253 | } |
---|
254 | |
---|
255 | select.group gcc |
---|
256 | select.file ${filespath}/mp-${name} |
---|
257 | |
---|
258 | } |
---|
259 | |
---|
260 | #KEN |
---|
261 | variant usegcc4abi description {default to gcc4-compatible ABI} { |
---|
262 | configure.args-append --with-default-libstdcxx-abi=gcc4-compatible |
---|
263 | } |
---|
264 | |
---|
265 | platform powerpc { |
---|
266 | configure.universal_archs ppc ppc64 |
---|
267 | } |
---|
268 | platform i386 { |
---|
269 | configure.universal_archs i386 x86_64 |
---|
270 | } |
---|
271 | variant universal { |
---|
272 | configure.args-delete --disable-multilib |
---|
273 | } |
---|
274 | # the generated compiler doesn't accept -arch |
---|
275 | configure.env-append \ |
---|
276 | CPP="${configure.cc} -E" \ |
---|
277 | CXXCPP="${configure.cxx} -E" |
---|
278 | build.env-append \ |
---|
279 | CPP="${configure.cc} -E" \ |
---|
280 | CXXCPP="${configure.cxx} -E" |
---|
281 | configure.cc-append [get_canonical_archflags] |
---|
282 | configure.cc_archflags |
---|
283 | configure.cxx-append ${configure.cxx_archflags} |
---|
284 | configure.cxx_archflags |
---|
285 | configure.objc_archflags |
---|
286 | configure.ld_archflags |
---|
287 | configure.universal_cflags |
---|
288 | configure.universal_cxxflags |
---|
289 | configure.universal_ldflags |
---|
290 | configure.universal_args |
---|
291 | |
---|
292 | livecheck.type regex |
---|
293 | livecheck.url http://ftp.gnu.org/gnu/gcc/ |
---|
294 | livecheck.regex gcc-(${major}\\.\[0-9.\]+)/ |
---|