[MacPorts] #43828: clang-3.4 package uses mismatched libc++ headers and libraries
#43828: clang-3.4 package uses mismatched libc++ headers and libraries -----------------------------------+-------------------------------- Reporter: howarth.at.macports@… | Owner: macports-tickets@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.0 Keywords: lang | Port: clang-3.4 -----------------------------------+-------------------------------- On 10.7, I noticed that the MacPort's clang++-mp-3.4 compiler from the clang-3.4 package is using a mismatched set of libc++ headers and libraries… {{{ % clang++-mp-3.4 -stdlib=libc++ hello.cc -v clang version 3.4 (tags/RELEASE_34/final) Target: x86_64-apple-darwin11.4.2 Thread model: posix "/opt/local/libexec/llvm-3.4/bin/clang" -cc1 -triple x86_64-apple- macosx10.7.0 -emit-obj -mrelax-all -disable-free -main-file-name hello.cc -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 136 -v -resource- dir /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4 -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /Users/howarth -ferror-limit 19 -fmessage-length 125 -stack-protector 1 -mstackrealign -fblocks -fobjc- runtime=macosx-10.7.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -vectorize-slp -o /var/folders/b8/ybr6czsd73s1qds_6bh5v0v80000gn/T/hello-8467e9.o -x c++ hello.cc clang -cc1 version 3.4 based upon LLVM 3.4 default target x86_64-apple- darwin11.4.2 ignoring nonexistent directory "/usr/include/c++/v1" ignoring nonexistent directory "/usr/local/include" #include "..." search starts here: #include <...> search starts here: /opt/local/libexec/llvm-3.4/bin/../include/c++/v1 /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4/include /usr/include /System/Library/Frameworks (framework directory) /Library/Frameworks (framework directory) End of search list. "/opt/local/libexec/llvm-3.4/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.7.0 -o a.out -lcrt1.10.6.o /var/folders/b8/ybr6czsd73s1qds_6bh5v0v80000gn/T/hello-8467e9.o -lc++ -lSystem /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4/lib/darwin/libclang_rt.osx.a % otool -L ./a.out ./a.out: /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 28.4.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) So the newer libc++ 3.4.1 headers stored in /opt/local/libexec/llvm-3.4/include are being used the much older system libc++… % otool -L /usr/lib/libc++.1.dylib /usr/lib/libc++.1.dylib: /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 28.4.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) /usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 14.0.0) }}} We fixed this on fink by adding… {{{ # Adjust path for relocation of libc++ headers if test "$darwin_vers" -ge 13 then sed -i.orig2 -e 's|AddPath("/usr/include/c++/v1"|AddPath("/Library/Developer/CommandLineTools/usr/lib/c++/v1"|' \ tools/clang/lib/Frontend/InitHeaderSearch.cpp elif test "$darwin_vers" -ge 11 then sed -i.orig2 -e 's|AddPath("/usr/include/c++/v1"|AddPath("/usr/lib/c++/v1"|' \ tools/clang/lib/Frontend/InitHeaderSearch.cpp fi }}} so clang-3.4 in MacPorts needs something like… {{{ if {${os.major} > 12} { post-patch { reinplace "s|AddPath(\"/usr/include/c++/v1\"|AddPath(\"/Library/Developer/CommandLineTools/usr/lib/c++/v1\"|" ${worksrcpath}/tools/clang/lib/Frontend/InitHeaderSearch.cpp } elseif {${os.major} > 10} { post-patch { reinplace "s|AddPath(\"/usr/include/c++/v1\"|AddPath(\"/usr/lib/c++/v1\"|" ${worksrcpath}/tools/clang/lib/Frontend/InitHeaderSearch.cpp } } }}} As you can see from the verbose output of clang-3.4 at the beginning of this report… ignoring nonexistent directory "/usr/include/c++/v1" …the stock sources default to a /usr/include/c++/v1 directory which Apple has never used instead of /usr/lib/c++/v1 on 10.7/10.8 and /Library/Developer/CommandLineTools/usr/lib/c++/v1 on 10.9. -- Ticket URL: <https://trac.macports.org/ticket/43828> MacPorts <http://www.macports.org/> Ports system for OS X
#43828: clang-3.4 package uses mismatched libc++ headers and libraries ------------------------------------+------------------------ Reporter: howarth.at.macports@… | Owner: jeremyhu@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.0 Resolution: | Keywords: Port: clang-3.4 | ------------------------------------+------------------------ Changes (by mf2k@…): * cc: jeremyhu@… (removed) * keywords: lang => * owner: macports-tickets@… => jeremyhu@… -- Ticket URL: <https://trac.macports.org/ticket/43828#comment:1> MacPorts <http://www.macports.org/> Ports system for OS X
#43828: clang-3.4 package uses mismatched libc++ headers and libraries ------------------------------------+------------------------ Reporter: howarth.at.macports@… | Owner: jeremyhu@… Type: defect | Status: closed Priority: Normal | Milestone: Component: ports | Version: 2.3.0 Resolution: worksforme | Keywords: Port: clang-3.4 | ------------------------------------+------------------------ Changes (by jeremyhu@…): * status: new => closed * resolution: => worksforme Comment: Yes. This is by design. -- Ticket URL: <https://trac.macports.org/ticket/43828#comment:2> MacPorts <http://www.macports.org/> Ports system for OS X
#43828: clang-3.4 package uses mismatched libc++ headers and libraries ------------------------------------+------------------------ Reporter: howarth.at.macports@… | Owner: jeremyhu@… Type: defect | Status: closed Priority: Normal | Milestone: Component: ports | Version: 2.3.0 Resolution: worksforme | Keywords: Port: clang-3.4 | ------------------------------------+------------------------ Description changed by larryv@…: Old description:
On 10.7, I noticed that the MacPort's clang++-mp-3.4 compiler from the clang-3.4 package is using a mismatched set of libc++ headers and libraries…
{{{ % clang++-mp-3.4 -stdlib=libc++ hello.cc -v clang version 3.4 (tags/RELEASE_34/final) Target: x86_64-apple-darwin11.4.2 Thread model: posix "/opt/local/libexec/llvm-3.4/bin/clang" -cc1 -triple x86_64-apple- macosx10.7.0 -emit-obj -mrelax-all -disable-free -main-file-name hello.cc -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 136 -v -resource-dir /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4 -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /Users/howarth -ferror-limit 19 -fmessage-length 125 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.7.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor- diagnostics -vectorize-slp -o /var/folders/b8/ybr6czsd73s1qds_6bh5v0v80000gn/T/hello-8467e9.o -x c++ hello.cc clang -cc1 version 3.4 based upon LLVM 3.4 default target x86_64-apple- darwin11.4.2 ignoring nonexistent directory "/usr/include/c++/v1" ignoring nonexistent directory "/usr/local/include" #include "..." search starts here: #include <...> search starts here: /opt/local/libexec/llvm-3.4/bin/../include/c++/v1 /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4/include /usr/include /System/Library/Frameworks (framework directory) /Library/Frameworks (framework directory) End of search list. "/opt/local/libexec/llvm-3.4/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.7.0 -o a.out -lcrt1.10.6.o /var/folders/b8/ybr6czsd73s1qds_6bh5v0v80000gn/T/hello-8467e9.o -lc++ -lSystem /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4/lib/darwin/libclang_rt.osx.a
% otool -L ./a.out ./a.out: /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 28.4.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
So the newer libc++ 3.4.1 headers stored in /opt/local/libexec/llvm-3.4/include are being used the much older system libc++…
% otool -L /usr/lib/libc++.1.dylib /usr/lib/libc++.1.dylib: /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 28.4.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) /usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 14.0.0) }}}
We fixed this on fink by adding…
{{{ # Adjust path for relocation of libc++ headers if test "$darwin_vers" -ge 13 then sed -i.orig2 -e 's|AddPath("/usr/include/c++/v1"|AddPath("/Library/Developer/CommandLineTools/usr/lib/c++/v1"|' \ tools/clang/lib/Frontend/InitHeaderSearch.cpp elif test "$darwin_vers" -ge 11 then sed -i.orig2 -e 's|AddPath("/usr/include/c++/v1"|AddPath("/usr/lib/c++/v1"|' \ tools/clang/lib/Frontend/InitHeaderSearch.cpp fi }}}
so clang-3.4 in MacPorts needs something like…
{{{ if {${os.major} > 12} { post-patch { reinplace "s|AddPath(\"/usr/include/c++/v1\"|AddPath(\"/Library/Developer/CommandLineTools/usr/lib/c++/v1\"|" ${worksrcpath}/tools/clang/lib/Frontend/InitHeaderSearch.cpp } elseif {${os.major} > 10} { post-patch { reinplace "s|AddPath(\"/usr/include/c++/v1\"|AddPath(\"/usr/lib/c++/v1\"|" ${worksrcpath}/tools/clang/lib/Frontend/InitHeaderSearch.cpp } } }}}
As you can see from the verbose output of clang-3.4 at the beginning of this report…
ignoring nonexistent directory "/usr/include/c++/v1"
…the stock sources default to a /usr/include/c++/v1 directory which Apple has never used instead of /usr/lib/c++/v1 on 10.7/10.8 and /Library/Developer/CommandLineTools/usr/lib/c++/v1 on 10.9.
New description: On 10.7, I noticed that the MacPort's clang++-mp-3.4 compiler from the clang-3.4 package is using a mismatched set of libc++ headers and libraries… {{{ % clang++-mp-3.4 -stdlib=libc++ hello.cc -v clang version 3.4 (tags/RELEASE_34/final) Target: x86_64-apple-darwin11.4.2 Thread model: posix "/opt/local/libexec/llvm-3.4/bin/clang" -cc1 -triple x86_64-apple- macosx10.7.0 -emit-obj -mrelax-all -disable-free -main-file-name hello.cc -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 136 -v -resource- dir /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4 -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /Users/howarth -ferror-limit 19 -fmessage-length 125 -stack-protector 1 -mstackrealign -fblocks -fobjc- runtime=macosx-10.7.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -vectorize-slp -o /var/folders/b8/ybr6czsd73s1qds_6bh5v0v80000gn/T/hello-8467e9.o -x c++ hello.cc clang -cc1 version 3.4 based upon LLVM 3.4 default target x86_64-apple- darwin11.4.2 ignoring nonexistent directory "/usr/include/c++/v1" ignoring nonexistent directory "/usr/local/include" #include "..." search starts here: #include <...> search starts here: /opt/local/libexec/llvm-3.4/bin/../include/c++/v1 /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4/include /usr/include /System/Library/Frameworks (framework directory) /Library/Frameworks (framework directory) End of search list. "/opt/local/libexec/llvm-3.4/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.7.0 -o a.out -lcrt1.10.6.o /var/folders/b8/ybr6czsd73s1qds_6bh5v0v80000gn/T/hello-8467e9.o -lc++ -lSystem /opt/local/libexec/llvm-3.4/bin/../lib/clang/3.4/lib/darwin/libclang_rt.osx.a % otool -L ./a.out ./a.out: /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 28.4.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) }}} So the newer libc++ 3.4.1 headers stored in /opt/local/libexec/llvm-3.4/include are being used the much older system libc++… {{{ % otool -L /usr/lib/libc++.1.dylib /usr/lib/libc++.1.dylib: /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 28.4.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) /usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 14.0.0) }}} We fixed this on fink by adding… {{{ # Adjust path for relocation of libc++ headers if test "$darwin_vers" -ge 13 then sed -i.orig2 -e 's|AddPath("/usr/include/c++/v1"|AddPath("/Library/Developer/CommandLineTools/usr/lib/c++/v1"|' \ tools/clang/lib/Frontend/InitHeaderSearch.cpp elif test "$darwin_vers" -ge 11 then sed -i.orig2 -e 's|AddPath("/usr/include/c++/v1"|AddPath("/usr/lib/c++/v1"|' \ tools/clang/lib/Frontend/InitHeaderSearch.cpp fi }}} so clang-3.4 in MacPorts needs something like… {{{ if {${os.major} > 12} { post-patch { reinplace "s|AddPath(\"/usr/include/c++/v1\"|AddPath(\"/Library/Developer/CommandLineTools/usr/lib/c++/v1\"|" ${worksrcpath}/tools/clang/lib/Frontend/InitHeaderSearch.cpp } elseif {${os.major} > 10} { post-patch { reinplace "s|AddPath(\"/usr/include/c++/v1\"|AddPath(\"/usr/lib/c++/v1\"|" ${worksrcpath}/tools/clang/lib/Frontend/InitHeaderSearch.cpp } } }}} As you can see from the verbose output of clang-3.4 at the beginning of this report… {{{ ignoring nonexistent directory "/usr/include/c++/v1" }}} …the stock sources default to a /usr/include/c++/v1 directory which Apple has never used instead of /usr/lib/c++/v1 on 10.7/10.8 and /Library/Developer/CommandLineTools/usr/lib/c++/v1 on 10.9. -- -- Ticket URL: <https://trac.macports.org/ticket/43828#comment:3> MacPorts <http://www.macports.org/> Ports system for OS X
participants (1)
-
MacPorts