From ddd6b7c254cc10e29db57fe266f056cbaa93c2d9 Mon Sep 17 00:00:00 2001 From: Arsenii es3n1n Date: Wed, 12 Jun 2024 08:46:13 +0200 Subject: [PATCH] build: allow `CMAKE_MSVC_RUNTIME_LIBRARY` #1958 (#1960) --- CMakeLists.txt | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71d7c922..9821daf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,22 +122,25 @@ if(MSVC) add_compile_options($<$:/wd4267>) # handle msvcrt setting being passed in CMAKE_C_FLAGS - if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) - # do not support other methods of setting this (it would be more conformant, tho) - message(FATAL_ERROR "please set msvcrt via CMAKE_C_FLAGS") - endif() - if(CMAKE_C_FLAGS MATCHES "[/-]MTd") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug") - elseif(CMAKE_C_FLAGS MATCHES "[/-]MDd") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") - elseif(CMAKE_C_FLAGS MATCHES "[/-]MT") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") - elseif(CMAKE_C_FLAGS MATCHES "[/-]MD") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") - endif() + if(CMAKE_C_FLAGS MATCHES "[/-]M[TD]d?") + # ensure CMAKE_MSVC_RUNTIME_LIBRARY is not already defined + if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) + message(FATAL_ERROR "please set the runtime library via either CMAKE_C_FLAGS or CMAKE_MSVC_RUNTIME_LIBRARY, not both") + endif() - # prevent the arg from occurring more than once (not a big deal, just to keep tidy) - string(REGEX REPLACE "[/-]M[TD]d?" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) + if(CMAKE_C_FLAGS MATCHES "[/-]MTd") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug") + elseif(CMAKE_C_FLAGS MATCHES "[/-]MDd") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") + elseif(CMAKE_C_FLAGS MATCHES "[/-]MT") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") + elseif(CMAKE_C_FLAGS MATCHES "[/-]MD") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") + endif() + + # prevent the arg from occurring more than once (not a big deal, just to keep tidy) + string(REGEX REPLACE "[/-]M[TD]d?" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) + endif() else() if(MINGW) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine