From ddd4c39736a0960ba466632cbf8cf76ceb2c59bc Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Sat, 11 Jan 2020 01:04:14 +0100 Subject: [PATCH] Fix the c99/cmake build under Cygwin/MSYS2 When building zst under cygwin or msys2 with std=c99 the build would fail because of an undefined fileno()/_fileno(), which is used by the IS_CONSOLE() macro. When building with -std=c99 (gcc otherwise defaults to gnu, which implies POSIX), which is the default of the cmake build, then including unistd.h wont define _POSIX_VERSION and all other headers also wont expose POSIX API. To fix this make sure to define _POSIX_C_SOURCE with the version we want before including unistd.h and so that _POSIX_VERSION is set to the version provided by the system. Since Cygwin/MSYS2 just follow POSIX we can also remove their special cases for defining IS_CONSOLE(). And, for completeness, also explicitly include stdio.h which is what actually declares fileno(). Tested with the normal make file and cmake under MSYS2 and Cygwin. --- programs/platform.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/programs/platform.h b/programs/platform.h index 64ecd21f..31820631 100644 --- a/programs/platform.h +++ b/programs/platform.h @@ -90,7 +90,7 @@ extern "C" { && ( defined(__unix__) || defined(__unix) \ || defined(__midipix__) || defined(__VMS) || defined(__HAIKU__) ) -# if defined(__linux__) || defined(__linux) +# if defined(__linux__) || defined(__linux) || defined(__CYGWIN__) # ifndef _POSIX_C_SOURCE # define _POSIX_C_SOURCE 200809L /* feature test macro : https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html */ # endif @@ -123,11 +123,11 @@ extern "C" { ************************************************/ #if (defined(__linux__) && (PLATFORM_POSIX_VERSION > 1)) \ || (PLATFORM_POSIX_VERSION >= 200112L) \ - || defined(__DJGPP__) \ - || defined(__MSYS__) + || defined(__DJGPP__) # include /* isatty */ +# include /* fileno */ # define IS_CONSOLE(stdStream) isatty(fileno(stdStream)) -#elif defined(MSDOS) || defined(OS2) || defined(__CYGWIN__) +#elif defined(MSDOS) || defined(OS2) # include /* _isatty */ # define IS_CONSOLE(stdStream) _isatty(_fileno(stdStream)) #elif defined(WIN32) || defined(_WIN32)