#40231: mkvtoolnix: fix build with clang --------------------------+-------------------------------- Reporter: ryandesign@… | Owner: macports-tickets@… Type: enhancement | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.2.0 Keywords: | Port: mkvtoolnix --------------------------+-------------------------------- mkvtoolnix currently requires gcc 4.6 or newer to build, but mkvextract crashes because boost and icu have not been built with the same compiler. The idea of getting new ports of boost and icu built with such a compiler is explored in #34806. In this ticket, I'd instead like to explore the idea of getting mkvtoolnix to build correctly with clang. In r109693 Jeremy H.S. disabled the port on Mavericks adding a comment saying this would be the necessary fix. Attached is a patch that begins work toward this solution. The configure script tests for various C++11 features that are required, but it doesn't find three of them even in versions of clang that have them [ticket:34288#comment:7 because] `-stdlib=libc++` was not used. I added a patch to add this to the configure script. However it must only be added when the compiler is clang. When the compiler is gcc 4.6 or newer, adding this flag causes all the C++11 feature tests to fail. Unfortunately even with recent clang the build eventually fails: With clang version "Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)" from Xcode 4.6.2, the error is: {{{ /usr/bin/../lib/c++/v1/vector:1822:21: fatal error: overload resolution selected implicitly-deleted copy assignment operator __m = __first; ^ }}} With MacPorts clang 3.3 and 3.4, the error wording is slightly different: {{{ /opt/local/libexec/llvm-3.3/bin/../lib/c++/v1/vector:1879:21: fatal error: object of type 'boost::filter_iterator<<lambda at src/common/command_line.cpp:295:74>, boost::transform_iterator<boost::range_detail::select_first<std::__1::map<std::__1::basic_string<char>, std::__1::basic_string<char>, std::__1::less<std::__1::basic_string<char>
, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, std::__1::basic_string<char> > > > >, std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> >, const std::__1::__tree_node<std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> >, void *> *, long> >, boost::use_default, boost::use_default> >' cannot be assigned because its copy assignment operator is implicitly deleted __m = __first; ^ }}}
-- Ticket URL: <https://trac.macports.org/ticket/40231> MacPorts <http://www.macports.org/> Ports system for OS X