]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
cmake: allow `CURL_STATIC_CRT` with UCRT VS2015+ builds
authorViktor Szakats <commit@vsz.me>
Fri, 28 Feb 2025 12:17:39 +0000 (13:17 +0100)
committerViktor Szakats <commit@vsz.me>
Tue, 4 Mar 2025 00:01:09 +0000 (01:01 +0100)
After this patch, we're back to 8.12.1, but disallowing
`CURL_STATIC_CRT=ON` with shared curl exe built with VS2013 or older.
Because those may crash. A stable reprducer is with `ENABLE_DEBUG=ON`
and calling `curl.exe -V`.

You can pass the necessary CMake and MSVC linker options manually,
to get around this condition.

Shared build with static UCRT may be crashing too, depending on
conditions. Consult the documentation about limitations of static CRT:
https://learn.microsoft.com/cpp/c-runtime-library/crt-library-features

Follow-up to 049352dd80e1ab73945c49a3bac2e4a08db32f98 #16516
Follow-up to edfa537100d6b5d2ac1b829c66757880afe59407 #16456
Ref: #16394
Closes #16522

.github/scripts/spellcheck.words
CMakeLists.txt
docs/INSTALL-CMAKE.md

index 6838545cc714d27b95e820b3276ff0043e35f600..7d2efbc54737cc0e954da8234a3c7a1696194104 100644 (file)
@@ -868,6 +868,7 @@ typedef
 typedefed
 Ubuntu
 ucLinux
+UCRT
 UDP
 UI
 UID
index a7962d710aee64d7d284109b9b74598652805c05..3bfea86fe52f3c7e7d1d58daa01f28a8b761389f 100644 (file)
@@ -352,12 +352,12 @@ endif()
 if(WIN32)
   option(CURL_STATIC_CRT "Build libcurl with static CRT with MSVC (/MT)" OFF)
   if(CURL_STATIC_CRT AND MSVC)
-    if(BUILD_STATIC_CURL OR NOT BUILD_CURL_EXE)
+    if(MSVC_VERSION GREATER_EQUAL 1900 OR BUILD_STATIC_CURL OR NOT BUILD_CURL_EXE)
       set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
       string(APPEND CMAKE_C_FLAGS_RELEASE " -MT")
       string(APPEND CMAKE_C_FLAGS_DEBUG " -MTd")
     else()
-      message(WARNING "Static CRT requires static or no curl executable.")
+      message(WARNING "Static CRT requires UCRT, static libcurl or no curl executable.")
     endif()
   endif()
 endif()
index d3439662e4ad69437e61ccee45fa2b6d7922fbef..629118fdf6aa03da66da7dbcb8a5470234e9cb1e 100644 (file)
@@ -238,7 +238,7 @@ target_link_libraries(my_target PRIVATE CURL::libcurl)
 - `CURL_LIBCURL_VERSIONED_SYMBOLS`:         Enable libcurl versioned symbols. Default: `OFF`
 - `CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX`:  Override default versioned symbol prefix. Default: `<TLS-BACKEND>_` or `MULTISSL_`
 - `CURL_LTO`:                               Enable compiler Link Time Optimizations. Default: `OFF`
-- `CURL_STATIC_CRT`:                        Build libcurl with static CRT with MSVC (`/MT`) (requires static or no curl executable). Default: `OFF`
+- `CURL_STATIC_CRT`:                        Build libcurl with static CRT with MSVC (`/MT`) (requires UCRT, static libcurl or no curl executable). Default: `OFF`
 - `CURL_TARGET_WINDOWS_VERSION`:            Minimum target Windows version as hex string.
 - `CURL_TEST_BUNDLES`:                      Bundle `libtest` and `unittest` tests into single binaries. Default: `OFF`
 - `CURL_WERROR`:                            Turn compiler warnings into errors. Default: `OFF`