HomeFreeBSD

MFH: r403247

Description

MFH: r403247

Remove USE_GCC=yes from devel/libxs and always build with the base
compiler.

There is a defect in the libc++ header files bundled with clang < 3.6
that broke the libxs build. Because of this breakage, USE_GCC=yes
was added to the port Makefile in r330486.

Unfortunately that breaks dns/dnstable in two different ways.
Dnstable itself is pure-C code, but it links to two different
libraries that contain C++ code, libxs and archivers/snappy, the
latter of which is built with the base c++ compiler.

  • On FreeBSD 9, snappy is generally built with g++ 4.2 from base and linked to libstdc++ in base, whereas libxs is built with g++ from ports and linked to libstdc++ from ports. When building dnstable, the linker seems to load libsnappy first, which brings in libstdc++ from base. This seems to work fine with ports gcc 4.8 or older, but when the default ports version is upgraded to 4.9, the linker fails with the error: "/usr/local/lib/libxs.so.2: undefined reference to

`std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20'"

  • On FreeBSD >= 10 where clang is the base compiler and snappy is linked to libc++, the build succeeds but the resulting executables will fail at runtime because they link to both libc++ from base and libstdc++ from ports.

When building libxs on FreeBSD 10 with clang 3.4, the build error is:

CXX    libxs_la-io_thread.lo
  • libxs_la-encoder.lo ---

In file included from encoder.cpp:23:
In file included from ./encoder.hpp:28:
In file included from /usr/include/c++/v1/algorithm:626:
/usr/include/c++/v1/utility:254:9: error: field has incomplete type 'xs::io_thread_t::timer_info_t'

_T2 second;

^

Patching the code to work around the build failure does not look
possible, so instead, fix the problem in a rather hackish way when
compiling with clang < 3.6 and using its bundled c++ headers:

  • Make a local copy of the two defective header files.
  • Apply the upstream change to those files from http://llvm.org/viewvc/llvm-project?view=revision&revision=231119 "Allow declaration of map and multimap iterator with incomplete mapped type. Patch from eugenis"
  • Add the directory containing the updated header files to the CPPFLAGS.

This fix is not needed when building with base clang on FreeBSD 9
because it uses the stdc++ headers.

PR: 204461
PR: 204400
Approved by: vg (maintainer)
Approved by: ports-secteam (feld)
Sponsored by: Farsight Security, Inc.

Details

Provenance
truckmanAuthored on
Parents
rP403316: - Switch to options helpers
Branches
Unknown
Tags
Unknown