]> git.ipfire.org Git - thirdparty/json-c.git/commitdiff
Issue #829: attempt to detect clang-cl.exe and pass MSVC-compatile command line argum...
authorEric Hawicz <erh+git@nimenees.com>
Sat, 30 Mar 2024 02:40:45 +0000 (22:40 -0400)
committerEric Hawicz <erh+git@nimenees.com>
Sat, 30 Mar 2024 02:40:45 +0000 (22:40 -0400)
CMakeLists.txt

index 413ea2197850cccc25e4e9429c360db2508af7b4..130d82753b2ed39e075c05ca88db7808812bd466 100644 (file)
@@ -276,7 +276,24 @@ message(STATUS "Wrote ${PROJECT_BINARY_DIR}/config.h")
 configure_file(${PROJECT_SOURCE_DIR}/cmake/json_config.h.in   ${PROJECT_BINARY_DIR}/json_config.h)
 message(STATUS "Wrote ${PROJECT_BINARY_DIR}/json_config.h")
 
-if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
+if (NOT DEFINED CMAKE_C_COMPILER_FRONTEND_VARIANT)  # only available in cmake 3.14+
+       if ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
+               set(CMAKE_C_COMPILER_FRONTEND_VARIANT "MSVC")
+       elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
+               set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU")
+       elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
+               # Detect clang-cl.exe, it is Clang but with MSVC compatible command line arguments
+               execute_process (COMMAND ${CMAKE_C_COMPILER} -? ERROR_QUIET OUTPUT_QUIET RESULT_VARIABLE _clang_result)
+               if (_clang_result EQUAL 0)
+                       set(CMAKE_C_COMPILER_FRONTEND_VARIANT "MSVC")
+               else()
+                       set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU")
+                       message(STATUS, "clang result is NOT 0")
+               endif()
+       endif()
+endif()
+
+if ("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "Clang")
     set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
        if ("${DISABLE_WERROR}" STREQUAL "OFF")
            set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} -Werror")
@@ -293,11 +310,11 @@ if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL
 
     add_definitions(-D_GNU_SOURCE)
 
-    if ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
+    if ("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "Clang")
         # Remove this for 1.0 when we can bump the ABI and actually fix these warnings.
         set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} -Wno-shorten-64-to-32")
     endif()
-elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
+elseif ("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC")
     set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} /DEBUG")
     set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} /wd4100")
     set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} /wd4996")
@@ -308,7 +325,7 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
     set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} /wd4701")
 endif()
 
-if (NOT ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC"))
+if (NOT ("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC"))
        check_c_source_compiles(
        "
        /* uClibc toolchains without threading barf when _REENTRANT is defined */