Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • b383306/libcdi
  • mpim-sw/libcdi
  • m214007/libcdi
3 results
Show changes
Commits on Source (19)
......@@ -136,3 +136,16 @@ libtool
*.dSYM
.DS_Store
# Cmake
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
CMakeUserPresets.json
cmake_minimum_required( VERSION 3.30 FATAL_ERROR )
cmake_minimum_required( VERSION 3.27 FATAL_ERROR )
message(VERBOSE "Entering libcdi")
project(libcdi VERSION 2.5.1 LANGUAGES C )
project(cdilib VERSION 2.5.1 LANGUAGES C )
set(CMAKE_C_STANDARD 11)
include(CTest)
include(CheckIncludeFile)
# Finding libraries
### -------------- Pthread ---------------------------
option(CDI_PTHREAD "Use the pthread library [default=ON]" ON)
if(${CDI_PTHREAD})
include(FindThreads)
find_package(Threads REQUIRED)
set_target_properties(Threads::Threads PROPERTIES THREADS_PREFER_PTHREAD_FLAG TRUE)
list(APPEND cdi_compile_defs HAVE_PTHREAD=1)
endif()
# 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)
option(CDI_LIBGRIB "GRIB support [default=ON]" ON)
if(${CDI_LIBGRIB})
list(APPEND cdi_compile_defs HAVE_LIBGRIB=1)
endif()
option(CDI_LIBGRIBEX "Use the CGRIBEX library [default=ON]" ON)
if(${CDI_LIBGRIBEX})
list(APPEND cdi_compile_defs LIBCGRIBEX=1)
endif()
option(CDI_EXTRA "Use the extra library [default=ON]" ON)
if(${CDI_EXTRA})
list(APPEND cdi_compile_defs HAVE_LIBEXTRA=1)
endif()
option(CDI_IEG "Use the extra library [default=ON]" ON)
if(${CDI_IEG})
list(APPEND cdi_compile_defs HAVE_LIBIEG=1)
endif()
option(CDI_SERVICE "Use the extra library [default=ON]" ON)
if(${CDI_SERVICE})
list(APPEND cdi_compile_defs HAVE_LIBSERVICE=1)
endif()
# 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 ()
option(CDI_ECCODES "Use the eccodes library [default=ON]" ON)
if(${CDI_ECCODES} OR eccodes_ROOT)
find_package(eccodes)
if (${eccodes_FOUND})
list(APPEND cdi_compile_defs HAVE_LIBGRIB_API=${eccodes_FOUND})
message(VERBOSE "added compile definition HAVE_LIBGRIB_API=${eccodes_FOUND}")
else()
message(WARNING "eccodes not found, compiling without eccodes")
endif ()
endif()
# NetCDF
find_package(netCDF COMPONENTS C REQUIRED)
check_include_file("netcdf.h" ${netcdf_flag} C)
if (${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 ()
option(CDI_NETCDF "Use the netcdf library [default=ON]" ON)
if(${CDI_NETCDF} OR netCDF_ROOT )
find_package(netCDF COMPONENTS C REQUIRED)
if (TARGET netCDF::netcdf)
list(APPEND cdi_compile_defs
HAVE_LIBNETCDF=${netCDF_FOUND}
HAVE_LIBNC_DAP=${netCDF_FOUND}
HAVE_NETCDF4=${netCDF_FOUND}
HAVE_LIBGRIB_API=${netCDF_FOUND}
HAVE_LIBGRIB=${netCDF_FOUND}
)
else()
message(WARNING "netcdf target not found, compiling without netcdf")
endif ()
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
list(APPEND cdi_compile_defs CDI=1 CDI_SIZE_TYPE=size_t PACKAGE_NAME="${PROJECT_NAME}" VERSION="${CMAKE_PROJECT_VERSION}")
add_subdirectory(src)
## cdi executable
add_subdirectory(app)
#tests
add_subdirectory( tests )
add_subdirectory(app)
add_subdirectory(tests)
......@@ -2,8 +2,11 @@ add_executable(cdi
cdi.c printinfo.c
)
target_include_directories(cdi PUBLIC
target_include_directories(cdi PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:include
)
target_link_libraries(cdi PUBLIC cdilib netCDF::netcdf pthread)
target_link_libraries(cdi PRIVATE cdilib netCDF::netcdf pthread)
target_include_directories(cdi PRIVATE "${PROJECT_BINARY_DIR}/src/config.h")
target_compile_definitions(cdi PRIVATE ${cdi_netcdf_definitions})
......@@ -190,12 +190,17 @@ list( APPEND cdi_unknown
resource_unpack.h
)
# Support exporting all symbolds on Windows
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
add_library(cdilib
${cdi_src_files} ${cdi_unknown}
# INSTALL_HEADERS_LIST cdi.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}")
target_include_directories(cdilib PRIVATE "${PROJECT_BINARY_DIR}/src/config.h")
target_link_libraries(cdilib eccodes netCDF::netcdf)
target_compile_definitions(cdilib PRIVATE PACKAGE_NAME="${PROJECT_NAME}" VERSION="${CMAKE_PROJECT_VERSION}" ${cdi_compile_defs})
add_library(cdilib::cdilib ALIAS cdilib)
......@@ -1450,6 +1450,9 @@ extern int (*proj_stere_to_lonlat_func)(struct CDI_GridProjParams gpp, double, d
// Used on CDO remap_scrip_io.cc
void cdf_def_var_filter(int ncid, int ncvarID, const char *filterSpec);
int cdi_has_dap();
int cdi_has_cgribex();
#ifdef __cplusplus
}
#endif
......
......@@ -590,6 +590,24 @@ stream_def_accesstype(stream_t *s, int type)
Error("Changing access type from %s not allowed!", s->accesstype == TYPE_REC ? "REC to VAR" : "VAR to REC");
}
int
cdi_has_dap()
{
#ifdef HAVE_LIBNC_DAP
return 1;
#endif
return 0;
}
int
cdi_has_cgribex()
{
#ifdef HAVE_LIBCGRIBEX
return 1;
#endif
return 0;
}
/*
* Local Variables:
* c-file-style: "Java"
......
......@@ -3,7 +3,6 @@
#endif
#include <unistd.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
......
......@@ -24,7 +24,9 @@ int cdiUUIDIsNull(const unsigned char uuid[])
return isNull;
}
#ifndef _WIN32
void cdiCreateUUID(unsigned char uuid[CDI_UUID_SIZE]);
#endif
int cdiUUID2Str(const unsigned char uuid[], char uuidstr[]);
int cdiStr2UUID(const char *uuidstr, unsigned char uuid[]);
......
......@@ -10,19 +10,25 @@
#include "config.h"
#endif
#include <unistd.h>
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
// On Windows, define ssize_t manually
#ifdef _WIN32
#define ssize_t __int64
#include <io.h>
#else
#include <unistd.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h> // gettimeofday()
......@@ -392,7 +398,7 @@ fileFlush(int fileID)
{
FILE *fp = fileptr->fp;
retval = fflush(fp);
if (retval == 0) retval = fsync(fileno(fp));
if (retval == 0) retval = fflush(fp);
if (retval != 0) retval = errno;
}
......
......@@ -14,6 +14,9 @@
#include <stdlib.h>
#include <stdbool.h>
#include <float.h>
// Required on windows to be able to use M_PI
#define _USE_MATH_DEFINES
#include <math.h>
#ifndef M_SQRT2
......
......@@ -18,9 +18,20 @@
#include <errno.h>
#include <fcntl.h>
#include <pthread.h>
#include <string.h>
// On Windows, define ssize_t and pread manually
#ifdef _WIN32
#define ssize_t __int64
#define pread read
#include <io.h>
#else
#include <unistd.h>
#endif
#if HAVE_PTHREAD
#include <pthread.h>
#endif
static void cdiInputFile_destruct(CdiInputFile *me);
......@@ -64,7 +75,9 @@ success:
static CdiInputFile **openFileList = NULL;
static size_t openFileCount = 0, openFileListSize = 0;
#if HAVE_PTHREAD
static pthread_mutex_t openFileListLock = PTHREAD_MUTEX_INITIALIZER;
#endif
// This either returns a new object, or retains and returns a preexisting open file.
CdiInputFile *
......@@ -72,8 +85,10 @@ cdiInputFile_make(const char *path)
{
CdiInputFile *result = NULL;
xassert(path);
#if HAVE_PTHREAD
int error = pthread_mutex_lock(&openFileListLock);
xassert(!error);
#endif
{
// Check the list of open files for the given path.
for (size_t i = openFileCount; i-- && !result;)
......@@ -108,8 +123,10 @@ cdiInputFile_make(const char *path)
}
}
}
#if HAVE_PTHREAD
error = pthread_mutex_unlock(&openFileListLock);
xassert(!error);
#endif
return result;
}
......@@ -142,8 +159,10 @@ cdiInputFile_getPath(const CdiInputFile *me)
void
cdiInputFile_destruct(CdiInputFile *me)
{
#if HAVE_PTHREAD
int error = pthread_mutex_lock(&openFileListLock);
xassert(!error);
#endif
{
// Find the position of me in the list of open files.
ssize_t position = (ssize_t) openFileCount;
......@@ -152,8 +171,10 @@ cdiInputFile_destruct(CdiInputFile *me)
// Remove me from the list
openFileList[position] = openFileList[--openFileCount];
}
#if HAVE_PTHREAD
error = pthread_mutex_unlock(&openFileListLock);
xassert(!error);
#endif
cdiInputFile_condestruct(me, NULL);
}
......
......@@ -20,6 +20,13 @@
#include <limits.h>
#include <stdlib.h>
// On Windows, define ssize_t manually
#ifdef _WIN32
#define ssize_t __int64
#else
#include <unistd.h>
#endif
struct CdiFallbackIterator
{
CdiIterator super;
......
......@@ -6,7 +6,6 @@
#include <ctype.h>
#include <limits.h>
#include <strings.h>
#include "dmemory.h"
#include "cdi_int.h"
......@@ -19,6 +18,13 @@
#include "cdf_lazy_grid.h"
#include "cdf_filter.h"
// On Windows, define strcasecmp manually
#ifdef _WIN32
#define strcasecmp _stricmp
#else
#include <unistd.h>
#endif
enum VarStatus
{
UndefVar = -1,
......@@ -1155,7 +1161,7 @@ set_vars_chunks(int ncid, int ncvarid, int nvdims, ncvar_t *ncvar)
ncvar->hasFilter = cdf_get_var_filter(ncid, ncvarid, ncvar->filterSpec, CDI_MAX_NAME);
// if (ncvar->hasFilter) printf("filterSpec: %s=%s\n", ncvar->name, ncvar->filterSpec);
size_t chunks[nvdims];
size_t chunks[MAX_DIMS_CDF];
int storageIn;
if (nc_inq_var_chunking(ncid, ncvarid, &storageIn, chunks) == NC_NOERR)
{
......
......@@ -100,6 +100,7 @@ cdiUnescapeSpaces(const char *string, const char **outStringEnd)
return result;
}
#ifndef _WIN32
#if defined(HAVE_DECL_UUID_GENERATE) && defined(HAVE_UUID_UUID_H)
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
......@@ -252,6 +253,7 @@ cdiCreateUUID(unsigned char *uuid)
#endif
}
#endif
#endif
/*
* Local Variables:
......