summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt51
1 files changed, 39 insertions, 12 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a670acc3..79babc17 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,6 +41,11 @@ else()
project(gc C)
endif()
+if (POLICY CMP0057)
+ # Required for CheckLinkerFlag, at least.
+ cmake_policy(SET CMP0057 NEW)
+endif()
+
include(CheckCCompilerFlag)
include(CheckCSourceCompiles)
include(CheckFunctionExists)
@@ -50,6 +55,10 @@ include(CMakePackageConfigHelpers)
include(CTest)
include(GNUInstallDirs)
+if (NOT (${CMAKE_VERSION} VERSION_LESS "3.18.0"))
+ include(CheckLinkerFlag)
+endif()
+
# Customize the build by passing "-D<option_name>=ON|OFF" in the command line.
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(build_cord "Build cord library" ON)
@@ -434,7 +443,13 @@ if (BUILD_SHARED_LIBS)
else()
add_definitions("-DGC_NO_VISIBILITY")
endif()
- check_c_compiler_flag(-Wl,--no-undefined HAVE_FLAG_WL_NO_UNDEFINED)
+ if (${CMAKE_VERSION} VERSION_LESS "3.18.0")
+ set(WL_NO_UNDEFINED_OPT "-Wl,--no-undefined")
+ check_c_compiler_flag(${WL_NO_UNDEFINED_OPT} HAVE_FLAG_WL_NO_UNDEFINED)
+ else()
+ set(WL_NO_UNDEFINED_OPT "LINKER:--no-undefined")
+ check_linker_flag(C "${WL_NO_UNDEFINED_OPT}" HAVE_FLAG_WL_NO_UNDEFINED)
+ endif()
else()
add_definitions("-DGC_NOT_DLL")
if (WIN32)
@@ -576,17 +591,29 @@ endif(build_cord)
if (BUILD_SHARED_LIBS AND HAVE_FLAG_WL_NO_UNDEFINED)
# Declare that the libraries do not refer to external symbols.
- # TODO: use add_link_options() when cmake_minimum_required > 3.13
- target_link_libraries(gc PRIVATE -Wl,--no-undefined)
- if (enable_cplusplus)
- target_link_libraries(gccpp PRIVATE -Wl,--no-undefined)
- if (enable_throw_bad_alloc_library)
- target_link_libraries(gctba PRIVATE -Wl,--no-undefined)
- endif(enable_throw_bad_alloc_library)
- endif(enable_cplusplus)
- if (build_cord)
- target_link_libraries(cord PRIVATE -Wl,--no-undefined)
- endif(build_cord)
+ if (${CMAKE_VERSION} VERSION_LESS "3.13.0")
+ target_link_libraries(gc PRIVATE ${WL_NO_UNDEFINED_OPT})
+ if (enable_cplusplus)
+ target_link_libraries(gccpp PRIVATE ${WL_NO_UNDEFINED_OPT})
+ if (enable_throw_bad_alloc_library)
+ target_link_libraries(gctba PRIVATE ${WL_NO_UNDEFINED_OPT})
+ endif(enable_throw_bad_alloc_library)
+ endif(enable_cplusplus)
+ if (build_cord)
+ target_link_libraries(cord PRIVATE ${WL_NO_UNDEFINED_OPT})
+ endif(build_cord)
+ else()
+ target_link_options(gc PRIVATE ${WL_NO_UNDEFINED_OPT})
+ if (enable_cplusplus)
+ target_link_options(gccpp PRIVATE ${WL_NO_UNDEFINED_OPT})
+ if (enable_throw_bad_alloc_library)
+ target_link_options(gctba PRIVATE ${WL_NO_UNDEFINED_OPT})
+ endif(enable_throw_bad_alloc_library)
+ endif(enable_cplusplus)
+ if (build_cord)
+ target_link_options(cord PRIVATE ${WL_NO_UNDEFINED_OPT})
+ endif(build_cord)
+ endif()
endif()
if (BUILD_SHARED_LIBS)