2424# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2525# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2626
27- function (detect_custom_clang lang)
28- set (C_EXT ".c" )
29- set (CXX_EXT ".cpp" )
30-
31- string (RANDOM RANDOM_SUFFIX)
32-
33- set (COMPILER_TEST_FILE "${PROJECT_BINARY_DIR} /test_compiler_${RANDOM_SUFFIX} ${${lang} _EXT}" )
34-
35- file (TOUCH "${COMPILER_TEST_FILE} " )
36-
27+ function (detect_custom_clang_version lang file)
3728 # Parse “<compiler> -E -dM <source file>”
38- execute_process (COMMAND "${CMAKE_${lang} _COMPILER}" ${CUSTOM_${lang} _COMPILER_SUBCOMMAND} -E -dM "${COMPILER_TEST_FILE } "
29+ execute_process (COMMAND "${CMAKE_${lang} _COMPILER}" ${CUSTOM_${lang} _COMPILER_SUBCOMMAND} -E -dM "${file } "
3930 OUTPUT_VARIABLE CUSTOM_${lang} _CLANG_OUTPUT
4031 RESULT_VARIABLE CUSTOM_${lang} _RETURN_CODE
4132 ERROR_QUIET)
4233
43- file (REMOVE "${COMPILER_TEST_FILE} " )
44-
4534 if (NOT CUSTOM_${lang} _RETURN_CODE) # Success
4635 if ("${CUSTOM_${lang} _CLANG_OUTPUT}" MATCHES "\# define __clang_version__ " )
4736 string (REGEX REPLACE ".*#define __clang_version__ \" ([^ ]+)[\" ]*.*" "\\ 1" CUSTOM_${lang} _CLANG_VERSION "${CUSTOM_${lang} _CLANG_OUTPUT}" )
@@ -50,7 +39,7 @@ function(detect_custom_clang lang)
5039 endif ()
5140endfunction ()
5241
53- function (detect_custom_gcc lang)
42+ function (detect_custom_gcc_version lang)
5443 # This will only set the GCC version if the custom compiler is detected
5544 # as GCC by CMake.
5645 if (CUSTOM_${lang} _COMPILER_ID AND CMAKE_${lang} _COMPILER_ID STREQUAL "GNU" )
@@ -59,24 +48,13 @@ function(detect_custom_gcc lang)
5948 endif ()
6049endfunction ()
6150
62- function (detect_custom_compiler lang)
63- set (C_EXT ".c" )
64- set (CXX_EXT ".cpp" )
65-
66- string (RANDOM RANDOM_SUFFIX)
67-
68- set (COMPILER_TEST_FILE "${PROJECT_BINARY_DIR} /test_compiler_${RANDOM_SUFFIX} ${${lang} _EXT}" )
69-
70- file (TOUCH "${COMPILER_TEST_FILE} " )
71-
51+ function (detect_custom_compiler_id_version lang file)
7252 # Parse “<compiler> -E -dM <source file>”
73- execute_process (COMMAND "${CMAKE_${lang} _COMPILER}" -E -dM "${COMPILER_TEST_FILE } "
53+ execute_process (COMMAND "${CMAKE_${lang} _COMPILER}" -E -dM "${file } "
7454 OUTPUT_VARIABLE CUSTOM_${lang} _COMPILER_OUTPUT
7555 RESULT_VARIABLE CUSTOM_${lang} _RETURN_CODE
7656 ERROR_QUIET)
7757
78- file (REMOVE "${COMPILER_TEST_FILE} " )
79-
8058 if (NOT CUSTOM_${lang} _RETURN_CODE) # Success
8159 # PNaCL
8260 if ("${CUSTOM_${lang} _COMPILER_OUTPUT}" MATCHES "\# define __pnacl__ 1" )
@@ -161,11 +139,24 @@ function(detect_custom_compiler lang)
161139 endif ()
162140endfunction ()
163141
164- detect_custom_compiler("C" )
165- detect_custom_compiler("CXX" )
142+ function (detect_custom_compiler lang)
143+ set (C_EXT ".c" )
144+ set (CXX_EXT ".cpp" )
166145
167- detect_custom_clang("C" )
168- detect_custom_clang("CXX" )
146+ string (RANDOM RANDOM_SUFFIX)
147+ set (COMPILER_TEST_FILE "${PROJECT_BINARY_DIR} /test_compiler_${RANDOM_SUFFIX} ${${lang} _EXT}" )
148+ file (TOUCH "${COMPILER_TEST_FILE} " )
149+
150+ detect_custom_compiler_id_version("${lang} " "${COMPILER_TEST_FILE} " )
151+ detect_custom_clang_version("${lang} " "${COMPILER_TEST_FILE} " )
152+ detect_custom_gcc_version("${lang} " )
169153
170- detect_custom_gcc("C" )
171- detect_custom_gcc("CXX" )
154+ file (REMOVE "${COMPILER_TEST_FILE} " )
155+
156+ set (CUSTOM_${lang} _COMPILER_ID "${CUSTOM_${lang} _COMPILER_ID}" PARENT_SCOPE)
157+ set (CUSTOM_${lang} _COMPILER_VERSION "${CUSTOM_${lang} _COMPILER_VERSION}" PARENT_SCOPE)
158+ set (CUSTOM_${lang} _COMPILER_SUBCOMMAND "${CUSTOM_${lang} _COMPILER_SUBCOMMAND}" PARENT_SCOPE)
159+
160+ set (CUSTOM_${lang} _CLANG_VERSION "${CUSTOM_${lang} _CLANG_VERSION}" PARENT_SCOPE)
161+ set (CUSTOM_${lang} _GCC_VERSION "${CUSTOM_${lang} _GCC_VERSION}" PARENT_SCOPE)
162+ endfunction ()
0 commit comments