From 86f56170b3d4f31fb755a5a8903c7d3dfa99b1b4 Mon Sep 17 00:00:00 2001 From: Federico Fuga Date: Wed, 21 Jun 2023 15:43:51 +0200 Subject: [PATCH] Add support for CMAKE modules. --- CMakeLists.txt | 38 ++++++++++++++++++++++++++++++++- cmake/suscanConfig.cmake.in | 5 +++++ doc/test/project/CMakeLists.txt | 8 +++++++ doc/test/project/test.c | 14 ++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 cmake/suscanConfig.cmake.in create mode 100644 doc/test/project/CMakeLists.txt create mode 100644 doc/test/project/test.c diff --git a/CMakeLists.txt b/CMakeLists.txt index df4c830b..f206a4d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,7 @@ endforeach() include(FindPkgConfig) include(RelativeFileMacro) +include(GNUInstallDirs) # Make sure CMAKE_INSTALL_LIBDIR is defined for all systems if(NOT DEFINED CMAKE_INSTALL_LIBDIR) @@ -373,6 +374,8 @@ set_property(TARGET suscan PROPERTY SOVERSION ${SUSCAN_ABI}) set_property(TARGET suscan PROPERTY COMPILE_FLAGS "${SIGUTILS_SPC_CFLAGS}") set_property(TARGET suscan PROPERTY LINK_FLAGS "${SIGUTILS_SPC_LDFLAGS}") +set_property(TARGET suscan PROPERTY EXPORT_NAME suscan) + # Required dependencies if(APPLE) # Required to retrieve bundle path @@ -389,6 +392,11 @@ if(WIN32) endif() endif() +target_include_directories(suscan INTERFACE + $/${CMAKE_PROJECT_NAME} + $/${CMAKE_PROJECT_NAME}/util + ) + target_link_libraries(suscan m ${SIGUTILS_LIBRARIES}) target_include_directories(suscan SYSTEM PUBLIC ${SNDFILE_INCLUDE_DIRS}) @@ -417,6 +425,24 @@ if(VOLK_FOUND) link_directories(${VOLK_LIBRARY_DIRS}) endif() +# export module +set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") +set(INSTALL_EXPORTS_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) +set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) + +include(CMakePackageConfigHelpers) + +configure_package_config_file( + ${CMAKE_SOURCE_DIR}/cmake/suscanConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/suscanConfig.cmake + INSTALL_DESTINATION ${INSTALL_EXPORTS_DIR} + PATH_VARS INCLUDE_INSTALL_DIR) + +write_basic_package_version_file( + ${CMAKE_BINARY_DIR}/suscanConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + install( FILES ${ANALYZER_LIB_HEADERS} DESTINATION include/suscan/analyzer) @@ -457,7 +483,17 @@ install( FILES src/suscan.h DESTINATION include/suscan) -install(TARGETS suscan DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/suscanConfig.cmake + ${CMAKE_BINARY_DIR}/suscanConfigVersion.cmake + DESTINATION ${INSTALL_EXPORTS_DIR}) + +install(EXPORT suscan-export + FILE suscanTargets.cmake + NAMESPACE suscan:: + DESTINATION ${INSTALL_EXPORTS_DIR}) + +install(TARGETS suscan EXPORT suscan-export DESTINATION ${CMAKE_INSTALL_LIBDIR}) ########################### Suscan test executable ############################ set(SUSCAN_HEADERS ${SRCDIR}/suscan.h) diff --git a/cmake/suscanConfig.cmake.in b/cmake/suscanConfig.cmake.in new file mode 100644 index 00000000..9394b98e --- /dev/null +++ b/cmake/suscanConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") + +check_required_components("@PROJECT_NAME@") \ No newline at end of file diff --git a/doc/test/project/CMakeLists.txt b/doc/test/project/CMakeLists.txt new file mode 100644 index 00000000..c2d3325b --- /dev/null +++ b/doc/test/project/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.20.0) +project(suscanTestPrj) + +find_package(suscan REQUIRED) + +add_executable(suscantest test.c) + +target_link_libraries(suscantest suscan::suscan) \ No newline at end of file diff --git a/doc/test/project/test.c b/doc/test/project/test.c new file mode 100644 index 00000000..cdc52745 --- /dev/null +++ b/doc/test/project/test.c @@ -0,0 +1,14 @@ +// +// Created by happycactus on 21/06/23. +// +#include +#include + +#include + +int main(int argc, char *argv[]) +{ + printf("suscan version: %s ABI: %d\n", suscan_api_version(),suscan_abi_version()); + + return 0; +} \ No newline at end of file