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