From 69590a02676f1b085882cd629fa30c8758982d62 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Thu, 14 Apr 2016 20:44:14 +0200 Subject: [PATCH] Improve compiler version detection in cmake --- cmake/Modules/gccversion.cmake | 63 +++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/cmake/Modules/gccversion.cmake b/cmake/Modules/gccversion.cmake index 3c1b7c7..690f306 100644 --- a/cmake/Modules/gccversion.cmake +++ b/cmake/Modules/gccversion.cmake @@ -1,31 +1,40 @@ -if (CMAKE_COMPILER_IS_GNUCXX) - exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE version_string) - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_CXX_COMPILER_VERSION "${version_string}") - string(REGEX MATCHALL "[0-9]+" version_nums "${CMAKE_CXX_COMPILER_VERSION}") - list(GET version_nums 0 CMAKE_CXX_COMPILER_VERSION_MAJOR) - list(GET version_nums 1 CMAKE_CXX_COMPILER_VERSION_MINOR) - list(GET version_nums 2 CMAKE_CXX_COMPILER_VERSION_PATCH) +function (set_compiler_ver spliced_version_var) + set(whole_version "${${spliced_version_var}}") + set(var_prefix "${spliced_version_var}") + string(REGEX MATCHALL "[0-9]+" version_nums "${whole_version}") + list(GET version_nums 0 compiler_MAJOR) + list(GET version_nums 1 compiler_MINOR) + list(GET version_nums 2 compiler_PATCH) + set(${var_prefix}_MAJOR "${compiler_MAJOR}" PARENT_SCOPE) + set(${var_prefix}_MINOR "${compiler_MINOR}" PARENT_SCOPE) + set(${var_prefix}_PATCH "${compiler_PATCH}" PARENT_SCOPE) + unset(compiler_MAJOR) + unset(compiler_MINOR) + unset(compiler_PATCH) unset(version_nums) - unset(version_string) -else() - set(CMAKE_CXX_COMPILER_VERSION "0.0.0") - set(CMAKE_CXX_COMPILER_VERSION_MAJOR "0") - set(CMAKE_CXX_COMPILER_VERSION_MINOR "0") - set(CMAKE_CXX_COMPILER_VERSION_PATCH "0") + unset(whole_version) + unset(var_prefix) +endfunction() + +if (NOT CMAKE_CXX_COMPILER_VERSION) + if (CMAKE_COMPILER_IS_GNUCXX) + exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE version_string) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_CXX_COMPILER_VERSION "${version_string}") + unset(version_string) + else() + set(CMAKE_CXX_COMPILER_VERSION "0.0.0") + endif() endif() -if (CMAKE_COMPILER_IS_GNUCC) - exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE version_string) - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_C_COMPILER_VERSION "${version_string}") - string(REGEX MATCHALL "[0-9]+" version_nums "${CMAKE_C_COMPILER_VERSION}") - list(GET version_nums 0 CMAKE_C_COMPILER_VERSION_MAJOR) - list(GET version_nums 1 CMAKE_C_COMPILER_VERSION_MINOR) - list(GET version_nums 2 CMAKE_C_COMPILER_VERSION_PATCH) - unset(version_nums) - unset(version_string) -else() - set(CMAKE_C_COMPILER_VERSION "0.0.0") - set(CMAKE_C_COMPILER_VERSION_MAJOR "0") - set(CMAKE_C_COMPILER_VERSION_MINOR "0") - set(CMAKE_C_COMPILER_VERSION_PATCH "0") +if (NOT CMAKE_C_COMPILER_VERSION) + if (CMAKE_COMPILER_IS_GNUCC) + exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE version_string) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_C_COMPILER_VERSION "${version_string}") + unset(version_string) + else() + set(CMAKE_C_COMPILER_VERSION "0.0.0") + endif() endif() + +set_compiler_ver(CMAKE_CXX_COMPILER_VERSION) +set_compiler_ver(CMAKE_C_COMPILER_VERSION)