[MacPorts] #52634: -snodejs4 build failure — type_traits not found when targetting mac OS 10.8
MacPorts
noreply at macports.org
Mon Oct 17 20:02:27 CEST 2016
#52634: -snodejs4 build failure — type_traits not found when targetting mac OS 10.8
-----------------------+--------------------------------
Reporter: william@… | Owner: macports-tickets@…
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version: 2.3.4
Keywords: | Port: nodejs4
-----------------------+--------------------------------
Building on current mac OS 10.12 with current Xcode 8.0. main.log
attached.
Problem arises due to the presence of the following lines in my
macports.conf:
{{{
macosx_deployment_target 10.8
configure.macosx_deployment_target 10.8
cxx_stdlib libc++
configure.cxx_stdlib libc++
cxxflags -std=c++14
configure.cxxflags -std=c++14
}}}
I'm aware that to do this is not particularly supported, but it does often
work (!), and the fix here does not break more “normal” builds.
In this case, the build fails since it is not able to find type_traits. In
particular, the following build line fails for that reason:
{{{
/usr/bin/clang++ '-D_DARWIN_USE_64_BIT_INODE=1'
'-DGTEST_DONT_DEFINE_ASSERT_EQ=1' '-DGTEST_DONT_DEFINE_ASSERT_GE=1'
'-DGTEST_DONT_DEFINE_ASSERT_GT=1' '-DGTEST_DONT_DEFINE_ASSERT_LE=1'
'-DGTEST_DONT_DEFINE_ASSERT_LT=1' '-DGTEST_DONT_DEFINE_ASSERT_NE=1'
-I../deps/gtest/include -I../deps/v8/include -I../src -I/opt/local/include
-Os -gdwarf-2 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter
-std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-
strict-aliasing -MMD -MF
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_devel_nodejs4/nodejs4/work/node-v4.6.0/out/Release/.deps//opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_devel_nodejs4/nodejs4/work/node-v4.6.0/out/Release/obj.target/cctest/test/cctest/util.o.d.raw
-Os -c -o
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_devel_nodejs4/nodejs4/work/node-v4.6.0/out/Release/obj.target/cctest/test/cctest/util.o
../test/cctest/util.cc
}}}
In testing, I find that if the environment variable is set:
`MACOSX_DEPLOYMENT_TARGET=10.8` then I receive the same error. If that
variable is empty then the file compiles correctly.
{{{
In file included from ../test/cctest/util.cc:1:
../src/util.h:11:10: fatal error: 'type_traits' file not found
#include <type_traits> // std::remove_reference
^
1 error generated.
}}}
This error may be prevented by adding the argument `-stdlib=libc++` to the
command line. I assume this is because when building for mac OS 10.12
libstdc++ is the standard version of the C++ runtime to use, whereas when
targetting 10.8 libstdc++ is the default, which misses this library. That
diagnosis may of course be wrong.
The solution, then, is to add the -stdlib=libc++ argument to build lines
unconditionally (it does no harm on systems which already have that as the
default). I'm having a nose around to see how that is achieved, since the
build system here clearly ignores the cxx_stdlib variables set in
macports.conf …
--
Ticket URL: <https://trac.macports.org/ticket/52634>
MacPorts <https://www.macports.org/>
Ports system for the Mac operating system
More information about the macports-tickets
mailing list