diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b7dde6384f20bb9a53d8a8cec63f15517faa3d4b..8328f34e5016f9d80817a13c45f0a907e2c33801 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -190,6 +190,9 @@ 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 diff --git a/src/cdi_uuid.h b/src/cdi_uuid.h index e55d3a8959c4abd9c4393d1367ee78eddd3b4dc3..cbb3071899d9434c23eb65d195c90400b4863811 100644 --- a/src/cdi_uuid.h +++ b/src/cdi_uuid.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[]); diff --git a/src/file.c b/src/file.c index 2086da8a5643a461bf96f56909a7f5dba5fc8578..d38c5a2516b3955fbb13bad9f8553f82e8553b2b 100644 --- a/src/file.c +++ b/src/file.c @@ -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; } diff --git a/src/gaussian_latitudes.c b/src/gaussian_latitudes.c index 7196999fc060af391969c8193574959dbaa89ed1..f62954c319556df722c1c02897dca50f86cf7d39 100644 --- a/src/gaussian_latitudes.c +++ b/src/gaussian_latitudes.c @@ -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 diff --git a/src/input_file.c b/src/input_file.c index f34d24c483870b9a222411d7393fe42e325dda4d..11df000c99bb693605e2d3694b529d8b99287d14 100644 --- a/src/input_file.c +++ b/src/input_file.c @@ -19,7 +19,15 @@ #include <errno.h> #include <fcntl.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> diff --git a/src/iterator_fallback.c b/src/iterator_fallback.c index a2252bd8a39703bdc634fad595eb971b93ef6056..fd7bc6db7bc393b64ff4c1be216159d30d0abed8 100644 --- a/src/iterator_fallback.c +++ b/src/iterator_fallback.c @@ -19,7 +19,13 @@ #include <assert.h> #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 { diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index 708565eca2d203f3921481b4e1b13fec86ada144..3096c518c8518a88ae9114558489334cfc903126 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -6,7 +6,6 @@ #include <ctype.h> #include <limits.h> -#include <unistd.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, diff --git a/src/util.c b/src/util.c index 7eada35c9d6a99e63190757c9da6c3011af3e68e..df97d6a0cc6fdafd74a53c62f8848022d6c3c771 100644 --- a/src/util.c +++ b/src/util.c @@ -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: