Browse Source

COMPILE_WARNING_AS_ERROR: Fix internal formatting of options table

In commit 76a08cd253 (COMPILE_WARNING_AS_ERROR: Add options to treat
warnings as errors, 2022-04-21, v3.24.0-rc1~173^2) we formatted the
options table entries as command-line string fragments.  Since they are
part of the `CMAKE_${lang}_COMPILE_OPTIONS_*` tables, they should be
formatted as `;`-separated lists of compiler options.
Brad King 3 years ago
parent
commit
ab8a0a106e
3 changed files with 9 additions and 5 deletions
  1. 1 1
      Modules/Compiler/NVHPC.cmake
  2. 1 1
      Modules/Compiler/NVIDIA-CUDA.cmake
  3. 7 3
      Source/cmLocalGenerator.cxx

+ 1 - 1
Modules/Compiler/NVHPC.cmake

@@ -13,5 +13,5 @@ include(Compiler/PGI)
 macro(__compiler_nvhpc lang)
   # Logic specific to NVHPC.
   set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_WARNING_AS_ERROR "-Werror all-warnings")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_WARNING_AS_ERROR "-Werror" "all-warnings")
 endmacro()

+ 1 - 1
Modules/Compiler/NVIDIA-CUDA.cmake

@@ -31,7 +31,7 @@ endif()
 
 if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89)
   # Starting in 10.2, nvcc supported treating all warnings as errors
-  set(CMAKE_CUDA_COMPILE_OPTIONS_WARNING_AS_ERROR "-Werror all-warnings")
+  set(CMAKE_CUDA_COMPILE_OPTIONS_WARNING_AS_ERROR "-Werror" "all-warnings")
 endif()
 
 if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89)

+ 7 - 3
Source/cmLocalGenerator.cxx

@@ -1028,10 +1028,14 @@ void cmLocalGenerator::AddCompileOptions(std::vector<BT<std::string>>& flags,
   // Add Warning as errors flags
   if (!this->GetCMakeInstance()->GetIgnoreWarningAsError()) {
     const cmValue wError = target->GetProperty("COMPILE_WARNING_AS_ERROR");
-    const cmValue wErrorFlag = this->Makefile->GetDefinition(
+    const cmValue wErrorOpts = this->Makefile->GetDefinition(
       cmStrCat("CMAKE_", lang, "_COMPILE_OPTIONS_WARNING_AS_ERROR"));
-    if (wError.IsOn() && wErrorFlag.IsSet()) {
-      flags.emplace_back(wErrorFlag);
+    if (wError.IsOn() && wErrorOpts.IsSet()) {
+      std::string wErrorFlags;
+      this->AppendCompileOptions(wErrorFlags, *wErrorOpts);
+      if (!wErrorFlags.empty()) {
+        flags.emplace_back(std::move(wErrorFlags));
+      }
     }
   }