mingw-w64 3.0 was released on 2013-09-20. Offered by Debian jessie.
1.0 and 2.0 were released in 2011. It seems unlikely that many people
use them. The oldest downloadable toolchain (that I know of) comes with
3.0. Due to this, older versions weren't CI tested, and probably seldom
tested elsewhere. The last bugfix update for both 1.0 and 2.0 was
released in 2015.
curl can now assume availability of these 3.0 features/fixes:
- 64-bit file offsets.
- `ADDRESS_FAMILY` type.
- `__MINGW_PRINTF_FORMAT` macro. (in public curl headers)
Public curl headers keep supporting older mingw-w64 versions.
Fixes #17984
Closes #18010
curl_prefill_type_size("LONG_LONG" 8)
curl_prefill_type_size("__INT64" 8)
curl_prefill_type_size("CURL_OFF_T" 8)
+ curl_prefill_type_size("ADDRESS_FAMILY" 2) # MSVC or mingw-w64 v2+
# 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.
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(MINGW64_VERSION VERSION_GREATER_EQUAL 3.0)
- set(HAVE_FILE_OFFSET_BITS 1)
- curl_prefill_type_size("OFF_T" 8)
- endif()
- if(MINGW64_VERSION VERSION_GREATER_EQUAL 2.0)
- curl_prefill_type_size("ADDRESS_FAMILY" 2)
- else()
- set(HAVE_SIZEOF_ADDRESS_FAMILY 0)
- endif()
- endif()
+ set(HAVE_FILE_OFFSET_BITS 1) # mingw-w64 v3+
+ curl_prefill_type_size("OFF_T" 8) # mingw-w64 v3+
endif()
endif()
string(REGEX REPLACE "MINGW64_VERSION=" "" MINGW64_VERSION "${CURL_TEST_OUTPUT}")
if(MINGW64_VERSION)
message(STATUS "Found MINGW64_VERSION=${MINGW64_VERSION}")
+ if(MINGW64_VERSION VERSION_LESS 3.0)
+ message(FATAL_ERROR "mingw-w64 3.0 or upper is required")
+ endif()
endif()
endif()
unset(MINGW64_VERSION CACHE) # Avoid storing in CMake cache
# Pre-fill detection results based on target OS version
if(_CURL_PREFILL)
if(NOT HAVE_WIN32_WINNT OR HAVE_WIN32_WINNT LESS 0x0600 OR # older than Windows Vista
- (MINGW AND MINGW64_VERSION VERSION_LESS 2.0) OR
WINCE OR WINDOWS_STORE)
set(HAVE_IF_NAMETOINDEX 0)
unset(HAVE_IF_NAMETOINDEX CACHE)
You can build curl with:
- Microsoft Visual Studio 2008 v9.0 or later (`_MSC_VER >= 1500`)
-- MinGW-w64
+- MinGW-w64 3.0 or later (`__MINGW64_VERSION_MAJOR >= 3`)
## Building Windows DLLs and C runtime (CRT) linkage issues
#endif
#endif
+#if defined(__MINGW32__) && \
+ (!defined(__MINGW64_VERSION_MAJOR) || (__MINGW64_VERSION_MAJOR < 3))
+#error "Building curl requires mingw-w64 3.0 or later"
+#endif
+
/* Visual Studio 2008 is the minimum Visual Studio version we support.
Workarounds for older versions of Visual Studio have been removed. */
#if defined(_MSC_VER) && (_MSC_VER < 1500)
#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600
-#ifdef __MINGW32__
-#ifndef SRWLOCK_INIT
-#define SRWLOCK_INIT NULL
-#endif
-#endif /* __MINGW32__ */
-
#define curl_simple_lock SRWLOCK
#define CURL_SIMPLE_LOCK_INIT SRWLOCK_INIT