From: Viktor Szakats Date: Thu, 24 Jul 2025 00:57:49 +0000 (+0200) Subject: build: bump minimum required mingw-w64 to v3.0 (from v1.0) X-Git-Tag: curl-8_16_0~362 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a28f5f68b965119d9dd1ab6c2a2ccc66c6ed5d1f;p=thirdparty%2Fcurl.git build: bump minimum required mingw-w64 to v3.0 (from v1.0) 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 --- diff --git a/CMake/win32-cache.cmake b/CMake/win32-cache.cmake index 4fe9eb1139..cb2e45cf56 100644 --- a/CMake/win32-cache.cmake +++ b/CMake/win32-cache.cmake @@ -191,6 +191,7 @@ if(MINGW OR MSVC) 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. @@ -199,20 +200,10 @@ if(MINGW OR 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(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() diff --git a/CMakeLists.txt b/CMakeLists.txt index d113989a5c..f3041b652d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -246,6 +246,9 @@ if(WIN32) 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 @@ -1595,7 +1598,6 @@ if(WIN32) # 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) diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 410fba07d4..0c53731710 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -181,7 +181,7 @@ Building for Windows XP is required as a minimum. 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 diff --git a/lib/curl_setup.h b/lib/curl_setup.h index fc5359d1b4..36da5c6cbf 100644 --- a/lib/curl_setup.h +++ b/lib/curl_setup.h @@ -75,6 +75,11 @@ #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) diff --git a/lib/easy_lock.h b/lib/easy_lock.h index 2d705174be..909753f43a 100644 --- a/lib/easy_lock.h +++ b/lib/easy_lock.h @@ -30,12 +30,6 @@ #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