From 3a21092d75de9859b0f4c52d632eae3946c4956f Mon Sep 17 00:00:00 2001 From: Alex Turbov Date: Thu, 4 Sep 2025 00:17:12 +0400 Subject: [PATCH 1/3] Tests/RunCMake/MultiLint: Refactor test runs --- Tests/RunCMake/MultiLint/RunCMakeTest.cmake | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Tests/RunCMake/MultiLint/RunCMakeTest.cmake b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake index f2df29019b..436b485e1c 100644 --- a/Tests/RunCMake/MultiLint/RunCMakeTest.cmake +++ b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake @@ -36,12 +36,13 @@ function(run_skip_linting test_name) run_cmake_command(${test_name}-Build ${CMAKE_COMMAND} --build .) endfunction() -run_skip_linting(C_skip_linting_ON) -run_skip_linting(CXX_skip_linting_ON) -run_skip_linting(C_skip_linting_OFF) -run_skip_linting(CXX_skip_linting_OFF) +foreach(lang IN ITEMS C CXX) + # Testing `SKIP_LINTING=ON` + run_skip_linting(${lang}_skip_linting_ON) + if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake") + run_skip_linting(${lang}-launch_skip_linting_ON) + endif() -if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake") - run_skip_linting(C-launch_skip_linting_ON) - run_skip_linting(CXX-launch_skip_linting_ON) -endif() + # Testing `SKIP_LINTING=OFF` + run_skip_linting(${lang}_skip_linting_OFF) +endforeach() From 0d6b5d54b240037fca1dfd25fb9b6d084e17ad5b Mon Sep 17 00:00:00 2001 From: Alex Turbov Date: Thu, 4 Sep 2025 01:05:36 +0400 Subject: [PATCH 2/3] Tests/RunCMake/MultiLint: Extract test preparation code into separate file --- .../MultiLint/CXX_skip_linting_OFF.cmake | 8 ++------ .../MultiLint/CXX_skip_linting_ON.cmake | 8 ++------ .../RunCMake/MultiLint/C_skip_linting_OFF.cmake | 8 ++------ .../RunCMake/MultiLint/C_skip_linting_ON.cmake | 8 ++------ .../MultiLint/setup_skip_linter_test.cmake | 17 +++++++++++++++++ 5 files changed, 25 insertions(+), 24 deletions(-) create mode 100644 Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake diff --git a/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake b/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake index a0311a605b..2b93af1d80 100644 --- a/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake +++ b/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake @@ -1,7 +1,3 @@ enable_language(CXX) -set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "$<1:${PSEUDO_IWYU}>" -some -args) -set(CMAKE_CXX_CLANG_TIDY "$<1:${PSEUDO_TIDY}>" -bad) -set(CMAKE_CXX_CPPLINT "$<1:${PSEUDO_CPPLINT}>" --error) -set(CMAKE_CXX_CPPCHECK "$<1:${PSEUDO_CPPCHECK}>" -error) -add_executable(main main.cxx) -set_source_files_properties(main.cxx PROPERTIES SKIP_LINTING OFF) +include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) +setup_skip_linter_test(CXX OFF) diff --git a/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake b/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake index 39cfe87a2f..47f640ffde 100644 --- a/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake +++ b/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake @@ -1,7 +1,3 @@ enable_language(CXX) -set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "$<1:${PSEUDO_IWYU}>" -some -args) -set(CMAKE_CXX_CLANG_TIDY "$<1:${PSEUDO_TIDY}>" -bad) -set(CMAKE_CXX_CPPLINT "$<1:${PSEUDO_CPPLINT}>" --error) -set(CMAKE_CXX_CPPCHECK "$<1:${PSEUDO_CPPCHECK}>" -error) -add_executable(main main.cxx) -set_source_files_properties(main.cxx PROPERTIES SKIP_LINTING ON) +include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) +setup_skip_linter_test(CXX ON) diff --git a/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake b/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake index 2968a21ff5..5fde3dd466 100644 --- a/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake +++ b/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake @@ -1,7 +1,3 @@ enable_language(C) -set(CMAKE_C_INCLUDE_WHAT_YOU_USE "${PSEUDO_IWYU}" -some -args) -set(CMAKE_C_CLANG_TIDY "${PSEUDO_TIDY}" -bad) -set(CMAKE_C_CPPLINT "${PSEUDO_CPPLINT}" --error) -set(CMAKE_C_CPPCHECK "${PSEUDO_CPPCHECK}" -error) -add_executable(main main.c) -set_source_files_properties(main.c PROPERTIES SKIP_LINTING OFF) +include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) +setup_skip_linter_test(C OFF) diff --git a/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake b/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake index 09fc761b1c..9391d21a5c 100644 --- a/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake +++ b/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake @@ -1,7 +1,3 @@ enable_language(C) -set(CMAKE_C_INCLUDE_WHAT_YOU_USE "${PSEUDO_IWYU}" -some -args) -set(CMAKE_C_CLANG_TIDY "${PSEUDO_TIDY}" -bad) -set(CMAKE_C_CPPLINT "${PSEUDO_CPPLINT}" --error) -set(CMAKE_C_CPPCHECK "${PSEUDO_CPPCHECK}" -error) -add_executable(main main.c) -set_source_files_properties(main.c PROPERTIES SKIP_LINTING ON) +include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) +setup_skip_linter_test(C ON) diff --git a/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake b/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake new file mode 100644 index 0000000000..3f6075cf1e --- /dev/null +++ b/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake @@ -0,0 +1,17 @@ +include_guard() + +function(setup_skip_linter_test lang state) + if(lang STREQUAL "CXX") + set(maybe_genex_pre "$<1:") + set(maybe_genex_post ">") + endif() + + set(CMAKE_${lang}_INCLUDE_WHAT_YOU_USE "${maybe_genex_pre}${PSEUDO_IWYU}${maybe_genex_post}" -some -args) + set(CMAKE_${lang}_CLANG_TIDY "${maybe_genex_pre}${PSEUDO_TIDY}${maybe_genex_post}" -bad) + set(CMAKE_${lang}_CPPLINT "${maybe_genex_pre}${PSEUDO_CPPLINT}${maybe_genex_post}" --error) + set(CMAKE_${lang}_CPPCHECK "${maybe_genex_pre}${PSEUDO_CPPCHECK}${maybe_genex_post}" -error) + + string(TOLOWER "${lang}" ext) + add_executable(main main.${ext}) + set_source_files_properties(main.${ext} PROPERTIES SKIP_LINTING ${state}) +endfunction() From f100769d72a71423b65dd62d052581d9e1b0c3fd Mon Sep 17 00:00:00 2001 From: Alex Turbov Date: Wed, 3 Sep 2025 21:10:36 +0400 Subject: [PATCH 3/3] Add `SKIP_LINTING` target property and `CMAKE_SKIP_LINTING` variable These offer target-wide settings to disable lints. Closes: #27191 --- Help/manual/cmake-properties.7.rst | 1 + Help/manual/cmake-variables.7.rst | 1 + Help/prop_sf/SKIP_LINTING.rst | 5 ++ Help/prop_tgt/SKIP_LINTING.rst | 25 +++++++ Help/release/dev/target-SKIP_LINTING.rst | 7 ++ Help/variable/CMAKE_SKIP_LINTING.rst | 9 +++ Source/cmFastbuildNormalTargetGenerator.cxx | 18 +++-- Source/cmMakefileTargetGenerator.cxx | 8 ++- Source/cmNinjaTargetGenerator.cxx | 8 ++- Source/cmTarget.cxx | 2 + .../MultiLint/CXX_skip_linting_OFF.cmake | 2 +- .../MultiLint/CXX_skip_linting_ON.cmake | 2 +- .../MultiLint/C_skip_linting_OFF.cmake | 2 +- .../MultiLint/C_skip_linting_ON.cmake | 2 +- Tests/RunCMake/MultiLint/RunCMakeTest.cmake | 70 +++++++++++++++---- .../MultiLint/setup_skip_linter_test.cmake | 11 ++- .../property_init/CompileSources.cmake | 1 + 17 files changed, 143 insertions(+), 31 deletions(-) create mode 100644 Help/prop_tgt/SKIP_LINTING.rst create mode 100644 Help/release/dev/target-SKIP_LINTING.rst create mode 100644 Help/variable/CMAKE_SKIP_LINTING.rst diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index 58f5e3bf2e..c043a3c2b7 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -401,6 +401,7 @@ Properties on Targets /prop_tgt/RUNTIME_OUTPUT_NAME /prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG /prop_tgt/SKIP_BUILD_RPATH + /prop_tgt/SKIP_LINTING /prop_tgt/SOURCE_DIR /prop_tgt/SOURCES /prop_tgt/SOVERSION diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index ec32e73d14..1a722ada60 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -573,6 +573,7 @@ Variables that Control the Build /variable/CMAKE_SHARED_LINKER_FLAGS_INIT /variable/CMAKE_SKIP_BUILD_RPATH /variable/CMAKE_SKIP_INSTALL_RPATH + /variable/CMAKE_SKIP_LINTING /variable/CMAKE_STATIC_LINKER_FLAGS /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT diff --git a/Help/prop_sf/SKIP_LINTING.rst b/Help/prop_sf/SKIP_LINTING.rst index fe0f2d4dbd..f995cb434b 100644 --- a/Help/prop_sf/SKIP_LINTING.rst +++ b/Help/prop_sf/SKIP_LINTING.rst @@ -41,3 +41,8 @@ By using the ``SKIP_LINTING`` property, you can selectively exclude specific source files from the linting process. This allows you to focus the linting tools on the relevant parts of your project, enhancing the efficiency and effectiveness of the linting workflow. + +See Also +^^^^^^^^ + +* :prop_tgt:`SKIP_LINTING` target property diff --git a/Help/prop_tgt/SKIP_LINTING.rst b/Help/prop_tgt/SKIP_LINTING.rst new file mode 100644 index 0000000000..031f653359 --- /dev/null +++ b/Help/prop_tgt/SKIP_LINTING.rst @@ -0,0 +1,25 @@ +SKIP_LINTING +------------ + +.. versionadded:: 4.2 + +Exclude all sources of a target from running configured linting tools. + +When this boolean property is enabled on a target, C/C++ linting tools enabled +for that target (e.g. :prop_tgt:`_CPPLINT`, :prop_tgt:`_CLANG_TIDY`, +:prop_tgt:`_CPPCHECK`, :prop_tgt:`_ICSTAT` and +:prop_tgt:`_INCLUDE_WHAT_YOU_USE`) will not be invoked for source files +compiled by the target. If the :prop_sf:`SKIP_LINTING` source-file property +is set on a specific source, it takes precedence over this target-wide property. + +This is a convenience alternative to setting the :prop_sf:`SKIP_LINTING` +source file property individually on each source. If either the target's +:prop_tgt:`SKIP_LINTING` or a source’s :prop_sf:`SKIP_LINTING` is enabled, +that source will be excluded from linting. + +The property has no effect on targets that do not have sources. + +See Also +^^^^^^^^ + +* :prop_sf:`SKIP_LINTING` source file property diff --git a/Help/release/dev/target-SKIP_LINTING.rst b/Help/release/dev/target-SKIP_LINTING.rst new file mode 100644 index 0000000000..21d62eb360 --- /dev/null +++ b/Help/release/dev/target-SKIP_LINTING.rst @@ -0,0 +1,7 @@ +target-SKIP_LINTING +------------------- + +* The :variable:`CMAKE_SKIP_LINTING` variable and corresponding + :prop_tgt:`SKIP_LINTING` target property were added to tell the + :ref:`Command-Line Build Tool Generators` to skip linting all + sources in a target. diff --git a/Help/variable/CMAKE_SKIP_LINTING.rst b/Help/variable/CMAKE_SKIP_LINTING.rst new file mode 100644 index 0000000000..72fe63574d --- /dev/null +++ b/Help/variable/CMAKE_SKIP_LINTING.rst @@ -0,0 +1,9 @@ +CMAKE_SKIP_LINTING +------------------ + +.. versionadded:: 4.2 + +Default value for the :prop_tgt:`SKIP_LINTING` target property. + +This is used to initialize the :prop_tgt:`SKIP_LINTING` target property +for all targets created *afterward*. diff --git a/Source/cmFastbuildNormalTargetGenerator.cxx b/Source/cmFastbuildNormalTargetGenerator.cxx index 63b00928a8..c0b2de0b3d 100644 --- a/Source/cmFastbuildNormalTargetGenerator.cxx +++ b/Source/cmFastbuildNormalTargetGenerator.cxx @@ -1008,14 +1008,18 @@ void cmFastbuildNormalTargetGenerator::CollapseAllExecsIntoOneScriptfile( std::string cmFastbuildNormalTargetGenerator::ComputeCodeCheckOptions( cmSourceFile const& srcFile) { - cmValue const skipCodeCheck = srcFile.GetProperty("SKIP_LINTING"); - std::string staticCheckRule; - if (!skipCodeCheck.IsOn()) { - std::string compilerLauncher; - staticCheckRule = this->GenerateCodeCheckRules(srcFile, compilerLauncher, - "", Config, nullptr); - LogMessage(cmStrCat("CodeCheck: ", staticCheckRule)); + cmValue const srcSkipCodeCheckVal = srcFile.GetProperty("SKIP_LINTING"); + bool const skipCodeCheck = srcSkipCodeCheckVal.IsSet() + ? srcSkipCodeCheckVal.IsOn() + : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING"); + + if (skipCodeCheck) { + return {}; } + std::string compilerLauncher; + std::string staticCheckRule = this->GenerateCodeCheckRules( + srcFile, compilerLauncher, "", Config, nullptr); + LogMessage(cmStrCat("CodeCheck: ", staticCheckRule)); return staticCheckRule; } diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 44de1fe24f..9d5d80dc8e 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -1091,8 +1091,12 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( compilerLauncher = GetCompilerLauncher(lang, config); } - cmValue const skipCodeCheck = source.GetProperty("SKIP_LINTING"); - if (!skipCodeCheck.IsOn()) { + cmValue const srcSkipCodeCheckVal = source.GetProperty("SKIP_LINTING"); + bool const skipCodeCheck = srcSkipCodeCheckVal.IsSet() + ? srcSkipCodeCheckVal.IsOn() + : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING"); + + if (!skipCodeCheck) { std::string const codeCheck = this->GenerateCodeCheckRules( source, compilerLauncher, "$(CMAKE_COMMAND)", config, nullptr); if (!codeCheck.empty()) { diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 25f6d36359..c11b693f63 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -1423,8 +1423,12 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement( auto compilerLauncher = this->GetCompilerLauncher(language, config); - cmValue const skipCodeCheck = source->GetProperty("SKIP_LINTING"); - if (!skipCodeCheck.IsOn()) { + cmValue const srcSkipCodeCheckVal = source->GetProperty("SKIP_LINTING"); + bool const skipCodeCheck = srcSkipCodeCheckVal.IsSet() + ? srcSkipCodeCheckVal.IsOn() + : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING"); + + if (!skipCodeCheck) { auto const cmakeCmd = this->GetLocalGenerator()->ConvertToOutputFormat( cmSystemTools::GetCMakeCommand(), cmLocalGenerator::SHELL); vars["CODE_CHECK"] = diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 7dd7c6ba22..be471b495b 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -464,6 +464,7 @@ TargetProperty const StaticTargetProperties[] = { { "Fortran_LINKER_LAUNCHER"_s, IC::CanCompileSources }, // Static analysis + { "SKIP_LINTING"_s, IC::CanCompileSources }, // -- C { "C_CLANG_TIDY"_s, IC::CanCompileSources }, { "C_CLANG_TIDY_EXPORT_FIXES_DIR"_s, IC::CanCompileSources }, @@ -1804,6 +1805,7 @@ void cmTarget::CopyImportedCxxModulesProperties(cmTarget const* tgt) "CXX_CPPCHECK", "CXX_ICSTAT", "CXX_INCLUDE_WHAT_YOU_USE", + "SKIP_LINTING", // Build graph properties "EXCLUDE_FROM_ALL", diff --git a/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake b/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake index 2b93af1d80..a82eae227b 100644 --- a/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake +++ b/Tests/RunCMake/MultiLint/CXX_skip_linting_OFF.cmake @@ -1,3 +1,3 @@ enable_language(CXX) include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) -setup_skip_linter_test(CXX OFF) +setup_skip_linter_test(CXX) diff --git a/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake b/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake index 47f640ffde..a82eae227b 100644 --- a/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake +++ b/Tests/RunCMake/MultiLint/CXX_skip_linting_ON.cmake @@ -1,3 +1,3 @@ enable_language(CXX) include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) -setup_skip_linter_test(CXX ON) +setup_skip_linter_test(CXX) diff --git a/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake b/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake index 5fde3dd466..1658f33138 100644 --- a/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake +++ b/Tests/RunCMake/MultiLint/C_skip_linting_OFF.cmake @@ -1,3 +1,3 @@ enable_language(C) include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) -setup_skip_linter_test(C OFF) +setup_skip_linter_test(C) diff --git a/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake b/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake index 9391d21a5c..1658f33138 100644 --- a/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake +++ b/Tests/RunCMake/MultiLint/C_skip_linting_ON.cmake @@ -1,3 +1,3 @@ enable_language(C) include(${CMAKE_CURRENT_LIST_DIR}/setup_skip_linter_test.cmake) -setup_skip_linter_test(C ON) +setup_skip_linter_test(C) diff --git a/Tests/RunCMake/MultiLint/RunCMakeTest.cmake b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake index 436b485e1c..17e47c3464 100644 --- a/Tests/RunCMake/MultiLint/RunCMakeTest.cmake +++ b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake @@ -27,22 +27,64 @@ if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake") run_multilint(genex) endif() -function(run_skip_linting test_name) - set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test_name}-build") - set(RunCMake_TEST_NO_CLEAN 1) +function(run_skip_linting test_name prop_sf prop_tgt) + set(RunCMake_TEST_VARIANT_DESCRIPTION " (prop_sf=${prop_sf}, prop_tgt=${prop_tgt})") + list(APPEND RunCMake_TEST_OPTIONS "-Dprop_sf=${prop_sf}" "-Dprop_tgt=${prop_tgt}") - run_cmake(${test_name}) - set(RunCMake_TEST_OUTPUT_MERGE 1) - run_cmake_command(${test_name}-Build ${CMAKE_COMMAND} --build .) + set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test_name}-build") + set(RunCMake_TEST_NO_CLEAN 1) + + run_cmake(${test_name}) + set(RunCMake_TEST_OUTPUT_MERGE 1) + run_cmake_command(${test_name}-Build ${CMAKE_COMMAND} --build .) endfunction() -foreach(lang IN ITEMS C CXX) - # Testing `SKIP_LINTING=ON` - run_skip_linting(${lang}_skip_linting_ON) - if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake") - run_skip_linting(${lang}-launch_skip_linting_ON) - endif() +# There are a few `SKIP_LINTING` source/target propertiy combinations +# that affect the final result: +# +# prop_sf prop_tgt result +# --------------------------- +# - - OFF +# OFF - OFF +# ON - ON +# - OFF OFF +# OFF OFF OFF +# ON OFF ON +# - ON ON +# OFF ON OFF +# ON ON ON +# +# where `-` means unset property. +# +# Here's the same table for convenience sorted by `result`: +# +# prop_sf prop_tgt result +# --------------------------- +# - - OFF +# OFF - OFF +# - OFF OFF +# OFF OFF OFF +# OFF ON OFF +# ON - ON +# ON OFF ON +# - ON ON +# ON ON ON - # Testing `SKIP_LINTING=OFF` - run_skip_linting(${lang}_skip_linting_OFF) +foreach(lang IN ITEMS C CXX) + # Testing `SKIP_LINTING=OFF` (first half of the table above) + set(prop_sf_OFF_variants "-" OFF "-" OFF OFF) + set(prop_tgt_OFF_variants "-" "-" OFF OFF ON) + foreach(prop_fs prop_tgt IN ZIP_LISTS prop_sf_OFF_variants prop_tgt_OFF_variants) + run_skip_linting(${lang}_skip_linting_OFF "${prop_fs}" "${prop_tgt}") + endforeach() + + # Testing `SKIP_LINTING=ON` (second half of the table above) + set(prop_sf_ON_variants ON ON "-" ON) + set(prop_tgt_ON_variants "-" OFF ON ON) + foreach(prop_fs prop_tgt IN ZIP_LISTS prop_sf_ON_variants prop_tgt_ON_variants) + run_skip_linting(${lang}_skip_linting_ON "${prop_fs}" "${prop_tgt}") + if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake") + run_skip_linting(${lang}-launch_skip_linting_ON "${prop_fs}" "${prop_tgt}") + endif() + endforeach() endforeach() diff --git a/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake b/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake index 3f6075cf1e..ab8d646fdf 100644 --- a/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake +++ b/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake @@ -1,6 +1,6 @@ include_guard() -function(setup_skip_linter_test lang state) +function(setup_skip_linter_test lang) if(lang STREQUAL "CXX") set(maybe_genex_pre "$<1:") set(maybe_genex_post ">") @@ -13,5 +13,12 @@ function(setup_skip_linter_test lang state) string(TOLOWER "${lang}" ext) add_executable(main main.${ext}) - set_source_files_properties(main.${ext} PROPERTIES SKIP_LINTING ${state}) + + if(NOT prop_sf STREQUAL "-") + set_source_files_properties(main.${ext} PROPERTIES SKIP_LINTING ${prop_sf}) + endif() + + if(NOT prop_tgt STREQUAL "-") + set_target_properties(main PROPERTIES SKIP_LINTING ${prop_tgt}) + endif() endfunction() diff --git a/Tests/RunCMake/property_init/CompileSources.cmake b/Tests/RunCMake/property_init/CompileSources.cmake index 7a7dcab4be..8f1409963e 100644 --- a/Tests/RunCMake/property_init/CompileSources.cmake +++ b/Tests/RunCMake/property_init/CompileSources.cmake @@ -113,6 +113,7 @@ set(properties "OBJCXX_LINKER_LAUNCHER" "ccache" "" # Static analysis + "SKIP_LINTING" "OFF" "" ## C "C_CLANG_TIDY" "clang-tidy" "" "C_CLANG_TIDY_EXPORT_FIXES_DIR" "${dir}" ""