|
|
@@ -24,16 +24,21 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|
|
|
|
|
# Try building with no extra flags and then try each set
|
|
|
# of helper flags. Stop when the compiler is identified.
|
|
|
- foreach(flags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}
|
|
|
- ""
|
|
|
- ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
|
|
- CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}")
|
|
|
- CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
|
|
|
- if(CMAKE_${lang}_COMPILER_ID)
|
|
|
- break()
|
|
|
- endif()
|
|
|
- foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
|
|
|
- CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
|
|
|
+ foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
|
|
|
+ foreach(testflags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}
|
|
|
+ ""
|
|
|
+ ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
|
|
+ CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${testflags}" "${userflags}" "${src}")
|
|
|
+ CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
|
|
|
+ if(CMAKE_${lang}_COMPILER_ID)
|
|
|
+ break()
|
|
|
+ endif()
|
|
|
+ foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
|
|
|
+ CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
|
|
|
+ endforeach()
|
|
|
+ if(CMAKE_${lang}_COMPILER_ID)
|
|
|
+ break()
|
|
|
+ endif()
|
|
|
endforeach()
|
|
|
if(CMAKE_${lang}_COMPILER_ID)
|
|
|
break()
|
|
|
@@ -42,7 +47,9 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|
|
|
|
|
# If the compiler is still unknown, try to query its vendor.
|
|
|
if(CMAKE_${lang}_COMPILER AND NOT CMAKE_${lang}_COMPILER_ID)
|
|
|
- CMAKE_DETERMINE_COMPILER_ID_VENDOR(${lang})
|
|
|
+ foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
|
|
|
+ CMAKE_DETERMINE_COMPILER_ID_VENDOR(${lang} "${userflags}")
|
|
|
+ endforeach()
|
|
|
endif()
|
|
|
|
|
|
if (COMPILER_QNXNTO AND CMAKE_${lang}_COMPILER_ID STREQUAL "GNU")
|
|
|
@@ -66,7 +73,9 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|
|
endif()
|
|
|
|
|
|
if(CMAKE_GENERATOR STREQUAL "Ninja" AND MSVC_${lang}_ARCHITECTURE_ID)
|
|
|
- CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX(${lang})
|
|
|
+ foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
|
|
|
+ CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX(${lang} "${userflags}")
|
|
|
+ endforeach()
|
|
|
else()
|
|
|
set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "")
|
|
|
endif()
|
|
|
@@ -127,7 +136,7 @@ endfunction()
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Function to build the compiler id source file and look for output
|
|
|
# files.
|
|
|
-function(CMAKE_DETERMINE_COMPILER_ID_BUILD lang testflags src)
|
|
|
+function(CMAKE_DETERMINE_COMPILER_ID_BUILD lang testflags userflags src)
|
|
|
# Create a clean working directory.
|
|
|
file(REMOVE_RECURSE ${CMAKE_${lang}_COMPILER_ID_DIR})
|
|
|
file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR})
|
|
|
@@ -137,7 +146,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_BUILD lang testflags src)
|
|
|
# Construct a description of this test case.
|
|
|
set(COMPILER_DESCRIPTION
|
|
|
"Compiler: ${CMAKE_${lang}_COMPILER} ${CMAKE_${lang}_COMPILER_ID_ARG1}
|
|
|
-Build flags: ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}
|
|
|
+Build flags: ${userflags}
|
|
|
Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
|
|
|
")
|
|
|
|
|
|
@@ -327,7 +336,7 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
|
|
|
execute_process(
|
|
|
COMMAND "${CMAKE_${lang}_COMPILER}"
|
|
|
${CMAKE_${lang}_COMPILER_ID_ARG1}
|
|
|
- ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}
|
|
|
+ ${userflags}
|
|
|
${testflags}
|
|
|
${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
|
|
|
"${src}"
|
|
|
@@ -615,7 +624,7 @@ endfunction()
|
|
|
# set(CMAKE_${lang}_COMPILER_ID_VENDOR_REGEX_${vendor} "Some Vendor Output")
|
|
|
# We try running the compiler with the flag for each vendor and
|
|
|
# matching its regular expression in the output.
|
|
|
-function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang)
|
|
|
+function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang userflags)
|
|
|
|
|
|
if(NOT CMAKE_${lang}_COMPILER_ID_DIR)
|
|
|
# We get here when this function is called not from within CMAKE_DETERMINE_COMPILER_ID()
|
|
|
@@ -633,7 +642,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang)
|
|
|
execute_process(
|
|
|
COMMAND "${CMAKE_${lang}_COMPILER}"
|
|
|
${CMAKE_${lang}_COMPILER_ID_ARG1}
|
|
|
- ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}
|
|
|
+ ${userflags}
|
|
|
${flags}
|
|
|
WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
|
|
|
OUTPUT_VARIABLE output ERROR_VARIABLE output
|
|
|
@@ -661,7 +670,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang)
|
|
|
endforeach()
|
|
|
endfunction()
|
|
|
|
|
|
-function(CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX lang)
|
|
|
+function(CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX lang userflags)
|
|
|
# Run this MSVC-compatible compiler to detect what the /showIncludes
|
|
|
# option displays. We can use a C source even with the C++ compiler
|
|
|
# because MSVC-compatible compilers handle both and show the same output.
|
|
|
@@ -671,7 +680,7 @@ function(CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX lang)
|
|
|
execute_process(
|
|
|
COMMAND "${CMAKE_${lang}_COMPILER}"
|
|
|
${CMAKE_${lang}_COMPILER_ID_ARG1}
|
|
|
- ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}
|
|
|
+ ${userflags}
|
|
|
/nologo /showIncludes /c main.c
|
|
|
WORKING_DIRECTORY ${showdir}
|
|
|
OUTPUT_VARIABLE out
|