summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2014-04-23 08:33:16 (GMT)
committerStephen Kelly <steveire@gmail.com>2014-05-07 12:00:00 (GMT)
commit9a083bce83cfa31192ad34ba504454f8087c4fce (patch)
treed00a469b13a772989f9b2e35d77bc27657a0c6f4 /Modules
parent9d285600d484c8e539801310f2c4bbe2bb4daef8 (diff)
downloadCMake-9a083bce83cfa31192ad34ba504454f8087c4fce.zip
CMake-9a083bce83cfa31192ad34ba504454f8087c4fce.tar.gz
CMake-9a083bce83cfa31192ad34ba504454f8087c4fce.tar.bz2
Project: Split the compiler id detection into a separate function.
This can be extended with parameters to control the output and re-used in other contexts.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/CMakeCompilerIdDetection.cmake99
-rw-r--r--Modules/CMakeDetermineCompilerId.cmake76
2 files changed, 101 insertions, 74 deletions
diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake
new file mode 100644
index 0000000..eee1337
--- /dev/null
+++ b/Modules/CMakeCompilerIdDetection.cmake
@@ -0,0 +1,99 @@
+
+#=============================================================================
+# Copyright 2014 Stephen Kelly <steveire@gmail.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+function(_readFile file)
+ include(${file})
+ get_filename_component(name ${file} NAME_WE)
+ string(REGEX REPLACE "-.*" "" CompilerId ${name})
+ set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE)
+ set(_compiler_id_pp_test_${CompilerId} ${_compiler_id_pp_test} PARENT_SCOPE)
+endfunction()
+
+function(compiler_id_detection outvar lang)
+
+ file(GLOB lang_files
+ "${CMAKE_ROOT}/Modules/Compiler/*-${lang}-DetermineCompiler.cmake")
+
+ if (NOT lang STREQUAL Fortran)
+ file(GLOB non_lang_files
+ "${CMAKE_ROOT}/Modules/Compiler/*-DetermineCompiler.cmake")
+ endif()
+
+ set(files ${lang_files} ${non_lang_files})
+ if (files)
+ foreach(file ${files})
+ _readFile(${file})
+ endforeach()
+
+ set(ordered_compilers
+ # Order is relevant here. For example, compilers which pretend to be
+ # GCC must appear before the actual GCC.
+ Comeau
+ Intel
+ PathScale
+ AppleClang
+ Clang
+ Embarcadero
+ Borland
+ Watcom
+ OpenWatcom
+ SunPro
+ HP
+ Compaq
+ zOS
+ XL
+ VisualAge
+ PGI
+ Cray
+ TI
+ SCO
+ GNU
+ MSVC
+ ADSP
+ IAR
+ MIPSpro)
+
+ set(pp_if "#if")
+ set(CMAKE_${lang}_COMPILER_ID_CONTENT "/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */\n")
+
+ foreach(Id ${ordered_compilers})
+ if (NOT _compiler_id_pp_test_${Id})
+ message(FATAL_ERROR "No preprocessor test for \"${Id}\"")
+ endif()
+ set(id_content "${pp_if} ${_compiler_id_pp_test_${Id}}\n# define COMPILER_ID \"${Id}\"${_compiler_id_version_compute_${Id}}\n")
+ set(CMAKE_${lang}_COMPILER_ID_CONTENT "${CMAKE_${lang}_COMPILER_ID_CONTENT}\n${id_content}")
+ set(pp_if "#elif")
+ endforeach()
+
+ set(platform_compiler_detection "
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__sgi)
+# define COMPILER_ID \"MIPSpro\"
+
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID \"HP\"
+
+#else /* unknown compiler */
+# define COMPILER_ID \"\"
+
+#endif")
+
+ set(CMAKE_${lang}_COMPILER_ID_CONTENT "${CMAKE_${lang}_COMPILER_ID_CONTENT}\n${platform_compiler_detection}")
+ endif()
+
+ set(${outvar} ${CMAKE_${lang}_COMPILER_ID_CONTENT} PARENT_SCOPE)
+endfunction()
diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake
index ddaa8ef..94c2e50 100644
--- a/Modules/CMakeDetermineCompilerId.cmake
+++ b/Modules/CMakeDetermineCompilerId.cmake
@@ -97,13 +97,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
endfunction()
-function(_readFile file)
- include(${file})
- get_filename_component(name ${file} NAME_WE)
- string(REGEX REPLACE "-.*" "" CompilerId ${name})
- set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE)
- set(_compiler_id_pp_test_${CompilerId} ${_compiler_id_pp_test} PARENT_SCOPE)
-endfunction()
+include(CMakeCompilerIdDetection)
#-----------------------------------------------------------------------------
# Function to write the compiler id source file.
@@ -111,73 +105,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_WRITE lang src)
find_file(src_in ${src}.in PATHS ${CMAKE_ROOT}/Modules ${CMAKE_MODULE_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
file(READ ${src_in} ID_CONTENT_IN)
- file(GLOB lang_files
- "${CMAKE_ROOT}/Modules/Compiler/*-${lang}-DetermineCompiler.cmake")
-
- if (NOT lang STREQUAL Fortran)
- file(GLOB non_lang_files
- "${CMAKE_ROOT}/Modules/Compiler/*-${lang}-DetermineCompiler.cmake")
- endif()
-
- set(files ${lang_files} ${non_lang_files})
- if (files)
- foreach(file ${files})
- _readFile(${file})
- endforeach()
- set(pp_if "#if")
- set(CMAKE_CXX_COMPILER_ID_CONTENT "/* Version number components: V=Version, R=Revision, P=Patch
- Version date components: YYYY=Year, MM=Month, DD=Day */\n")
-
- foreach(Id
- Comeau
- Intel
- PathScale
- AppleClang
- Clang
- Embarcadero
- Borland
- Watcom
- OpenWatcom
- SunPro
- HP
- Compaq
- zOS
- XL
- VisualAge
- PGI
- Cray
- TI
- SCO
- GNU
- MSVC
- ADSP
- IAR
- MIPSpro)
- if (NOT _compiler_id_pp_test_${Id})
- message(FATAL_ERROR "No test for \"${Id}\"")
- endif()
- set(id_content "${pp_if} ${_compiler_id_pp_test_${Id}}\n# define COMPILER_ID \"${Id}\"${_compiler_id_version_compute_${Id}}\n")
- set(CMAKE_CXX_COMPILER_ID_CONTENT "${CMAKE_CXX_COMPILER_ID_CONTENT}\n${id_content}")
- set(pp_if "#elif")
- endforeach()
-
- set(platform_compiler_detection "
-/* These compilers are either not known or too old to define an
- identification macro. Try to identify the platform and guess that
- it is the native compiler. */
-#elif defined(__sgi)
-# define COMPILER_ID \"MIPSpro\"
-
-#elif defined(__hpux) || defined(__hpua)
-# define COMPILER_ID \"HP\"
-
-#else /* unknown compiler */
-# define COMPILER_ID \"\"
-
-#endif")
-
- set(CMAKE_CXX_COMPILER_ID_CONTENT "${CMAKE_CXX_COMPILER_ID_CONTENT}\n${platform_compiler_detection}")
- endif()
+ compiler_id_detection(CMAKE_${lang}_COMPILER_ID_CONTENT ${lang})
unset(src_in CACHE)
string(CONFIGURE "${ID_CONTENT_IN}" ID_CONTENT_OUT @ONLY)