This diff for devel/boost fixes python 3 bindings and is needed for upcoming updates to net/libtorrent-rasterbar and net/deluge. CC maintainers and kn@ because python 3 bindings were a blocker for a net/libtorrent-rasterbar update.
* Fixes python 3 bindings * Bumps REVISION-main * Bumps SO_VERSION because libboost_python3.so.9.0 now correctly uses python 3 bringing with it modified function signatures like init_module. * Contains an upstream compilation fix for python 3.7 before fix: $ nm -g /usr/local/lib/libboost_python3.so.9.0 0003d210 T _ZN5boost6python6detail11init_moduleEPKcPFvvE $ nm -g /usr/local/lib/libboost_python.so.9.0 0003d210 T _ZN5boost6python6detail11init_moduleEPKcPFvvE after fix: $ nm -g /usr/local/lib/libboost_python3.so.9.0 0003b730 T _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE $ nm -g /usr/local/lib/libboost_python.so.9.0 0003d210 T _ZN5boost6python6detail11init_moduleEPKcPFvvE boost/python/module_init.hpp: # if PY_VERSION_HEX >= 0x03000000 BOOST_PYTHON_DECL PyObject* init_module(PyModuleDef&, void(*)()); #else BOOST_PYTHON_DECL PyObject* init_module(char const* name, void(*)()); #endif After the fix it now correctly uses python 2 and python 3 bindings. The way I arrived at this was to see that list.o was compiled with: "clang++" -c -x c++ -O2 -pipe -pthread -O2 -pipe -pthread -O3 -Wno-inline -Wall -m64 -O2 -pipe -pthread -O2 -pipe -pthread -DBOOST_ALL_NO_LIB=1 -DBOOST_PYTHON_SOURCE -DBOOST_PYTHON_STATIC_LIB -DNDEBUG -I"." -I"/usr/local/include/python3.7m" -o "bin.v2/libs/python/build/clang-gnu-linux-8.0.1/release/link-static/pch-off/threadapi-pthread/list.o" "libs/python/src/list.cpp" Then, list.o was reused in the creation of libboost_python3.so.9.0 and libboost_python.so.9.0. list.o was never recompiled against python 2. "clang++" -o "bin.v2/libs/python/build/clang-gnu-linux-8.0.1/release/pch-off/threadapi-pthread/libboost_python3.so.9.0" -Wl,-soname -Wl,libboost_python3.so.9.0 -shared -Wl,--start-group "bin.v2/libs/python/build/clang-gnu-linux-8.0.1/release/pch-off/threadapi-pthread/list.o" "clang++" -o "bin.v2/libs/python/build/clang-gnu-linux-8.0.1/release/pch-off/threadapi-pthread/libboost_python.so.9.0" -Wl,-soname -Wl,libboost_python.so.9.0 -shared -Wl,--start-group "bin.v2/libs/python/build/clang-gnu-linux-8.0.1/release/pch-off/threadapi-pthread/list.o" My plan was to: 1. Build only python 3 bindings using --with-python and stash the objects in ${PY3_DIR}. 2. Delete list .o objects to force recompilation. 3. Rebuild entire project with python 2. Now, during step 3, it will rebuild list.o against python 2. "clang++" -c -x c++ -O2 -pipe -pthread -O2 -pipe -pthread -O3 -Wno-inline -Wall -m64 -O2 -pipe -pthread -O2 -pipe -pthread -DBOOST_ALL_NO_LIB=1 -DBOOST_PYTHON_SOURCE -DBOOST_PYTHON_STATIC_LIB -DNDEBUG -I"." -I"/usr/local/include/python2.7" -o "bin.v2/libs/python/build/clang-gnu-linux-8.0.1/release/link-static/pch-off/threadapi-pthread/list.o" "libs/python/src/list.cpp" Also, boostrap.sh contains: using python : $PYTHON_VERSION : $PYTHON_ROOT ; This was not expressive enough for my needs to simply provide $PYTHON_VERSION and $PYTHON_ROOT. Instead I use sed to get lines of the form: using python : 2.7 : /usr/local : /usr/local/include/python2.7 ; using python : 3.7 : /usr/local : /usr/local/include/python3.7m ; Sources: tools/build/src/tools/python.jam https://stackoverflow.com/questions/28830653/build-boost-with-multiple-python-versions https://www.boost.org/doc/libs/1_67_0/libs/python/doc/html/building/configuring_boost_build.html The patch is an upstream fix for a compilation error with python 3.7. https://github.com/boostorg/python/commit/660487c43fde76f3e64f1cb2e644500da92fe582 boost 1.67 changes the python naming convention to be of the form libboost_python{27,37}.so.9.0. boost 1.67 also tries to allow building against multiple versions of python in one run of b2. While my initial approach was to try to backport 1.67 fixes alluded to in the changelog, I quickly abandoned this effort because I was not getting libtorrent-rasterbar to link properly. `make port-lib-depends-check' inside libtorrent-rasterbar would report that boost_python3 was unused. I suggest revisiting this during the next boost update. https://www.boost.org/users/history/version_1_67_0.html https://github.com/boostorg/python/commit/d4d41d94aecc9f8098aabd3587fcb95458451f71 Python: The library name now includes the version suffix of the Python version used to compile it. For example, a variant compiled with Python 2.7 will produce library names boost_python27 and boost_numpy27, etc.. Combined with a related fix in Boost.Build, this means that it is now possible to build variants for multiple Python versions in a single build process. To test I tried games/freeorion and games/vegastrike, which compiled and started fine. graphics/openexr compiled fine but no further testing. graphics/openimageio was tested with graphics/blender, which started fine. net/libtorrent-rasterbar and net/deluge correctly use these new boost python 3 bindings. Feedback and tests are welcome. Index: Makefile =================================================================== RCS file: /cvs/ports/devel/boost/Makefile,v retrieving revision 1.91 diff -u -p -r1.91 Makefile --- Makefile 27 Nov 2019 05:17:35 -0000 1.91 +++ Makefile 19 Jan 2020 04:09:03 -0000 @@ -11,14 +11,14 @@ VERSION= 1.66.0 DISTNAME= boost_${VERSION:S/./_/g} PKGNAME-main= boost-${VERSION} PKGNAME-md= boost-md-${VERSION} -REVISION-main= 8 +REVISION-main= 9 REVISION-md= 3 CATEGORIES= devel MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=boost/} EXTRACT_SUFX= .tar.bz2 FIX_EXTRACT_PERMISSIONS = Yes -SO_VERSION= 9.0 +SO_VERSION= 10.0 BOOST_LIBS= boost_atomic-mt \ boost_chrono-mt boost_chrono \ boost_container-mt boost_container \ @@ -136,6 +136,12 @@ PY2_BOOTSTRAP= --with-python=${LOCALBASE PY3_BOOTSTRAP= --with-python=${LOCALBASE}/bin/python${MODPY_DEFAULT_VERSION_3} \ --with-python-version=${MODPY_DEFAULT_VERSION_3} \ +PY2_INC= ${LOCALBASE}/include/python${MODPY_DEFAULT_VERSION_2} + +PY3_INC= ${LOCALBASE}/include/python${MODPY_DEFAULT_VERSION_3}m + +PY3_DIR= ${WRKSRC}/lib.py3 + # python.port.mk makes assumptions about an empty CONFIGURE_STYLE CONFIGURE_STYLE= none @@ -159,22 +165,36 @@ do-configure: @cd ${WRKSRC}/tools/build/src/engine && \ ${SETENV} CC="${CC}" CFLAGS="${CFLAGS}" /bin/sh ./build.sh cc && \ cp bin.openbsd*/b2 bin.openbsd*/bjam ${WRKSRC} + cp ${WRKSRC}/bootstrap.sh ${WRKSRC}/bootstrap.sh.bak @cd ${WRKSRC} && chmod -R a+x ./ && \ /bin/sh ./bootstrap.sh ${BOOTSTRAP} + mkdir ${PY3_DIR} # b2 doesn't seem to respect python parameter, we need to run twice with -# separate python environments +# separate python environments. Remove .o files to force python recompilation. do-build: export ${MAKE_ENV}; \ cd ${WRKSRC} && chmod -R a+x ./ && \ - /bin/sh ./bootstrap.sh ${BOOTSTRAP} ${PY2_BOOTSTRAP} && \ - ./b2 ${BJAM_CONFIG} python=${MODPY_DEFAULT_VERSION_2} && \ + cp ${WRKSRC}/bootstrap.sh.bak ${WRKSRC}/bootstrap.sh && \ + rm ${WRKSRC}/project-config.jam && \ + sed -i 's;\(using python.*PYTHON_ROOT\).*;\1 : ${PY3_INC} \;;' \ + ${WRKSRC}/bootstrap.sh && \ /bin/sh ./bootstrap.sh ${BOOTSTRAP} ${PY3_BOOTSTRAP} && \ - ./b2 ${BJAM_CONFIG} python=${MODPY_DEFAULT_VERSION_3}\ + ./b2 ${BJAM_CONFIG} --with-python python=${MODPY_DEFAULT_VERSION_3} && \ + mv ${WRKSRC}/stage/lib/lib*python3* ${PY3_DIR} && \ + cp ${WRKSRC}/bootstrap.sh.bak ${WRKSRC}/bootstrap.sh && \ + rm ${WRKSRC}/project-config.jam && \ + cd ${WRKSRC} && \ + find bin.v2/libs/python -name "*.o" -type f -delete && \ + sed -i 's;\(using python.*PYTHON_ROOT\).*;\1 : ${PY2_INC} \;;' \ + ${WRKSRC}/bootstrap.sh && \ + /bin/sh ./bootstrap.sh ${BOOTSTRAP} ${PY2_BOOTSTRAP} && \ + ./b2 ${BJAM_CONFIG} python=${MODPY_DEFAULT_VERSION_2}\ do-install: # Libs and includes: ${INSTALL_DATA} ${WRKSRC}/stage/lib/lib!(*.so) ${PREFIX}/lib + ${INSTALL_DATA} ${PY3_DIR}/lib!(*.so) ${PREFIX}/lib @cd ${WRKSRC} && \ find boost -type d -exec ${INSTALL_DATA_DIR} ${PREFIX}/include/{} \; @cd ${WRKSRC} && \ Index: patches/patch-libs_python_src_converter_builtin_converters_cpp =================================================================== RCS file: patches/patch-libs_python_src_converter_builtin_converters_cpp diff -N patches/patch-libs_python_src_converter_builtin_converters_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-libs_python_src_converter_builtin_converters_cpp 19 Jan 2020 04:09:03 -0000 @@ -0,0 +1,28 @@ +$OpenBSD$ + +XXX remove after updating to boost 1.67 + +Fix compilation error: +https://github.com/boostorg/python/commit/660487c43fde76f3e64f1cb2e644500da92fe582 +https://www.boost.org/users/history/version_1_67_0.html + +Index: libs/python/src/converter/builtin_converters.cpp +--- libs/python/src/converter/builtin_converters.cpp.orig ++++ libs/python/src/converter/builtin_converters.cpp +@@ -45,10 +45,15 @@ namespace + { + return PyString_Check(obj) ? PyString_AsString(obj) : 0; + } +-#else ++#elif PY_VERSION_HEX < 0x03070000 + void* convert_to_cstring(PyObject* obj) + { + return PyUnicode_Check(obj) ? _PyUnicode_AsString(obj) : 0; ++ } ++#else ++ void* convert_to_cstring(PyObject* obj) ++ { ++ return PyUnicode_Check(obj) ? const_cast<void*>(reinterpret_cast<const void*>(_PyUnicode_AsString(obj))) : 0; + } + #endif + Index: pkg/PLIST-main =================================================================== RCS file: /cvs/ports/devel/boost/pkg/PLIST-main,v retrieving revision 1.7 diff -u -p -r1.7 PLIST-main --- pkg/PLIST-main 3 Jan 2019 07:29:58 -0000 1.7 +++ pkg/PLIST-main 19 Jan 2020 04:09:03 -0000 @@ -14036,129 +14036,129 @@ include/boost/xpressive/xpressive_dynami include/boost/xpressive/xpressive_fwd.hpp include/boost/xpressive/xpressive_static.hpp include/boost/xpressive/xpressive_typeof.hpp -lib/libboost_atomic-mt.a +@static-lib lib/libboost_atomic-mt.a @lib lib/libboost_atomic-mt.so.${LIBboost_atomic-mt_VERSION} -lib/libboost_chrono-mt.a +@static-lib lib/libboost_chrono-mt.a @lib lib/libboost_chrono-mt.so.${LIBboost_chrono-mt_VERSION} -lib/libboost_chrono.a +@static-lib lib/libboost_chrono.a @lib lib/libboost_chrono.so.${LIBboost_chrono_VERSION} -lib/libboost_container-mt.a +@static-lib lib/libboost_container-mt.a @lib lib/libboost_container-mt.so.${LIBboost_container-mt_VERSION} -lib/libboost_container.a +@static-lib lib/libboost_container.a @lib lib/libboost_container.so.${LIBboost_container_VERSION} -lib/libboost_date_time-mt.a +@static-lib lib/libboost_date_time-mt.a @lib lib/libboost_date_time-mt.so.${LIBboost_date_time-mt_VERSION} -lib/libboost_date_time.a +@static-lib lib/libboost_date_time.a @lib lib/libboost_date_time.so.${LIBboost_date_time_VERSION} -lib/libboost_exception-mt.a -lib/libboost_exception.a -lib/libboost_filesystem-mt.a +@static-lib lib/libboost_exception-mt.a +@static-lib lib/libboost_exception.a +@static-lib lib/libboost_filesystem-mt.a @lib lib/libboost_filesystem-mt.so.${LIBboost_filesystem-mt_VERSION} -lib/libboost_filesystem.a +@static-lib lib/libboost_filesystem.a @lib lib/libboost_filesystem.so.${LIBboost_filesystem_VERSION} -lib/libboost_graph-mt.a +@static-lib lib/libboost_graph-mt.a @lib lib/libboost_graph-mt.so.${LIBboost_graph-mt_VERSION} -lib/libboost_graph.a +@static-lib lib/libboost_graph.a @lib lib/libboost_graph.so.${LIBboost_graph_VERSION} -lib/libboost_iostreams-mt.a +@static-lib lib/libboost_iostreams-mt.a @lib lib/libboost_iostreams-mt.so.${LIBboost_iostreams-mt_VERSION} -lib/libboost_iostreams.a +@static-lib lib/libboost_iostreams.a @lib lib/libboost_iostreams.so.${LIBboost_iostreams_VERSION} -lib/libboost_locale-mt.a +@static-lib lib/libboost_locale-mt.a @lib lib/libboost_locale-mt.so.${LIBboost_locale-mt_VERSION} -lib/libboost_log-mt.a +@static-lib lib/libboost_log-mt.a @lib lib/libboost_log-mt.so.${LIBboost_log-mt_VERSION} -lib/libboost_log.a +@static-lib lib/libboost_log.a @lib lib/libboost_log.so.${LIBboost_log_VERSION} -lib/libboost_log_setup-mt.a +@static-lib lib/libboost_log_setup-mt.a @lib lib/libboost_log_setup-mt.so.${LIBboost_log_setup-mt_VERSION} -lib/libboost_log_setup.a +@static-lib lib/libboost_log_setup.a @lib lib/libboost_log_setup.so.${LIBboost_log_setup_VERSION} -lib/libboost_math_c99-mt.a +@static-lib lib/libboost_math_c99-mt.a @lib lib/libboost_math_c99-mt.so.${LIBboost_math_c99-mt_VERSION} -lib/libboost_math_c99.a +@static-lib lib/libboost_math_c99.a @lib lib/libboost_math_c99.so.${LIBboost_math_c99_VERSION} -lib/libboost_math_c99f-mt.a +@static-lib lib/libboost_math_c99f-mt.a @lib lib/libboost_math_c99f-mt.so.${LIBboost_math_c99f-mt_VERSION} -lib/libboost_math_c99f.a +@static-lib lib/libboost_math_c99f.a @lib lib/libboost_math_c99f.so.${LIBboost_math_c99f_VERSION} -lib/libboost_math_c99l-mt.a +@static-lib lib/libboost_math_c99l-mt.a @lib lib/libboost_math_c99l-mt.so.${LIBboost_math_c99l-mt_VERSION} -lib/libboost_math_c99l.a +@static-lib lib/libboost_math_c99l.a @lib lib/libboost_math_c99l.so.${LIBboost_math_c99l_VERSION} -lib/libboost_math_tr1-mt.a +@static-lib lib/libboost_math_tr1-mt.a @lib lib/libboost_math_tr1-mt.so.${LIBboost_math_tr1-mt_VERSION} -lib/libboost_math_tr1.a +@static-lib lib/libboost_math_tr1.a @lib lib/libboost_math_tr1.so.${LIBboost_math_tr1_VERSION} -lib/libboost_math_tr1f-mt.a +@static-lib lib/libboost_math_tr1f-mt.a @lib lib/libboost_math_tr1f-mt.so.${LIBboost_math_tr1f-mt_VERSION} -lib/libboost_math_tr1f.a +@static-lib lib/libboost_math_tr1f.a @lib lib/libboost_math_tr1f.so.${LIBboost_math_tr1f_VERSION} -lib/libboost_math_tr1l-mt.a +@static-lib lib/libboost_math_tr1l-mt.a @lib lib/libboost_math_tr1l-mt.so.${LIBboost_math_tr1l-mt_VERSION} -lib/libboost_math_tr1l.a +@static-lib lib/libboost_math_tr1l.a @lib lib/libboost_math_tr1l.so.${LIBboost_math_tr1l_VERSION} -lib/libboost_num${MODPY_PY_PREFIX}mt.a -@lib lib/libboost_num${MODPY_PY_PREFIX}mt.so.${LIBboost_numpy-mt_VERSION} -lib/libboost_numpy.a +@static-lib lib/libboost_num${MODPY_PY_PREFIX}mt.a +@lib lib/libboost_num${MODPY_PY_PREFIX}mt.so.${LIBboost_num${MODPY_PY_PREFIX}mt_VERSION} +@static-lib lib/libboost_numpy.a @lib lib/libboost_numpy.so.${LIBboost_numpy_VERSION} -lib/libboost_prg_exec_monitor-mt.a +@static-lib lib/libboost_prg_exec_monitor-mt.a @lib lib/libboost_prg_exec_monitor-mt.so.${LIBboost_prg_exec_monitor-mt_VERSION} -lib/libboost_prg_exec_monitor.a +@static-lib lib/libboost_prg_exec_monitor.a @lib lib/libboost_prg_exec_monitor.so.${LIBboost_prg_exec_monitor_VERSION} -lib/libboost_program_options-mt.a +@static-lib lib/libboost_program_options-mt.a @lib lib/libboost_program_options-mt.so.${LIBboost_program_options-mt_VERSION} -lib/libboost_program_options.a +@static-lib lib/libboost_program_options.a @lib lib/libboost_program_options.so.${LIBboost_program_options_VERSION} -lib/libboost_python-mt.a +@static-lib lib/libboost_python-mt.a @lib lib/libboost_python-mt.so.${LIBboost_python-mt_VERSION} -lib/libboost_python.a +@static-lib lib/libboost_python.a @lib lib/libboost_python.so.${LIBboost_python_VERSION} -lib/libboost_python3-mt.a +@static-lib lib/libboost_python3-mt.a @lib lib/libboost_python3-mt.so.${LIBboost_python3-mt_VERSION} -lib/libboost_python3.a +@static-lib lib/libboost_python3.a @lib lib/libboost_python3.so.${LIBboost_python3_VERSION} -lib/libboost_random-mt.a +@static-lib lib/libboost_random-mt.a @lib lib/libboost_random-mt.so.${LIBboost_random-mt_VERSION} -lib/libboost_random.a +@static-lib lib/libboost_random.a @lib lib/libboost_random.so.${LIBboost_random_VERSION} -lib/libboost_regex-mt.a +@static-lib lib/libboost_regex-mt.a @lib lib/libboost_regex-mt.so.${LIBboost_regex-mt_VERSION} -lib/libboost_regex.a +@static-lib lib/libboost_regex.a @lib lib/libboost_regex.so.${LIBboost_regex_VERSION} -lib/libboost_serialization-mt.a +@static-lib lib/libboost_serialization-mt.a @lib lib/libboost_serialization-mt.so.${LIBboost_serialization-mt_VERSION} -lib/libboost_serialization.a +@static-lib lib/libboost_serialization.a @lib lib/libboost_serialization.so.${LIBboost_serialization_VERSION} -lib/libboost_signals-mt.a +@static-lib lib/libboost_signals-mt.a @lib lib/libboost_signals-mt.so.${LIBboost_signals-mt_VERSION} -lib/libboost_signals.a +@static-lib lib/libboost_signals.a @lib lib/libboost_signals.so.${LIBboost_signals_VERSION} -lib/libboost_system-mt.a +@static-lib lib/libboost_system-mt.a @lib lib/libboost_system-mt.so.${LIBboost_system-mt_VERSION} -lib/libboost_system.a +@static-lib lib/libboost_system.a @lib lib/libboost_system.so.${LIBboost_system_VERSION} -lib/libboost_test_exec_monitor-mt.a -lib/libboost_test_exec_monitor.a -lib/libboost_thread-mt.a +@static-lib lib/libboost_test_exec_monitor-mt.a +@static-lib lib/libboost_test_exec_monitor.a +@static-lib lib/libboost_thread-mt.a @lib lib/libboost_thread-mt.so.${LIBboost_thread-mt_VERSION} -lib/libboost_timer-mt.a +@static-lib lib/libboost_timer-mt.a @lib lib/libboost_timer-mt.so.${LIBboost_timer-mt_VERSION} -lib/libboost_timer.a +@static-lib lib/libboost_timer.a @lib lib/libboost_timer.so.${LIBboost_timer_VERSION} -lib/libboost_type_erasure-mt.a +@static-lib lib/libboost_type_erasure-mt.a @lib lib/libboost_type_erasure-mt.so.${LIBboost_type_erasure-mt_VERSION} -lib/libboost_type_erasure.a +@static-lib lib/libboost_type_erasure.a @lib lib/libboost_type_erasure.so.${LIBboost_type_erasure_VERSION} -lib/libboost_unit_test_framework-mt.a +@static-lib lib/libboost_unit_test_framework-mt.a @lib lib/libboost_unit_test_framework-mt.so.${LIBboost_unit_test_framework-mt_VERSION} -lib/libboost_unit_test_framework.a +@static-lib lib/libboost_unit_test_framework.a @lib lib/libboost_unit_test_framework.so.${LIBboost_unit_test_framework_VERSION} -lib/libboost_wave-mt.a +@static-lib lib/libboost_wave-mt.a @lib lib/libboost_wave-mt.so.${LIBboost_wave-mt_VERSION} -lib/libboost_wserialization-mt.a +@static-lib lib/libboost_wserialization-mt.a @lib lib/libboost_wserialization-mt.so.${LIBboost_wserialization-mt_VERSION} -lib/libboost_wserialization.a +@static-lib lib/libboost_wserialization.a @lib lib/libboost_wserialization.so.${LIBboost_wserialization_VERSION} share/boost-build/ share/boost-build/__init__.py Index: pkg/PLIST-md =================================================================== RCS file: /cvs/ports/devel/boost/pkg/PLIST-md,v retrieving revision 1.1 diff -u -p -r1.1 PLIST-md --- pkg/PLIST-md 13 Dec 2018 19:52:46 -0000 1.1 +++ pkg/PLIST-md 19 Jan 2020 04:09:03 -0000 @@ -1,21 +1,21 @@ @comment $OpenBSD: PLIST-md,v 1.1 2018/12/13 19:52:46 sthen Exp $ -lib/libboost_context-mt.a +@static-lib lib/libboost_context-mt.a @lib lib/libboost_context-mt.so.${LIBboost_context-mt_VERSION} -lib/libboost_coroutine-mt.a +@static-lib lib/libboost_coroutine-mt.a @lib lib/libboost_coroutine-mt.so.${LIBboost_coroutine-mt_VERSION} -lib/libboost_coroutine.a +@static-lib lib/libboost_coroutine.a @lib lib/libboost_coroutine.so.${LIBboost_coroutine_VERSION} -lib/libboost_fiber-mt.a +@static-lib lib/libboost_fiber-mt.a @lib lib/libboost_fiber-mt.so.${LIBboost_fiber-mt_VERSION} -lib/libboost_stacktrace_addr2line-mt.a +@static-lib lib/libboost_stacktrace_addr2line-mt.a @lib lib/libboost_stacktrace_addr2line-mt.so.${LIBboost_stacktrace_addr2line-mt_VERSION} -lib/libboost_stacktrace_addr2line.a +@static-lib lib/libboost_stacktrace_addr2line.a @lib lib/libboost_stacktrace_addr2line.so.${LIBboost_stacktrace_addr2line_VERSION} -lib/libboost_stacktrace_basic-mt.a +@static-lib lib/libboost_stacktrace_basic-mt.a @lib lib/libboost_stacktrace_basic-mt.so.${LIBboost_stacktrace_basic-mt_VERSION} -lib/libboost_stacktrace_basic.a +@static-lib lib/libboost_stacktrace_basic.a @lib lib/libboost_stacktrace_basic.so.${LIBboost_stacktrace_basic_VERSION} -lib/libboost_stacktrace_noop-mt.a +@static-lib lib/libboost_stacktrace_noop-mt.a @lib lib/libboost_stacktrace_noop-mt.so.${LIBboost_stacktrace_noop-mt_VERSION} -lib/libboost_stacktrace_noop.a +@static-lib lib/libboost_stacktrace_noop.a @lib lib/libboost_stacktrace_noop.so.${LIBboost_stacktrace_noop_VERSION}