From 81362a2fd662f912ce5a2cf9d7c678faf3cbf991 Mon Sep 17 00:00:00 2001 From: Clemens Lang Date: Mon, 11 May 2015 19:54:51 +0200 Subject: [PATCH] Avoid linker flags when not available, fixes OS X The build currently fails on OS X because the OS X linker ld64 does not support --as-needed or --version-script. Fix this by checking whether these flags are supported by the currently used linker and only passing them if they are. --- CMakeLists.txt | 13 +++++++++++++ ext/CMakeLists.txt | 2 ++ src/CMakeLists.txt | 2 ++ 3 files changed, 17 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ab3fec96..7b43fd3d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,6 +206,17 @@ CHECK_FUNCTION_EXISTS (fopencookie HAVE_FOPENCOOKIE) CHECK_FUNCTION_EXISTS (funopen HAVE_FUNOPEN) TEST_BIG_ENDIAN (WORDS_BIGENDIAN) +INCLUDE (CMakePushCheckState) +INCLUDE (CheckCCompilerFlag) +MACRO (check_linker_flag FLAG VAR) + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_FLAGS "${FLAG}") + check_c_compiler_flag("" "${VAR}") + cmake_pop_check_state() +ENDMACRO (check_linker_flag) +check_linker_flag("-Wl,--as-needed" HAS_LINKER_AS_NEEDED) +check_linker_flag("-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver" HAS_LINKER_VERSION_SCRIPT) + # should create config.h with #cmakedefine instead... FOREACH (VAR HAVE_STRCHRNUL HAVE_FOPENCOOKIE HAVE_FUNOPEN WORDS_BIGENDIAN HAVE_RPM_DB_H HAVE_PGPDIGGETPARAMS @@ -307,7 +318,9 @@ ENDIF (ENABLE_RPMDB) IF (ENABLE_HAIKU) SET (SYSTEM_LIBRARIES ${HAIKU_SYSTEM_LIBRARIES} ${SYSTEM_LIBRARIES}) ENDIF (ENABLE_HAIKU) +IF (HAS_LINKER_AS_NEEDED) SET (SYSTEM_LIBRARIES "-Wl,--as-needed" ${SYSTEM_LIBRARIES}) +ENDIF (HAS_LINKER_AS_NEEDED) ADD_SUBDIRECTORY (src) ADD_SUBDIRECTORY (ext) diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt index bdf949d5..7fcf14f4 100644 --- a/ext/CMakeLists.txt +++ b/ext/CMakeLists.txt @@ -112,7 +112,9 @@ IF (ENABLE_APPDATA) ENDIF (ENABLE_APPDATA) SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +IF (HAVE_LINKER_VERSION_SCRIPT) SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINK_FLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/ext/libsolvext.ver") +ENDIF (HAVE_LINKER_VERSION_SCRIPT) IF (DISABLE_SHARED) ADD_LIBRARY (libsolvext STATIC ${libsolvext_SRCS}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b78a82a7..f60853e3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,7 +28,9 @@ SET (libsolv_HEADERS chksum.h dataiterator.h ${CMAKE_BINARY_DIR}/src/solvversion.h) SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +IF (HAVE_LINKER_VERSION_SCRIPT) SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINK_FLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver") +ENDIF (HAVE_LINKER_VERSION_SCRIPT) IF (DISABLE_SHARED) ADD_LIBRARY (libsolv STATIC ${libsolv_SRCS}) -- 2.47.2