changeset 7146:0dd4240ea372 default tip

trying to enforce the /MT flag with MSVC
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 09 Sep 2026 18:23:13 +0200
parents a9a0d0455dce
children
files NEWS OrthancFramework/Resources/CMake/Compiler.cmake
diffstat 2 files changed, 22 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Wed Sep 09 09:25:46 2026 +0200
+++ b/NEWS	Wed Sep 09 18:23:13 2026 +0200
@@ -11,6 +11,7 @@
 
 * Fixed a TCP socket leak when a DICOM association is received with an invalid calling AET.
 * Added more tolerance to invalid OW value representations
+* Fix use of the static runtime under Visual Studio (/MT), which broke in 1.12.10
 * New CMake options: 
   - "THIRD_PARTY_DOWNLOADS_ROOT_URL" to specify another webserver to downloads the third-parties from.
   - "ORTHANC_SOURCES_DOWNLOADS_ROOT_URL" to specify another webserver to downloads the Orthanc sources from.
--- a/OrthancFramework/Resources/CMake/Compiler.cmake	Wed Sep 09 09:25:46 2026 +0200
+++ b/OrthancFramework/Resources/CMake/Compiler.cmake	Wed Sep 09 18:23:13 2026 +0200
@@ -79,21 +79,29 @@
   endif()
 
 elseif (MSVC)
-  # Use static runtime under Visual Studio
+  # Use static runtime under Visual Studio (i.e., inject the "/MT"
+  # compiler flag to get the "MultiThreaded" static CRT)
   # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace
   # http://stackoverflow.com/a/6510446
-  foreach(flag_var
-    CMAKE_C_FLAGS_DEBUG
-    CMAKE_CXX_FLAGS_DEBUG
-    CMAKE_C_FLAGS_RELEASE
-    CMAKE_CXX_FLAGS_RELEASE
-    CMAKE_C_FLAGS_MINSIZEREL
-    CMAKE_CXX_FLAGS_MINSIZEREL
-    CMAKE_C_FLAGS_RELWITHDEBINFO
-    CMAKE_CXX_FLAGS_RELWITHDEBINFO)
-    string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
-    string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
-  endforeach(flag_var)
+  if(CMAKE_VERSION VERSION_LESS "3.15")
+    # Legacy approach: mangle the flags directly (pre-CMP0091)
+    foreach(flag_var
+        CMAKE_C_FLAGS_DEBUG
+        CMAKE_CXX_FLAGS_DEBUG
+        CMAKE_C_FLAGS_RELEASE
+        CMAKE_CXX_FLAGS_RELEASE
+        CMAKE_C_FLAGS_MINSIZEREL
+        CMAKE_CXX_FLAGS_MINSIZEREL
+        CMAKE_C_FLAGS_RELWITHDEBINFO
+        CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+      string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+      string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
+    endforeach(flag_var)
+  else()
+    # Modern approach: CMP0091 + CMAKE_MSVC_RUNTIME_LIBRARY (new in Orthanc 1.13.1)
+    cmake_policy(SET CMP0091 NEW)
+    set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+  endif()
 
   # Add /Zm256 compiler option to Visual Studio to fix PCH errors
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm256")