summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorChuck Cranor <chuck@ece.cmu.edu>2019-01-29 14:48:03 (GMT)
committerChuck Cranor <chuck@ece.cmu.edu>2019-01-29 14:48:03 (GMT)
commitef8f237686c2a0b51249bfd46d9498abeb019e76 (patch)
treee25b64c9bb65d5a1c7665b557efb5021ef727a67 /Modules
parentfc96aa03f8a3d3133aaddab27bfc0b684594558b (diff)
downloadCMake-ef8f237686c2a0b51249bfd46d9498abeb019e76.zip
CMake-ef8f237686c2a0b51249bfd46d9498abeb019e76.tar.gz
CMake-ef8f237686c2a0b51249bfd46d9498abeb019e76.tar.bz2
ParseImplicitIncludeInfo: add SunPro Fortran and PGI compiler, Cray fix
Add implicit include parser for PGI compiler ID. PGI verbose output for CXX differs from C and Fortran, so CXX is broken out into its own case. The C and Fortran compilers take "-YI,path" and "-Mnostdinc" to change or disable the builtin include path. The last arg on the command line appears to override previous args (e.g. "-YI,path1 -YI,path2" will set the path to "path2" ... the previous "-YI,path1" gets undone). The CXX compiler verbose output reports with "-I" rather than "-stdinc" for the built in path. In addition with CXX "-Mnostdinc" does not completely zero the include path (e.g. "#include <stdio.h>" still works with "-Mnostdinc"... "-I/usr/include" still shows up in the verbose output). Minor adjustments to get the SunPro parser to handle Fortran as well. Fixes for Cray compiler support (Modules/Compiler/Cray-{C,CXX}.cmake): The *_COMPILE_OPTION flags contain options like "-h c99,gnu" ... these options need to be in double quotes (they are currently not). Otherwise, cmake treats them as lists and tries to run the compiler with "-h;c99,gnu" and fails when it is "Detecting C compile features"... Also, the Cray-CXX.cmake contains "__compiler_cray(C)" instead of "__compiler_cray(CXX)" -- this error prevents the correct VERBOSE flags for CXX from being defined which prevents the implicit include parser from running. Add additional test cases for PGI and SunPro Fortran to the Tests/RunCMake/ParseImplicitIncludeInfo area.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/CMakeParseImplicitIncludeInfo.cmake51
-rw-r--r--Modules/Compiler/Cray-C.cmake12
-rw-r--r--Modules/Compiler/Cray-CXX.cmake14
3 files changed, 61 insertions, 16 deletions
diff --git a/Modules/CMakeParseImplicitIncludeInfo.cmake b/Modules/CMakeParseImplicitIncludeInfo.cmake
index 211406d..21e24b7 100644
--- a/Modules/CMakeParseImplicitIncludeInfo.cmake
+++ b/Modules/CMakeParseImplicitIncludeInfo.cmake
@@ -27,9 +27,52 @@ function(cmake_parse_implicit_include_line line lang id_var log_var state_var)
endif()
endif()
+ # PGI compiler
+ if("${CMAKE_${lang}_COMPILER_ID}" STREQUAL "PGI")
+ # pgc++ verbose output differs
+ if(("${lang}" STREQUAL "C" OR "${lang}" STREQUAL "Fortran") AND
+ "${line}" MATCHES "^/" AND
+ "${line}" MATCHES "/pgc |/pgf901 |/pgftnc " AND
+ "${line}" MATCHES " -cmdline ")
+ # cmdline has unparsed cmdline, remove it
+ string(REGEX REPLACE "-cmdline .*" "" line "${line}")
+ if("${line}" MATCHES " -nostdinc ")
+ set(rv "") # defined, but empty
+ else()
+ string(REGEX MATCHALL " -stdinc ([^ ]*)" incs "${line}")
+ foreach(inc IN LISTS incs)
+ string(REGEX REPLACE " -stdinc ([^ ]*)" "\\1" idir "${inc}")
+ string(REPLACE ":" ";" idir "${idir}")
+ list(APPEND rv ${idir})
+ endforeach()
+ endif()
+ if(DEFINED rv)
+ string(APPEND log " got implicit includes via PGI C/F parser!\n")
+ else()
+ string(APPEND log " warning: PGI C/F parse failed!\n")
+ endif()
+ elseif("${lang}" STREQUAL "CXX" AND "${line}" MATCHES "^/" AND
+ "${line}" MATCHES "/pggpp1 " AND "${line}" MATCHES " -I")
+ # oddly, -Mnostdinc does not get rid of system -I's, at least in
+ # PGI 18.10.1 ...
+ string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
+ foreach(inc IN LISTS incs)
+ string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
+ if(NOT "${idir}" STREQUAL "-") # filter out "-I-"
+ list(APPEND rv "${idir}")
+ endif()
+ endforeach()
+ if(DEFINED rv)
+ string(APPEND log " got implicit includes via PGI CXX parser!\n")
+ else()
+ string(APPEND log " warning: PGI CXX parse failed!\n")
+ endif()
+ endif()
+ endif()
+
# SunPro compiler
if("${CMAKE_${lang}_COMPILER_ID}" STREQUAL "SunPro" AND
- "${line}" MATCHES "-D__SUNPRO_C")
+ ("${line}" MATCHES "-D__SUNPRO_C" OR "${line}" MATCHES "-D__SUNPRO_F") )
string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
foreach(inc IN LISTS incs)
string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
@@ -38,8 +81,10 @@ function(cmake_parse_implicit_include_line line lang id_var log_var state_var)
endif()
endforeach()
if(rv)
- # /usr/include appears to be hardwired in
- list(APPEND rv "/usr/include")
+ if ("${lang}" STREQUAL "C" OR "${lang}" STREQUAL "CXX")
+ # /usr/include appears to be hardwired in
+ list(APPEND rv "/usr/include")
+ endif()
string(APPEND log " got implicit includes via sunpro parser!\n")
else()
string(APPEND log " warning: sunpro parse failed!\n")
diff --git a/Modules/Compiler/Cray-C.cmake b/Modules/Compiler/Cray-C.cmake
index d34154c..b3c96ee 100644
--- a/Modules/Compiler/Cray-C.cmake
+++ b/Modules/Compiler/Cray-C.cmake
@@ -8,13 +8,13 @@ string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG")
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1)
- set(CMAKE_C90_STANDARD_COMPILE_OPTION -h noc99,conform)
- set(CMAKE_C90_EXTENSION_COMPILE_OPTION -h noc99,gnu)
- set(CMAKE_C99_STANDARD_COMPILE_OPTION -h c99,conform)
- set(CMAKE_C99_EXTENSION_COMPILE_OPTION -h c99,gnu)
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "-h noc99,conform")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-h noc99,gnu")
+ set(CMAKE_C99_STANDARD_COMPILE_OPTION "-h c99,conform")
+ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-h c99,gnu")
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.5)
- set(CMAKE_C11_STANDARD_COMPILE_OPTION -h std=c11,conform)
- set(CMAKE_C11_EXTENSION_COMPILE_OPTION -h std=c11,gnu)
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "-h std=c11,conform")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-h std=c11,gnu")
endif ()
endif ()
diff --git a/Modules/Compiler/Cray-CXX.cmake b/Modules/Compiler/Cray-CXX.cmake
index ff97e92..bbb5718 100644
--- a/Modules/Compiler/Cray-CXX.cmake
+++ b/Modules/Compiler/Cray-CXX.cmake
@@ -2,21 +2,21 @@
# file Copyright.txt or https://cmake.org/licensing for details.
include(Compiler/Cray)
-__compiler_cray(C)
+__compiler_cray(CXX)
string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -DNDEBUG")
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1)
- set(CMAKE_CXX98_STANDARD_COMPILE_OPTION -h conform)
- set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -h gnu)
+ set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-h conform")
+ set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-h gnu")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.4)
- set(CMAKE_CXX11_STANDARD_COMPILE_OPTION -h std=c++11)
- set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -h std=c++11,gnu)
+ set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-h std=c++11")
+ set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-h std=c++11,gnu")
endif()
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.6)
- set(CMAKE_CXX14_STANDARD_COMPILE_OPTION -h std=c++14)
- set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -h std=c++14,gnu)
+ set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-h std=c++14")
+ set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-h std=c++14,gnu")
endif ()
endif ()