diff --git a/CMakeLists.txt b/CMakeLists.txt index acfefb8c1bed8650be1956964b0e8e5353ddd483..8445adff5cc49c87da01b6781e18bdbf25046d25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,27 +1,43 @@ cmake_minimum_required( VERSION 3.30 FATAL_ERROR ) +message(VERBOSE "Entering libcdi") project(libcdi VERSION 2.5.1 LANGUAGES C ) set(CMAKE_C_STANDARD 11) +include(CTest) include(CheckIncludeFile) -configure_file ( - "${PROJECT_SOURCE_DIR}/cmake/cdi_config.h.in" - "${PROJECT_SOURCE_DIR}/src/config.h" - ) +# enable default internal libs +add_compile_definitions(HAVE_LIBGRIB=1) +add_compile_definitions(HAVE_LIBCGRIBEX=1) +add_compile_definitions(HAVE_LIBEXTRA=1) +add_compile_definitions(HAVE_LIBSERVICE=1) +add_compile_definitions(HAVE_LIBIEG=1) -#NetCDF +# ecCodes +find_package(eccodes) +if (${eccodes_FOUND}) + add_compile_definitions(HAVE_LIBGRIB_API=${eccodes_FOUND}) + message(VERBOSE "added compile definition HAVE_LIBGRIB_API=${eccodes_FOUND}") +else() + message(WARNING "netcdf not found, compiling without netcdf") +endif () + +# NetCDF find_package(netCDF COMPONENTS C REQUIRED) -set(netcdf_flag HAVE_LIBNETCDF) -set(netcdf_flag ${HAVE_LIBNETCDF}) check_include_file("netcdf.h" ${netcdf_flag} C) if (${netCDF_FOUND}) - message(STATUS "added compile definition HAVE_LIBNETCDF=${netCDF_FOUND}") - add_compile_definitions(HAVE_LIBNETCDF=${netCDF_FOUND}) + message(VERBOSE "added compile definition HAVE_LIBNETCDF=${netCDF_FOUND}") + message(VERBOSE "added compile definition HAVE_NETCDF4=${netCDF_FOUND}") + add_compile_definitions(HAVE_LIBNETCDF=${netCDF_FOUND}) + add_compile_definitions(HAVE_NETCDF4=${netCDF_FOUND}) else() message(WARNING "netcdf not found, compiling without netcdf") endif () +message(VERBOSE "looking for config.h in: ${PROJECT_BINARY_DIR}/src") +include_directories( "${PROJECT_BINARY_DIR}/src/config.h") + #adding subdirectories ## lib and general files @@ -29,3 +45,6 @@ add_subdirectory(src) ## cdi executable add_subdirectory(app) +#tests +add_subdirectory( tests ) + diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index ce87f49683bff30ea6f52c4f06e33dc4d1bf135e..73253a6a1bcb5bfc3e040316791229889c3ddd22 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -6,7 +6,4 @@ target_include_directories(cdi PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src> $<INSTALL_INTERFACE:include ) - -target_link_libraries(cdi PUBLIC cdilib netCDF::netcdf ${HDF5_LIBS} pthread) - -target_compile_definitions(cdi PUBLIC HAVE_CONFIG_H) +target_link_libraries(cdi PUBLIC cdilib netCDF::netcdf pthread) diff --git a/cmake/cdi_config.h.in b/cmake/cdi_config.h.in deleted file mode 100644 index e3bfd3225b75696f7fcb8e82af0f6f5b8acccba8..0000000000000000000000000000000000000000 --- a/cmake/cdi_config.h.in +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef cdi_config_h -#define cdi_config_h - -#define PACKAGE_NAME "@PROJECT_NAME@" - -#define VERSION "@PROJECT_VERSION@" - -#define CDI 1 - -#define HAVE_LIBGRIB 1 -#define HAVE_LIBCGRIBEX 1 -#define HAVE_LIBEXTRA 1 -#define HAVE_LIBSERVICE 1 -#define HAVE_LIBIEG 1 - -#define HAVE_NETCDF @HAVE_NETCDF@ -#define HAVE_NETCDF_NC4 @netCDF_HAS_NC4@ -#define NETCDF_FOUND @NetCDF_FOUND@ - -#endif /* cdi_config_h */ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1f88fe09b84956160e7b52fb11ea0605f0b274a3..fca6176d99eb0e940133d841a51a05d6c281be2a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,6 @@ + + + list( APPEND cdi_src_files async_worker.c async_worker.h @@ -137,12 +140,64 @@ list( APPEND cdi_src_files zaxis.c zaxis.h ) +list( APPEND cdi_pio_files + cdipio.h + pio.c + pio.h + pio_cdf_int.c + pio_cdf_int.h + pio_client.c + pio_client.h + pio_comm.c + pio_comm.h + pio_conf.c + pio_conf.h + pio_dbuffer.c + pio_dbuffer.h + pio_dist_grid.c + pio_dist_grid.h + pio_id_set.h + pio_idxlist_cache.c + pio_idxlist_cache.h + pio_impl.h + pio_interface.c + pio_interface.h + pio_mpi_fw_at_all.c + pio_mpi_fw_at_reblock.c + pio_mpi_fw_ordered.c + pio_mpinonb.c + pio_posixasynch.c + pio_posixfpguardsendrecv.c + pio_posixnonb.c + pio_record_send.c + pio_roles.c + pio_rpc.c + pio_rpc.h + pio_serialize.c + pio_serialize.h + pio_server.c + pio_server.h + pio_util.c + pio_util.h + pio_xmap_cache.c + pio_xmap_cache.h +) + +list( APPEND cdi_unknown + cfortran.h + getline.c + gribapi_utilities.c + make_fint.c + resource_unpack.c + resource_unpack.h + stream_gribapi.c +) add_library(cdilib - ${cdi_src_files} + ${cdi_src_files} ${cdi_unknown} # INSTALL_HEADERS_LIST cdi.h ) -find_package(HDF5 REQUIRED COMPONENTS C REQUIRED) - -target_link_libraries(cdilib PUBLIC netCDF::netcdf ${HDF5_LIBS}) -target_compile_definitions(cdilib PUBLIC HAVE_CONFIG_H) +target_link_libraries(cdilib eccodes ${netCDF_LIBRARIES}) +target_compile_definitions(cdilib PRIVATE CDI=1) +target_compile_definitions(cdilib PRIVATE PACKAGE_NAME="cdilib") +target_compile_definitions(cdilib PRIVATE VERSION="${CMAKE_PROJECT_VERSION}") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..cf18bbac6f3fe2a57236f2f68722ee26ea97c9a2 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,43 @@ + +add_executable(calendar_test1.run calendar_test1.c) +add_executable(cksum_read.run cksum_read.c ) +add_executable(cksum_verify.run cksum_verify.c) +add_executable(cksum_write.run cksum_write.c) +add_executable(cksum_write_chunk.run cksum_write_chunk.c) +add_executable(deco2d_model.run deco2d_model.c) +add_executable(ensure_array_size.run ensure_array_size.c) +add_executable(pio_write.run pio_write.c) +add_executable(pio_write_setup_grid.run pio_write_setup_grid.c) +add_executable(simple_model.run simple_model.c) +add_executable(simple_model_helper.run simple_model_helper.c) +add_executable(stream_cksum.run stream_cksum.c) +add_executable(test_byteswap.run test_byteswap.c) +add_executable(test_cdf_read.run test_cdf_read.c) +add_executable(test_cdf_write.run test_cdf_write.c) +add_executable(test_grib.run test_grib.c) +add_executable(test_month_adjust.run test_month_adjust.c) +add_executable(test_resource_copy.run test_resource_copy.c) +add_executable(test_table.run test_table.c) + +get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS) +list(APPEND test_lib_src + var_cksum.c + ensure_array_size.c + stream_cksum.c + simple_model.c + simple_model_helper.c + pio_write_setup_grid.c +) + +add_library(test_lib ${test_lib_src}) +target_include_directories(test_lib PRIVATE ../src/) +target_link_libraries(test_lib PRIVATE cdilib eccodes) + +foreach(target ${current_targets}) + target_include_directories(${target} PRIVATE ../src/) + target_link_libraries(${target} PRIVATE cdilib test_lib ${netCDF_LIBRARIES} ) + add_test(NAME ${target} COMMAND ${target}) + if(labels_${target}) + set_property(TEST ${target} PROPERTY LABELS labels_${target}) + endif() +endforeach()