From e30f57b70eb3210569e6c26eb954b418332d7c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 19 Jul 2024 13:44:41 +0200 Subject: [PATCH 1/3] Using same cmake config path for all OS --- CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3eb435fa..3ceef9c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -317,11 +317,7 @@ ENDIF() # CMake project configuration export # ********************************** -if(UNIX) - set(CONF_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/libtins") -else() - set(CONF_CMAKE_INSTALL_DIR CMake) -endif() +set(CONF_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/libtins") # Add all targets to the build-tree export set EXPORT( From c4dbee544441fd08a78266b32d36018630a233fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 19 Jul 2024 13:46:11 +0200 Subject: [PATCH 2/3] Add a target for found PCAP library --- cmake/Modules/FindPCAP.cmake | 12 ++++++++++-- src/CMakeLists.txt | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/FindPCAP.cmake b/cmake/Modules/FindPCAP.cmake index 388b30b6..f931e317 100644 --- a/cmake/Modules/FindPCAP.cmake +++ b/cmake/Modules/FindPCAP.cmake @@ -42,10 +42,18 @@ find_library(PCAP_LIBRARY HINTS ${HINT_DIR} ) +if (PCAP_LIBRARY AND PCAP_INCLUDE_DIR) + add_library(PCAP::pcap UNKNOWN IMPORTED) + set_target_properties(PCAP::pcap + PROPERTIES + IMPORTED_LOCATION "${PCAP_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${PCAP_INCLUDE_DIR}") + set(PCAP_LIBRARIES PCAP::pcap) +endif () + include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PCAP DEFAULT_MSG - PCAP_LIBRARY - PCAP_INCLUDE_DIR + PCAP_LIBRARIES PCAP_LIBRARY PCAP_INCLUDE_DIR ) include(CheckCXXSourceCompiles) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8dc4fc82..5a5d2e9c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -214,7 +214,7 @@ ADD_LIBRARY( ${HEADERS} ) -TARGET_LINK_LIBRARIES(tins ${PCAP_LIBRARY} ${OPENSSL_LIBRARIES} ${LIBTINS_OS_LIBS}) +TARGET_LINK_LIBRARIES(tins PUBLIC ${PCAP_LIBRARIES} ${OPENSSL_LIBRARIES} ${LIBTINS_OS_LIBS}) SET_TARGET_PROPERTIES(tins PROPERTIES OUTPUT_NAME tins) SET_TARGET_PROPERTIES(tins PROPERTIES VERSION ${LIBTINS_VERSION} SOVERSION ${LIBTINS_VERSION} ) From c21bb1a9a5b4cbf0925a7b7fdc2da5ffc96d85a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 19 Jul 2024 13:47:58 +0200 Subject: [PATCH 3/3] Improve libtins config cmake file - Use CMakePackageConfigHelpers macro to generate the config file. - Uses relative path to seach for libtins includes. - Install the FindPCAP.cmake file & search for PCAP dependency - Set the include directory interface directly on target --- CMakeLists.txt | 16 +++++++++++++--- cmake/libtinsConfig.cmake.in | 19 +++++++++++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ceef9c3..8704308c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -328,23 +328,33 @@ EXPORT( # Export the package for use from the build-tree # (this registers the build-tree with a global CMake-registry) EXPORT(PACKAGE libtins) +INCLUDE(CMakePackageConfigHelpers) # Create the libtinsConfig.cmake and libtinsConfigVersion.cmake files # for the build tree -SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include") -CONFIGURE_FILE( +SET(CONF_INCLUDE_DIRS "include") +CONFIGURE_PACKAGE_CONFIG_FILE( cmake/libtinsConfig.cmake.in - "${PROJECT_BINARY_DIR}/libtinsConfig.cmake" @ONLY + "${PROJECT_BINARY_DIR}/libtinsConfig.cmake" + INSTALL_DESTINATION ${CONF_CMAKE_INSTALL_DIR} + PATH_VARS CONF_INCLUDE_DIRS ) CONFIGURE_FILE( cmake/libtinsConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/libtinsConfigVersion.cmake" @ONLY ) +CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindPCAP.cmake" + "${PROJECT_BINARY_DIR}/FindPCAP.cmake" + COPYONLY +) + # Install the libtinsConfig.cmake and libtinsConfigVersion.cmake INSTALL( FILES "${PROJECT_BINARY_DIR}/libtinsConfig.cmake" "${PROJECT_BINARY_DIR}/libtinsConfigVersion.cmake" + "${PROJECT_BINARY_DIR}/FindPCAP.cmake" DESTINATION ${CONF_CMAKE_INSTALL_DIR} COMPONENT dev ) diff --git a/cmake/libtinsConfig.cmake.in b/cmake/libtinsConfig.cmake.in index 183b245c..fa8fd2fd 100644 --- a/cmake/libtinsConfig.cmake.in +++ b/cmake/libtinsConfig.cmake.in @@ -3,14 +3,29 @@ # LIBTINS_INCLUDE_DIRS - include directories for libtins # LIBTINS_LIBRARIES - libraries to link against -# Compute paths +@PACKAGE_INIT@ + +set("${CMAKE_FIND_PACKAGE_NAME}_CMAKE_MODULE_PATH_save" "${CMAKE_MODULE_PATH}") +list(INSERT CMAKE_MODULE_PATH 0 + "${CMAKE_CURRENT_LIST_DIR}") + get_filename_component(LIBTINS_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -set(LIBTINS_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@") +set_and_check(LIBTINS_INCLUDE_DIRS "@PACKAGE_CONF_INCLUDE_DIRS@") + +include(CMakeFindDependencyMacro) +find_dependency(PCAP) # Our library dependencies (contains definitions for IMPORTED targets) if(NOT TARGET libtins AND NOT LIBTINS_BINARY_DIR) include("${LIBTINS_CMAKE_DIR}/libtinsTargets.cmake") + + set_target_properties(tins + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LIBTINS_INCLUDE_DIRS}") endif() # These are IMPORTED targets created by libtinsTargets.cmake set(LIBTINS_LIBRARIES tins) + +set(CMAKE_MODULE_PATH "${${CMAKE_FIND_PACKAGE_NAME}_CMAKE_MODULE_PATH_save}") +unset("${CMAKE_FIND_PACKAGE_NAME}_CMAKE_MODULE_PATH_save") \ No newline at end of file