summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Hill <peter.hill@york.ac.uk>2022-02-18 18:02:10 (GMT)
committerBrad King <brad.king@kitware.com>2022-02-24 17:54:46 (GMT)
commit6b4885b58b8204153919d068363f5fe42fef6ec4 (patch)
treeedade93517a30c3a64c7b1d64d3c29063ac9634f
parent352ea99bbacf6e57bca47f43725d98b2a4a0b87d (diff)
downloadCMake-6b4885b58b8204153919d068363f5fe42fef6ec4.zip
CMake-6b4885b58b8204153919d068363f5fe42fef6ec4.tar.gz
CMake-6b4885b58b8204153919d068363f5fe42fef6ec4.tar.bz2
Ninja: Avoid preprocessing twice with explicit Fortran_PREPROCESS
Fix spurious warnings from gfortran+Ninja for preprocessing. Fixes: #23248
-rw-r--r--Source/cmCommonTargetGenerator.cxx7
-rw-r--r--Source/cmCommonTargetGenerator.h10
-rw-r--r--Source/cmNinjaTargetGenerator.cxx3
-rw-r--r--Tests/FortranOnly/CMakeLists.txt6
-rw-r--r--Tests/FortranOnly/preprocess2.f4
5 files changed, 24 insertions, 6 deletions
diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx
index 8d5ce7e..129ef4b 100644
--- a/Source/cmCommonTargetGenerator.cxx
+++ b/Source/cmCommonTargetGenerator.cxx
@@ -101,7 +101,8 @@ void cmCommonTargetGenerator::AppendFortranFormatFlags(
}
void cmCommonTargetGenerator::AppendFortranPreprocessFlags(
- std::string& flags, cmSourceFile const& source)
+ std::string& flags, cmSourceFile const& source,
+ PreprocessFlagsRequired requires_pp)
{
const std::string srcpp = source.GetSafeProperty("Fortran_PREPROCESS");
cmOutputConverter::FortranPreprocess preprocess =
@@ -114,7 +115,9 @@ void cmCommonTargetGenerator::AppendFortranPreprocessFlags(
const char* var = nullptr;
switch (preprocess) {
case cmOutputConverter::FortranPreprocess::Needed:
- var = "CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON";
+ if (requires_pp == PreprocessFlagsRequired::YES) {
+ var = "CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON";
+ }
break;
case cmOutputConverter::FortranPreprocess::NotNeeded:
var = "CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF";
diff --git a/Source/cmCommonTargetGenerator.h b/Source/cmCommonTargetGenerator.h
index baa36c9..5aba1c6 100644
--- a/Source/cmCommonTargetGenerator.h
+++ b/Source/cmCommonTargetGenerator.h
@@ -46,8 +46,14 @@ protected:
void AppendFortranFormatFlags(std::string& flags,
cmSourceFile const& source);
- void AppendFortranPreprocessFlags(std::string& flags,
- cmSourceFile const& source);
+ enum class PreprocessFlagsRequired
+ {
+ YES,
+ NO
+ };
+ void AppendFortranPreprocessFlags(
+ std::string& flags, cmSourceFile const& source,
+ PreprocessFlagsRequired requires_pp = PreprocessFlagsRequired::YES);
virtual void AddIncludeFlags(std::string& flags, std::string const& lang,
const std::string& config) = 0;
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 191b428..dd7d244 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -216,7 +216,8 @@ std::string cmNinjaTargetGenerator::ComputeFlagsForObject(
// Add Fortran format flags.
if (language == "Fortran") {
this->AppendFortranFormatFlags(flags, *source);
- this->AppendFortranPreprocessFlags(flags, *source);
+ this->AppendFortranPreprocessFlags(flags, *source,
+ PreprocessFlagsRequired::NO);
}
// Add source file specific flags.
diff --git a/Tests/FortranOnly/CMakeLists.txt b/Tests/FortranOnly/CMakeLists.txt
index ee47da4..b07c214 100644
--- a/Tests/FortranOnly/CMakeLists.txt
+++ b/Tests/FortranOnly/CMakeLists.txt
@@ -129,6 +129,12 @@ if(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON AND
add_executable(preprocess_target preprocess2.f)
set_property(TARGET preprocess_target PROPERTY Fortran_PREPROCESS ON)
+ if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
+ # gfortran might report spurious warnings if we include the
+ # preprocessing flags at the compilation stage
+ target_compile_options(preprocess_target PRIVATE -Wall -Werror)
+ endif()
+
# Test that we can preprocess a single source file
add_executable(preprocess_source preprocess3.f)
set_property(SOURCE preprocess3.f PROPERTY Fortran_PREPROCESS ON)
diff --git a/Tests/FortranOnly/preprocess2.f b/Tests/FortranOnly/preprocess2.f
index 6595d62..3b332c4 100644
--- a/Tests/FortranOnly/preprocess2.f
+++ b/Tests/FortranOnly/preprocess2.f
@@ -1,4 +1,6 @@
#define int INTEGER
+ ! This single unmatched quote ' should not cause an error during compilation
PROGRAM PREPRO
- int f
+ int f = 1
+ PRINT*, f
END