|
|
@@ -116,3 +116,48 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
|
|
|
set_property(TARGET IntelIfDef PROPERTY Fortran_FORMAT FIXED)
|
|
|
target_compile_definitions(IntelIfDef PRIVATE SOME_DEF)
|
|
|
endif()
|
|
|
+
|
|
|
+# Skip these tests if compiler/version doesn't have preprocessing flags
|
|
|
+if((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.4)
|
|
|
+ OR (CMAKE_Fortran_COMPILER_ID STREQUAL "XL" AND CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 15.1.6))
|
|
|
+ set(test_pp_flags 0)
|
|
|
+else()
|
|
|
+ set(test_pp_flags 1)
|
|
|
+endif()
|
|
|
+
|
|
|
+if(test_pp_flags)
|
|
|
+ # Test that we can always preprocess a target
|
|
|
+ add_executable(preprocess_target preprocess2.f)
|
|
|
+ set_property(TARGET preprocess_target PROPERTY Fortran_PREPROCESS ON)
|
|
|
+
|
|
|
+ # Test that we can preprocess a single source file
|
|
|
+ add_executable(preprocess_source preprocess3.f)
|
|
|
+ set_property(SOURCE preprocess3.f PROPERTY Fortran_PREPROCESS ON)
|
|
|
+endif()
|
|
|
+
|
|
|
+if(NOT CMAKE_GENERATOR MATCHES "Ninja")
|
|
|
+ # Test that neither the compiler nor CMake performs unnecessary preprocessing.
|
|
|
+ add_library(no_preprocess_target_lower STATIC no_preprocess_target_lower.f)
|
|
|
+ target_compile_options(no_preprocess_target_lower PRIVATE -DINTEGER=nonsense)
|
|
|
+ set_property(TARGET no_preprocess_target_lower PROPERTY Fortran_PREPROCESS OFF)
|
|
|
+ add_library(no_preprocess_source_lower STATIC no_preprocess_source_lower.f)
|
|
|
+ target_compile_options(no_preprocess_source_lower PRIVATE -DINTEGER=nonsense)
|
|
|
+ set_property(SOURCE no_preprocess_source_lower.f PROPERTY Fortran_PREPROCESS OFF)
|
|
|
+
|
|
|
+ # Test that we can explicitly not preprocess a target or source.
|
|
|
+ # This will not work on certain compilers due to either missing a
|
|
|
+ # "don't preprocess" flag, or due to choice of file extension.
|
|
|
+ if(test_pp_flags AND NOT CMAKE_Fortran_COMPILER_ID MATCHES "(Flang|NAG|PGI|SunPro|XL)")
|
|
|
+ add_library(no_preprocess_target STATIC no_preprocess_target_upper.F)
|
|
|
+ target_compile_options(no_preprocess_target PRIVATE -DINTEGER=nonsense)
|
|
|
+ add_library(no_preprocess_source STATIC no_preprocess_source_upper.F)
|
|
|
+ target_compile_options(no_preprocess_source PRIVATE -DINTEGER=nonsense)
|
|
|
+ if(NOT CMAKE_Fortran_COMPILER_ID STREQUAL "Cray"
|
|
|
+ AND NOT "${CMAKE_Fortran_COMPILER_ID};${CMAKE_Fortran_SIMULATE_ID}" STREQUAL "Intel;MSVC")
|
|
|
+ target_sources(no_preprocess_target PRIVATE no_preprocess_target_fpp.fpp)
|
|
|
+ target_sources(no_preprocess_source PRIVATE no_preprocess_source_fpp.fpp)
|
|
|
+ endif()
|
|
|
+ set_property(TARGET no_preprocess_target PROPERTY Fortran_PREPROCESS OFF)
|
|
|
+ set_property(SOURCE no_preprocess_source_upper.F no_preprocess_source_fpp.fpp PROPERTY Fortran_PREPROCESS OFF)
|
|
|
+ endif()
|
|
|
+endif()
|