ext/facter/facter/lib/tests/CMakeLists.txt in facter-3.11.6.cfacter.20181031 vs ext/facter/facter/lib/tests/CMakeLists.txt in facter-3.12.0.cfacter.20180918

- old
+ new

@@ -38,11 +38,10 @@ "facts/cache.cc" "facts/string_value.cc" "logging/logging.cc" "log_capture.cc" "main.cc" - "mock_server.cc" "util/string.cc" "fixtures.cc" "collection_fixture.cc" "cwrapper.cc" ) @@ -126,23 +125,40 @@ ${YAMLCPP_INCLUDE_DIRS} ${LEATHERMAN_CATCH_INCLUDE} ${CPPHOCON_INCLUDE_DIRS} ) +# On EL 4, we run into a linking error when trying to create libraries or +# executables that link in a static library with code using threads. As I +# described in https://gcc.gnu.org/ml/gcc-help/2015-08/msg00035.html, we get +# the error undefined reference to symbol '__tls_get_addr@@GLIBC_2.3'. +# Build mock_server as a separate shared library to avoid this error. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") -if (WIN32) - # On Windows with GCC 5.2, Boost.System emits warnings that aren't correctly - # suppressed by pragmas. Explicitly skip them. - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable") -endif() +add_library(mock-server SHARED mock_server.cc) +target_link_libraries(mock-server PRIVATE + ${Boost_THREAD_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${LIBFACTER_TESTS_PLATFORM_LIBRARIES}) add_executable(libfacter_test $<TARGET_OBJECTS:libfactersrc> ${LIBFACTER_TESTS_COMMON_SOURCES} ${LIBFACTER_TESTS_PLATFORM_SOURCES} ${LIBFACTER_TESTS_CATEGORY_SOURCES}) -target_link_libraries(libfacter_test - ${LIBS} - ${LIBFACTER_TESTS_PLATFORM_LIBRARIES}) +# On Windows, mock-server comes after Boost libraries to avoid double +# definition of boost::system::system_category() on Windows. On Linux, it +# comes before to avoid picking up incomplete Boost.Asio symbols included +# by Boost.Log in Leatherman logging. +if (WIN32) + target_link_libraries(libfacter_test + ${LIBS} + ${LIBFACTER_TESTS_PLATFORM_LIBRARIES} + mock-server) +else() + target_link_libraries(libfacter_test + mock-server + ${LIBS} + ${LIBFACTER_TESTS_PLATFORM_LIBRARIES}) +endif() if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND BOOST_STATIC AND LEATHERMAN_USE_LOCALES) target_link_libraries(libfacter_test iconv) endif()