diff options
-rw-r--r-- | CMakeLists.txt | 51 |
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) |