diff --git a/cmake/sigutilsConfig.cmake.in b/cmake/sigutilsConfig.cmake.in new file mode 100644 index 0000000..25db16f --- /dev/null +++ b/cmake/sigutilsConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") + +check_required_components("@PROJECT_NAME@") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 246e219..f9193c5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -77,7 +77,9 @@ add_library(sigutils SHARED ${SRCS}) target_add_relative_file_macro(sigutils) # Add public include directories -target_include_directories(sigutils PUBLIC include/) +target_include_directories(sigutils + INTERFACE $ + PRIVATE ${CMAKE_SOURCE_DIR}/src/include/) # Extra compilation definitions if(SIGUTILS_SINGLE_PRECISSION) @@ -91,6 +93,7 @@ endif() # Target properties set_property(TARGET sigutils PROPERTY VERSION ${SIGUTILS_VERSION}) set_property(TARGET sigutils PROPERTY SOVERSION ${SIGUTILS_ABI_VERSION}) +set_property(TARGET sigutils PROPERTY EXPORT_NAME ${PROJECT_NAME}) # Target dependencies target_link_libraries(sigutils ${SNDFILE_LIBRARIES}) @@ -110,10 +113,50 @@ endif() target_pc_file_generate(sigutils "Digital signal processing utility library") # File install -install(TARGETS sigutils LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT LIB) +install(TARGETS sigutils + EXPORT sigutils-export + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT LIB) + install(DIRECTORY include/sigutils DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT DEVEL) + install(FILES ${PROJECT_BINARY_DIR}/src/sigutils.pc DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR} COMPONENT DEVEL) +set(INSTALL_EXPORTS_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) +set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) +set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) + +install(EXPORT sigutils-export + FILE sigutilsTargets.cmake + NAMESPACE sigutils:: + DESTINATION ${INSTALL_EXPORTS_DIR} + ) + +set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") +set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") +set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") +set(namespace "${PROJECT_NAME}::") + +include(CMakePackageConfigHelpers) + +configure_package_config_file( + ${CMAKE_SOURCE_DIR}/cmake/sigutilsConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/sigutilsConfig.cmake + INSTALL_DESTINATION ${INSTALL_EXPORTS_DIR} + PATH_VARS INCLUDE_INSTALL_DIR) + +write_basic_package_version_file( + ${CMAKE_BINARY_DIR}/sigutilsConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/sigutilsConfig.cmake + ${CMAKE_BINARY_DIR}/sigutilsConfigVersion.cmake + DESTINATION ${INSTALL_EXPORTS_DIR} + ) + + # General packaging settings set(CPACK_PACKAGE_NAME sigutils) set(CPACK_PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/dist) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9eec302..6f6e160 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -3,7 +3,7 @@ find_package(Catch2) if(Catch2_FOUND) # General options file(GLOB_RECURSE TEST_SRCS LIST_DIRECTORIES false *.cpp) - add_executable(sigutils_test EXCLUDE_FROM_ALL ${TEST_SRCS}) + add_executable(sigutils_test EXCLUDE_FROM_ALL ${TEST_SRCS} cmake_tests/test.c) target_include_directories(sigutils_test PUBLIC $) target_compile_definitions(sigutils_test PUBLIC $) target_link_libraries(sigutils_test $) diff --git a/tests/cmake_tests/CMakeLists.txt b/tests/cmake_tests/CMakeLists.txt new file mode 100644 index 0000000..a3821cf --- /dev/null +++ b/tests/cmake_tests/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.20.0) +project(testCmakeSigUtils) + +find_package(sigutils REQUIRED) + +add_executable(testCmakeSigUtils test.c) + +target_link_libraries(testCmakeSigUtils sigutils::sigutils) \ No newline at end of file diff --git a/tests/cmake_tests/test.c b/tests/cmake_tests/test.c new file mode 100644 index 0000000..592ee5f --- /dev/null +++ b/tests/cmake_tests/test.c @@ -0,0 +1,17 @@ +// +// Created by happycactus on 20/06/23. +// + +#include +#include + +#include + +int main(int argc, char *argv[]) +{ + su_lib_init(); + + printf("Testing sigutils version: %08x ABI: %d\n", SIGUTILS_VERSION, SIGUTILS_ABI_VERSION); + + return 0; +} \ No newline at end of file