diff --git a/CMakeLists.txt b/CMakeLists.txt index 5054cd361d0980bb963bdf173831a02649b9eded..6d444fec2cdd41d95728af6e37117ddd9ac16b91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,6 @@ set(CMAKE_C_STANDARD 11) include(CTest) include(CheckIncludeFile) - # Finding libraries ### -------------- Pthread --------------------------- @@ -17,6 +16,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 @@ -45,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) @@ -53,6 +52,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 +70,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 () @@ -82,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 () diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index ff3047c998e1452196ce33d84efc7db3088ef98b..4264972e74952dfc37e3368f88c30b0ced8ecc6e 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 8328f34e5016f9d80817a13c45f0a907e2c33801..26ea963f1b0e27f9204c6cf8a2473d665a556bda 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -190,17 +190,44 @@ 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 ) 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) +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") diff --git a/src/cmake/cdi/cdi-config.cmake.in b/src/cmake/cdi/cdi-config.cmake.in index e34cb86e5e2ca978fc9b156b5277ba1b2eaa8502..f2f972547906a2212567d9e37c5b8461363df4b6 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@" diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cf18bbac6f3fe2a57236f2f68722ee26ea97c9a2..2e02cf49b4dee098c5d3cc809d18159f47944de3 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})