From 62b32dce0cbf1bc070f702d395e554d83f105aa3 Mon Sep 17 00:00:00 2001 From: Mathieu Westphal <mathieu.westphal@kitware.com> Date: Wed, 26 Feb 2025 14:43:38 +0100 Subject: [PATCH 1/5] CMake: Add proper support for optional linking to netcdf and eccodes --- CMakeLists.txt | 3 +++ app/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- tests/CMakeLists.txt | 4 ++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5054cd361..610bdc256 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ if(${CDI_PTHREAD}) find_package(Threads REQUIRED) set_target_properties(Threads::Threads PROPERTIES THREADS_PREFER_PTHREAD_FLAG TRUE) list(APPEND cdi_compile_defs HAVE_PTHREAD=1) + list(APPEND cdi_linked_libs pthread) endif() # enable default internal libs @@ -53,6 +54,7 @@ if(${CDI_ECCODES} OR eccodes_ROOT) if (${eccodes_FOUND}) list(APPEND cdi_compile_defs HAVE_LIBGRIB_API=${eccodes_FOUND}) message(VERBOSE "added compile definition HAVE_LIBGRIB_API=${eccodes_FOUND}") + list(APPEND cdi_linked_libs eccodes) else() message(WARNING "eccodes not found, compiling without eccodes") endif () @@ -70,6 +72,7 @@ if(${CDI_NETCDF} OR netCDF_ROOT ) HAVE_LIBGRIB_API=${netCDF_FOUND} HAVE_LIBGRIB=${netCDF_FOUND} ) + list(APPEND cdi_linked_libs netCDF::netcdf) else() message(WARNING "netcdf target not found, compiling without netcdf") endif () diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index ff3047c99..4264972e7 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -7,6 +7,6 @@ target_include_directories(cdi PRIVATE $<INSTALL_INTERFACE:include ) -target_link_libraries(cdi PRIVATE cdilib netCDF::netcdf pthread) +target_link_libraries(cdi PRIVATE cdilib ${cdi_linked_libs}) target_include_directories(cdi PRIVATE "${PROJECT_BINARY_DIR}/src/config.h") target_compile_definitions(cdi PRIVATE ${cdi_netcdf_definitions}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8328f34e5..f21e7c023 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -199,7 +199,7 @@ add_library(cdilib ) target_include_directories(cdilib PRIVATE "${PROJECT_BINARY_DIR}/src/config.h") -target_link_libraries(cdilib eccodes netCDF::netcdf) +target_link_libraries(cdilib ${cdi_linked_libs}) target_compile_definitions(cdilib PRIVATE PACKAGE_NAME="${PROJECT_NAME}" VERSION="${CMAKE_PROJECT_VERSION}" ${cdi_compile_defs}) add_library(cdilib::cdilib ALIAS cdilib) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cf18bbac6..2e02cf49b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -31,11 +31,11 @@ list(APPEND test_lib_src add_library(test_lib ${test_lib_src}) target_include_directories(test_lib PRIVATE ../src/) -target_link_libraries(test_lib PRIVATE cdilib eccodes) +target_link_libraries(test_lib PRIVATE cdilib ${cdi_linked_libs}) foreach(target ${current_targets}) target_include_directories(${target} PRIVATE ../src/) - target_link_libraries(${target} PRIVATE cdilib test_lib ${netCDF_LIBRARIES} ) + target_link_libraries(${target} PRIVATE cdilib test_lib ${cdi_linked_libs}) add_test(NAME ${target} COMMAND ${target}) if(labels_${target}) set_property(TEST ${target} PROPERTY LABELS labels_${target}) -- GitLab From 95f4b01a6529048aad95dc0ad5379afa04d8b07c Mon Sep 17 00:00:00 2001 From: Mathieu Westphal <mathieu.westphal@kitware.com> Date: Wed, 26 Feb 2025 14:56:47 +0100 Subject: [PATCH 2/5] CMake: Install cdilib, headers and CMake config files --- src/CMakeLists.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f21e7c023..6b212b8d1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -204,3 +204,24 @@ target_compile_definitions(cdilib PRIVATE PACKAGE_NAME="${PROJECT_NAME}" VERSION add_library(cdilib::cdilib ALIAS cdilib) +include(GNUInstallDirs) +install(FILES cdi.h calendar.h cdi_datetime.h julian_date.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") +install(TARGETS cdilib + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +include(CMakePackageConfigHelpers) +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cdi/cdi-config.cmake.in" "${CMAKE_BINARY_DIR}/cmake/cdi-config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/cdi") +write_basic_package_version_file( + "${CMAKE_BINARY_DIR}/cmake/cdi-config-version.cmake" + VERSION "${PACKAGE_VERSION}" + COMPATIBILITY SameMajorVersion) +install( + FILES + "${CMAKE_BINARY_DIR}/cmake/cdi-config.cmake" + "${CMAKE_BINARY_DIR}/cmake/cdi-config-version.cmake" + DESTINATION + "${CMAKE_INSTALL_LIBDIR}/cmake/cdi") -- GitLab From 36f9e72b2fce15c0506a3b7366f37264627baa2f Mon Sep 17 00:00:00 2001 From: Mathieu Westphal <mathieu.westphal@kitware.com> Date: Wed, 26 Feb 2025 14:59:32 +0100 Subject: [PATCH 3/5] CMake: Fix cdi-config.cmake for CMake compatibility Note: This was tested only with CMake, not with Makefile --- src/cmake/cdi/cdi-config.cmake.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cmake/cdi/cdi-config.cmake.in b/src/cmake/cdi/cdi-config.cmake.in index e34cb86e5..f2f972547 100644 --- a/src/cmake/cdi/cdi-config.cmake.in +++ b/src/cmake/cdi/cdi-config.cmake.in @@ -1,9 +1,9 @@ # Config file for lib CDI project # run cmake with CDI_DIR pointing to the directory containing this file. -# set(CDI_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") +set(CDI_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../../..") # use following line instead of previous if this file can be configured -set(CDI_ROOT_DIR "@prefix@") +# set(CDI_ROOT_DIR "@prefix@") find_path(CDI_INCLUDE_DIRECTORY cdi.h @@ -15,7 +15,7 @@ find_path(CDI_INCLUDE_DIRECTORY mark_as_advanced(CDI_INCLUDE_DIRECTORY) find_library(CDI_LIBRARY - NAMES cdi + NAMES cdilib PATHS "${CDI_ROOT_DIR}/lib" # use following line instead of previous if this file can be configured # PATHS "@libdir@" -- GitLab From d6391b756b6ceaa4653658b5e9152d2ab43c4cdd Mon Sep 17 00:00:00 2001 From: Mathieu Westphal <mathieu.westphal@kitware.com> Date: Wed, 26 Feb 2025 15:13:36 +0100 Subject: [PATCH 4/5] CMake: Add option to control building the app and the tests --- CMakeLists.txt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 610bdc256..6d444fec2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,6 @@ set(CMAKE_C_STANDARD 11) include(CTest) include(CheckIncludeFile) - # Finding libraries ### -------------- Pthread --------------------------- @@ -46,7 +45,6 @@ if(${CDI_SERVICE}) list(APPEND cdi_compile_defs HAVE_LIBSERVICE=1) endif() - # ecCodes option(CDI_ECCODES "Use the eccodes library [default=ON]" ON) if(${CDI_ECCODES} OR eccodes_ROOT) @@ -85,8 +83,13 @@ message(VERBOSE "looking for config.h in: ${PROJECT_BINARY_DIR}/src") list(APPEND cdi_compile_defs CDI=1 CDI_SIZE_TYPE=size_t PACKAGE_NAME="${PROJECT_NAME}" VERSION="${CMAKE_PROJECT_VERSION}") add_subdirectory(src) -#tests -add_subdirectory(app) -add_subdirectory(tests) - +#app +option(CDI_BUILD_APP "Build the app" ON) +if (CDI_BUILD_APP) + add_subdirectory(app) +endif () +#tests +if (BUILD_TESTING) + add_subdirectory(tests) +endif () -- GitLab From 9ac79595315b7753d55263c4f347321b1521807d Mon Sep 17 00:00:00 2001 From: Mathieu Westphal <mathieu.westphal@kitware.com> Date: Fri, 28 Feb 2025 10:24:28 +0100 Subject: [PATCH 5/5] CMake: Add control for disabling cdi unknown sources --- src/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6b212b8d1..26ea963f1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -190,11 +190,17 @@ list( APPEND cdi_unknown resource_unpack.h ) +option(CDI_BUILD_UNKNOWN "Build unknown sources in libcdi" ON) +mark_as_advanced(CDI_BUILD_UNKNOWN) +if (CDI_BUILD_UNKNOWN) + list(APPEND cdi_src_files ${cdi_unknown}) +endif () + # Support exporting all symbolds on Windows set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) add_library(cdilib - ${cdi_src_files} ${cdi_unknown} + ${cdi_src_files} # INSTALL_HEADERS_LIST cdi.h ) -- GitLab