mirror of
https://github.com/macports/macports-ports.git
synced 2026-07-12 18:20:25 -07:00
228 lines
9.4 KiB
Tcl
228 lines
9.4 KiB
Tcl
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
|
|
|
|
PortSystem 1.0
|
|
PortGroup active_variants 1.1
|
|
|
|
name libcxx
|
|
epoch 1
|
|
version 5.0.1
|
|
revision 5
|
|
categories lang
|
|
license MIT NCSA
|
|
maintainers {jeremyhu @jeremyhu}
|
|
description libc++ is a new implementation of the C++ standard library with support for C++11 and portions of C++14.
|
|
long_description {*}${description} \
|
|
Because objects cannot be passed between different versions of the C++ runtime, this port must \
|
|
replace the host version in order to be used. On Snow Leopard and earlier, this is done \
|
|
automatically because there is no existing host version of this library. On Lion and later, \
|
|
users must build the port with +replacemnt_libcxx and install the root manually if they wish \
|
|
to replace the existing host implementation.
|
|
|
|
homepage https://libcxx.llvm.org/
|
|
|
|
master_sites https://releases.llvm.org/${version}/
|
|
dist_subdir llvm
|
|
|
|
if {[vercmp [macports_version] >= 2.12.99]} {
|
|
extract.add_deps no
|
|
}
|
|
depends_extract port:xz-bootstrap
|
|
depends_skip_archcheck-append\
|
|
xz-bootstrap
|
|
extract.suffix .tar.xz
|
|
extract.cmd ${prefix}/libexec/xz-bootstrap/bin/xz
|
|
|
|
set libcxxabi_distname libcxxabi-${version}.src
|
|
set libcxx_distname libcxx-${version}.src
|
|
|
|
distfiles ${libcxxabi_distname}${extract.suffix} \
|
|
${libcxx_distname}${extract.suffix}
|
|
|
|
checksums libcxxabi-5.0.1.src.tar.xz \
|
|
rmd160 93b74a0644c1afd565938fba5e21b200b206c72a \
|
|
sha256 5a25152cb7f21e3c223ad36a1022faeb8a5ac27c9e75936a5ae2d3ac48f6e854 \
|
|
size 521504 \
|
|
libcxx-5.0.1.src.tar.xz \
|
|
rmd160 1e5a22e62515382488f232039e31f0b12c08ca4f \
|
|
sha256 fa8f99dd2bde109daa3276d529851a3bce5718d46ce1c5d0806f46caa3e57c00 \
|
|
size 1527852
|
|
|
|
use_configure no
|
|
|
|
set roots_path ${prefix}/var/system_roots/
|
|
set root_name ${name}-${version}-${revision}
|
|
|
|
set libcxxabi_worksrcpath [file join ${workpath} ${libcxxabi_distname}]
|
|
set libcxx_worksrcpath [file join ${workpath} ${libcxx_distname}]
|
|
|
|
platform darwin {
|
|
|
|
if {${os.major} < 11} {
|
|
post-activate {
|
|
set dirs /
|
|
if {${os.subplatform} eq "macosx"} {
|
|
if {${os.major} == 8} {
|
|
# The Tiger SDK has an u after the version number,
|
|
set sdk_name MacOSX10.4u.sdk
|
|
} else {
|
|
set sdk_name MacOSX${macos_version_major}.sdk
|
|
}
|
|
lappend dirs ${developer_dir}/SDKs/${sdk_name}
|
|
}
|
|
foreach d ${dirs} {
|
|
system -W ${d} "tar xzf ${roots_path}/${root_name}.tgz"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
variant replacemnt_libcxx description {EXPERTS ONLY: Build a replacement libcxxabi and libcxx even if it is already part of the base OS.} {}
|
|
|
|
if {${os.major} < 11 || [variant_isset replacemnt_libcxx]} {
|
|
|
|
supported_archs i386 x86_64
|
|
|
|
if {${build_arch} in "i386 x86_64"} {
|
|
variant universal {}
|
|
default_variants +universal
|
|
configure.universal_archs i386 x86_64
|
|
}
|
|
|
|
# Use clang-11-bootstrap as bootstrap compiler
|
|
depends_build-append port:clang-11-bootstrap
|
|
depends_skip_archcheck-append \
|
|
clang-11-bootstrap
|
|
configure.cc ${prefix}/libexec/clang-11-bootstrap/bin/clang
|
|
configure.cxx ${prefix}/libexec/clang-11-bootstrap/bin/clang++
|
|
configure.cxx_stdlib
|
|
configure.compiler.add_deps \
|
|
no
|
|
|
|
if {${os.major} < 11} {
|
|
variant emulated_tls description {build libcxxabi and libcxx with support for emulated thread_local storage} {}
|
|
|
|
default_variants-append +emulated_tls
|
|
}
|
|
|
|
post-extract {
|
|
# delete cxa_noexception.cpp as we're not using the cmake build system
|
|
# cmake would choose either cxa_exceptions or cxa_noexceptions
|
|
# but the buildit script just builds every file in the src directory and you can't have both
|
|
delete ${libcxxabi_worksrcpath}/src/cxa_noexception.cpp
|
|
|
|
if {![variant_isset emulated_tls]} {
|
|
# cmake doesn't include this for darwin builds, so nuke it here as well
|
|
# however, this file is essential for emulated-tls to function
|
|
delete ${libcxxabi_worksrcpath}/src/cxa_thread_atexit.cpp
|
|
} else {
|
|
require_active_variants \
|
|
port:clang-11-bootstrap emulated_tls
|
|
}
|
|
|
|
file mkdir ${workpath}/build
|
|
file copy ${filespath}/Makefile ${workpath}/build
|
|
}
|
|
|
|
patch.dir ${workpath}
|
|
|
|
# patches for libc++abi buildit
|
|
patchfiles-append \
|
|
0001-libcxxabi-Update-buildit-script-to-read-EXTRA_LDFLAGS-from-the.patch \
|
|
0002-libcxxabi-Define-_LIBCPP_BUILDING_LIBRARY-during-build-to-supp.patch \
|
|
0003-libcxxabi-buildit-Use-undefined-dynamic_lookup-when-linking.patch \
|
|
0004-libcxxabi-buildit-add-nostdinc++.diff
|
|
|
|
if {[variant_isset emulated_tls]} {
|
|
# add emutls.c support for cxa_thread_atexit directly into libcxxabi
|
|
# these files were taken from clang-7.0's compiler-rt subproject
|
|
patchfiles-append \
|
|
0005-libcxxabi-add-emutls.patch \
|
|
0006-libcxxabi-buildit-build-emutls.patch \
|
|
0007-libcxxabi-include-expose-cxa-thread-atexit.patch \
|
|
0008-libcxxabi-cxa-thread-atexit-no-weak-atexit-impl.patch
|
|
}
|
|
|
|
# restore libc++ buildit and patches for libc++ buildit
|
|
patchfiles-append \
|
|
1001-Revert-Remove-the-buildit-and-testit-scripts-they-ha.patch \
|
|
1002-libcxx-buildit-build-fix-for-Leopard.patch \
|
|
1003-libcxx-buildit-Set-compatibility-version-to-RC_ProjectSourc.patch \
|
|
1004-libcxx-MacPorts-Use-LIBCXXABI_PATH-for-path-to-build-time-l.patch \
|
|
1005-libcxx-buildit-Fix-CFLAGS-for-Leopard-and-Snow-Leopard-to-i.patch
|
|
|
|
# patches for libc++ include files
|
|
patchfiles-append \
|
|
2001-Fix-local-and-iterator-when-building-with-Lion-and-n.patch \
|
|
2002-Fix-missing-long-long-math-prototypes-when-using-the.patch \
|
|
2003-implement-atomic-using-mutex-lock_guard-for-64b-ops-.patch \
|
|
2004-libcxx-includes-Fix-up-thread-constexpr-for-GCC-where-the-PPC-port-cant-do-longlong-constexpr.patch
|
|
|
|
post-patch {
|
|
system "chmod 755 ${libcxx_worksrcpath}/lib/buildit"
|
|
|
|
|
|
platform darwin 8 {
|
|
foreach header [glob ${workpath}/libcxx-${version}.src/include/*] {
|
|
reinplace "s|Availability.h|AvailabilityMacros.h|g" ${header}
|
|
}
|
|
}
|
|
|
|
if {${os.major} < 10} {
|
|
# debug symbols produced by clang-11-bootstrap cause a Bus error inside ld on Leopard
|
|
reinplace "s|-c -g|-c|g" \
|
|
${libcxx_worksrcpath}/lib/buildit \
|
|
${libcxxabi_worksrcpath}/lib/buildit
|
|
}
|
|
}
|
|
|
|
build.dir ${workpath}/build
|
|
build.env-append \
|
|
CC=${configure.cc} \
|
|
CXX=${configure.cxx} \
|
|
RC_XBS=1 \
|
|
RC_ProjectSourceVersion=${version} \
|
|
"RC_CFLAGS=[get_canonical_archflags] -I${libcxxabi_worksrcpath}/include -I${libcxx_worksrcpath}/include ${configure.optflags}" \
|
|
TRIPLE=-apple-darwin${os.major}
|
|
build.args-append \
|
|
LIBCXXABI_PATH=${libcxxabi_worksrcpath} \
|
|
LIBCXX_PATH=${libcxx_worksrcpath} \
|
|
LIBCXXABI_DYLIB_PATH=${build.dir}/libc++abi.dylib
|
|
|
|
# We want to use the host's libc++ everywhere because we want to ensure
|
|
# that only *ONE* copy of this library is in any process's address space.
|
|
# On Snow Leopard and earlier, this port provides this library in /usr for
|
|
# binary compatibility with Lion and later.
|
|
#
|
|
# On newer OS version, this port does not install the content to /usr and
|
|
# just leaves it to expert users who may want to replace their system
|
|
# runtime.
|
|
|
|
destroot {
|
|
xinstall -m 755 -d ${destroot}${roots_path}/${root_name}/usr/lib
|
|
|
|
xinstall -m 755 ${libcxxabi_worksrcpath}/lib/libc++abi.dylib ${destroot}${roots_path}/${root_name}/usr/lib
|
|
|
|
xinstall -m 755 ${libcxx_worksrcpath}/lib/libc++.1.dylib ${destroot}${roots_path}/${root_name}/usr/lib
|
|
ln -s libc++.1.dylib ${destroot}${roots_path}/${root_name}/usr/lib/libc++.dylib
|
|
|
|
xinstall -m 755 -d ${destroot}${roots_path}/${root_name}/usr/include
|
|
xinstall -m 755 ${libcxxabi_worksrcpath}/include/__cxxabi_config.h ${destroot}${roots_path}/${root_name}/usr/include
|
|
xinstall -m 755 ${libcxxabi_worksrcpath}/include/cxxabi.h ${destroot}${roots_path}/${root_name}/usr/include
|
|
|
|
system -W ${destroot}${roots_path}/${root_name} "tar czf ../${root_name}.tgz ."
|
|
delete ${destroot}${roots_path}/${root_name}
|
|
}
|
|
} else {
|
|
supported_archs noarch
|
|
platforms any
|
|
distfiles
|
|
depends_extract
|
|
build {}
|
|
destroot {
|
|
xinstall -d ${destroot}${prefix}/share/doc/${name}
|
|
system "echo ${name} is an empty port on this OS version because the functionality is already provided by the OS. > ${destroot}${prefix}/share/doc/${name}/README.txt"
|
|
}
|
|
}
|
|
|
|
livecheck.type none
|