diff --git a/CMake/Macros.cmake b/CMake/Macros.cmake index 8653f36b0a..fcc8f53e91 100644 --- a/CMake/Macros.cmake +++ b/CMake/Macros.cmake @@ -87,3 +87,10 @@ macro(curl_required_libpaths _libpaths_arg) list(APPEND CMAKE_REQUIRED_LINK_DIRECTORIES "${_libpaths_arg}") endif() endmacro() + +# Pre-fill variables set by a check_type_size() call. +macro(curl_prefill_type_size _type _size) + set(HAVE_SIZEOF_${_type} TRUE) + set(SIZEOF_${_type} ${_size}) + set(SIZEOF_${_type}_CODE "#define SIZEOF_${_type} ${_size}") +endmacro() diff --git a/CMake/win32-cache.cmake b/CMake/win32-cache.cmake index 05a209971d..a7070dca21 100644 --- a/CMake/win32-cache.cmake +++ b/CMake/win32-cache.cmake @@ -44,10 +44,6 @@ if(MINGW) set(HAVE_UTIME_H 1) # wrapper to sys/utime.h set(HAVE_DIRENT_H 1) set(HAVE_OPENDIR 1) - if(MINGW32CE) - set(HAVE_STRTOK_R 0) - set(HAVE_FILE_OFFSET_BITS 0) - endif() else() set(HAVE_LIBGEN_H 0) set(HAVE_FTRUNCATE 0) @@ -78,7 +74,6 @@ else() set(HAVE_SNPRINTF 0) endif() set(HAVE_BASENAME 0) - set(HAVE_FILE_OFFSET_BITS 0) endif() endif() @@ -196,6 +191,37 @@ set(STDC_HEADERS 1) set(HAVE_SIZEOF_SUSECONDS_T 0) set(HAVE_SIZEOF_SA_FAMILY_T 0) +if(MINGW OR MSVC) + curl_prefill_type_size("INT" 4) + curl_prefill_type_size("LONG" 4) + curl_prefill_type_size("LONG_LONG" 8) + curl_prefill_type_size("__INT64" 8) + curl_prefill_type_size("CURL_OFF_T" 8) + # CURL_SOCKET_T, SIZE_T: 8 for _WIN64, 4 otherwise + # TIME_T: 8 for _WIN64 or UCRT or MSVC and not Windows CE, 4 otherwise + # Also 4 for non-UCRT 32-bit when _USE_32BIT_TIME_T is set. + # mingw-w64 sets _USE_32BIT_TIME_T unless __MINGW_USE_VC2005_COMPAT is explicit defined. + if(MSVC) + set(HAVE_SIZEOF_SSIZE_T 0) + set(HAVE_FILE_OFFSET_BITS 0) + curl_prefill_type_size("OFF_T" 4) + curl_prefill_type_size("ADDRESS_FAMILY" 2) + else() + # SSIZE_T: 8 for _WIN64, 4 otherwise + if(MINGW64_VERSION) + if(NOT MINGW64_VERSION VERSION_LESS 3.0) + set(HAVE_FILE_OFFSET_BITS 1) + curl_prefill_type_size("OFF_T" 8) + endif() + if(NOT MINGW64_VERSION VERSION_LESS 2.0) + curl_prefill_type_size("ADDRESS_FAMILY" 2) + else() + set(HAVE_SIZEOF_ADDRESS_FAMILY 0) + endif() + endif() + endif() +endif() + if(WINCE) # Windows CE exceptions set(HAVE_LOCALE_H 0) set(HAVE_GETADDRINFO 0) @@ -204,7 +230,15 @@ if(WINCE) # Windows CE exceptions set(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 0) set(HAVE_SIGNAL 0) set(HAVE_SETMODE 0) + curl_prefill_type_size("CURL_SOCKET_T" 4) + curl_prefill_type_size("TIME_T" 4) + curl_prefill_type_size("SIZE_T" 4) if(MINGW32CE) + set(HAVE_STRTOK_R 0) set(HAVE__SETMODE 0) + set(HAVE_FILE_OFFSET_BITS 0) + set(HAVE_SIZEOF_ADDRESS_FAMILY 0) + curl_prefill_type_size("SSIZE_T" 4) + curl_prefill_type_size("OFF_T" 4) endif() endif()