From 00ea69cbd01521f10a6c1488c115644d00e64b79 Mon Sep 17 00:00:00 2001 From: r4nx Date: Tue, 28 Dec 2021 05:23:49 +0200 Subject: [PATCH 1/3] Modernize CMake and make library installable in terms of targets --- CMakeLists.txt | 87 ++++++++++++++++++++++++------------------- cmake/Config.cmake.in | 3 ++ 2 files changed, 52 insertions(+), 38 deletions(-) create mode 100644 cmake/Config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 84999c4..0a533c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,22 +1,10 @@ -cmake_minimum_required(VERSION 2.8.12) -project(subhook C) +cmake_minimum_required(VERSION 3.18) -if(POLICY CMP0042) - cmake_policy(SET CMP0042 NEW) -endif() -if(POLICY CMP0054) - cmake_policy(SET CMP0054 NEW) -endif() +project(subhook VERSION 0.8.2 LANGUAGES C) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -set(SUBHOOK_VERSION_MAJOR 0) -set(SUBHOOK_VERSION_MINOR 8) -set(SUBHOOK_VERSION_PATCH 2) - -set(SUBHOOK_VERSION ${SUBHOOK_VERSION_MAJOR}) -set(SUBHOOK_VERSION ${SUBHOOK_VERSION}.${SUBHOOK_VERSION_MINOR}) -set(SUBHOOK_VERSION ${SUBHOOK_VERSION}.${SUBHOOK_VERSION_PATCH}) +include(GNUInstallDirs) macro(subhook_add_option_var name type default_value description) set(${name}_DEFAULT ${default_value}) @@ -41,21 +29,26 @@ elseif(UNIX) list(APPEND SUBHOOK_SOURCES subhook_unix.c) endif() -add_definitions(-DSUBHOOK_IMPLEMENTATION -DSUBHOOK_SEPARATE_SOURCE_FILES) - if(SUBHOOK_STATIC) add_library(subhook STATIC ${SUBHOOK_HEADERS} ${SUBHOOK_SOURCES}) + target_compile_definitions(subhook PUBLIC SUBHOOK_STATIC) else() add_library(subhook SHARED ${SUBHOOK_HEADERS} ${SUBHOOK_SOURCES}) endif() -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -set_property(DIRECTORY ${CMAKE_SOURCE_DIR} - APPEND PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}) +add_library(subhook::subhook ALIAS subhook) + +target_compile_definitions(subhook PUBLIC + SUBHOOK_IMPLEMENTATION + SUBHOOK_SEPARATE_SOURCE_FILES +) +target_include_directories(subhook PUBLIC + $ + $ +) if(CMAKE_COMPILER_ID MATCHES GNU OR CMAKE_C_COMPILER_ID MATCHES Clang) - set_property(TARGET subhook - APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra") + target_compile_options(subhook PRIVATE "-Wall -Wextra") endif() if(SUBHOOK_FORCE_32BIT) @@ -63,31 +56,49 @@ if(SUBHOOK_FORCE_32BIT) set_target_properties(subhook PROPERTIES OSX_ARCHITECTURES i386) endif() if(UNIX) - set_property(TARGET subhook APPEND_STRING PROPERTY - COMPILE_FLAGS " -m32") - set_property(TARGET subhook APPEND_STRING PROPERTY LINK_FLAGS " -m32") + target_compile_options(subhook PRIVATE "-m32") + target_link_options(subhook PRIVATE "-m32") endif() endif() -if(SUBHOOK_STATIC) - add_definitions(-DSUBHOOK_STATIC) - set_property(DIRECTORY ${CMAKE_SOURCE_DIR} - APPEND PROPERTY COMPILE_DEFINITIONS SUBHOOK_STATIC) -endif() - set_property(GLOBAL PROPERTY USE_FOLDERS ON) if(SUBHOOK_INSTALL) - install(TARGETS subhook LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin) - install(FILES ${SUBHOOK_HEADERS} DESTINATION include) + include(CMakePackageConfigHelpers) + + install(TARGETS subhook EXPORT ${PROJECT_NAME}Targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES ${SUBHOOK_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + set(configFile ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake) + set(versionFile ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake) + set(configInstallDestination lib/cmake/${PROJECT_NAME}) + + configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in + ${configFile} + INSTALL_DESTINATION ${configInstallDestination} + ) + + write_basic_package_version_file( + ${versionFile} + COMPATIBILITY SameMajorVersion + ) + + install(FILES ${configFile} ${versionFile} DESTINATION ${configInstallDestination}) + install( + EXPORT ${PROJECT_NAME}Targets + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${configInstallDestination} + ) endif() set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) -set(CPACK_PACKAGE_VERSION_MAJOR ${SUBHOOK_VERSION_MAJOR}) -set(CPACK_PACKAGE_VERSION_MINOR ${SUBHOOK_VERSION_MINOR}) -set(CPACK_PACKAGE_VERSION_PATCH ${SUBHOOK_VERSION_PATCH}) +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) include(CPack) include(CTest) diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in new file mode 100644 index 0000000..f83ace5 --- /dev/null +++ b/cmake/Config.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") From 0e7ec7b3add5442820e2530a58a89a607b666d6f Mon Sep 17 00:00:00 2001 From: r4nx Date: Tue, 28 Dec 2021 06:03:42 +0200 Subject: [PATCH 2/3] Lower minimum CMake version as it seems to be enough --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a533c1..936a5a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18) +cmake_minimum_required(VERSION 3.16) project(subhook VERSION 0.8.2 LANGUAGES C) From bff89c8dce5629740081217ec21dd2f203c88edb Mon Sep 17 00:00:00 2001 From: r4nx Date: Mon, 10 Jan 2022 10:57:53 +0200 Subject: [PATCH 3/3] Use snake case for variable names, lower CMake version even further --- CMakeLists.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 936a5a2..2afd850 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.10) project(subhook VERSION 0.8.2 LANGUAGES C) @@ -72,26 +72,26 @@ if(SUBHOOK_INSTALL) RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${SUBHOOK_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - set(configFile ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake) - set(versionFile ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake) - set(configInstallDestination lib/cmake/${PROJECT_NAME}) + set(config_file ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake) + set(version_file ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake) + set(config_install_destination lib/cmake/${PROJECT_NAME}) configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in - ${configFile} - INSTALL_DESTINATION ${configInstallDestination} + ${config_file} + INSTALL_DESTINATION ${config_install_destination} ) write_basic_package_version_file( - ${versionFile} + ${version_file} COMPATIBILITY SameMajorVersion ) - install(FILES ${configFile} ${versionFile} DESTINATION ${configInstallDestination}) + install(FILES ${config_file} ${version_file} DESTINATION ${config_install_destination}) install( EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME}:: - DESTINATION ${configInstallDestination} + DESTINATION ${config_install_destination} ) endif()