Merge topic 'fix_f90_try_compile'

eaa32fad4d Fortran: Fix check for F90 support

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !12018
diff --git a/.clang-tidy b/.clang-tidy
index ccd74be..3a0fd82 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -3,8 +3,10 @@
 bugprone-*,\
 -bugprone-assignment-in-if-condition,\
 -bugprone-crtp-constructor-accessibility,\
+-bugprone-derived-method-shadowing-base-method,\
 -bugprone-easily-swappable-parameters,\
 -bugprone-empty-catch,\
+-bugprone-exception-escape,\
 -bugprone-implicit-widening-of-multiplication-result,\
 -bugprone-inc-dec-in-conditions,\
 -bugprone-macro-parentheses,\
@@ -13,8 +15,10 @@
 -bugprone-return-const-ref-from-parameter,\
 -bugprone-suspicious-stringview-data-usage,\
 -bugprone-switch-missing-default-case,\
+-bugprone-throwing-static-initialization,\
 -bugprone-too-small-loop-variable,\
 -bugprone-unchecked-optional-access,\
+-bugprone-unchecked-string-to-number-conversion,\
 -bugprone-unused-local-non-trivial-variable,\
 -bugprone-unused-return-value,\
 -bugprone-use-after-move,\
@@ -22,13 +26,17 @@
 -misc-confusable-identifiers,\
 -misc-const-correctness,\
 -misc-include-cleaner,\
+-misc-multiple-inheritance,\
 -misc-non-private-member-variables-in-classes,\
 -misc-no-recursion,\
+-misc-override-with-different-visibility,\
+-misc-predictable-rand,\
 -misc-static-assert,\
 -misc-use-anonymous-namespace,\
 -misc-use-internal-linkage,\
 modernize-*,\
 -modernize-avoid-c-arrays,\
+-modernize-avoid-c-style-cast,\
 -modernize-concat-nested-namespaces,\
 -modernize-macro-to-enum,\
 -modernize-return-braced-init-list,\
@@ -60,6 +68,9 @@
 -readability-make-member-function-const,\
 -readability-math-missing-parentheses,\
 -readability-named-parameter,\
+-readability-redundant-casting,\
+-readability-redundant-parentheses,\
+-readability-redundant-typename,\
 -readability-simplify-boolean-expr,\
 -readability-static-accessed-through-instance,\
 -readability-suspicious-call-argument,\
@@ -79,4 +90,18 @@
     value: '0'
   - key:   modernize-use-auto.MinTypeNameLength
     value: '80'
+  - key:   readability-identifier-naming.ClassCase
+    value: 'CamelCase'
+  - key:   readability-identifier-naming.ClassIgnoredRegexp
+    value: 'cm[A-Z][A-Za-z]+|(const_)?iterator'
+  - key:   readability-identifier-naming.ClassMemberCase
+    value: 'CamelCase'
+  - key:   readability-identifier-naming.ClassMemberIgnoredRegexp
+    value: 'prop[A-Z_]+'
+  - key:   readability-identifier-naming.PrivateMemberCase
+    value: 'CamelCase'
+  - key:   readability-identifier-naming.ParameterCase
+    value: 'camelBack'
+  - key:   readability-identifier-naming.LocalVariableCase
+    value: 'camelBack'
 ...
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7345496..8c78b99 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -65,7 +65,7 @@
 
 p:doc-package:
     extends:
-        - .fedora43_sphinx_package
+        - .fedora44_sphinx_package
         - .cmake_prep_doc_linux
         - .linux_x86_64_tags
         - .cmake_doc_artifacts
@@ -129,18 +129,18 @@
         - .cmake_cdash_artifacts
         - .rules
 
-l:tidy-fedora43:
+l:tidy-fedora44:
     extends:
-        - .fedora43_tidy
+        - .fedora44_tidy
         - .cmake_build_linux
         - .cmake_tidy_artifacts
         - .linux_x86_64_tags
         - .cmake_cdash_artifacts
         - .rules
 
-l:pvs-studio-fedora43:
+l:pvs-studio-fedora44:
     extends:
-        - .fedora43_pvs_studio
+        - .fedora44_pvs_studio
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .cmake_cdash_artifacts
@@ -150,9 +150,9 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_NO_MR: "true"
 
-l:sphinx-fedora43:
+l:sphinx-fedora44:
     extends:
-        - .fedora43_sphinx
+        - .fedora44_sphinx
         - .cmake_build_linux
         - .cmake_sphinx_artifacts
         - .linux_x86_64_tags
@@ -161,34 +161,34 @@
         CMAKE_CI_JOB_CONTINUOUS: "true"
         CMAKE_CI_JOB_HELP: "true"
 
-l:clang-analyzer-fedora43:
+l:clang-analyzer-fedora44:
     extends:
-        - .fedora43_clang_analyzer
+        - .fedora44_clang_analyzer
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .rules
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-l:clang-fuzzing-fedora43:
+l:clang-fuzzing-fedora44:
     extends:
-        - .fedora43_clang_fuzzing
+        - .fedora44_clang_fuzzing
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .rules
 
-l:clazy-fedora43:
+l:clazy-fedora44:
     extends:
-        - .fedora43_clazy
+        - .fedora44_clazy
         - .cmake_build_linux
         - .linux_x86_64_tags
         - .rules
 
 # Coverage builds
 
-b:fedora43-gcc-gcov:
+b:fedora44-gcc-gcov:
     extends:
-        - .fedora43_gcc_gcov
+        - .fedora44_gcc_gcov
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -197,9 +197,9 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-gcc-gcov:
+t:fedora44-gcc-gcov:
     extends:
-        - .fedora43_gcc_gcov
+        - .fedora44_gcc_gcov
         - .cmake_test_linux
         - .cmake_coverage_artifacts
         - .linux_x86_64_tags_x11
@@ -207,25 +207,25 @@
     # Run coverage analysis even if the tests fail.
     allow_failure: true
     needs:
-        - b:fedora43-gcc-gcov
+        - b:fedora44-gcc-gcov
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-a:fedora43-gcc-gcov:
+a:fedora44-gcc-gcov:
     extends:
-        - .fedora43_gcc_gcov
+        - .fedora44_gcc_gcov
         - .cmake_coverage_linux
         - .cmake_cdash_artifacts
         - .linux_x86_64_tags
         - .rules
     needs:
-        - t:fedora43-gcc-gcov
+        - t:fedora44-gcc-gcov
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-b:fedora43-bullseye-coverage:
+b:fedora44-bullseye-coverage:
     extends:
-        - .fedora43_bullseye_coverage
+        - .fedora44_bullseye_coverage
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -235,9 +235,9 @@
         CMAKE_CI_JOB_NO_MR: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-bullseye-coverage:
+t:fedora44-bullseye-coverage:
     extends:
-        - .fedora43_bullseye_coverage
+        - .fedora44_bullseye_coverage
         - .cmake_test_linux
         - .cmake_coverage_artifacts
         - .linux_x86_64_tags_x11
@@ -245,20 +245,20 @@
     # Run coverage analysis even if the tests fail.
     allow_failure: true
     needs:
-        - b:fedora43-bullseye-coverage
+        - b:fedora44-bullseye-coverage
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_NO_MR: "true"
 
-a:fedora43-bullseye-coverage:
+a:fedora44-bullseye-coverage:
     extends:
-        - .fedora43_bullseye_coverage
+        - .fedora44_bullseye_coverage
         - .cmake_coverage_linux
         - .cmake_cdash_artifacts
         - .linux_x86_64_tags
         - .rules
     needs:
-        - t:fedora43-bullseye-coverage
+        - t:fedora44-bullseye-coverage
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_NO_MR: "true"
@@ -352,9 +352,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-hip-radeon:
+t:fedora44-hip-radeon:
     extends:
-        - .fedora43_hip_radeon
+        - .fedora44_hip_radeon
         - .cmake_test_linux_release
         - .linux_x86_64_tags_rocm6.2
         - .rules
@@ -362,9 +362,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-makefiles-lfortran:
+t:fedora44-makefiles-lfortran:
     extends:
-        - .fedora43_makefiles_lfortran
+        - .fedora44_makefiles_lfortran
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -372,9 +372,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-lfortran:
+t:fedora44-ninja-lfortran:
     extends:
-        - .fedora43_ninja_lfortran
+        - .fedora44_ninja_lfortran
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -382,17 +382,17 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-multi:
+t:fedora44-ninja-multi:
     extends:
-        - .fedora43_ninja_multi
+        - .fedora44_ninja_multi
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
         - .needs_centos7_x86_64
 
-t:fedora43-ninja-clang:
+t:fedora44-ninja-clang:
     extends:
-        - .fedora43_ninja_clang
+        - .fedora44_ninja_clang
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -400,9 +400,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-gcc-std-reloc:
+t:fedora44-ninja-gcc-std-reloc:
     extends:
-        - .fedora43_ninja_gcc_std_reloc
+        - .fedora44_ninja_gcc_std_reloc
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -410,9 +410,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-multi-clang:
+t:fedora44-ninja-multi-clang:
     extends:
-        - .fedora43_ninja_multi_clang
+        - .fedora44_ninja_multi_clang
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -420,9 +420,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-makefiles-clang:
+t:fedora44-makefiles-clang:
     extends:
-        - .fedora43_makefiles_clang
+        - .fedora44_makefiles_clang
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -430,17 +430,17 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-makefiles:
+t:fedora44-makefiles:
     extends:
-        - .fedora43_makefiles
+        - .fedora44_makefiles
         - .cmake_test_linux_release
         - .linux_x86_64_v3_tags
         - .rules
         - .needs_centos7_x86_64
 
-t:fedora43-makefiles-nospace:
+t:fedora44-makefiles-nospace:
     extends:
-        - .fedora43_makefiles
+        - .fedora44_makefiles
         - .cmake_test_linux_release
         - .linux_x86_64_v3_tags
         - .cmake_junit_artifacts
@@ -448,12 +448,12 @@
         - .needs_centos7_x86_64
     variables:
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
-        CMAKE_CI_BUILD_NAME: fedora43_makefiles_nospace
+        CMAKE_CI_BUILD_NAME: fedora44_makefiles_nospace
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-fastbuild:
+t:fedora44-fastbuild:
     extends:
-        - .fedora43_fastbuild
+        - .fedora44_fastbuild
         - .cmake_test_linux_release
         - .linux_x86_64_v3_tags
         - .rules
@@ -461,9 +461,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-instrumentation:
+t:fedora44-instrumentation:
     extends:
-        - .fedora43_ninja_instrumentation
+        - .fedora44_ninja_instrumentation
         - .cmake_test_linux_release
         - .linux_x86_64_tags
         - .rules
@@ -670,9 +670,9 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-b:fedora43-ninja:
+b:fedora44-ninja:
     extends:
-        - .fedora43_ninja
+        - .fedora44_ninja
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -681,9 +681,9 @@
         CMAKE_CI_JOB_CONTINUOUS: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-b:fedora43-makefiles-symlinked:
+b:fedora44-makefiles-symlinked:
     extends:
-        - .fedora43_makefiles_symlinked
+        - .fedora44_makefiles_symlinked
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -722,9 +722,9 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-b:fedora43-extdeps:
+b:fedora44-extdeps:
     extends:
-        - .fedora43_extdeps
+        - .fedora44_extdeps
         - .cmake_build_linux_standalone
         - .linux_x86_64_tags
         - .rules
@@ -732,27 +732,27 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-ninja:
+t:fedora44-ninja:
     extends:
-        - .fedora43_ninja
+        - .fedora44_ninja
         - .cmake_test_linux
         - .linux_x86_64_tags_x11
         - .cmake_test_artifacts
         - .rules
     needs:
-        - b:fedora43-ninja
+        - b:fedora44-ninja
     variables:
         CMAKE_CI_JOB_CONTINUOUS: "true"
 
-t:fedora43-makefiles-symlinked:
+t:fedora44-makefiles-symlinked:
     extends:
-        - .fedora43_makefiles_symlinked
+        - .fedora44_makefiles_symlinked
         - .cmake_test_linux
         - .linux_x86_64_tags_x11
         - .cmake_test_artifacts
         - .rules
     needs:
-        - b:fedora43-makefiles-symlinked
+        - b:fedora44-makefiles-symlinked
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
@@ -945,9 +945,9 @@
 
 ## Sanitizer builds
 
-b:fedora43-asan:
+b:fedora44-asan:
     extends:
-        - .fedora43_asan
+        - .fedora44_asan
         - .cmake_build_linux
         - .cmake_build_artifacts
         - .linux_x86_64_tags
@@ -956,21 +956,21 @@
         CMAKE_CI_JOB_NIGHTLY: "true"
         CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
-t:fedora43-asan:
+t:fedora44-asan:
     extends:
-        - .fedora43_asan
+        - .fedora44_asan
         - .cmake_memcheck_linux
         - .linux_x86_64_tags
         - .cmake_junit_artifacts
         - .rules
     needs:
-        - b:fedora43-asan
+        - b:fedora44-asan
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
-t:fedora43-ninja-valgrind:
+t:fedora44-ninja-valgrind:
     extends:
-        - .fedora43_ninja_valgrind
+        - .fedora44_ninja_valgrind
         - .cmake_test_linux_release
         # Use a fast CPU so that timeouts are less of a concern.
         - .linux_x86_64_tags_fast_x11
diff --git a/.gitlab/ci/bullseye.sh b/.gitlab/ci/bullseye.sh
index 8c4cd2b..132588c 100755
--- a/.gitlab/ci/bullseye.sh
+++ b/.gitlab/ci/bullseye.sh
@@ -7,12 +7,12 @@
     exit 1
 fi
 
-readonly version="9.22.3"
+readonly version="9.25.1"
 
 case "$(uname -s)-$(uname -m)" in
     Linux-x86_64)
         tarball="BullseyeCoverage-$version-Linux-x64.tar.xz"
-        sha256sum="d5be7e65d9363161b67fa77a30407c7c200d995af79a422c4e2e278802ba0776"
+        sha256sum="cc77ef1ffd846e9911a5a22c41a8e24c5e1f1c4c59c0c688b6756fcb14fa4af5"
         shatool="sha256sum"
         ;;
     *)
diff --git a/.gitlab/ci/configure_fedora43_clang_analyzer.cmake b/.gitlab/ci/configure_fedora43_clang_analyzer.cmake
deleted file mode 100644
index c18dfe6..0000000
--- a/.gitlab/ci/configure_fedora43_clang_analyzer.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-set(configure_no_sccache 1)
-set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_makefiles_lfortran.cmake b/.gitlab/ci/configure_fedora43_makefiles_lfortran.cmake
deleted file mode 100644
index 918c2c3..0000000
--- a/.gitlab/ci/configure_fedora43_makefiles_lfortran.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_lfortran.cmake b/.gitlab/ci/configure_fedora43_ninja_lfortran.cmake
deleted file mode 100644
index 918c2c3..0000000
--- a/.gitlab/ci/configure_fedora43_ninja_lfortran.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_valgrind.cmake b/.gitlab/ci/configure_fedora43_ninja_valgrind.cmake
deleted file mode 100644
index d156e20..0000000
--- a/.gitlab/ci/configure_fedora43_ninja_valgrind.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-set(CMake_TEST_Qt5 ON CACHE BOOL "")
-set(CMake_TEST_Qt6 ON CACHE BOOL "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_valgrind.cmake")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_ninja.cmake")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora43_pvs_studio.cmake b/.gitlab/ci/configure_fedora43_pvs_studio.cmake
deleted file mode 100644
index ff6e7f0..0000000
--- a/.gitlab/ci/configure_fedora43_pvs_studio.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set(configure_no_sccache 1)
-set(CMake_RUN_PVS_STUDIO ON CACHE BOOL "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_asan.cmake b/.gitlab/ci/configure_fedora44_asan.cmake
similarity index 72%
rename from .gitlab/ci/configure_fedora43_asan.cmake
rename to .gitlab/ci/configure_fedora44_asan.cmake
index 9913430..88f40c3 100644
--- a/.gitlab/ci/configure_fedora43_asan.cmake
+++ b/.gitlab/ci/configure_fedora44_asan.cmake
@@ -2,4 +2,4 @@
 set(CMAKE_CXX_FLAGS "-fsanitize=address" CACHE STRING "")
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_bullseye_coverage.cmake b/.gitlab/ci/configure_fedora44_bullseye_coverage.cmake
similarity index 94%
rename from .gitlab/ci/configure_fedora43_bullseye_coverage.cmake
rename to .gitlab/ci/configure_fedora44_bullseye_coverage.cmake
index e9cf156..d2e44a9 100644
--- a/.gitlab/ci/configure_fedora43_bullseye_coverage.cmake
+++ b/.gitlab/ci/configure_fedora44_bullseye_coverage.cmake
@@ -19,4 +19,4 @@
 set(CMake_TEST_TLS_VERSION "1.3" CACHE STRING "")
 set(CMake_TEST_TLS_VERSION_URL_BAD "https://badtls-v1-1.kitware.com:8011" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora44_clang_analyzer.cmake b/.gitlab/ci/configure_fedora44_clang_analyzer.cmake
new file mode 100644
index 0000000..58046b9
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_clang_analyzer.cmake
@@ -0,0 +1,4 @@
+set(configure_no_sccache 1)
+set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_clang_fuzzing.cmake b/.gitlab/ci/configure_fedora44_clang_fuzzing.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_clang_fuzzing.cmake
rename to .gitlab/ci/configure_fedora44_clang_fuzzing.cmake
diff --git a/.gitlab/ci/configure_fedora43_clazy.cmake b/.gitlab/ci/configure_fedora44_clazy.cmake
similarity index 66%
rename from .gitlab/ci/configure_fedora43_clazy.cmake
rename to .gitlab/ci/configure_fedora44_clazy.cmake
index 1943447..7f2ec78 100644
--- a/.gitlab/ci/configure_fedora43_clazy.cmake
+++ b/.gitlab/ci/configure_fedora44_clazy.cmake
@@ -2,4 +2,4 @@
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 set(CMAKE_USE_SYSTEM_JSONCPP ON CACHE BOOL "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_common.cmake b/.gitlab/ci/configure_fedora44_common.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_common.cmake
rename to .gitlab/ci/configure_fedora44_common.cmake
diff --git a/.gitlab/ci/configure_fedora43_common_clang.cmake b/.gitlab/ci/configure_fedora44_common_clang.cmake
similarity index 91%
rename from .gitlab/ci/configure_fedora43_common_clang.cmake
rename to .gitlab/ci/configure_fedora44_common_clang.cmake
index 941a040..c7b38b6 100644
--- a/.gitlab/ci/configure_fedora43_common_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_common_clang.cmake
@@ -1,4 +1,4 @@
-set(CMAKE_Fortran_COMPILER "/usr/bin/flang-21" CACHE FILEPATH "")
+set(CMAKE_Fortran_COMPILER "/usr/bin/flang" CACHE FILEPATH "")
 set(CMAKE_Fortran_COMPILER_ID "LLVMFlang" CACHE STRING "")
 set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 "1" CACHE BOOL "")
 
diff --git a/.gitlab/ci/configure_fedora43_common_lfortran.cmake b/.gitlab/ci/configure_fedora44_common_lfortran.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_common_lfortran.cmake
rename to .gitlab/ci/configure_fedora44_common_lfortran.cmake
diff --git a/.gitlab/ci/configure_fedora43_extdeps.cmake b/.gitlab/ci/configure_fedora44_extdeps.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_extdeps.cmake
rename to .gitlab/ci/configure_fedora44_extdeps.cmake
diff --git a/.gitlab/ci/configure_fedora43_fastbuild.cmake b/.gitlab/ci/configure_fedora44_fastbuild.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_fastbuild.cmake
rename to .gitlab/ci/configure_fedora44_fastbuild.cmake
diff --git a/.gitlab/ci/configure_fedora43_gcc_gcov.cmake b/.gitlab/ci/configure_fedora44_gcc_gcov.cmake
similarity index 95%
rename from .gitlab/ci/configure_fedora43_gcc_gcov.cmake
rename to .gitlab/ci/configure_fedora44_gcc_gcov.cmake
index a40e0cc..e54437e 100644
--- a/.gitlab/ci/configure_fedora43_gcc_gcov.cmake
+++ b/.gitlab/ci/configure_fedora44_gcc_gcov.cmake
@@ -28,4 +28,4 @@
 # Do not bootstrap for the coverage test suite.
 set(CMAKE_SKIP_BOOTSTRAP_TEST TRUE CACHE BOOL "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_hip_radeon.cmake b/.gitlab/ci/configure_fedora44_hip_radeon.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_hip_radeon.cmake
rename to .gitlab/ci/configure_fedora44_hip_radeon.cmake
diff --git a/.gitlab/ci/configure_fedora43_makefiles.cmake b/.gitlab/ci/configure_fedora44_makefiles.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_makefiles.cmake
rename to .gitlab/ci/configure_fedora44_makefiles.cmake
diff --git a/.gitlab/ci/configure_fedora43_makefiles_clang.cmake b/.gitlab/ci/configure_fedora44_makefiles_clang.cmake
similarity index 68%
rename from .gitlab/ci/configure_fedora43_makefiles_clang.cmake
rename to .gitlab/ci/configure_fedora44_makefiles_clang.cmake
index e3f1ef9..02bf288 100644
--- a/.gitlab/ci/configure_fedora43_makefiles_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_makefiles_clang.cmake
@@ -2,4 +2,4 @@
   set(CMAKE_TESTS_CDASH_SERVER "https://open.cdash.org" CACHE STRING "")
 endif()
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora44_makefiles_lfortran.cmake b/.gitlab/ci/configure_fedora44_makefiles_lfortran.cmake
new file mode 100644
index 0000000..2289116
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_makefiles_lfortran.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_makefiles_symlinked.cmake b/.gitlab/ci/configure_fedora44_makefiles_symlinked.cmake
similarity index 71%
rename from .gitlab/ci/configure_fedora43_makefiles_symlinked.cmake
rename to .gitlab/ci/configure_fedora44_makefiles_symlinked.cmake
index c5ef84c..e14b28f 100644
--- a/.gitlab/ci/configure_fedora43_makefiles_symlinked.cmake
+++ b/.gitlab/ci/configure_fedora44_makefiles_symlinked.cmake
@@ -2,4 +2,4 @@
 set(CMake_TEST_GUI "ON" CACHE BOOL "")
 
 include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja.cmake b/.gitlab/ci/configure_fedora44_ninja.cmake
similarity index 96%
rename from .gitlab/ci/configure_fedora43_ninja.cmake
rename to .gitlab/ci/configure_fedora44_ninja.cmake
index 94e6e81..d536871 100644
--- a/.gitlab/ci/configure_fedora43_ninja.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja.cmake
@@ -42,4 +42,4 @@
 # Qt 6 requires C++17, so use Qt 5.
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_clang.cmake b/.gitlab/ci/configure_fedora44_ninja_clang.cmake
similarity index 75%
rename from .gitlab/ci/configure_fedora43_ninja_clang.cmake
rename to .gitlab/ci/configure_fedora44_ninja_clang.cmake
index 6cf0f85..5e007f4 100644
--- a/.gitlab/ci/configure_fedora43_ninja_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja_clang.cmake
@@ -1,3 +1,3 @@
 set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database,import_std23" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_gcc_std_reloc.cmake b/.gitlab/ci/configure_fedora44_ninja_gcc_std_reloc.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_ninja_gcc_std_reloc.cmake
rename to .gitlab/ci/configure_fedora44_ninja_gcc_std_reloc.cmake
diff --git a/.gitlab/ci/configure_fedora43_ninja_instrumentation.cmake b/.gitlab/ci/configure_fedora44_ninja_instrumentation.cmake
similarity index 60%
rename from .gitlab/ci/configure_fedora43_ninja_instrumentation.cmake
rename to .gitlab/ci/configure_fedora44_ninja_instrumentation.cmake
index daf845f..1033477 100644
--- a/.gitlab/ci/configure_fedora43_ninja_instrumentation.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja_instrumentation.cmake
@@ -1,3 +1,3 @@
 set(CMake_ENABLE_INSTRUMENTATION "ON" CACHE BOOL "")
 set(CMake_TEST_GUI "OFF" CACHE BOOL "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_ninja.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_ninja.cmake")
diff --git a/.gitlab/ci/configure_fedora44_ninja_lfortran.cmake b/.gitlab/ci/configure_fedora44_ninja_lfortran.cmake
new file mode 100644
index 0000000..2289116
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_ninja_lfortran.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_lfortran.cmake")
diff --git a/.gitlab/ci/configure_fedora43_ninja_multi.cmake b/.gitlab/ci/configure_fedora44_ninja_multi.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_ninja_multi.cmake
rename to .gitlab/ci/configure_fedora44_ninja_multi.cmake
diff --git a/.gitlab/ci/configure_fedora43_ninja_multi_clang.cmake b/.gitlab/ci/configure_fedora44_ninja_multi_clang.cmake
similarity index 74%
rename from .gitlab/ci/configure_fedora43_ninja_multi_clang.cmake
rename to .gitlab/ci/configure_fedora44_ninja_multi_clang.cmake
index 522d012..3a54edf 100644
--- a/.gitlab/ci/configure_fedora43_ninja_multi_clang.cmake
+++ b/.gitlab/ci/configure_fedora44_ninja_multi_clang.cmake
@@ -1,3 +1,3 @@
 set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora44_ninja_valgrind.cmake b/.gitlab/ci/configure_fedora44_ninja_valgrind.cmake
new file mode 100644
index 0000000..53f1b83
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_ninja_valgrind.cmake
@@ -0,0 +1,6 @@
+set(CMake_TEST_Qt5 ON CACHE BOOL "")
+set(CMake_TEST_Qt6 ON CACHE BOOL "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_valgrind.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_ninja.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora44_pvs_studio.cmake b/.gitlab/ci/configure_fedora44_pvs_studio.cmake
new file mode 100644
index 0000000..b15137e
--- /dev/null
+++ b/.gitlab/ci/configure_fedora44_pvs_studio.cmake
@@ -0,0 +1,3 @@
+set(configure_no_sccache 1)
+set(CMake_RUN_PVS_STUDIO ON CACHE BOOL "")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_sphinx.cmake b/.gitlab/ci/configure_fedora44_sphinx.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_sphinx.cmake
rename to .gitlab/ci/configure_fedora44_sphinx.cmake
diff --git a/.gitlab/ci/configure_fedora43_sphinx_package.cmake b/.gitlab/ci/configure_fedora44_sphinx_package.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_sphinx_package.cmake
rename to .gitlab/ci/configure_fedora44_sphinx_package.cmake
diff --git a/.gitlab/ci/configure_fedora43_tidy.cmake b/.gitlab/ci/configure_fedora44_tidy.cmake
similarity index 85%
rename from .gitlab/ci/configure_fedora43_tidy.cmake
rename to .gitlab/ci/configure_fedora44_tidy.cmake
index 5b0bd62..18e7743 100644
--- a/.gitlab/ci/configure_fedora43_tidy.cmake
+++ b/.gitlab/ci/configure_fedora44_tidy.cmake
@@ -4,4 +4,4 @@
 set(CMake_CLANG_TIDY_EXPORT_FIXES_DIR "$ENV{CI_PROJECT_DIR}/.gitlab/clang-tidy-fixes" CACHE PATH "")
 set(CMake_QT_MAJOR_VERSION "5" CACHE STRING "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora43_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora44_common.cmake")
diff --git a/.gitlab/ci/configure_fedora43_valgrind.cmake b/.gitlab/ci/configure_fedora44_valgrind.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora43_valgrind.cmake
rename to .gitlab/ci/configure_fedora44_valgrind.cmake
diff --git a/.gitlab/ci/ctest_memcheck_fedora43.valgrind.supp b/.gitlab/ci/ctest_memcheck_fedora44.valgrind.supp
similarity index 100%
rename from .gitlab/ci/ctest_memcheck_fedora43.valgrind.supp
rename to .gitlab/ci/ctest_memcheck_fedora44.valgrind.supp
diff --git a/.gitlab/ci/ctest_memcheck_fedora43_asan.lsan.supp b/.gitlab/ci/ctest_memcheck_fedora44_asan.lsan.supp
similarity index 100%
rename from .gitlab/ci/ctest_memcheck_fedora43_asan.lsan.supp
rename to .gitlab/ci/ctest_memcheck_fedora44_asan.lsan.supp
diff --git a/.gitlab/ci/docker/fedora43-hip/Dockerfile b/.gitlab/ci/docker/fedora44-hip/Dockerfile
similarity index 94%
rename from .gitlab/ci/docker/fedora43-hip/Dockerfile
rename to .gitlab/ci/docker/fedora44-hip/Dockerfile
index 0f0cbed..463d19f 100644
--- a/.gitlab/ci/docker/fedora43-hip/Dockerfile
+++ b/.gitlab/ci/docker/fedora44-hip/Dockerfile
@@ -1,6 +1,6 @@
 # syntax=docker/dockerfile:1
 
-ARG BASE_IMAGE=fedora:43
+ARG BASE_IMAGE=fedora:44
 
 FROM ${BASE_IMAGE} AS dnf-cache
 LABEL maintainer="Brad King <brad.king@kitware.com>"
diff --git a/.gitlab/ci/docker/fedora43-hip/deps_packages.lst b/.gitlab/ci/docker/fedora44-hip/deps_packages.lst
similarity index 93%
rename from .gitlab/ci/docker/fedora43-hip/deps_packages.lst
rename to .gitlab/ci/docker/fedora44-hip/deps_packages.lst
index abae13a..bac9e53 100644
--- a/.gitlab/ci/docker/fedora43-hip/deps_packages.lst
+++ b/.gitlab/ci/docker/fedora44-hip/deps_packages.lst
@@ -7,7 +7,6 @@
 make
 
 # Install HIP language toolchain.
-hsakmt-devel
 lld
 llvm
 rocm-comgr-devel
diff --git a/.gitlab/ci/docker/fedora43-hip/dnf.conf b/.gitlab/ci/docker/fedora44-hip/dnf.conf
similarity index 100%
rename from .gitlab/ci/docker/fedora43-hip/dnf.conf
rename to .gitlab/ci/docker/fedora44-hip/dnf.conf
diff --git a/.gitlab/ci/docker/fedora43/Dockerfile b/.gitlab/ci/docker/fedora44/Dockerfile
similarity index 98%
rename from .gitlab/ci/docker/fedora43/Dockerfile
rename to .gitlab/ci/docker/fedora44/Dockerfile
index 86ee3b8..d36ccc9 100644
--- a/.gitlab/ci/docker/fedora43/Dockerfile
+++ b/.gitlab/ci/docker/fedora44/Dockerfile
@@ -1,6 +1,6 @@
 # syntax=docker/dockerfile:1
 
-ARG BASE_IMAGE=fedora:43
+ARG BASE_IMAGE=fedora:44
 
 FROM ${BASE_IMAGE} AS dnf-cache
 # Populate DNF cache w/ the fresh metadata and prefetch packages.
@@ -132,4 +132,4 @@
     tar -C /usr/local -xf /root/rvm.tar
 
 RUN --mount=type=bind,from=rbenv-build,source=/root,target=/root \
-    tar -C / -xf /root/rbenv.tar && rbenv global 3.4.3
+    tar -C / -xf /root/rbenv.tar && rbenv global 3.4.9
diff --git a/.gitlab/ci/docker/fedora43/build_iwyu.sh b/.gitlab/ci/docker/fedora44/build_iwyu.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora43/build_iwyu.sh
rename to .gitlab/ci/docker/fedora44/build_iwyu.sh
diff --git a/.gitlab/ci/docker/fedora43/build_rbenv.sh b/.gitlab/ci/docker/fedora44/build_rbenv.sh
similarity index 92%
rename from .gitlab/ci/docker/fedora43/build_rbenv.sh
rename to .gitlab/ci/docker/fedora44/build_rbenv.sh
index feb574f..f5ddd06 100755
--- a/.gitlab/ci/docker/fedora43/build_rbenv.sh
+++ b/.gitlab/ci/docker/fedora44/build_rbenv.sh
@@ -7,7 +7,7 @@
 # Ruby rbenv
 export RUBY_CONFIGURE_OPTS=--disable-install-doc
 export RUBY_BUILD_CURL_OPTS=-C-
-rbenv install 3.4.3 -k -s -v
+rbenv install 3.4.9 -k -s -v
 
 cat <<EOF >/tmp/exclude.lst
 *LICENSE*
diff --git a/.gitlab/ci/docker/fedora43/build_rust.sh b/.gitlab/ci/docker/fedora44/build_rust.sh
similarity index 88%
rename from .gitlab/ci/docker/fedora43/build_rust.sh
rename to .gitlab/ci/docker/fedora44/build_rust.sh
index 5ab91f7..1ee87eb 100755
--- a/.gitlab/ci/docker/fedora43/build_rust.sh
+++ b/.gitlab/ci/docker/fedora44/build_rust.sh
@@ -2,7 +2,7 @@
 
 set -e
 
-typos_version=1.44.0
+typos_version=1.45.2
 cargo install --root /usr/local --version "$typos_version" typos-cli
 
 strip /usr/local/bin/typos
diff --git a/.gitlab/ci/docker/fedora43/build_rvm.sh b/.gitlab/ci/docker/fedora44/build_rvm.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora43/build_rvm.sh
rename to .gitlab/ci/docker/fedora44/build_rvm.sh
diff --git a/.gitlab/ci/docker/fedora43/deps_packages.lst b/.gitlab/ci/docker/fedora44/deps_packages.lst
similarity index 98%
rename from .gitlab/ci/docker/fedora43/deps_packages.lst
rename to .gitlab/ci/docker/fedora44/deps_packages.lst
index 143c296..b763bb7 100644
--- a/.gitlab/ci/docker/fedora43/deps_packages.lst
+++ b/.gitlab/ci/docker/fedora44/deps_packages.lst
@@ -96,7 +96,7 @@
 hdf5-openmpi-devel
 ImageMagick-c++-devel
 jasper-devel
-java-21-openjdk-devel
+java-25-openjdk-devel
 jsoncpp-devel
 lapack-devel
 libarchive-devel
diff --git a/.gitlab/ci/docker/fedora43/dnf.conf b/.gitlab/ci/docker/fedora44/dnf.conf
similarity index 100%
rename from .gitlab/ci/docker/fedora43/dnf.conf
rename to .gitlab/ci/docker/fedora44/dnf.conf
diff --git a/.gitlab/ci/docker/fedora43/install_deps.sh b/.gitlab/ci/docker/fedora44/install_deps.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora43/install_deps.sh
rename to .gitlab/ci/docker/fedora44/install_deps.sh
diff --git a/.gitlab/ci/docker/fedora43/iwyu_packages.lst b/.gitlab/ci/docker/fedora44/iwyu_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora43/iwyu_packages.lst
rename to .gitlab/ci/docker/fedora44/iwyu_packages.lst
diff --git a/.gitlab/ci/docker/fedora43/rbenv_packages.lst b/.gitlab/ci/docker/fedora44/rbenv_packages.lst
similarity index 93%
rename from .gitlab/ci/docker/fedora43/rbenv_packages.lst
rename to .gitlab/ci/docker/fedora44/rbenv_packages.lst
index d16afff..7cba990 100644
--- a/.gitlab/ci/docker/fedora43/rbenv_packages.lst
+++ b/.gitlab/ci/docker/fedora44/rbenv_packages.lst
@@ -1,5 +1,6 @@
 rbenv
 ruby-build-rbenv
+ruby-build-ruby
 
 # Packages needed for `rbenv`
 # https://github.com/rbenv/ruby-build/wiki#fedora
diff --git a/.gitlab/ci/docker/fedora43/rust_packages.lst b/.gitlab/ci/docker/fedora44/rust_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora43/rust_packages.lst
rename to .gitlab/ci/docker/fedora44/rust_packages.lst
diff --git a/.gitlab/ci/docker/fedora43/rvm_packages.lst b/.gitlab/ci/docker/fedora44/rvm_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora43/rvm_packages.lst
rename to .gitlab/ci/docker/fedora44/rvm_packages.lst
diff --git a/.gitlab/ci/env_fedora43_common_clang.sh b/.gitlab/ci/env_fedora43_common_clang.sh
deleted file mode 100644
index 55533e7..0000000
--- a/.gitlab/ci/env_fedora43_common_clang.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-export CC=/usr/bin/clang-21
-export CXX=/usr/bin/clang++-21
-export FC=/usr/bin/flang-21
diff --git a/.gitlab/ci/env_fedora43_hip_radeon.sh b/.gitlab/ci/env_fedora43_hip_radeon.sh
deleted file mode 100644
index 2c942a8..0000000
--- a/.gitlab/ci/env_fedora43_hip_radeon.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export HIPCXX=/usr/bin/clang++-21
-export HIPFLAGS='--rocm-path=/usr --rocm-device-lib-path=/usr/lib64/rocm/llvm/lib/clang/19/amdgcn/bitcode'
diff --git a/.gitlab/ci/env_fedora43_makefiles_clang.sh b/.gitlab/ci/env_fedora43_makefiles_clang.sh
deleted file mode 100644
index 3953f88..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_makefiles_lfortran.sh b/.gitlab/ci/env_fedora43_makefiles_lfortran.sh
deleted file mode 100644
index 6b02339..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_lfortran.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_makefiles_symlinked.cmake b/.gitlab/ci/env_fedora43_makefiles_symlinked.cmake
deleted file mode 100644
index fb004e8..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_symlinked.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/env_fedora43_makefiles.cmake")
diff --git a/.gitlab/ci/env_fedora43_makefiles_symlinked.sh b/.gitlab/ci/env_fedora43_makefiles_symlinked.sh
deleted file mode 100644
index 448b592..0000000
--- a/.gitlab/ci/env_fedora43_makefiles_symlinked.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_makefiles.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_clang.sh b/.gitlab/ci/env_fedora43_ninja_clang.sh
deleted file mode 100644
index 3953f88..0000000
--- a/.gitlab/ci/env_fedora43_ninja_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_instrumentation.sh b/.gitlab/ci/env_fedora43_ninja_instrumentation.sh
deleted file mode 100644
index cc89d0b..0000000
--- a/.gitlab/ci/env_fedora43_ninja_instrumentation.sh
+++ /dev/null
@@ -1 +0,0 @@
-source .gitlab/ci/env_fedora43_ninja.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_lfortran.sh b/.gitlab/ci/env_fedora43_ninja_lfortran.sh
deleted file mode 100644
index 6b02339..0000000
--- a/.gitlab/ci/env_fedora43_ninja_lfortran.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_multi_clang.sh b/.gitlab/ci/env_fedora43_ninja_multi_clang.sh
deleted file mode 100644
index 3953f88..0000000
--- a/.gitlab/ci/env_fedora43_ninja_multi_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora43_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_valgrind.sh b/.gitlab/ci/env_fedora43_ninja_valgrind.sh
deleted file mode 100644
index cc89d0b..0000000
--- a/.gitlab/ci/env_fedora43_ninja_valgrind.sh
+++ /dev/null
@@ -1 +0,0 @@
-source .gitlab/ci/env_fedora43_ninja.sh
diff --git a/.gitlab/ci/env_fedora43_asan.sh b/.gitlab/ci/env_fedora44_asan.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_asan.sh
rename to .gitlab/ci/env_fedora44_asan.sh
diff --git a/.gitlab/ci/env_fedora43_bullseye_coverage.sh b/.gitlab/ci/env_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/env_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/ci/env_fedora43_clang_analyzer.sh b/.gitlab/ci/env_fedora44_clang_analyzer.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_clang_analyzer.sh
rename to .gitlab/ci/env_fedora44_clang_analyzer.sh
diff --git a/.gitlab/ci/env_fedora43_clang_fuzzing.sh b/.gitlab/ci/env_fedora44_clang_fuzzing.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_clang_fuzzing.sh
rename to .gitlab/ci/env_fedora44_clang_fuzzing.sh
diff --git a/.gitlab/ci/env_fedora43_clazy.sh b/.gitlab/ci/env_fedora44_clazy.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_clazy.sh
rename to .gitlab/ci/env_fedora44_clazy.sh
diff --git a/.gitlab/ci/env_fedora44_common_clang.sh b/.gitlab/ci/env_fedora44_common_clang.sh
new file mode 100644
index 0000000..2200841
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_common_clang.sh
@@ -0,0 +1,3 @@
+export CC=/usr/bin/clang
+export CXX=/usr/bin/clang++
+export FC=/usr/bin/flang
diff --git a/.gitlab/ci/env_fedora43_common_lfortran.sh b/.gitlab/ci/env_fedora44_common_lfortran.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_common_lfortran.sh
rename to .gitlab/ci/env_fedora44_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_extdeps.sh b/.gitlab/ci/env_fedora44_extdeps.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_extdeps.sh
rename to .gitlab/ci/env_fedora44_extdeps.sh
diff --git a/.gitlab/ci/env_fedora43_fastbuild.sh b/.gitlab/ci/env_fedora44_fastbuild.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_fastbuild.sh
rename to .gitlab/ci/env_fedora44_fastbuild.sh
diff --git a/.gitlab/ci/env_fedora44_hip_radeon.patch b/.gitlab/ci/env_fedora44_hip_radeon.patch
new file mode 100644
index 0000000..a6411ed
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_hip_radeon.patch
@@ -0,0 +1,14 @@
+--- a/usr/lib/clang/22/include/cuda_wrappers/new
++++ b/usr/lib/clang/22/include/cuda_wrappers/new
+@@ -98,9 +98,9 @@
+ __device__ inline void *operator new[](__SIZE_TYPE__, void *__ptr) CUDA_NOEXCEPT {
+   return __ptr;
+ }
+-#endif
+ __device__ inline void operator delete(void *, void *) CUDA_NOEXCEPT {}
+ __device__ inline void operator delete[](void *, void *) CUDA_NOEXCEPT {}
++#endif
+
+ #pragma pop_macro("CUDA_NOEXCEPT")
+
+---
diff --git a/.gitlab/ci/env_fedora44_hip_radeon.sh b/.gitlab/ci/env_fedora44_hip_radeon.sh
new file mode 100644
index 0000000..dfa0121
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_hip_radeon.sh
@@ -0,0 +1,4 @@
+export HIPCXX=/usr/bin/clang++
+export HIPFLAGS='--rocm-path=/usr --rocm-device-lib-path=/usr/lib64/rocm/llvm/lib/clang/20/lib/amdgcn/bitcode'
+
+git apply --unsafe-paths --directory=/ .gitlab/ci/env_fedora44_hip_radeon.patch
diff --git a/.gitlab/ci/env_fedora43_makefiles.cmake b/.gitlab/ci/env_fedora44_makefiles.cmake
similarity index 100%
rename from .gitlab/ci/env_fedora43_makefiles.cmake
rename to .gitlab/ci/env_fedora44_makefiles.cmake
diff --git a/.gitlab/ci/env_fedora43_makefiles.sh b/.gitlab/ci/env_fedora44_makefiles.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_makefiles.sh
rename to .gitlab/ci/env_fedora44_makefiles.sh
diff --git a/.gitlab/ci/env_fedora44_makefiles_clang.sh b/.gitlab/ci/env_fedora44_makefiles_clang.sh
new file mode 100644
index 0000000..4d2ba81
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_clang.sh
diff --git a/.gitlab/ci/env_fedora44_makefiles_lfortran.sh b/.gitlab/ci/env_fedora44_makefiles_lfortran.sh
new file mode 100644
index 0000000..409404e
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_lfortran.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora44_makefiles_symlinked.cmake b/.gitlab/ci/env_fedora44_makefiles_symlinked.cmake
new file mode 100644
index 0000000..8c39210
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_symlinked.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/env_fedora44_makefiles.cmake")
diff --git a/.gitlab/ci/env_fedora44_makefiles_symlinked.sh b/.gitlab/ci/env_fedora44_makefiles_symlinked.sh
new file mode 100644
index 0000000..84a747c
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_makefiles_symlinked.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_makefiles.sh
diff --git a/.gitlab/ci/env_fedora43_ninja.sh b/.gitlab/ci/env_fedora44_ninja.sh
similarity index 83%
rename from .gitlab/ci/env_fedora43_ninja.sh
rename to .gitlab/ci/env_fedora44_ninja.sh
index 18c2158..3607fb1 100644
--- a/.gitlab/ci/env_fedora43_ninja.sh
+++ b/.gitlab/ci/env_fedora44_ninja.sh
@@ -4,9 +4,9 @@
 fi
 
 # This job builds CMake as C++11.  Prevent C++17 headers from being used.
-if test "$CMAKE_CONFIGURATION" = "fedora43_ninja" -a "$CI_JOB_STAGE" = "build"; then
+if test "$CMAKE_CONFIGURATION" = "fedora44_ninja" -a "$CI_JOB_STAGE" = "build"; then
   for i in filesystem optional string_view; do
-    sed -i -e '$a#error "Use <cm/'"$i"'> instead"' "/usr/include/c++/15/$i"
+    sed -i -e '$a#error "Use <cm/'"$i"'> instead"' "/usr/include/c++/16/$i"
   done
 fi
 
diff --git a/.gitlab/ci/env_fedora44_ninja_clang.sh b/.gitlab/ci/env_fedora44_ninja_clang.sh
new file mode 100644
index 0000000..4d2ba81
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_clang.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_gcc_std_reloc.sh b/.gitlab/ci/env_fedora44_ninja_gcc_std_reloc.sh
similarity index 85%
rename from .gitlab/ci/env_fedora43_ninja_gcc_std_reloc.sh
rename to .gitlab/ci/env_fedora44_ninja_gcc_std_reloc.sh
index 91b824d..ae640b7 100644
--- a/.gitlab/ci/env_fedora43_ninja_gcc_std_reloc.sh
+++ b/.gitlab/ci/env_fedora44_ninja_gcc_std_reloc.sh
@@ -1,6 +1,6 @@
 # "Misplace" the `libstdc++.modules.json` file so that
 # `CMAKE_CXX_STDLIB_MODULES_JSON` is needed to use `import std`.
-stdlib_modules_dir="/usr/lib/gcc/x86_64-redhat-linux/15"
+stdlib_modules_dir="/usr/lib/gcc/x86_64-redhat-linux/16"
 mkdir "$stdlib_modules_dir.reloc"
 mv "$stdlib_modules_dir/libstdc++.modules.json" "$stdlib_modules_dir.reloc"
 export CMAKE_CI_CXX_STDLIB_MODULES_JSON="$stdlib_modules_dir.reloc/libstdc++.modules.json"
diff --git a/.gitlab/ci/env_fedora44_ninja_instrumentation.sh b/.gitlab/ci/env_fedora44_ninja_instrumentation.sh
new file mode 100644
index 0000000..99f7538
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_instrumentation.sh
@@ -0,0 +1 @@
+source .gitlab/ci/env_fedora44_ninja.sh
diff --git a/.gitlab/ci/env_fedora44_ninja_lfortran.sh b/.gitlab/ci/env_fedora44_ninja_lfortran.sh
new file mode 100644
index 0000000..409404e
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_lfortran.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_lfortran.sh
diff --git a/.gitlab/ci/env_fedora43_ninja_multi.sh b/.gitlab/ci/env_fedora44_ninja_multi.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_ninja_multi.sh
rename to .gitlab/ci/env_fedora44_ninja_multi.sh
diff --git a/.gitlab/ci/env_fedora44_ninja_multi_clang.sh b/.gitlab/ci/env_fedora44_ninja_multi_clang.sh
new file mode 100644
index 0000000..4d2ba81
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_multi_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora44_common_clang.sh
diff --git a/.gitlab/ci/env_fedora44_ninja_valgrind.sh b/.gitlab/ci/env_fedora44_ninja_valgrind.sh
new file mode 100644
index 0000000..99f7538
--- /dev/null
+++ b/.gitlab/ci/env_fedora44_ninja_valgrind.sh
@@ -0,0 +1 @@
+source .gitlab/ci/env_fedora44_ninja.sh
diff --git a/.gitlab/ci/env_fedora43_pvs_studio.sh b/.gitlab/ci/env_fedora44_pvs_studio.sh
similarity index 100%
rename from .gitlab/ci/env_fedora43_pvs_studio.sh
rename to .gitlab/ci/env_fedora44_pvs_studio.sh
diff --git a/.gitlab/ci/env_windows_pellesc13.01.ps1 b/.gitlab/ci/env_windows_pellesc13.01.ps1
index 4a8b1ca..84a38ac 100644
--- a/.gitlab/ci/env_windows_pellesc13.01.ps1
+++ b/.gitlab/ci/env_windows_pellesc13.01.ps1
@@ -1,6 +1,2 @@
 . .gitlab/ci/ninja-env.ps1
 . .gitlab/ci/pellesc-env.ps1
-
-# FIXME(#21536): Avoid requiring the end user to enable
-# Pelles C's Microsoft extensions to use Windows APIs.
-$env:CFLAGS = "-Ze"
diff --git a/.gitlab/ci/post_build_fedora43_tidy.sh b/.gitlab/ci/post_build_fedora44_tidy.sh
similarity index 100%
rename from .gitlab/ci/post_build_fedora43_tidy.sh
rename to .gitlab/ci/post_build_fedora44_tidy.sh
diff --git a/.gitlab/ci/pre_build_fedora43_bullseye_coverage.sh b/.gitlab/ci/pre_build_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/pre_build_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/pre_build_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/ci/pre_configure_fedora43_bullseye_coverage.sh b/.gitlab/ci/pre_configure_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/pre_configure_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/pre_configure_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/ci/pre_configure_fedora43_tidy.sh b/.gitlab/ci/pre_configure_fedora44_tidy.sh
similarity index 100%
rename from .gitlab/ci/pre_configure_fedora43_tidy.sh
rename to .gitlab/ci/pre_configure_fedora44_tidy.sh
diff --git a/.gitlab/ci/pre_test_fedora43_bullseye_coverage.sh b/.gitlab/ci/pre_test_fedora44_bullseye_coverage.sh
similarity index 100%
rename from .gitlab/ci/pre_test_fedora43_bullseye_coverage.sh
rename to .gitlab/ci/pre_test_fedora44_bullseye_coverage.sh
diff --git a/.gitlab/os-linux.yml b/.gitlab/os-linux.yml
index 4d9aff3..96fed40 100644
--- a/.gitlab/os-linux.yml
+++ b/.gitlab/os-linux.yml
@@ -5,7 +5,7 @@
 ### Release
 
 .linux_prep_source:
-    image: "fedora:43"
+    image: "fedora:44"
 
     variables:
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
@@ -81,15 +81,15 @@
 
 ### Fedora
 
-.fedora43:
-    image: "kitware/cmake:ci-fedora43-x86_64-2026-04-28"
+.fedora44:
+    image: "kitware/cmake:ci-fedora44-x86_64-2026-04-30"
 
     variables:
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes"
         CMAKE_ARCH: x86_64
 
-.fedora43_hip:
-    image: "kitware/cmake:ci-fedora43-hip-x86_64-2025-10-29"
+.fedora44_hip:
+    image: "kitware/cmake:ci-fedora44-hip-x86_64-2026-04-30"
 
     variables:
         # FIXME(rocclr): device modules fail loading from binaries in paths with spaces
@@ -98,26 +98,26 @@
 
 #### Coverage builds
 
-.fedora43_gcc_gcov:
-    extends: .fedora43
+.fedora44_gcc_gcov:
+    extends: .fedora44
 
     variables:
         # See issue #20001
         CMAKE_GENERATOR: "Unix Makefiles"
-        CMAKE_CONFIGURATION: fedora43_gcc_gcov
+        CMAKE_CONFIGURATION: fedora44_gcc_gcov
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_BUILD_TYPE: Debug
         CMAKE_CI_TEST_TIMEOUT: "1500"
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_bullseye_coverage:
-    extends: .fedora43
+.fedora44_bullseye_coverage:
+    extends: .fedora44
     environment:
         name: bullseye-coverage
     variables:
         # See issue #20001
         CMAKE_GENERATOR: "Unix Makefiles"
-        CMAKE_CONFIGURATION: fedora43_bullseye_coverage
+        CMAKE_CONFIGURATION: fedora44_bullseye_coverage
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_BUILD_TYPE: Debug
         CMAKE_CI_TEST_TIMEOUT: "1500"
@@ -125,61 +125,61 @@
 
 #### Lint builds
 
-.fedora43_tidy:
-    extends: .fedora43
+.fedora44_tidy:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_tidy
+        CMAKE_CONFIGURATION: fedora44_tidy
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_pvs_studio:
-    extends: .fedora43
+.fedora44_pvs_studio:
+    extends: .fedora44
     environment:
         name: pvs-studio
     variables:
-        CMAKE_CONFIGURATION: fedora43_pvs_studio
+        CMAKE_CONFIGURATION: fedora44_pvs_studio
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_clang_analyzer:
-    extends: .fedora43
+.fedora44_clang_analyzer:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_clang_analyzer
+        CMAKE_CONFIGURATION: fedora44_clang_analyzer
         CMAKE_CI_BUILD_TYPE: Debug
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_clang_fuzzing:
-    extends: .fedora43
+.fedora44_clang_fuzzing:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_clang_fuzzing
+        CMAKE_CONFIGURATION: fedora44_clang_fuzzing
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_clazy:
-    extends: .fedora43
+.fedora44_clazy:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_clazy
+        CMAKE_CONFIGURATION: fedora44_clazy
         CMAKE_CI_BUILD_TYPE: Debug
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_sphinx:
-    extends: .fedora43
+.fedora44_sphinx:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_sphinx
+        CMAKE_CONFIGURATION: fedora44_sphinx
         CTEST_NO_WARNINGS_ALLOWED: 1
         CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
         CMAKE_CI_NO_INSTALL: 1
 
-.fedora43_sphinx_package:
-    extends: .fedora43
+.fedora44_sphinx_package:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_sphinx_package
+        CMAKE_CONFIGURATION: fedora44_sphinx_package
         CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
 
 #### Build and test
@@ -235,53 +235,53 @@
         CMAKE_CI_BUILD_TYPE: Release
         CTEST_NO_WARNINGS_ALLOWED: 1
 
-.fedora43_extdeps:
-    extends: .fedora43
+.fedora44_extdeps:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_extdeps
+        CMAKE_CONFIGURATION: fedora44_extdeps
         CMAKE_CI_BUILD_TYPE: Release
         CTEST_NO_WARNINGS_ALLOWED: 1
 
-.fedora43_ninja:
-    extends: .fedora43
+.fedora44_ninja:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja
+        CMAKE_CONFIGURATION: fedora44_ninja
         CMAKE_CI_BUILD_TYPE: Release
         CTEST_NO_WARNINGS_ALLOWED: 1
 
-.fedora43_makefiles:
-    extends: .fedora43
+.fedora44_makefiles:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_makefiles
+        CMAKE_CONFIGURATION: fedora44_makefiles
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "Unix Makefiles"
 
-.fedora43_makefiles_symlinked:
-    extends: .fedora43
+.fedora44_makefiles_symlinked:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_makefiles_symlinked
+        CMAKE_CONFIGURATION: fedora44_makefiles_symlinked
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "Unix Makefiles"
         CMAKE_CI_IN_SYMLINK_TREE: 1
         CMAKE_CI_BUILD_DIR: "real_work/work/build"
 
-.fedora43_fastbuild:
-    extends: .fedora43
+.fedora44_fastbuild:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_fastbuild
+        CMAKE_CONFIGURATION: fedora44_fastbuild
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "FASTBuild"
 
-.fedora43_ninja_instrumentation:
-    extends: .fedora43
+.fedora44_ninja_instrumentation:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_instrumentation
+        CMAKE_CONFIGURATION: fedora44_ninja_instrumentation
         CTEST_NO_WARNINGS_ALLOWED: 1
         CMAKE_GENERATOR: "Ninja"
 
@@ -300,57 +300,57 @@
     variables:
         CMAKE_CONFIGURATION: debian13_ninja_clang
 
-.fedora43_makefiles_clang:
-    extends: .fedora43
+.fedora44_makefiles_clang:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_makefiles_clang
+        CMAKE_CONFIGURATION: fedora44_makefiles_clang
         CMAKE_GENERATOR: "Unix Makefiles"
 
-.fedora43_makefiles_lfortran:
-    extends: .fedora43
+.fedora44_makefiles_lfortran:
+    extends: .fedora44
 
     variables:
         # FIXME(lfortran): -rpath flags with spaces not forwarded
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
-        CMAKE_CONFIGURATION: fedora43_makefiles_lfortran
+        CMAKE_CONFIGURATION: fedora44_makefiles_lfortran
         CMAKE_GENERATOR: "Unix Makefiles"
         CTEST_LABELS: "Fortran"
 
-.fedora43_ninja_lfortran:
-    extends: .fedora43
+.fedora44_ninja_lfortran:
+    extends: .fedora44
 
     variables:
         # FIXME(lfortran): -rpath flags with spaces not forwarded
         GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
-        CMAKE_CONFIGURATION: fedora43_ninja_lfortran
+        CMAKE_CONFIGURATION: fedora44_ninja_lfortran
         CTEST_LABELS: "Fortran"
 
-.fedora43_ninja_multi:
-    extends: .fedora43
+.fedora44_ninja_multi:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_multi
+        CMAKE_CONFIGURATION: fedora44_ninja_multi
         CMAKE_GENERATOR: "Ninja Multi-Config"
 
-.fedora43_ninja_clang:
-    extends: .fedora43
+.fedora44_ninja_clang:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_clang
+        CMAKE_CONFIGURATION: fedora44_ninja_clang
 
-.fedora43_ninja_gcc_std_reloc:
-    extends: .fedora43
+.fedora44_ninja_gcc_std_reloc:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_gcc_std_reloc
+        CMAKE_CONFIGURATION: fedora44_ninja_gcc_std_reloc
         CTEST_LABELS: "CXXModules"
 
-.fedora43_ninja_multi_clang:
-    extends: .fedora43
+.fedora44_ninja_multi_clang:
+    extends: .fedora44
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_multi_clang
+        CMAKE_CONFIGURATION: fedora44_ninja_multi_clang
         CMAKE_GENERATOR: "Ninja Multi-Config"
 
 ### Sanitizers
@@ -373,23 +373,23 @@
         CTEST_MEMORYCHECK_TYPE: Valgrind
         CMAKE_CI_RUN_MEMCHECK: "true"
         CMAKE_CI_TEST_TIMEOUT: "1500"
-        CMAKE_VALGRIND_CONFIGURATION: fedora43
+        CMAKE_VALGRIND_CONFIGURATION: fedora44
 
-.fedora43_asan:
+.fedora44_asan:
     extends:
-        - .fedora43
+        - .fedora44
         - .fedora_asan_addon
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_asan
+        CMAKE_CONFIGURATION: fedora44_asan
 
-.fedora43_ninja_valgrind:
+.fedora44_ninja_valgrind:
     extends:
-        - .fedora43
+        - .fedora44
         - .fedora_valgrind_addon
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_ninja_valgrind
+        CMAKE_CONFIGURATION: fedora44_ninja_valgrind
 
 ### Intel Compiler
 
@@ -599,11 +599,11 @@
         CMAKE_CONFIGURATION: debian13_hip_radeon
         CTEST_LABELS: "HIP"
 
-.fedora43_hip_radeon:
-    extends: .fedora43_hip
+.fedora44_hip_radeon:
+    extends: .fedora44_hip
 
     variables:
-        CMAKE_CONFIGURATION: fedora43_hip_radeon
+        CMAKE_CONFIGURATION: fedora44_hip_radeon
         CTEST_LABELS: "HIP"
 
 .hip6.3_nvidia:
@@ -758,14 +758,14 @@
 
 .cmake_version_update_linux:
     stage: build
-    extends: .fedora43
+    extends: .fedora44
     script:
         - .gitlab/ci/cmake_version_update.sh
     interruptible: false # The job internally fetches and retries.
 
 .cmake_spellcheck_linux:
     stage: build
-    extends: .fedora43
+    extends: .fedora44
     script:
         - .gitlab/ci/codespell.bash
         - .gitlab/ci/typos.bash
@@ -936,7 +936,7 @@
 .cmake_org_help:
     stage: build
     extends:
-        - .fedora43
+        - .fedora44
         - .linux_x86_64_tags
         - .cmake_org_help_artifacts
     script:
diff --git a/.gitlab/upload.yml b/.gitlab/upload.yml
index 47316d1..7e7516b 100644
--- a/.gitlab/upload.yml
+++ b/.gitlab/upload.yml
@@ -1,7 +1,7 @@
 # Steps for uploading artifacts
 
 .rsync_upload_package:
-    image: "fedora:43"
+    image: "fedora:44"
     stage: upload
     tags:
         - cmake
@@ -21,7 +21,7 @@
 
 .rsync_upload_help:
     stage: upload
-    image: "fedora:43"
+    image: "fedora:44"
     tags:
         - cmake
         - docker
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 64acb89..b986c76 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -113,7 +113,7 @@
 
     # NOTE See BUG https://github.com/crate-ci/typos/issues/390
   - repo: https://github.com/adhtruong/mirrors-typos
-    rev: v1.44.0
+    rev: v1.45.2
     hooks:
       - id: typos
         # NOTE Override hook's default args to prevent automatic
diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in
index 75642c9..591da55 100644
--- a/CTestCustom.cmake.in
+++ b/CTestCustom.cmake.in
@@ -51,6 +51,7 @@
   "Warning: Function .* can throw only the exceptions thrown by the function .* it overrides\\."
   "WarningMessagesDialog\\.cxx"
   "warning.*directory name.*CMake-Xcode.*/bin/.*does not exist.*"
+  "stl_algo(base)?\\.h:[0-9:]* warning: loop not unrolled"
   "stl_deque.h:1051"
   "Tests/CMakeLib/testCTestResourceSpec.cxx:.*warning: missing initializer for member.*cmCTestResourceSpec::.*" # GCC 4.8 disagrees with later compilers on C++11 initializer list conversion
   "(Lexer|Parser).*warning.*conversion.*may (alter its value|change the sign)"
diff --git a/Help/command/list.rst b/Help/command/list.rst
index 88516f0..a84e2cb 100644
--- a/Help/command/list.rst
+++ b/Help/command/list.rst
@@ -19,7 +19,7 @@
 
   `Modification`_
     list(`APPEND`_ <list> [<element>...])
-    list(`FILTER`_ <list> {INCLUDE | EXCLUDE} REGEX <regex>)
+    list(`FILTER`_ <list> <INCLUDE|EXCLUDE> <MODE>)
     list(`INSERT`_ <list> <index> [<element>...])
     list(`POP_BACK`_ <list> [<out-var>...])
     list(`POP_FRONT`_ <list> [<out-var>...])
@@ -120,15 +120,54 @@
   that empty list.
 
 .. signature::
-  list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
+  list(FILTER <list> <INCLUDE|EXCLUDE> <MODE>)
 
-.. versionadded:: 3.6
+  .. versionadded:: 3.6
 
-Includes or removes items from the list that match the mode's pattern.
-In ``REGEX`` mode, items will be matched against the given regular expression.
+  Includes or removes items from the list that match the mode's pattern.
 
-For more information on regular expressions look under
-:ref:`string(REGEX) <Regex Specification>`.
+  ``<MODE>`` must be one of the following:
+
+    ``REGEX``
+      Items will be matched against the given regular expression.
+
+      .. code-block:: cmake
+
+        list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
+
+      For more information on regular expressions look under
+      :ref:`string(REGEX) <Regex Specification>`.
+
+    ``PREDICATE``
+      Specify a user-defined callable as a predicate.
+
+      .. code-block:: cmake
+
+        list(FILTER <list> <INCLUDE|EXCLUDE> PREDICATE <function>)
+
+      .. versionadded:: 4.4
+
+      ``<function>`` is a user-defined :command:`function` that acts as a
+      unary predicate.  The callable must accept exactly two parameters: the
+      input value and the name of an output variable.  The callable must set the
+      output variable to a boolean value in the calling scope.
+      The output variable is interpreted using standard CMake boolean evaluation.
+      If the callable does not set the output variable, it is an error.
+
+      Example:
+
+      .. code-block:: cmake
+
+        function(file_exists path result)
+          if(EXISTS "${path}")
+            set(${result} TRUE PARENT_SCOPE)
+          else()
+            set(${result} FALSE PARENT_SCOPE)
+          endif()
+        endfunction()
+
+        set(candidate_files main.c missing.c utils.c)
+        list(FILTER candidate_files INCLUDE PREDICATE file_exists)
 
 .. signature::
   list(INSERT <list> <element_index> <element> [<element> ...])
@@ -316,6 +355,39 @@
 
         list(TRANSFORM <list> <ACTION> REGEX <regular_expression> ...)
 
+    ``PREDICATE``
+      Specify a user-defined callable as a predicate.
+      Only elements for which the callable returns a true value will be
+      transformed.
+
+      .. code-block:: cmake
+
+        list(TRANSFORM <list> <ACTION> PREDICATE <function> ...)
+
+      .. versionadded:: 4.4
+
+      ``<function>`` is a user-defined :command:`function` with exactly
+      two formal parameters: the input value and the name of an output
+      variable.  The callable must set the output variable to a boolean
+      value.  Standard CMake boolean evaluation is used.
+      If the callable does not set the output variable, it is an error.
+
+      Example:
+
+      .. code-block:: cmake
+
+        function(is_relative path result)
+          if(NOT IS_ABSOLUTE "${path}")
+            set(${result} TRUE PARENT_SCOPE)
+          else()
+            set(${result} FALSE PARENT_SCOPE)
+          endif()
+        endfunction()
+
+        set(search_paths /usr/include src lib /opt/lib)
+        list(TRANSFORM search_paths PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/"
+             PREDICATE is_relative)
+
 
 Ordering
 ^^^^^^^^
diff --git a/Help/manual/cmake-file-api.7.rst b/Help/manual/cmake-file-api.7.rst
index 857d498..49b348f 100644
--- a/Help/manual/cmake-file-api.7.rst
+++ b/Help/manual/cmake-file-api.7.rst
@@ -1017,6 +1017,9 @@
 
     This field was added in codemodel version 2.4.
 
+    Since codemodel version 2.11, this field additionally accounts for
+    ``SOURCES`` file sets.
+
   ``fileSetDirectories``
     Optional member that is present when ``type`` is ``fileSet``. The value
     is a list of strings with the file set's base directories (determined by
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index 571585d..aec1892 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -545,6 +545,7 @@
    /prop_fs/COMPILE_DEFINITIONS
    /prop_fs/COMPILE_OPTIONS
    /prop_fs/CXX_SCAN_FOR_MODULES
+   /prop_fs/JOB_POOL_COMPILE
    /prop_fs/INCLUDE_DIRECTORIES
    /prop_fs/INDEPENDENT_FILES
    /prop_fs/INTERFACE_COMPILE_DEFINITIONS
@@ -552,6 +553,7 @@
    /prop_fs/INTERFACE_INCLUDE_DIRECTORIES
    /prop_fs/INTERFACE_SOURCES
    /prop_fs/SCOPE
+   /prop_fs/SKIP_LINTING
    /prop_fs/SOURCES
    /prop_fs/TYPE
 
diff --git a/Help/manual/file_api/schema_target.json b/Help/manual/file_api/schema_target.json
index 68cb14e..925c259 100644
--- a/Help/manual/file_api/schema_target.json
+++ b/Help/manual/file_api/schema_target.json
@@ -34,6 +34,9 @@
     },
     {
       "$ref": "#/definitions/codemodelV2_10"
+    },
+    {
+      "$ref": "#/definitions/codemodelV2_11"
     }
   ],
   "definitions": {
@@ -68,7 +71,25 @@
         },
         "minor": {
           "type": "integer",
-          "minimum": 10
+          "const": 10
+        }
+      },
+      "additionalProperties": false
+    },
+    "codemodelVersionV2_11": {
+      "type": "object",
+      "required": [
+        "major",
+        "minor"
+      ],
+      "properties": {
+        "major": {
+          "type": "integer",
+          "const": 2
+        },
+        "minor": {
+          "type": "integer",
+          "minimum": 11
         }
       },
       "additionalProperties": false
@@ -81,7 +102,22 @@
       "type": "string",
       "description": "Unique identifier for the target. The format is unspecified and should not be interpreted by clients."
     },
-    "typeV2_0": {
+    "fileset-typeV2_5": {
+      "type": "string",
+      "enum": [
+        "HEADERS",
+        "CXX_MODULES"
+      ]
+    },
+    "fileset-typeV2_11": {
+      "type": "string",
+      "enum": [
+        "HEADERS",
+        "CXX_MODULES",
+        "SOURCES"
+      ]
+    },
+    "target-typeV2_0": {
       "type": "string",
       "enum": [
         "EXECUTABLE",
@@ -93,7 +129,7 @@
         "UTILITY"
       ]
     },
-    "typeV2_9": {
+    "target-typeV2_9": {
       "type": "string",
       "enum": [
         "EXECUTABLE",
@@ -530,12 +566,45 @@
             "type": "string"
           },
           "type": {
+            "$ref": "#/definitions/fileset-typeV2_5"
+          },
+          "visibility": {
             "type": "string",
             "enum": [
-              "HEADERS",
-              "CXX_MODULES"
+              "PUBLIC",
+              "PRIVATE",
+              "INTERFACE"
             ]
           },
+          "baseDirectories": {
+            "type": "array",
+            "minItems": 1,
+            "items": {
+              "type": "string"
+            },
+            "description": "Base directories containing the file set's files. If a directory is inside the top level source directory, its path is specified relative to that directory. Otherwise, its path is absolute."
+          }
+        },
+        "additionalProperties": false
+      }
+    },
+    "fileSetsV2_11": {
+      "type": "array",
+      "items": {
+        "type": "object",
+        "required": [
+          "name",
+          "type",
+          "visibility",
+          "baseDirectories"
+        ],
+        "properties": {
+          "name": {
+            "type": "string"
+          },
+          "type": {
+            "$ref": "#/definitions/fileset-typeV2_11"
+          },
           "visibility": {
             "type": "string",
             "enum": [
@@ -1094,7 +1163,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_0"
+          "$ref": "#/definitions/target-typeV2_0"
         },
         "backtrace": {
           "$ref": "#/definitions/backtrace"
@@ -1158,7 +1227,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_0"
+          "$ref": "#/definitions/target-typeV2_0"
         },
         "backtrace": {
           "$ref": "#/definitions/backtrace"
@@ -1222,7 +1291,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_0"
+          "$ref": "#/definitions/target-typeV2_0"
         },
         "backtrace": {
           "$ref": "#/definitions/backtrace"
@@ -1286,7 +1355,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_0"
+          "$ref": "#/definitions/target-typeV2_0"
         },
         "backtrace": {
           "$ref": "#/definitions/backtrace"
@@ -1353,7 +1422,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_0"
+          "$ref": "#/definitions/target-typeV2_0"
         },
         "backtrace": {
           "$ref": "#/definitions/backtrace"
@@ -1420,7 +1489,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_0"
+          "$ref": "#/definitions/target-typeV2_0"
         },
         "backtrace": {
           "$ref": "#/definitions/backtrace"
@@ -1490,7 +1559,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_0"
+          "$ref": "#/definitions/target-typeV2_0"
         },
         "backtrace": {
           "$ref": "#/definitions/backtrace"
@@ -1567,7 +1636,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_9"
+          "$ref": "#/definitions/target-typeV2_9"
         },
         "imported": {
           "$ref": "#/definitions/importedV2_9"
@@ -1674,7 +1743,7 @@
           "$ref": "#/definitions/id"
         },
         "type": {
-          "$ref": "#/definitions/typeV2_9"
+          "$ref": "#/definitions/target-typeV2_9"
         },
         "imported": {
           "$ref": "#/definitions/importedV2_9"
@@ -1762,6 +1831,116 @@
         }
       },
       "additionalProperties": false
+    },
+    "codemodelV2_11": {
+      "required": [
+        "codemodelVersion",
+        "name",
+        "id",
+        "type",
+        "paths",
+        "sources",
+        "backtraceGraph"
+      ],
+      "properties": {
+        "codemodelVersion": {
+          "$ref": "#/definitions/codemodelVersionV2_11"
+        },
+        "name": {
+          "$ref": "#/definitions/name"
+        },
+        "id": {
+          "$ref": "#/definitions/id"
+        },
+        "type": {
+          "$ref": "#/definitions/target-typeV2_9"
+        },
+        "imported": {
+          "$ref": "#/definitions/importedV2_9"
+        },
+        "local": {
+          "$ref": "#/definitions/localV2_9"
+        },
+        "abstract": {
+          "$ref": "#/definitions/abstractV2_9"
+        },
+        "backtrace": {
+          "$ref": "#/definitions/backtrace"
+        },
+        "folder": {
+          "$ref": "#/definitions/folder"
+        },
+        "paths": {
+          "$ref": "#/definitions/paths"
+        },
+        "nameOnDisk": {
+          "$ref": "#/definitions/nameOnDisk"
+        },
+        "artifacts": {
+          "$ref": "#/definitions/artifacts"
+        },
+        "isGeneratorProvided": {
+          "$ref": "#/definitions/isGeneratorProvided"
+        },
+        "install": {
+          "$ref": "#/definitions/install"
+        },
+        "launchers": {
+          "$ref": "#/definitions/launchersV2_7"
+        },
+        "link": {
+          "$ref": "#/definitions/link"
+        },
+        "archive": {
+          "$ref": "#/definitions/archive"
+        },
+        "debugger": {
+          "$ref": "#/definitions/debuggerV2_8"
+        },
+        "dependencies": {
+          "$ref": "#/definitions/dependencies"
+        },
+        "linkLibraries": {
+          "$ref": "#/definitions/linkLibrariesV2_9"
+        },
+        "interfaceLinkLibraries": {
+          "$ref": "#/definitions/interfaceLinkLibrariesV2_9"
+        },
+        "compileDependencies": {
+          "$ref": "#/definitions/compileDependenciesV2_9"
+        },
+        "interfaceCompileDependencies": {
+          "$ref": "#/definitions/interfaceCompileDependenciesV2_9"
+        },
+        "objectDependencies": {
+          "$ref": "#/definitions/onlyTargetDependenciesArrayV2_9"
+        },
+        "orderDependencies": {
+          "$ref": "#/definitions/onlyTargetDependenciesArrayV2_9"
+        },
+        "fileSets": {
+          "$ref": "#/definitions/fileSetsV2_11"
+        },
+        "sources": {
+          "$ref": "#/definitions/sourcesV2_5"
+        },
+        "interfaceSources": {
+          "$ref": "#/definitions/interfaceSourcesV2_10"
+        },
+        "symbolic": {
+          "$ref": "#/definitions/symbolicV2_9"
+        },
+        "sourceGroups": {
+          "$ref": "#/definitions/sourceGroupsV2_10"
+        },
+        "compileGroups": {
+          "$ref": "#/definitions/compileGroupsV2_6"
+        },
+        "backtraceGraph": {
+          "$ref": "#/definitions/backtraceGraph"
+        }
+      },
+      "additionalProperties": false
     }
   }
 }
diff --git a/Help/manual/presets/schema.json b/Help/manual/presets/schema.json
index cd52447..128c829 100644
--- a/Help/manual/presets/schema.json
+++ b/Help/manual/presets/schema.json
@@ -1856,6 +1856,9 @@
     "buildPresets.environment@v2..": {
       "type": "object",
       "description": "An optional map of environment variables. The key is the variable name (which must not be an empty string). Each variable is set regardless of whether or not a value was given to it by the process's environment. This field supports macro expansion, and environment variables in this map may reference each other, and may be listed in any order, as long as such references do not cause a cycle (for example,if ENV_1 is $env{ENV_2}, ENV_2 may not be $env{ENV_1}.) Environment variables are inherited through the inherits field, and the preset's environment will be the union of its own environment and the environment from all its parents. If multiple presets in this union define the same variable, the standard rules of inherits are applied. Setting a variable to null causes it to not be set, even if a value was inherited from another preset.",
+      "propertyNames": {
+        "pattern": "^.+$"
+      },
       "properties": {},
       "additionalProperties": {
         "anyOf": [
diff --git a/Help/manual/presets/schema.yaml b/Help/manual/presets/schema.yaml
index c66bab0..7650fa4 100644
--- a/Help/manual/presets/schema.yaml
+++ b/Help/manual/presets/schema.yaml
@@ -989,6 +989,8 @@
             ExternalProject may use a different (system default) compiler than
             the top-level CMake project.
           properties: {}
+          propertyNames:
+            pattern: '^.+$'
           additionalProperties: *environment-additional-properties
         configurePreset:
           type: string
diff --git a/Help/prop_fs/JOB_POOL_COMPILE.rst b/Help/prop_fs/JOB_POOL_COMPILE.rst
new file mode 100644
index 0000000..b460aff
--- /dev/null
+++ b/Help/prop_fs/JOB_POOL_COMPILE.rst
@@ -0,0 +1,28 @@
+JOB_POOL_COMPILE
+----------------
+
+.. versionadded:: 4.4
+
+Ninja only: Pool used for compiling.
+
+The number of parallel compile processes could be limited by defining
+pools with the global :prop_gbl:`JOB_POOLS`
+property and then specifying here the pool name.
+
+This allows to override the :prop_sf:`JOB_POOL_COMPILE` and
+:prop_tgt:`JOB_POOL_COMPILE` values for specific source files within a same
+target.
+
+For instance:
+
+.. code-block:: cmake
+
+  set_property(FILE_SET my_fileset TYPE SOURCE PROPERTY JOB_POOL_COMPILE two_jobs)
+
+This property is undefined by default.
+
+See Also
+^^^^^^^^
+
+* :prop_sf:`JOB_POOL_COMPILE` source file property
+* :prop_tgt:`JOB_POOL_COMPILE` target property
diff --git a/Help/prop_fs/SKIP_LINTING.rst b/Help/prop_fs/SKIP_LINTING.rst
new file mode 100644
index 0000000..7c6546e
--- /dev/null
+++ b/Help/prop_fs/SKIP_LINTING.rst
@@ -0,0 +1,54 @@
+SKIP_LINTING
+------------
+
+.. versionadded:: 4.4
+
+This property allows you to exclude a source files of the specific file set
+from the linting process. The linting process involves running
+tools such as :prop_tgt:`<LANG>_CPPLINT`, :prop_tgt:`<LANG>_CLANG_TIDY`,
+:prop_tgt:`<LANG>_CPPCHECK`, :prop_tgt:`<LANG>_ICSTAT`,
+:prop_tgt:`<LANG>_PVS_STUDIO` and :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` on
+the source files, as well as compiling header files as part of
+:prop_tgt:`VERIFY_INTERFACE_HEADER_SETS`. By setting ``SKIP_LINTING`` on a
+file set, the mentioned linting tools will not be executed for the files of
+that particular file set.  If the :prop_fs:`SKIP_LINTING` file set property
+is set, it takes precedence over this source-file and target-wide properties.
+
+This is a convenience alternative to setting the :prop_sf:`SKIP_LINTING`
+source file property individually on each source.
+
+Example
+^^^^^^^
+
+Consider a C++ project that includes multiple source files,
+such as ``main.cpp``, ``things.cpp``, and ``generatedBindings.cpp``.
+In this example, you want to exclude the ``things.cpp`` and
+``generatedBindings.cpp`` files from the linting process. To achieve this, you
+can use a file set and utilize the ``SKIP_LINTING`` property with the
+:command:`set_property(FILE_SET) <set_property>` command as shown below:
+
+.. code-block:: cmake
+
+  add_executable(MyApp main.cpp)
+  target_sources(MyApp PRIVATE FILE_SET skip_lint TYPE SOURCES
+                               FILES things.cpp generatedBindings.cpp)
+
+  set_property(FILE_SET skip_lint TARGET MyApp PROPERTY SKIP_LINTING ON)
+
+In the provided code snippet, the ``SKIP_LINTING`` property is set to true
+for the ``skip_lint`` file set. As a result, when the linting
+tools specified by :prop_tgt:`<LANG>_CPPLINT`, :prop_tgt:`<LANG>_CLANG_TIDY`,
+:prop_tgt:`<LANG>_CPPCHECK`, :prop_tgt:`<LANG>_ICSTAT` or
+:prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` are executed, they will skip analyzing
+the ``things.cpp`` and ``generatedBindings.cpp`` files.
+
+By using the ``SKIP_LINTING`` file set 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_sf:`SKIP_LINTING` source file property
+* :prop_tgt:`SKIP_LINTING` target property
diff --git a/Help/prop_sf/JOB_POOL_COMPILE.rst b/Help/prop_sf/JOB_POOL_COMPILE.rst
index 79409da..2c9a8d4 100644
--- a/Help/prop_sf/JOB_POOL_COMPILE.rst
+++ b/Help/prop_sf/JOB_POOL_COMPILE.rst
@@ -19,3 +19,9 @@
   set_property(SOURCE main.cc PROPERTY JOB_POOL_COMPILE two_jobs)
 
 This property is undefined by default.
+
+See Also
+^^^^^^^^
+
+* :prop_fs:`JOB_POOL_COMPILE` file set property
+* :prop_tgt:`JOB_POOL_COMPILE` target property
diff --git a/Help/prop_sf/SKIP_LINTING.rst b/Help/prop_sf/SKIP_LINTING.rst
index 5d2c0c4..07e5cd1 100644
--- a/Help/prop_sf/SKIP_LINTING.rst
+++ b/Help/prop_sf/SKIP_LINTING.rst
@@ -43,7 +43,11 @@
 linting tools on the relevant parts of your project, enhancing the efficiency
 and effectiveness of the linting workflow.
 
+A convenient alternative, when multiple sources should be excluded from the
+linting process, is to use the file set's :prop_fs:`SKIP_LINTING` property.
+
 See Also
 ^^^^^^^^
 
+* :prop_fs:`SKIP_LINTING` file set property
 * :prop_tgt:`SKIP_LINTING` target property
diff --git a/Help/prop_tgt/JOB_POOL_COMPILE.rst b/Help/prop_tgt/JOB_POOL_COMPILE.rst
index 5d8e940..d70b010 100644
--- a/Help/prop_tgt/JOB_POOL_COMPILE.rst
+++ b/Help/prop_tgt/JOB_POOL_COMPILE.rst
@@ -15,3 +15,9 @@
 
 This property is initialized by the value of
 :variable:`CMAKE_JOB_POOL_COMPILE`.
+
+See Also
+^^^^^^^^
+
+* :prop_fs:`JOB_POOL_COMPILE` file set property
+* :prop_sf:`JOB_POOL_COMPILE` source file property
diff --git a/Help/prop_tgt/SKIP_LINTING.rst b/Help/prop_tgt/SKIP_LINTING.rst
index 031f653..996c4ee 100644
--- a/Help/prop_tgt/SKIP_LINTING.rst
+++ b/Help/prop_tgt/SKIP_LINTING.rst
@@ -10,16 +10,19 @@
 :prop_tgt:`<LANG>_CPPCHECK`, :prop_tgt:`<LANG>_ICSTAT` and
 :prop_tgt:`<LANG>_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.
+is set on a specific source or if the :prop_fs:`SKIP_LINTING` file set property
+is set, 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.
+:prop_tgt:`SKIP_LINTING` or file set's :prop_fs:`SKIP_LINTING` including this
+source 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_fs:`SKIP_LINTING` file set property
 * :prop_sf:`SKIP_LINTING` source file property
diff --git a/Help/release/dev/FILE_SET-JOB_POOL_COMPILE.rst b/Help/release/dev/FILE_SET-JOB_POOL_COMPILE.rst
new file mode 100644
index 0000000..fe30570
--- /dev/null
+++ b/Help/release/dev/FILE_SET-JOB_POOL_COMPILE.rst
@@ -0,0 +1,5 @@
+FILE_SET-JOB_POOL_COMPILE
+-------------------------
+
+* File sets gained the support of the :prop_fs:`JOB_POOL_COMPILE` file set
+  property.
diff --git a/Help/release/dev/FILE_SET-SKIP_LINTING.rst b/Help/release/dev/FILE_SET-SKIP_LINTING.rst
new file mode 100644
index 0000000..eeca0cd
--- /dev/null
+++ b/Help/release/dev/FILE_SET-SKIP_LINTING.rst
@@ -0,0 +1,5 @@
+FILE_SET-SKIP_LINTING
+---------------------
+
+* File sets gained the support of the :prop_fs:`SKIP_LINTING` file set
+  property.
diff --git a/Help/release/dev/OpenWatcom-linker-id.rst b/Help/release/dev/OpenWatcom-linker-id.rst
new file mode 100644
index 0000000..6bc05bd
--- /dev/null
+++ b/Help/release/dev/OpenWatcom-linker-id.rst
@@ -0,0 +1,5 @@
+openwatcom-linker-id
+--------------------
+
+* The :variable:`CMAKE_<LANG>_COMPILER_LINKER_ID` variable learned to detect
+  the OpenWatcom ``wlink`` linker.
diff --git a/Help/release/dev/file-api-FILE_SET-SOURCES.rst b/Help/release/dev/file-api-FILE_SET-SOURCES.rst
new file mode 100644
index 0000000..e121c65
--- /dev/null
+++ b/Help/release/dev/file-api-FILE_SET-SOURCES.rst
@@ -0,0 +1,8 @@
+file-api-FILE_SET-SOURCES
+-------------------------
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 object has been
+  updated to 2.11.
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 "installers" object's
+  optional ``fileSetType`` field gained a new ``SOURCES`` value to incorporate
+  the new :ref:`file set <file sets>` ``SOURCES`` type in codemodel replies.
diff --git a/Help/release/dev/list-PREDICATE.rst b/Help/release/dev/list-PREDICATE.rst
new file mode 100644
index 0000000..324bd07
--- /dev/null
+++ b/Help/release/dev/list-PREDICATE.rst
@@ -0,0 +1,10 @@
+list-PREDICATE
+--------------
+
+* The :command:`list(TRANSFORM)` command gained a new ``PREDICATE`` selector
+  that invokes a user-defined callable to decide which elements are
+  transformed.
+
+* The :command:`list(FILTER)` command gained a new ``PREDICATE`` mode
+  that invokes a user-defined callable to decide which elements are
+  included or excluded, complementing the existing ``REGEX`` mode.
diff --git a/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst
index 5a70a94..21b31c4 100644
--- a/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst
+++ b/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst
@@ -22,6 +22,7 @@
                                 `sold`_ linker
 ``Solaris``                     SunOS system linker
 ``WILD``                        `wild`_ linker
+``OpenWatcom``                  `OpenWatcom wlink`_ linker
 =============================== ===============================================
 
 This variable is not guaranteed to be defined for all linkers or languages.
@@ -33,3 +34,4 @@
 .. _mold\: A Modern Linker: https://github.com/rui314/mold
 .. _sold: https://github.com/bluewhalesystems/sold
 .. _wild: https://github.com/wild-linker/wild
+.. _OpenWatcom wlink: https://www.openwatcom.com/
diff --git a/Modules/Compiler/NAG-Fortran.cmake b/Modules/Compiler/NAG-Fortran.cmake
index 50b2991..7d5a431 100644
--- a/Modules/Compiler/NAG-Fortran.cmake
+++ b/Modules/Compiler/NAG-Fortran.cmake
@@ -44,7 +44,13 @@
 set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free")
 set(CMAKE_Fortran_COMPILE_OPTIONS_PIC "-PIC")
 set(CMAKE_Fortran_COMPILE_OPTIONS_PIE "-PIC")
-set(CMAKE_Fortran_RESPONSE_FILE_LINK_FLAG "-Wl,@")
+if(CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 6.2)
+  set(CMAKE_Fortran_RESPONSE_FILE_LINK_FLAG "-xldarg @")
+  set(CMAKE_Fortran_RESPONSE_FILE_ARCHIVE_FLAG "@")
+  set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
+else()
+  set(CMAKE_Fortran_RESPONSE_FILE_LINK_FLAG "@")
+endif()
 set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-fpp")
 
 set(CMAKE_Fortran_LINK_MODE DRIVER)
diff --git a/Modules/Internal/CMakeDetermineLinkerId.cmake b/Modules/Internal/CMakeDetermineLinkerId.cmake
index 9b2283e..1664921 100644
--- a/Modules/Internal/CMakeDetermineLinkerId.cmake
+++ b/Modules/Internal/CMakeDetermineLinkerId.cmake
@@ -83,6 +83,11 @@
       set(linker_frontend "MSVC")
       set(linker_version "${CMAKE_MATCH_1}")
       break()
+    elseif(linker_desc MATCHES "Open Watcom Linker Version ([0-9.]+)")
+      set(linker_id "OpenWatcom")
+      set(linker_frontend "OpenWatcom")
+      set(linker_version "${CMAKE_MATCH_1}")
+      break()
     elseif (CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND linker_desc MATCHES "Solaris Link Editors: ([0-9.-]+)")
       set(linker_id "Solaris")
       set(linker_version "${CMAKE_MATCH_1}")
diff --git a/Modules/Platform/Windows-PellesC-ASM_POASM.cmake b/Modules/Platform/Windows-PellesC-ASM_POASM.cmake
index 2cafaef..2bff21f 100644
--- a/Modules/Platform/Windows-PellesC-ASM_POASM.cmake
+++ b/Modules/Platform/Windows-PellesC-ASM_POASM.cmake
@@ -6,3 +6,8 @@
 
 set(CMAKE_ASM_POASM_COMPILE_OBJECT
   "<CMAKE_ASM_POASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -Fo<OBJECT> <SOURCE>")
+
+string(APPEND CMAKE_ASM_POASM_FLAGS_DEBUG_INIT " -Zi")
+string(APPEND CMAKE_ASM_POASM_FLAGS_RELEASE_INIT "")
+string(APPEND CMAKE_ASM_POASM_FLAGS_RELWITHDEBINFO_INIT " -Zi")
+string(APPEND CMAKE_ASM_POASM_FLAGS_MINSIZEREL_INIT "")
diff --git a/Modules/Platform/Windows-PellesC-C.cmake b/Modules/Platform/Windows-PellesC-C.cmake
index 64fd5f6..f5a3dad 100644
--- a/Modules/Platform/Windows-PellesC-C.cmake
+++ b/Modules/Platform/Windows-PellesC-C.cmake
@@ -6,3 +6,12 @@
 
 set(CMAKE_C_COMPILE_OBJECT
   "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -Fo<OBJECT> -c <SOURCE>")
+
+# Enable Pelles C's Microsoft extensions to use Windows APIs.
+# The flag also disables standard definitions, so add them.
+string(APPEND CMAKE_C_FLAGS_INIT " -Ze -D__STDC__=1 -D__STDC_VERSION__=__POCC_STDC_VERSION__")
+
+string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -Zi -Ob0")
+string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -Ot -Ob2 -DNDEBUG=1")
+string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -Zi -Ot -Ob1 -DNDEBUG=1")
+string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -Os -Ob1 -DNDEBUG=1")
diff --git a/Modules/Platform/Windows-PellesC.cmake b/Modules/Platform/Windows-PellesC.cmake
index eb16576..c378c23 100644
--- a/Modules/Platform/Windows-PellesC.cmake
+++ b/Modules/Platform/Windows-PellesC.cmake
@@ -6,16 +6,19 @@
 set(CMAKE_LINK_DEF_FILE_FLAG "-def:")
 set(CMAKE_LINK_LIBRARY_FLAG "")
 
+set(CMAKE_BUILD_TYPE_INIT Debug)
+
 macro(__windows_compiler_pellesc lang)
   set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> <LINK_FLAGS> -out:<TARGET> <OBJECTS>")
 
   set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
-    "<CMAKE_LINKER> <OBJECTS> -out:<TARGET> -implib:<TARGET_IMPLIB> -dll -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES>")
+    "<CMAKE_LINKER> <OBJECTS> ${CMAKE_START_TEMP_FILE} -out:<TARGET> -implib:<TARGET_IMPLIB> -dll -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
   set(CMAKE_${lang}_CREATE_SHARED_MODULE "${CMAKE_${lang}_CREATE_SHARED_LIBRARY}")
   set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "")
 
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
   set(CMAKE_${lang}_LINK_EXECUTABLE
-    "<CMAKE_LINKER> <OBJECTS> -out:<TARGET> -implib:<TARGET_IMPLIB> -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES>")
+    "<CMAKE_LINKER> <OBJECTS> ${CMAKE_START_TEMP_FILE} -out:<TARGET> -implib:<TARGET_IMPLIB> -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
 
   set(CMAKE_${lang}_LINK_DEF_FILE_FLAG "${CMAKE_LINK_DEF_FILE_FLAG}")
 
@@ -27,3 +30,8 @@
   endif()
   enable_language(RC)
 endmacro()
+
+foreach (t IN ITEMS EXE SHARED MODULE)
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " -debug -debugtype:both -dbg")
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " -debug -debugtype:both -dbg")
+endforeach ()
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 54bc9ad..4558c81 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,7 +1,7 @@
 # CMake version number components.
 set(CMake_VERSION_MAJOR 4)
 set(CMake_VERSION_MINOR 3)
-set(CMake_VERSION_PATCH 20260505)
+set(CMake_VERSION_PATCH 20260507)
 #set(CMake_VERSION_RC 0)
 set(CMake_VERSION_IS_DIRTY 0)
 
diff --git a/Source/LexerParser/cmDependsJavaParser.cxx b/Source/LexerParser/cmDependsJavaParser.cxx
index e85bf98..578646f 100644
--- a/Source/LexerParser/cmDependsJavaParser.cxx
+++ b/Source/LexerParser/cmDependsJavaParser.cxx
@@ -119,13 +119,16 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
 # endif
 #endif
 
-#line 129 "cmDependsJavaParser.cxx"
+#line 132 "cmDependsJavaParser.cxx"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -813,42 +816,42 @@
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   184,   184,   193,   201,   209,   217,   225,   233,   242,
-     250,   259,   267,   276,   281,   286,   291,   296,   301,   306,
-     311,   317,   325,   334,   344,   353,   362,   370,   380,   386,
-     393,   400,   406,   413,   422,   432,   442,   451,   459,   468,
-     477,   483,   492,   498,   507,   513,   522,   534,   542,   551,
-     563,   576,   584,   592,   601,   609,   618,   618,   618,   619,
-     620,   620,   620,   620,   620,   620,   621,   624,   634,   643,
-     652,   661,   671,   677,   686,   695,   704,   712,   721,   730,
-     736,   745,   753,   761,   769,   778,   786,   795,   801,   809,
-     818,   826,   835,   844,   853,   861,   870,   878,   886,   895,
-     904,   914,   921,   931,   941,   948,   955,   958,   964,   974,
-     984,   994,  1000,  1010,  1020,  1030,  1039,  1049,  1060,  1070,
-    1077,  1087,  1096,  1106,  1115,  1125,  1131,  1141,  1150,  1160,
-    1170,  1177,  1186,  1195,  1204,  1213,  1221,  1230,  1239,  1249,
-    1259,  1268,  1278,  1288,  1295,  1304,  1314,  1323,  1333,  1342,
-    1349,  1359,  1368,  1378,  1387,  1396,  1406,  1416,  1425,  1435,
-    1444,  1453,  1462,  1471,  1480,  1490,  1499,  1508,  1517,  1526,
-    1536,  1545,  1554,  1563,  1572,  1581,  1590,  1599,  1608,  1617,
-    1626,  1635,  1645,  1655,  1666,  1676,  1686,  1695,  1704,  1713,
-    1722,  1731,  1740,  1750,  1760,  1770,  1780,  1787,  1794,  1801,
-    1811,  1818,  1828,  1838,  1847,  1857,  1866,  1876,  1883,  1890,
-    1897,  1905,  1912,  1922,  1929,  1939,  1949,  1956,  1966,  1975,
-    1985,  1995,  2004,  2014,  2023,  2033,  2044,  2051,  2058,  2069,
-    2079,  2089,  2099,  2108,  2118,  2125,  2135,  2144,  2154,  2161,
-    2171,  2180,  2190,  2199,  2205,  2214,  2223,  2232,  2241,  2251,
-    2261,  2268,  2278,  2285,  2295,  2304,  2314,  2323,  2332,  2341,
-    2351,  2358,  2368,  2377,  2387,  2397,  2403,  2410,  2420,  2430,
-    2440,  2451,  2461,  2472,  2482,  2493,  2503,  2513,  2522,  2531,
-    2540,  2549,  2559,  2569,  2579,  2588,  2597,  2606,  2615,  2625,
-    2635,  2645,  2654,  2663,  2672,  2682,  2691,  2700,  2707,  2716,
-    2725,  2734,  2744,  2753,  2762,  2772,  2781,  2790,  2799,  2809,
-    2818,  2827,  2836,  2845,  2854,  2864,  2873,  2882,  2892,  2901,
-    2911,  2920,  2930,  2939,  2949,  2958,  2968,  2977,  2987,  2996,
-    3006,  3015,  3025,  3035,  3045,  3054,  3064,  3073,  3082,  3091,
-    3100,  3109,  3118,  3127,  3136,  3145,  3154,  3163,  3173,  3183,
-    3193,  3202
+       0,   187,   187,   196,   204,   212,   220,   228,   236,   245,
+     253,   262,   270,   279,   284,   289,   294,   299,   304,   309,
+     314,   320,   328,   337,   347,   356,   365,   373,   383,   389,
+     396,   403,   409,   416,   425,   435,   445,   454,   462,   471,
+     480,   486,   495,   501,   510,   516,   525,   537,   545,   554,
+     566,   579,   587,   595,   604,   612,   621,   621,   621,   622,
+     623,   623,   623,   623,   623,   623,   624,   627,   637,   646,
+     655,   664,   674,   680,   689,   698,   707,   715,   724,   733,
+     739,   748,   756,   764,   772,   781,   789,   798,   804,   812,
+     821,   829,   838,   847,   856,   864,   873,   881,   889,   898,
+     907,   917,   924,   934,   944,   951,   958,   961,   967,   977,
+     987,   997,  1003,  1013,  1023,  1033,  1042,  1052,  1063,  1073,
+    1080,  1090,  1099,  1109,  1118,  1128,  1134,  1144,  1153,  1163,
+    1173,  1180,  1189,  1198,  1207,  1216,  1224,  1233,  1242,  1252,
+    1262,  1271,  1281,  1291,  1298,  1307,  1317,  1326,  1336,  1345,
+    1352,  1362,  1371,  1381,  1390,  1399,  1409,  1419,  1428,  1438,
+    1447,  1456,  1465,  1474,  1483,  1493,  1502,  1511,  1520,  1529,
+    1539,  1548,  1557,  1566,  1575,  1584,  1593,  1602,  1611,  1620,
+    1629,  1638,  1648,  1658,  1669,  1679,  1689,  1698,  1707,  1716,
+    1725,  1734,  1743,  1753,  1763,  1773,  1783,  1790,  1797,  1804,
+    1814,  1821,  1831,  1841,  1850,  1860,  1869,  1879,  1886,  1893,
+    1900,  1908,  1915,  1925,  1932,  1942,  1952,  1959,  1969,  1978,
+    1988,  1998,  2007,  2017,  2026,  2036,  2047,  2054,  2061,  2072,
+    2082,  2092,  2102,  2111,  2121,  2128,  2138,  2147,  2157,  2164,
+    2174,  2183,  2193,  2202,  2208,  2217,  2226,  2235,  2244,  2254,
+    2264,  2271,  2281,  2288,  2298,  2307,  2317,  2326,  2335,  2344,
+    2354,  2361,  2371,  2380,  2390,  2400,  2406,  2413,  2423,  2433,
+    2443,  2454,  2464,  2475,  2485,  2496,  2506,  2516,  2525,  2534,
+    2543,  2552,  2562,  2572,  2582,  2591,  2600,  2609,  2618,  2628,
+    2638,  2648,  2657,  2666,  2675,  2685,  2694,  2703,  2710,  2719,
+    2728,  2737,  2747,  2756,  2765,  2775,  2784,  2793,  2802,  2812,
+    2821,  2830,  2839,  2848,  2857,  2867,  2876,  2885,  2895,  2904,
+    2914,  2923,  2933,  2942,  2952,  2961,  2971,  2980,  2990,  2999,
+    3009,  3018,  3028,  3038,  3048,  3057,  3067,  3076,  3085,  3094,
+    3103,  3112,  3121,  3130,  3139,  3148,  3157,  3166,  3176,  3186,
+    3196,  3205
 };
 #endif
 
@@ -2469,214 +2472,214 @@
   switch (yyn)
     {
   case 2: /* Goal: CompilationUnit  */
-#line 185 "cmDependsJavaParser.y"
+#line 188 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2480 "cmDependsJavaParser.cxx"
+#line 2483 "cmDependsJavaParser.cxx"
     break;
 
   case 3: /* Literal: IntegerLiteral  */
-#line 194 "cmDependsJavaParser.y"
+#line 197 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2491 "cmDependsJavaParser.cxx"
+#line 2494 "cmDependsJavaParser.cxx"
     break;
 
   case 4: /* Literal: jp_FLOATINGPOINTLITERAL  */
-#line 202 "cmDependsJavaParser.y"
+#line 205 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2502 "cmDependsJavaParser.cxx"
+#line 2505 "cmDependsJavaParser.cxx"
     break;
 
   case 5: /* Literal: jp_BOOLEANLITERAL  */
-#line 210 "cmDependsJavaParser.y"
+#line 213 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2513 "cmDependsJavaParser.cxx"
+#line 2516 "cmDependsJavaParser.cxx"
     break;
 
   case 6: /* Literal: jp_CHARACTERLITERAL  */
-#line 218 "cmDependsJavaParser.y"
+#line 221 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2524 "cmDependsJavaParser.cxx"
+#line 2527 "cmDependsJavaParser.cxx"
     break;
 
   case 7: /* Literal: jp_STRINGLITERAL  */
-#line 226 "cmDependsJavaParser.y"
+#line 229 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2535 "cmDependsJavaParser.cxx"
+#line 2538 "cmDependsJavaParser.cxx"
     break;
 
   case 8: /* Literal: jp_NULLLITERAL  */
-#line 234 "cmDependsJavaParser.y"
+#line 237 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2546 "cmDependsJavaParser.cxx"
+#line 2549 "cmDependsJavaParser.cxx"
     break;
 
   case 9: /* IntegerLiteral: jp_DECIMALINTEGERLITERAL  */
-#line 243 "cmDependsJavaParser.y"
+#line 246 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2557 "cmDependsJavaParser.cxx"
+#line 2560 "cmDependsJavaParser.cxx"
     break;
 
   case 10: /* IntegerLiteral: jp_HEXINTEGERLITERAL  */
-#line 251 "cmDependsJavaParser.y"
+#line 254 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2568 "cmDependsJavaParser.cxx"
+#line 2571 "cmDependsJavaParser.cxx"
     break;
 
   case 11: /* Type: PrimitiveType  */
-#line 260 "cmDependsJavaParser.y"
+#line 263 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2579 "cmDependsJavaParser.cxx"
+#line 2582 "cmDependsJavaParser.cxx"
     break;
 
   case 12: /* Type: ReferenceType  */
-#line 268 "cmDependsJavaParser.y"
+#line 271 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2590 "cmDependsJavaParser.cxx"
+#line 2593 "cmDependsJavaParser.cxx"
     break;
 
   case 13: /* PrimitiveType: jp_BYTE_TYPE  */
-#line 277 "cmDependsJavaParser.y"
+#line 280 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2598 "cmDependsJavaParser.cxx"
+#line 2601 "cmDependsJavaParser.cxx"
     break;
 
   case 14: /* PrimitiveType: jp_SHORT_TYPE  */
-#line 282 "cmDependsJavaParser.y"
+#line 285 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2606 "cmDependsJavaParser.cxx"
+#line 2609 "cmDependsJavaParser.cxx"
     break;
 
   case 15: /* PrimitiveType: jp_INT_TYPE  */
-#line 287 "cmDependsJavaParser.y"
+#line 290 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2614 "cmDependsJavaParser.cxx"
+#line 2617 "cmDependsJavaParser.cxx"
     break;
 
   case 16: /* PrimitiveType: jp_LONG_TYPE  */
-#line 292 "cmDependsJavaParser.y"
+#line 295 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2622 "cmDependsJavaParser.cxx"
+#line 2625 "cmDependsJavaParser.cxx"
     break;
 
   case 17: /* PrimitiveType: jp_CHAR_TYPE  */
-#line 297 "cmDependsJavaParser.y"
+#line 300 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2630 "cmDependsJavaParser.cxx"
+#line 2633 "cmDependsJavaParser.cxx"
     break;
 
   case 18: /* PrimitiveType: jp_FLOAT_TYPE  */
-#line 302 "cmDependsJavaParser.y"
+#line 305 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2638 "cmDependsJavaParser.cxx"
+#line 2641 "cmDependsJavaParser.cxx"
     break;
 
   case 19: /* PrimitiveType: jp_DOUBLE_TYPE  */
-#line 307 "cmDependsJavaParser.y"
+#line 310 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2646 "cmDependsJavaParser.cxx"
+#line 2649 "cmDependsJavaParser.cxx"
     break;
 
   case 20: /* PrimitiveType: jp_BOOLEAN_TYPE  */
-#line 312 "cmDependsJavaParser.y"
+#line 315 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
 }
-#line 2654 "cmDependsJavaParser.cxx"
+#line 2657 "cmDependsJavaParser.cxx"
     break;
 
   case 21: /* ReferenceType: ClassOrInterfaceType  */
-#line 318 "cmDependsJavaParser.y"
+#line 321 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2665 "cmDependsJavaParser.cxx"
+#line 2668 "cmDependsJavaParser.cxx"
     break;
 
   case 22: /* ReferenceType: ArrayType  */
-#line 326 "cmDependsJavaParser.y"
+#line 329 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2676 "cmDependsJavaParser.cxx"
+#line 2679 "cmDependsJavaParser.cxx"
     break;
 
   case 23: /* ClassOrInterfaceType: Name  */
-#line 335 "cmDependsJavaParser.y"
+#line 338 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpStoreClass((yyvsp[0].str));
@@ -2684,44 +2687,44 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2688 "cmDependsJavaParser.cxx"
+#line 2691 "cmDependsJavaParser.cxx"
     break;
 
   case 24: /* ClassType: ClassOrInterfaceType  */
-#line 345 "cmDependsJavaParser.y"
+#line 348 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2699 "cmDependsJavaParser.cxx"
+#line 2702 "cmDependsJavaParser.cxx"
     break;
 
   case 25: /* InterfaceType: ClassOrInterfaceType  */
-#line 354 "cmDependsJavaParser.y"
+#line 357 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2710 "cmDependsJavaParser.cxx"
+#line 2713 "cmDependsJavaParser.cxx"
     break;
 
   case 26: /* ArrayType: PrimitiveType Dims  */
-#line 363 "cmDependsJavaParser.y"
+#line 366 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2721 "cmDependsJavaParser.cxx"
+#line 2724 "cmDependsJavaParser.cxx"
     break;
 
   case 27: /* ArrayType: Name Dims  */
-#line 371 "cmDependsJavaParser.y"
+#line 374 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpStoreClass((yyvsp[-1].str));
@@ -2729,56 +2732,56 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2733 "cmDependsJavaParser.cxx"
+#line 2736 "cmDependsJavaParser.cxx"
     break;
 
   case 28: /* Name: SimpleName  */
-#line 381 "cmDependsJavaParser.y"
+#line 384 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2742 "cmDependsJavaParser.cxx"
+#line 2745 "cmDependsJavaParser.cxx"
     break;
 
   case 29: /* Name: QualifiedName  */
-#line 387 "cmDependsJavaParser.y"
+#line 390 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2751 "cmDependsJavaParser.cxx"
+#line 2754 "cmDependsJavaParser.cxx"
     break;
 
   case 30: /* SimpleName: Identifier  */
-#line 394 "cmDependsJavaParser.y"
+#line 397 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2760 "cmDependsJavaParser.cxx"
+#line 2763 "cmDependsJavaParser.cxx"
     break;
 
   case 31: /* Identifier: jp_NAME  */
-#line 401 "cmDependsJavaParser.y"
+#line 404 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2769 "cmDependsJavaParser.cxx"
+#line 2772 "cmDependsJavaParser.cxx"
     break;
 
   case 32: /* Identifier: jp_DOLLAR jp_NAME  */
-#line 407 "cmDependsJavaParser.y"
+#line 410 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = (yyvsp[0].str);
 }
-#line 2778 "cmDependsJavaParser.cxx"
+#line 2781 "cmDependsJavaParser.cxx"
     break;
 
   case 33: /* QualifiedName: Name jp_DOT Identifier  */
-#line 414 "cmDependsJavaParser.y"
+#line 417 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->AddClassFound((yyvsp[-2].str));
@@ -2786,11 +2789,11 @@
   yyGetParser->DeallocateParserType(&((yyvsp[-2].str)));
   (yyval.str) = const_cast<char*>(yyGetParser->GetCurrentCombine());
 }
-#line 2790 "cmDependsJavaParser.cxx"
+#line 2793 "cmDependsJavaParser.cxx"
     break;
 
   case 34: /* QualifiedName: Name jp_DOT jp_CLASS  */
-#line 423 "cmDependsJavaParser.y"
+#line 426 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpStoreClass((yyvsp[-2].str));
@@ -2799,11 +2802,11 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2803 "cmDependsJavaParser.cxx"
+#line 2806 "cmDependsJavaParser.cxx"
     break;
 
   case 35: /* QualifiedName: Name jp_DOT jp_THIS  */
-#line 433 "cmDependsJavaParser.y"
+#line 436 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpStoreClass((yyvsp[-2].str));
@@ -2812,118 +2815,118 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2816 "cmDependsJavaParser.cxx"
+#line 2819 "cmDependsJavaParser.cxx"
     break;
 
   case 36: /* QualifiedName: SimpleType jp_DOT jp_CLASS  */
-#line 443 "cmDependsJavaParser.y"
+#line 446 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2827 "cmDependsJavaParser.cxx"
+#line 2830 "cmDependsJavaParser.cxx"
     break;
 
   case 37: /* SimpleType: PrimitiveType  */
-#line 452 "cmDependsJavaParser.y"
+#line 455 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2838 "cmDependsJavaParser.cxx"
+#line 2841 "cmDependsJavaParser.cxx"
     break;
 
   case 38: /* SimpleType: jp_VOID  */
-#line 460 "cmDependsJavaParser.y"
+#line 463 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2849 "cmDependsJavaParser.cxx"
+#line 2852 "cmDependsJavaParser.cxx"
     break;
 
   case 39: /* CompilationUnit: PackageDeclarationopt ImportDeclarations TypeDeclarations  */
-#line 469 "cmDependsJavaParser.y"
+#line 472 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2860 "cmDependsJavaParser.cxx"
+#line 2863 "cmDependsJavaParser.cxx"
     break;
 
   case 40: /* PackageDeclarationopt: %empty  */
-#line 477 "cmDependsJavaParser.y"
+#line 480 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2870 "cmDependsJavaParser.cxx"
+#line 2873 "cmDependsJavaParser.cxx"
     break;
 
   case 41: /* PackageDeclarationopt: PackageDeclaration  */
-#line 484 "cmDependsJavaParser.y"
+#line 487 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2881 "cmDependsJavaParser.cxx"
+#line 2884 "cmDependsJavaParser.cxx"
     break;
 
   case 42: /* ImportDeclarations: %empty  */
-#line 492 "cmDependsJavaParser.y"
+#line 495 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2891 "cmDependsJavaParser.cxx"
+#line 2894 "cmDependsJavaParser.cxx"
     break;
 
   case 43: /* ImportDeclarations: ImportDeclarations ImportDeclaration  */
-#line 499 "cmDependsJavaParser.y"
+#line 502 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2902 "cmDependsJavaParser.cxx"
+#line 2905 "cmDependsJavaParser.cxx"
     break;
 
   case 44: /* TypeDeclarations: %empty  */
-#line 507 "cmDependsJavaParser.y"
+#line 510 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2912 "cmDependsJavaParser.cxx"
+#line 2915 "cmDependsJavaParser.cxx"
     break;
 
   case 45: /* TypeDeclarations: TypeDeclarations TypeDeclaration  */
-#line 514 "cmDependsJavaParser.y"
+#line 517 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2923 "cmDependsJavaParser.cxx"
+#line 2926 "cmDependsJavaParser.cxx"
     break;
 
   case 46: /* PackageDeclaration: jp_PACKAGE Name jp_SEMICOL  */
-#line 523 "cmDependsJavaParser.y"
+#line 526 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->SetCurrentPackage((yyvsp[-1].str));
@@ -2933,33 +2936,33 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2937 "cmDependsJavaParser.cxx"
+#line 2940 "cmDependsJavaParser.cxx"
     break;
 
   case 47: /* ImportDeclaration: SingleTypeImportDeclaration  */
-#line 535 "cmDependsJavaParser.y"
+#line 538 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2948 "cmDependsJavaParser.cxx"
+#line 2951 "cmDependsJavaParser.cxx"
     break;
 
   case 48: /* ImportDeclaration: TypeImportOnDemandDeclaration  */
-#line 543 "cmDependsJavaParser.y"
+#line 546 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2959 "cmDependsJavaParser.cxx"
+#line 2962 "cmDependsJavaParser.cxx"
     break;
 
   case 49: /* SingleTypeImportDeclaration: jp_IMPORT Name jp_SEMICOL  */
-#line 552 "cmDependsJavaParser.y"
+#line 555 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->AddPackagesImport((yyvsp[-1].str));
@@ -2969,11 +2972,11 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2973 "cmDependsJavaParser.cxx"
+#line 2976 "cmDependsJavaParser.cxx"
     break;
 
   case 50: /* TypeImportOnDemandDeclaration: jp_IMPORT Name jp_DOT jp_TIMES jp_SEMICOL  */
-#line 564 "cmDependsJavaParser.y"
+#line 567 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   std::string str = (yyvsp[-3].str);
@@ -2984,77 +2987,77 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2988 "cmDependsJavaParser.cxx"
+#line 2991 "cmDependsJavaParser.cxx"
     break;
 
   case 51: /* TypeDeclaration: ClassDeclaration  */
-#line 577 "cmDependsJavaParser.y"
+#line 580 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 2999 "cmDependsJavaParser.cxx"
+#line 3002 "cmDependsJavaParser.cxx"
     break;
 
   case 52: /* TypeDeclaration: InterfaceDeclaration  */
-#line 585 "cmDependsJavaParser.y"
+#line 588 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3010 "cmDependsJavaParser.cxx"
+#line 3013 "cmDependsJavaParser.cxx"
     break;
 
   case 53: /* TypeDeclaration: jp_SEMICOL  */
-#line 593 "cmDependsJavaParser.y"
+#line 596 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3021 "cmDependsJavaParser.cxx"
+#line 3024 "cmDependsJavaParser.cxx"
     break;
 
   case 54: /* Modifiers: Modifier  */
-#line 602 "cmDependsJavaParser.y"
+#line 605 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3032 "cmDependsJavaParser.cxx"
+#line 3035 "cmDependsJavaParser.cxx"
     break;
 
   case 55: /* Modifiers: Modifiers Modifier  */
-#line 610 "cmDependsJavaParser.y"
+#line 613 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3043 "cmDependsJavaParser.cxx"
+#line 3046 "cmDependsJavaParser.cxx"
     break;
 
   case 67: /* ClassHeader: Modifiersopt jp_CLASS Identifier  */
-#line 625 "cmDependsJavaParser.y"
+#line 628 "cmDependsJavaParser.y"
 {
   yyGetParser->StartClass((yyvsp[0].str));
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
   jpCheckEmpty(3);
 }
-#line 3054 "cmDependsJavaParser.cxx"
+#line 3057 "cmDependsJavaParser.cxx"
     break;
 
   case 68: /* ClassDeclaration: ClassHeader ClassBody  */
-#line 635 "cmDependsJavaParser.y"
+#line 638 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3062,11 +3065,11 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3066 "cmDependsJavaParser.cxx"
+#line 3069 "cmDependsJavaParser.cxx"
     break;
 
   case 69: /* ClassDeclaration: ClassHeader Interfaces ClassBody  */
-#line 644 "cmDependsJavaParser.y"
+#line 647 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(2);
@@ -3074,11 +3077,11 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3078 "cmDependsJavaParser.cxx"
+#line 3081 "cmDependsJavaParser.cxx"
     break;
 
   case 70: /* ClassDeclaration: ClassHeader Super ClassBody  */
-#line 653 "cmDependsJavaParser.y"
+#line 656 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3086,11 +3089,11 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3090 "cmDependsJavaParser.cxx"
+#line 3093 "cmDependsJavaParser.cxx"
     break;
 
   case 71: /* ClassDeclaration: ClassHeader Super Interfaces ClassBody  */
-#line 662 "cmDependsJavaParser.y"
+#line 665 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3098,226 +3101,226 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3102 "cmDependsJavaParser.cxx"
+#line 3105 "cmDependsJavaParser.cxx"
     break;
 
   case 72: /* Modifiersopt: %empty  */
-#line 671 "cmDependsJavaParser.y"
+#line 674 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3112 "cmDependsJavaParser.cxx"
+#line 3115 "cmDependsJavaParser.cxx"
     break;
 
   case 73: /* Modifiersopt: Modifiers  */
-#line 678 "cmDependsJavaParser.y"
+#line 681 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3123 "cmDependsJavaParser.cxx"
+#line 3126 "cmDependsJavaParser.cxx"
     break;
 
   case 74: /* Super: jp_EXTENDS ClassType  */
-#line 687 "cmDependsJavaParser.y"
+#line 690 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3134 "cmDependsJavaParser.cxx"
+#line 3137 "cmDependsJavaParser.cxx"
     break;
 
   case 75: /* Interfaces: jp_IMPLEMENTS InterfaceTypeList  */
-#line 696 "cmDependsJavaParser.y"
+#line 699 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3145 "cmDependsJavaParser.cxx"
+#line 3148 "cmDependsJavaParser.cxx"
     break;
 
   case 76: /* InterfaceTypeList: InterfaceType  */
-#line 705 "cmDependsJavaParser.y"
+#line 708 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3156 "cmDependsJavaParser.cxx"
+#line 3159 "cmDependsJavaParser.cxx"
     break;
 
   case 77: /* InterfaceTypeList: InterfaceTypeList jp_COMMA InterfaceType  */
-#line 713 "cmDependsJavaParser.y"
+#line 716 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3167 "cmDependsJavaParser.cxx"
+#line 3170 "cmDependsJavaParser.cxx"
     break;
 
   case 78: /* ClassBody: jp_CURLYSTART ClassBodyDeclarations jp_CURLYEND  */
-#line 722 "cmDependsJavaParser.y"
+#line 725 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3178 "cmDependsJavaParser.cxx"
+#line 3181 "cmDependsJavaParser.cxx"
     break;
 
   case 79: /* ClassBodyDeclarations: %empty  */
-#line 730 "cmDependsJavaParser.y"
+#line 733 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3188 "cmDependsJavaParser.cxx"
+#line 3191 "cmDependsJavaParser.cxx"
     break;
 
   case 80: /* ClassBodyDeclarations: ClassBodyDeclarations ClassBodyDeclaration  */
-#line 737 "cmDependsJavaParser.y"
+#line 740 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3199 "cmDependsJavaParser.cxx"
+#line 3202 "cmDependsJavaParser.cxx"
     break;
 
   case 81: /* ClassBodyDeclaration: ClassMemberDeclaration  */
-#line 746 "cmDependsJavaParser.y"
+#line 749 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3210 "cmDependsJavaParser.cxx"
+#line 3213 "cmDependsJavaParser.cxx"
     break;
 
   case 82: /* ClassBodyDeclaration: StaticInitializer  */
-#line 754 "cmDependsJavaParser.y"
+#line 757 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3221 "cmDependsJavaParser.cxx"
+#line 3224 "cmDependsJavaParser.cxx"
     break;
 
   case 83: /* ClassBodyDeclaration: ConstructorDeclaration  */
-#line 762 "cmDependsJavaParser.y"
+#line 765 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3232 "cmDependsJavaParser.cxx"
+#line 3235 "cmDependsJavaParser.cxx"
     break;
 
   case 84: /* ClassBodyDeclaration: TypeDeclaration  */
-#line 770 "cmDependsJavaParser.y"
+#line 773 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3243 "cmDependsJavaParser.cxx"
+#line 3246 "cmDependsJavaParser.cxx"
     break;
 
   case 85: /* ClassMemberDeclaration: FieldDeclaration  */
-#line 779 "cmDependsJavaParser.y"
+#line 782 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3254 "cmDependsJavaParser.cxx"
+#line 3257 "cmDependsJavaParser.cxx"
     break;
 
   case 86: /* ClassMemberDeclaration: MethodDeclaration  */
-#line 787 "cmDependsJavaParser.y"
+#line 790 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3265 "cmDependsJavaParser.cxx"
+#line 3268 "cmDependsJavaParser.cxx"
     break;
 
   case 87: /* FieldDeclaration: Modifiersopt Type VariableDeclarators jp_SEMICOL  */
-#line 796 "cmDependsJavaParser.y"
+#line 799 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
 }
-#line 3273 "cmDependsJavaParser.cxx"
+#line 3276 "cmDependsJavaParser.cxx"
     break;
 
   case 88: /* VariableDeclarators: VariableDeclarator  */
-#line 802 "cmDependsJavaParser.y"
+#line 805 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3284 "cmDependsJavaParser.cxx"
+#line 3287 "cmDependsJavaParser.cxx"
     break;
 
   case 89: /* VariableDeclarators: VariableDeclarators jp_COMMA VariableDeclarator  */
-#line 810 "cmDependsJavaParser.y"
+#line 813 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3295 "cmDependsJavaParser.cxx"
+#line 3298 "cmDependsJavaParser.cxx"
     break;
 
   case 90: /* VariableDeclarator: VariableDeclaratorId  */
-#line 819 "cmDependsJavaParser.y"
+#line 822 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3306 "cmDependsJavaParser.cxx"
+#line 3309 "cmDependsJavaParser.cxx"
     break;
 
   case 91: /* VariableDeclarator: VariableDeclaratorId jp_EQUALS VariableInitializer  */
-#line 827 "cmDependsJavaParser.y"
+#line 830 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3317 "cmDependsJavaParser.cxx"
+#line 3320 "cmDependsJavaParser.cxx"
     break;
 
   case 92: /* VariableDeclaratorId: Identifier  */
-#line 836 "cmDependsJavaParser.y"
+#line 839 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -3325,77 +3328,77 @@
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3329 "cmDependsJavaParser.cxx"
+#line 3332 "cmDependsJavaParser.cxx"
     break;
 
   case 93: /* VariableDeclaratorId: VariableDeclaratorId jp_BRACKETSTART jp_BRACKETEND  */
-#line 845 "cmDependsJavaParser.y"
+#line 848 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3340 "cmDependsJavaParser.cxx"
+#line 3343 "cmDependsJavaParser.cxx"
     break;
 
   case 94: /* VariableInitializer: Expression  */
-#line 854 "cmDependsJavaParser.y"
+#line 857 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3351 "cmDependsJavaParser.cxx"
+#line 3354 "cmDependsJavaParser.cxx"
     break;
 
   case 95: /* VariableInitializer: ArrayInitializer  */
-#line 862 "cmDependsJavaParser.y"
+#line 865 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3362 "cmDependsJavaParser.cxx"
+#line 3365 "cmDependsJavaParser.cxx"
     break;
 
   case 96: /* MethodDeclaration: MethodHeader jp_SEMICOL  */
-#line 871 "cmDependsJavaParser.y"
+#line 874 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3373 "cmDependsJavaParser.cxx"
+#line 3376 "cmDependsJavaParser.cxx"
     break;
 
   case 97: /* MethodDeclaration: MethodHeader MethodBody  */
-#line 879 "cmDependsJavaParser.y"
+#line 882 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3384 "cmDependsJavaParser.cxx"
+#line 3387 "cmDependsJavaParser.cxx"
     break;
 
   case 98: /* MethodDeclaration: MethodHeader MethodBody jp_SEMICOL  */
-#line 887 "cmDependsJavaParser.y"
+#line 890 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3395 "cmDependsJavaParser.cxx"
+#line 3398 "cmDependsJavaParser.cxx"
     break;
 
   case 99: /* MethodHeader: Modifiersopt Type MethodDeclarator Throwsopt  */
-#line 896 "cmDependsJavaParser.y"
+#line 899 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3403,11 +3406,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3407 "cmDependsJavaParser.cxx"
+#line 3410 "cmDependsJavaParser.cxx"
     break;
 
   case 100: /* MethodHeader: Modifiersopt jp_VOID MethodDeclarator Throwsopt  */
-#line 905 "cmDependsJavaParser.y"
+#line 908 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3415,22 +3418,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3419 "cmDependsJavaParser.cxx"
+#line 3422 "cmDependsJavaParser.cxx"
     break;
 
   case 101: /* Throwsopt: %empty  */
-#line 914 "cmDependsJavaParser.y"
+#line 917 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3430 "cmDependsJavaParser.cxx"
+#line 3433 "cmDependsJavaParser.cxx"
     break;
 
   case 102: /* Throwsopt: Throws  */
-#line 922 "cmDependsJavaParser.y"
+#line 925 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3438,11 +3441,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3442 "cmDependsJavaParser.cxx"
+#line 3445 "cmDependsJavaParser.cxx"
     break;
 
   case 103: /* MethodDeclarator: Identifier jp_PARESTART FormalParameterListopt jp_PAREEND  */
-#line 932 "cmDependsJavaParser.y"
+#line 935 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -3451,40 +3454,40 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3455 "cmDependsJavaParser.cxx"
+#line 3458 "cmDependsJavaParser.cxx"
     break;
 
   case 104: /* MethodDeclarator: MethodDeclarator jp_BRACKETSTART jp_BRACKETEND  */
-#line 942 "cmDependsJavaParser.y"
+#line 945 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
 
 }
-#line 3464 "cmDependsJavaParser.cxx"
+#line 3467 "cmDependsJavaParser.cxx"
     break;
 
   case 105: /* FormalParameterListopt: %empty  */
-#line 948 "cmDependsJavaParser.y"
+#line 951 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3475 "cmDependsJavaParser.cxx"
+#line 3478 "cmDependsJavaParser.cxx"
     break;
 
   case 107: /* FormalParameterList: FormalParameter  */
-#line 959 "cmDependsJavaParser.y"
+#line 962 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 3484 "cmDependsJavaParser.cxx"
+#line 3487 "cmDependsJavaParser.cxx"
     break;
 
   case 108: /* FormalParameterList: FormalParameterList jp_COMMA FormalParameter  */
-#line 965 "cmDependsJavaParser.y"
+#line 968 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3492,11 +3495,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3496 "cmDependsJavaParser.cxx"
+#line 3499 "cmDependsJavaParser.cxx"
     break;
 
   case 109: /* FormalParameter: Modifiersopt Type VariableDeclaratorId  */
-#line 975 "cmDependsJavaParser.y"
+#line 978 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3504,11 +3507,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3508 "cmDependsJavaParser.cxx"
+#line 3511 "cmDependsJavaParser.cxx"
     break;
 
   case 110: /* Throws: jp_THROWS ClassTypeList  */
-#line 985 "cmDependsJavaParser.y"
+#line 988 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3516,20 +3519,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3520 "cmDependsJavaParser.cxx"
+#line 3523 "cmDependsJavaParser.cxx"
     break;
 
   case 111: /* ClassTypeList: ClassType  */
-#line 995 "cmDependsJavaParser.y"
+#line 998 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 3529 "cmDependsJavaParser.cxx"
+#line 3532 "cmDependsJavaParser.cxx"
     break;
 
   case 112: /* ClassTypeList: ClassTypeList jp_COMMA ClassType  */
-#line 1001 "cmDependsJavaParser.y"
+#line 1004 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3537,11 +3540,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3541 "cmDependsJavaParser.cxx"
+#line 3544 "cmDependsJavaParser.cxx"
     break;
 
   case 113: /* MethodBody: Block  */
-#line 1011 "cmDependsJavaParser.y"
+#line 1014 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3549,11 +3552,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3553 "cmDependsJavaParser.cxx"
+#line 3556 "cmDependsJavaParser.cxx"
     break;
 
   case 114: /* StaticInitializer: jp_STATIC Block  */
-#line 1021 "cmDependsJavaParser.y"
+#line 1024 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3561,11 +3564,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3565 "cmDependsJavaParser.cxx"
+#line 3568 "cmDependsJavaParser.cxx"
     break;
 
   case 115: /* ConstructorDeclaration: Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody  */
-#line 1031 "cmDependsJavaParser.y"
+#line 1034 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3573,11 +3576,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3577 "cmDependsJavaParser.cxx"
+#line 3580 "cmDependsJavaParser.cxx"
     break;
 
   case 116: /* ConstructorDeclaration: Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody jp_SEMICOL  */
-#line 1040 "cmDependsJavaParser.y"
+#line 1043 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -3585,11 +3588,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3589 "cmDependsJavaParser.cxx"
+#line 3592 "cmDependsJavaParser.cxx"
     break;
 
   case 117: /* ConstructorDeclarator: SimpleName jp_PARESTART FormalParameterListopt jp_PAREEND  */
-#line 1050 "cmDependsJavaParser.y"
+#line 1053 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -3598,11 +3601,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3602 "cmDependsJavaParser.cxx"
+#line 3605 "cmDependsJavaParser.cxx"
     break;
 
   case 118: /* ConstructorBody: jp_CURLYSTART ExplicitConstructorInvocationopt BlockStatementsopt jp_CURLYEND  */
-#line 1061 "cmDependsJavaParser.y"
+#line 1064 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -3610,22 +3613,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3614 "cmDependsJavaParser.cxx"
+#line 3617 "cmDependsJavaParser.cxx"
     break;
 
   case 119: /* ExplicitConstructorInvocationopt: %empty  */
-#line 1070 "cmDependsJavaParser.y"
+#line 1073 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3625 "cmDependsJavaParser.cxx"
+#line 3628 "cmDependsJavaParser.cxx"
     break;
 
   case 120: /* ExplicitConstructorInvocationopt: ExplicitConstructorInvocationopt ExplicitConstructorInvocation  */
-#line 1078 "cmDependsJavaParser.y"
+#line 1081 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3633,11 +3636,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3637 "cmDependsJavaParser.cxx"
+#line 3640 "cmDependsJavaParser.cxx"
     break;
 
   case 121: /* ExplicitConstructorInvocation: jp_THIS jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL  */
-#line 1088 "cmDependsJavaParser.y"
+#line 1091 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -3645,11 +3648,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3649 "cmDependsJavaParser.cxx"
+#line 3652 "cmDependsJavaParser.cxx"
     break;
 
   case 122: /* ExplicitConstructorInvocation: jp_SUPER jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL  */
-#line 1097 "cmDependsJavaParser.y"
+#line 1100 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -3657,22 +3660,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3661 "cmDependsJavaParser.cxx"
+#line 3664 "cmDependsJavaParser.cxx"
     break;
 
   case 123: /* InterfaceHeader: Modifiersopt jp_INTERFACE Identifier  */
-#line 1107 "cmDependsJavaParser.y"
+#line 1110 "cmDependsJavaParser.y"
 {
   yyGetParser->StartClass((yyvsp[0].str));
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
   jpCheckEmpty(3);
 }
-#line 3672 "cmDependsJavaParser.cxx"
+#line 3675 "cmDependsJavaParser.cxx"
     break;
 
   case 124: /* InterfaceDeclaration: InterfaceHeader ExtendsInterfacesopt InterfaceBody  */
-#line 1116 "cmDependsJavaParser.y"
+#line 1119 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3680,21 +3683,21 @@
   yyGetParser->SetCurrentCombine("");
   yyGetParser->EndClass();
 }
-#line 3684 "cmDependsJavaParser.cxx"
+#line 3687 "cmDependsJavaParser.cxx"
     break;
 
   case 125: /* ExtendsInterfacesopt: %empty  */
-#line 1125 "cmDependsJavaParser.y"
+#line 1128 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 }
-#line 3694 "cmDependsJavaParser.cxx"
+#line 3697 "cmDependsJavaParser.cxx"
     break;
 
   case 126: /* ExtendsInterfacesopt: ExtendsInterfaces  */
-#line 1132 "cmDependsJavaParser.y"
+#line 1135 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3702,11 +3705,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3706 "cmDependsJavaParser.cxx"
+#line 3709 "cmDependsJavaParser.cxx"
     break;
 
   case 127: /* ExtendsInterfaces: jp_EXTENDS InterfaceType  */
-#line 1142 "cmDependsJavaParser.y"
+#line 1145 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3714,11 +3717,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3718 "cmDependsJavaParser.cxx"
+#line 3721 "cmDependsJavaParser.cxx"
     break;
 
   case 128: /* ExtendsInterfaces: ExtendsInterfaces jp_COMMA InterfaceType  */
-#line 1151 "cmDependsJavaParser.y"
+#line 1154 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3726,11 +3729,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3730 "cmDependsJavaParser.cxx"
+#line 3733 "cmDependsJavaParser.cxx"
     break;
 
   case 129: /* InterfaceBody: jp_CURLYSTART InterfaceMemberDeclarations jp_CURLYEND  */
-#line 1161 "cmDependsJavaParser.y"
+#line 1164 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3738,33 +3741,33 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3742 "cmDependsJavaParser.cxx"
+#line 3745 "cmDependsJavaParser.cxx"
     break;
 
   case 130: /* InterfaceMemberDeclarations: %empty  */
-#line 1170 "cmDependsJavaParser.y"
+#line 1173 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3753 "cmDependsJavaParser.cxx"
+#line 3756 "cmDependsJavaParser.cxx"
     break;
 
   case 131: /* InterfaceMemberDeclarations: InterfaceMemberDeclarations InterfaceMemberDeclaration  */
-#line 1178 "cmDependsJavaParser.y"
+#line 1181 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3764 "cmDependsJavaParser.cxx"
+#line 3767 "cmDependsJavaParser.cxx"
     break;
 
   case 132: /* InterfaceMemberDeclaration: ConstantDeclaration  */
-#line 1187 "cmDependsJavaParser.y"
+#line 1190 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3772,11 +3775,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3776 "cmDependsJavaParser.cxx"
+#line 3779 "cmDependsJavaParser.cxx"
     break;
 
   case 133: /* InterfaceMemberDeclaration: AbstractMethodDeclaration  */
-#line 1196 "cmDependsJavaParser.y"
+#line 1199 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3784,11 +3787,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3788 "cmDependsJavaParser.cxx"
+#line 3791 "cmDependsJavaParser.cxx"
     break;
 
   case 134: /* InterfaceMemberDeclaration: ClassDeclaration  */
-#line 1205 "cmDependsJavaParser.y"
+#line 1208 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3796,22 +3799,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3800 "cmDependsJavaParser.cxx"
+#line 3803 "cmDependsJavaParser.cxx"
     break;
 
   case 135: /* InterfaceMemberDeclaration: ClassDeclaration jp_SEMICOL  */
-#line 1214 "cmDependsJavaParser.y"
+#line 1217 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3811 "cmDependsJavaParser.cxx"
+#line 3814 "cmDependsJavaParser.cxx"
     break;
 
   case 136: /* InterfaceMemberDeclaration: InterfaceDeclaration  */
-#line 1222 "cmDependsJavaParser.y"
+#line 1225 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3819,22 +3822,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3823 "cmDependsJavaParser.cxx"
+#line 3826 "cmDependsJavaParser.cxx"
     break;
 
   case 137: /* InterfaceMemberDeclaration: InterfaceDeclaration jp_SEMICOL  */
-#line 1231 "cmDependsJavaParser.y"
+#line 1234 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3834 "cmDependsJavaParser.cxx"
+#line 3837 "cmDependsJavaParser.cxx"
     break;
 
   case 138: /* ConstantDeclaration: FieldDeclaration  */
-#line 1240 "cmDependsJavaParser.y"
+#line 1243 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3842,11 +3845,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3846 "cmDependsJavaParser.cxx"
+#line 3849 "cmDependsJavaParser.cxx"
     break;
 
   case 139: /* AbstractMethodDeclaration: MethodHeader Semicols  */
-#line 1250 "cmDependsJavaParser.y"
+#line 1253 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3854,11 +3857,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3858 "cmDependsJavaParser.cxx"
+#line 3861 "cmDependsJavaParser.cxx"
     break;
 
   case 140: /* Semicols: jp_SEMICOL  */
-#line 1260 "cmDependsJavaParser.y"
+#line 1263 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3866,11 +3869,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3870 "cmDependsJavaParser.cxx"
+#line 3873 "cmDependsJavaParser.cxx"
     break;
 
   case 141: /* Semicols: Semicols jp_SEMICOL  */
-#line 1269 "cmDependsJavaParser.y"
+#line 1272 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3878,11 +3881,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3882 "cmDependsJavaParser.cxx"
+#line 3885 "cmDependsJavaParser.cxx"
     break;
 
   case 142: /* ArrayInitializer: jp_CURLYSTART VariableInitializersOptional jp_CURLYEND  */
-#line 1279 "cmDependsJavaParser.y"
+#line 1282 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3890,22 +3893,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3894 "cmDependsJavaParser.cxx"
+#line 3897 "cmDependsJavaParser.cxx"
     break;
 
   case 143: /* VariableInitializersOptional: %empty  */
-#line 1288 "cmDependsJavaParser.y"
+#line 1291 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3905 "cmDependsJavaParser.cxx"
+#line 3908 "cmDependsJavaParser.cxx"
     break;
 
   case 144: /* VariableInitializersOptional: VariableInitializers  */
-#line 1296 "cmDependsJavaParser.y"
+#line 1299 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3913,11 +3916,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3917 "cmDependsJavaParser.cxx"
+#line 3920 "cmDependsJavaParser.cxx"
     break;
 
   case 145: /* VariableInitializersOptional: VariableInitializers jp_COMMA  */
-#line 1305 "cmDependsJavaParser.y"
+#line 1308 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -3925,11 +3928,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3929 "cmDependsJavaParser.cxx"
+#line 3932 "cmDependsJavaParser.cxx"
     break;
 
   case 146: /* VariableInitializers: VariableInitializer  */
-#line 1315 "cmDependsJavaParser.y"
+#line 1318 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3937,11 +3940,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3941 "cmDependsJavaParser.cxx"
+#line 3944 "cmDependsJavaParser.cxx"
     break;
 
   case 147: /* VariableInitializers: VariableInitializers jp_COMMA VariableInitializer  */
-#line 1324 "cmDependsJavaParser.y"
+#line 1327 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -3949,33 +3952,33 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3953 "cmDependsJavaParser.cxx"
+#line 3956 "cmDependsJavaParser.cxx"
     break;
 
   case 148: /* Block: jp_CURLYSTART BlockStatementsopt jp_CURLYEND  */
-#line 1334 "cmDependsJavaParser.y"
+#line 1337 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3964 "cmDependsJavaParser.cxx"
+#line 3967 "cmDependsJavaParser.cxx"
     break;
 
   case 149: /* BlockStatementsopt: %empty  */
-#line 1342 "cmDependsJavaParser.y"
+#line 1345 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3975 "cmDependsJavaParser.cxx"
+#line 3978 "cmDependsJavaParser.cxx"
     break;
 
   case 150: /* BlockStatementsopt: BlockStatements  */
-#line 1350 "cmDependsJavaParser.y"
+#line 1353 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3983,11 +3986,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3987 "cmDependsJavaParser.cxx"
+#line 3990 "cmDependsJavaParser.cxx"
     break;
 
   case 151: /* BlockStatements: BlockStatement  */
-#line 1360 "cmDependsJavaParser.y"
+#line 1363 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -3995,11 +3998,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 3999 "cmDependsJavaParser.cxx"
+#line 4002 "cmDependsJavaParser.cxx"
     break;
 
   case 152: /* BlockStatements: BlockStatements BlockStatement  */
-#line 1369 "cmDependsJavaParser.y"
+#line 1372 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(2);
@@ -4007,11 +4010,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4011 "cmDependsJavaParser.cxx"
+#line 4014 "cmDependsJavaParser.cxx"
     break;
 
   case 153: /* BlockStatement: LocalVariableDeclarationStatement  */
-#line 1379 "cmDependsJavaParser.y"
+#line 1382 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4019,11 +4022,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4023 "cmDependsJavaParser.cxx"
+#line 4026 "cmDependsJavaParser.cxx"
     break;
 
   case 154: /* BlockStatement: Statement  */
-#line 1388 "cmDependsJavaParser.y"
+#line 1391 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4031,11 +4034,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4035 "cmDependsJavaParser.cxx"
+#line 4038 "cmDependsJavaParser.cxx"
     break;
 
   case 155: /* BlockStatement: ClassDeclaration  */
-#line 1397 "cmDependsJavaParser.y"
+#line 1400 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4043,11 +4046,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4047 "cmDependsJavaParser.cxx"
+#line 4050 "cmDependsJavaParser.cxx"
     break;
 
   case 156: /* LocalVariableDeclarationStatement: LocalVariableDeclaration jp_SEMICOL  */
-#line 1407 "cmDependsJavaParser.y"
+#line 1410 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(2);
@@ -4055,11 +4058,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4059 "cmDependsJavaParser.cxx"
+#line 4062 "cmDependsJavaParser.cxx"
     break;
 
   case 157: /* LocalVariableDeclaration: Modifiers Type VariableDeclarators  */
-#line 1417 "cmDependsJavaParser.y"
+#line 1420 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(3);
@@ -4067,11 +4070,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4071 "cmDependsJavaParser.cxx"
+#line 4074 "cmDependsJavaParser.cxx"
     break;
 
   case 158: /* LocalVariableDeclaration: Type VariableDeclarators  */
-#line 1426 "cmDependsJavaParser.y"
+#line 1429 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(2);
@@ -4079,11 +4082,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4083 "cmDependsJavaParser.cxx"
+#line 4086 "cmDependsJavaParser.cxx"
     break;
 
   case 159: /* Statement: StatementWithoutTrailingSubstatement  */
-#line 1436 "cmDependsJavaParser.y"
+#line 1439 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4091,11 +4094,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4095 "cmDependsJavaParser.cxx"
+#line 4098 "cmDependsJavaParser.cxx"
     break;
 
   case 160: /* Statement: LabeledStatement  */
-#line 1445 "cmDependsJavaParser.y"
+#line 1448 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4103,11 +4106,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4107 "cmDependsJavaParser.cxx"
+#line 4110 "cmDependsJavaParser.cxx"
     break;
 
   case 161: /* Statement: IfThenStatement  */
-#line 1454 "cmDependsJavaParser.y"
+#line 1457 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4115,11 +4118,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4119 "cmDependsJavaParser.cxx"
+#line 4122 "cmDependsJavaParser.cxx"
     break;
 
   case 162: /* Statement: IfThenElseStatement  */
-#line 1463 "cmDependsJavaParser.y"
+#line 1466 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4127,11 +4130,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4131 "cmDependsJavaParser.cxx"
+#line 4134 "cmDependsJavaParser.cxx"
     break;
 
   case 163: /* Statement: WhileStatement  */
-#line 1472 "cmDependsJavaParser.y"
+#line 1475 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4139,11 +4142,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4143 "cmDependsJavaParser.cxx"
+#line 4146 "cmDependsJavaParser.cxx"
     break;
 
   case 164: /* Statement: ForStatement  */
-#line 1481 "cmDependsJavaParser.y"
+#line 1484 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4151,11 +4154,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4155 "cmDependsJavaParser.cxx"
+#line 4158 "cmDependsJavaParser.cxx"
     break;
 
   case 165: /* StatementNoShortIf: StatementWithoutTrailingSubstatement  */
-#line 1491 "cmDependsJavaParser.y"
+#line 1494 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4163,11 +4166,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4167 "cmDependsJavaParser.cxx"
+#line 4170 "cmDependsJavaParser.cxx"
     break;
 
   case 166: /* StatementNoShortIf: LabeledStatementNoShortIf  */
-#line 1500 "cmDependsJavaParser.y"
+#line 1503 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4175,11 +4178,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4179 "cmDependsJavaParser.cxx"
+#line 4182 "cmDependsJavaParser.cxx"
     break;
 
   case 167: /* StatementNoShortIf: IfThenElseStatementNoShortIf  */
-#line 1509 "cmDependsJavaParser.y"
+#line 1512 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4187,11 +4190,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4191 "cmDependsJavaParser.cxx"
+#line 4194 "cmDependsJavaParser.cxx"
     break;
 
   case 168: /* StatementNoShortIf: WhileStatementNoShortIf  */
-#line 1518 "cmDependsJavaParser.y"
+#line 1521 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4199,11 +4202,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4203 "cmDependsJavaParser.cxx"
+#line 4206 "cmDependsJavaParser.cxx"
     break;
 
   case 169: /* StatementNoShortIf: ForStatementNoShortIf  */
-#line 1527 "cmDependsJavaParser.y"
+#line 1530 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4211,11 +4214,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4215 "cmDependsJavaParser.cxx"
+#line 4218 "cmDependsJavaParser.cxx"
     break;
 
   case 170: /* StatementWithoutTrailingSubstatement: Block  */
-#line 1537 "cmDependsJavaParser.y"
+#line 1540 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4223,11 +4226,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4227 "cmDependsJavaParser.cxx"
+#line 4230 "cmDependsJavaParser.cxx"
     break;
 
   case 171: /* StatementWithoutTrailingSubstatement: EmptyStatement  */
-#line 1546 "cmDependsJavaParser.y"
+#line 1549 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4235,11 +4238,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4239 "cmDependsJavaParser.cxx"
+#line 4242 "cmDependsJavaParser.cxx"
     break;
 
   case 172: /* StatementWithoutTrailingSubstatement: ExpressionStatement  */
-#line 1555 "cmDependsJavaParser.y"
+#line 1558 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4247,11 +4250,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4251 "cmDependsJavaParser.cxx"
+#line 4254 "cmDependsJavaParser.cxx"
     break;
 
   case 173: /* StatementWithoutTrailingSubstatement: SwitchStatement  */
-#line 1564 "cmDependsJavaParser.y"
+#line 1567 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4259,11 +4262,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4263 "cmDependsJavaParser.cxx"
+#line 4266 "cmDependsJavaParser.cxx"
     break;
 
   case 174: /* StatementWithoutTrailingSubstatement: DoStatement  */
-#line 1573 "cmDependsJavaParser.y"
+#line 1576 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4271,11 +4274,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4275 "cmDependsJavaParser.cxx"
+#line 4278 "cmDependsJavaParser.cxx"
     break;
 
   case 175: /* StatementWithoutTrailingSubstatement: BreakStatement  */
-#line 1582 "cmDependsJavaParser.y"
+#line 1585 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4283,11 +4286,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4287 "cmDependsJavaParser.cxx"
+#line 4290 "cmDependsJavaParser.cxx"
     break;
 
   case 176: /* StatementWithoutTrailingSubstatement: ContinueStatement  */
-#line 1591 "cmDependsJavaParser.y"
+#line 1594 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4295,11 +4298,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4299 "cmDependsJavaParser.cxx"
+#line 4302 "cmDependsJavaParser.cxx"
     break;
 
   case 177: /* StatementWithoutTrailingSubstatement: ReturnStatement  */
-#line 1600 "cmDependsJavaParser.y"
+#line 1603 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4307,11 +4310,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4311 "cmDependsJavaParser.cxx"
+#line 4314 "cmDependsJavaParser.cxx"
     break;
 
   case 178: /* StatementWithoutTrailingSubstatement: SynchronizedStatement  */
-#line 1609 "cmDependsJavaParser.y"
+#line 1612 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4319,11 +4322,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4323 "cmDependsJavaParser.cxx"
+#line 4326 "cmDependsJavaParser.cxx"
     break;
 
   case 179: /* StatementWithoutTrailingSubstatement: ThrowStatement  */
-#line 1618 "cmDependsJavaParser.y"
+#line 1621 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4331,11 +4334,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4335 "cmDependsJavaParser.cxx"
+#line 4338 "cmDependsJavaParser.cxx"
     break;
 
   case 180: /* StatementWithoutTrailingSubstatement: TryStatement  */
-#line 1627 "cmDependsJavaParser.y"
+#line 1630 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4343,11 +4346,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4347 "cmDependsJavaParser.cxx"
+#line 4350 "cmDependsJavaParser.cxx"
     break;
 
   case 181: /* StatementWithoutTrailingSubstatement: AssertStatement  */
-#line 1636 "cmDependsJavaParser.y"
+#line 1639 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4355,11 +4358,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4359 "cmDependsJavaParser.cxx"
+#line 4362 "cmDependsJavaParser.cxx"
     break;
 
   case 182: /* EmptyStatement: jp_SEMICOL  */
-#line 1646 "cmDependsJavaParser.y"
+#line 1649 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4367,11 +4370,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4371 "cmDependsJavaParser.cxx"
+#line 4374 "cmDependsJavaParser.cxx"
     break;
 
   case 183: /* LabeledStatement: Identifier jp_COLON Statement  */
-#line 1656 "cmDependsJavaParser.y"
+#line 1659 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[-2].str)));
@@ -4380,11 +4383,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4384 "cmDependsJavaParser.cxx"
+#line 4387 "cmDependsJavaParser.cxx"
     break;
 
   case 184: /* LabeledStatementNoShortIf: Identifier jp_COLON StatementNoShortIf  */
-#line 1667 "cmDependsJavaParser.y"
+#line 1670 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4392,11 +4395,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4396 "cmDependsJavaParser.cxx"
+#line 4399 "cmDependsJavaParser.cxx"
     break;
 
   case 185: /* ExpressionStatement: StatementExpression jp_SEMICOL  */
-#line 1677 "cmDependsJavaParser.y"
+#line 1680 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4404,11 +4407,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4408 "cmDependsJavaParser.cxx"
+#line 4411 "cmDependsJavaParser.cxx"
     break;
 
   case 186: /* StatementExpression: Assignment  */
-#line 1687 "cmDependsJavaParser.y"
+#line 1690 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4416,11 +4419,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4420 "cmDependsJavaParser.cxx"
+#line 4423 "cmDependsJavaParser.cxx"
     break;
 
   case 187: /* StatementExpression: PreIncrementExpression  */
-#line 1696 "cmDependsJavaParser.y"
+#line 1699 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4428,11 +4431,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4432 "cmDependsJavaParser.cxx"
+#line 4435 "cmDependsJavaParser.cxx"
     break;
 
   case 188: /* StatementExpression: PreDecrementExpression  */
-#line 1705 "cmDependsJavaParser.y"
+#line 1708 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4440,11 +4443,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4444 "cmDependsJavaParser.cxx"
+#line 4447 "cmDependsJavaParser.cxx"
     break;
 
   case 189: /* StatementExpression: PostIncrementExpression  */
-#line 1714 "cmDependsJavaParser.y"
+#line 1717 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4452,11 +4455,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4456 "cmDependsJavaParser.cxx"
+#line 4459 "cmDependsJavaParser.cxx"
     break;
 
   case 190: /* StatementExpression: PostDecrementExpression  */
-#line 1723 "cmDependsJavaParser.y"
+#line 1726 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4464,11 +4467,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4468 "cmDependsJavaParser.cxx"
+#line 4471 "cmDependsJavaParser.cxx"
     break;
 
   case 191: /* StatementExpression: MethodInvocation  */
-#line 1732 "cmDependsJavaParser.y"
+#line 1735 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4476,11 +4479,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4480 "cmDependsJavaParser.cxx"
+#line 4483 "cmDependsJavaParser.cxx"
     break;
 
   case 192: /* StatementExpression: ClassInstanceCreationExpression  */
-#line 1741 "cmDependsJavaParser.y"
+#line 1744 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4488,11 +4491,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4492 "cmDependsJavaParser.cxx"
+#line 4495 "cmDependsJavaParser.cxx"
     break;
 
   case 193: /* IfThenStatement: jp_IF jp_PARESTART Expression jp_PAREEND Statement  */
-#line 1751 "cmDependsJavaParser.y"
+#line 1754 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -4500,11 +4503,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4504 "cmDependsJavaParser.cxx"
+#line 4507 "cmDependsJavaParser.cxx"
     break;
 
   case 194: /* IfThenElseStatement: jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE Statement  */
-#line 1761 "cmDependsJavaParser.y"
+#line 1764 "cmDependsJavaParser.y"
 {
   jpElementStart(7);
   jpCheckEmpty(7);
@@ -4512,11 +4515,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4516 "cmDependsJavaParser.cxx"
+#line 4519 "cmDependsJavaParser.cxx"
     break;
 
   case 195: /* IfThenElseStatementNoShortIf: jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE StatementNoShortIf  */
-#line 1771 "cmDependsJavaParser.y"
+#line 1774 "cmDependsJavaParser.y"
 {
   jpElementStart(7);
   jpCheckEmpty(7);
@@ -4524,40 +4527,40 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4528 "cmDependsJavaParser.cxx"
+#line 4531 "cmDependsJavaParser.cxx"
     break;
 
   case 196: /* SwitchStatement: jp_SWITCH jp_PARESTART Expression jp_PAREEND SwitchBlock  */
-#line 1781 "cmDependsJavaParser.y"
+#line 1784 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 4537 "cmDependsJavaParser.cxx"
+#line 4540 "cmDependsJavaParser.cxx"
     break;
 
   case 197: /* SwitchBlock: jp_CURLYSTART SwitchBlockStatementGroups SwitchLabelsopt jp_CURLYEND  */
-#line 1788 "cmDependsJavaParser.y"
+#line 1791 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
 
 }
-#line 4546 "cmDependsJavaParser.cxx"
+#line 4549 "cmDependsJavaParser.cxx"
     break;
 
   case 198: /* SwitchLabelsopt: %empty  */
-#line 1794 "cmDependsJavaParser.y"
+#line 1797 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4557 "cmDependsJavaParser.cxx"
+#line 4560 "cmDependsJavaParser.cxx"
     break;
 
   case 199: /* SwitchLabelsopt: SwitchLabels  */
-#line 1802 "cmDependsJavaParser.y"
+#line 1805 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4565,22 +4568,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4569 "cmDependsJavaParser.cxx"
+#line 4572 "cmDependsJavaParser.cxx"
     break;
 
   case 200: /* SwitchBlockStatementGroups: %empty  */
-#line 1811 "cmDependsJavaParser.y"
+#line 1814 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4580 "cmDependsJavaParser.cxx"
+#line 4583 "cmDependsJavaParser.cxx"
     break;
 
   case 201: /* SwitchBlockStatementGroups: SwitchBlockStatementGroups SwitchBlockStatementGroup  */
-#line 1819 "cmDependsJavaParser.y"
+#line 1822 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4588,11 +4591,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4592 "cmDependsJavaParser.cxx"
+#line 4595 "cmDependsJavaParser.cxx"
     break;
 
   case 202: /* SwitchBlockStatementGroup: SwitchLabels BlockStatements  */
-#line 1829 "cmDependsJavaParser.y"
+#line 1832 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4600,11 +4603,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4604 "cmDependsJavaParser.cxx"
+#line 4607 "cmDependsJavaParser.cxx"
     break;
 
   case 203: /* SwitchLabels: SwitchLabel  */
-#line 1839 "cmDependsJavaParser.y"
+#line 1842 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4612,11 +4615,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4616 "cmDependsJavaParser.cxx"
+#line 4619 "cmDependsJavaParser.cxx"
     break;
 
   case 204: /* SwitchLabels: SwitchLabels SwitchLabel  */
-#line 1848 "cmDependsJavaParser.y"
+#line 1851 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4624,11 +4627,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4628 "cmDependsJavaParser.cxx"
+#line 4631 "cmDependsJavaParser.cxx"
     break;
 
   case 205: /* SwitchLabel: jp_CASE ConstantExpression jp_COLON  */
-#line 1858 "cmDependsJavaParser.y"
+#line 1861 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4636,11 +4639,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4640 "cmDependsJavaParser.cxx"
+#line 4643 "cmDependsJavaParser.cxx"
     break;
 
   case 206: /* SwitchLabel: jp_DEFAULT jp_COLON  */
-#line 1867 "cmDependsJavaParser.y"
+#line 1870 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -4648,58 +4651,58 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4652 "cmDependsJavaParser.cxx"
+#line 4655 "cmDependsJavaParser.cxx"
     break;
 
   case 207: /* WhileStatement: jp_WHILE jp_PARESTART Expression jp_PAREEND Statement  */
-#line 1877 "cmDependsJavaParser.y"
+#line 1880 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 4661 "cmDependsJavaParser.cxx"
+#line 4664 "cmDependsJavaParser.cxx"
     break;
 
   case 208: /* WhileStatementNoShortIf: jp_WHILE jp_PARESTART Expression jp_PAREEND StatementNoShortIf  */
-#line 1884 "cmDependsJavaParser.y"
+#line 1887 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 4670 "cmDependsJavaParser.cxx"
+#line 4673 "cmDependsJavaParser.cxx"
     break;
 
   case 209: /* DoStatement: jp_DO Statement jp_WHILE jp_PARESTART Expression jp_PAREEND jp_SEMICOL  */
-#line 1891 "cmDependsJavaParser.y"
+#line 1894 "cmDependsJavaParser.y"
 {
   jpElementStart(7);
 
 }
-#line 4679 "cmDependsJavaParser.cxx"
+#line 4682 "cmDependsJavaParser.cxx"
     break;
 
   case 210: /* ForStatement: jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND Statement  */
-#line 1899 "cmDependsJavaParser.y"
+#line 1902 "cmDependsJavaParser.y"
 {
   jpElementStart(9);
 
 }
-#line 4688 "cmDependsJavaParser.cxx"
+#line 4691 "cmDependsJavaParser.cxx"
     break;
 
   case 211: /* ForUpdateopt: %empty  */
-#line 1905 "cmDependsJavaParser.y"
+#line 1908 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4699 "cmDependsJavaParser.cxx"
+#line 4702 "cmDependsJavaParser.cxx"
     break;
 
   case 212: /* ForUpdateopt: ForUpdate  */
-#line 1913 "cmDependsJavaParser.y"
+#line 1916 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4707,22 +4710,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4711 "cmDependsJavaParser.cxx"
+#line 4714 "cmDependsJavaParser.cxx"
     break;
 
   case 213: /* ForInitopt: %empty  */
-#line 1922 "cmDependsJavaParser.y"
+#line 1925 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4722 "cmDependsJavaParser.cxx"
+#line 4725 "cmDependsJavaParser.cxx"
     break;
 
   case 214: /* ForInitopt: ForInit  */
-#line 1930 "cmDependsJavaParser.y"
+#line 1933 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4730,33 +4733,33 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4734 "cmDependsJavaParser.cxx"
+#line 4737 "cmDependsJavaParser.cxx"
     break;
 
   case 215: /* ForStatementNoShortIf: jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND StatementNoShortIf  */
-#line 1941 "cmDependsJavaParser.y"
+#line 1944 "cmDependsJavaParser.y"
 {
   jpElementStart(9);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4745 "cmDependsJavaParser.cxx"
+#line 4748 "cmDependsJavaParser.cxx"
     break;
 
   case 216: /* Expressionopt: %empty  */
-#line 1949 "cmDependsJavaParser.y"
+#line 1952 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4756 "cmDependsJavaParser.cxx"
+#line 4759 "cmDependsJavaParser.cxx"
     break;
 
   case 217: /* Expressionopt: Expression  */
-#line 1957 "cmDependsJavaParser.y"
+#line 1960 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4764,11 +4767,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4768 "cmDependsJavaParser.cxx"
+#line 4771 "cmDependsJavaParser.cxx"
     break;
 
   case 218: /* ForInit: StatementExpressionList  */
-#line 1967 "cmDependsJavaParser.y"
+#line 1970 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4776,11 +4779,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4780 "cmDependsJavaParser.cxx"
+#line 4783 "cmDependsJavaParser.cxx"
     break;
 
   case 219: /* ForInit: LocalVariableDeclaration  */
-#line 1976 "cmDependsJavaParser.y"
+#line 1979 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4788,11 +4791,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4792 "cmDependsJavaParser.cxx"
+#line 4795 "cmDependsJavaParser.cxx"
     break;
 
   case 220: /* ForUpdate: StatementExpressionList  */
-#line 1986 "cmDependsJavaParser.y"
+#line 1989 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4800,11 +4803,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4804 "cmDependsJavaParser.cxx"
+#line 4807 "cmDependsJavaParser.cxx"
     break;
 
   case 221: /* StatementExpressionList: StatementExpression  */
-#line 1996 "cmDependsJavaParser.y"
+#line 1999 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4812,11 +4815,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4816 "cmDependsJavaParser.cxx"
+#line 4819 "cmDependsJavaParser.cxx"
     break;
 
   case 222: /* StatementExpressionList: StatementExpressionList jp_COMMA StatementExpression  */
-#line 2005 "cmDependsJavaParser.y"
+#line 2008 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4824,11 +4827,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4828 "cmDependsJavaParser.cxx"
+#line 4831 "cmDependsJavaParser.cxx"
     break;
 
   case 223: /* AssertStatement: jp_ASSERT Expression jp_SEMICOL  */
-#line 2015 "cmDependsJavaParser.y"
+#line 2018 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4836,11 +4839,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4840 "cmDependsJavaParser.cxx"
+#line 4843 "cmDependsJavaParser.cxx"
     break;
 
   case 224: /* AssertStatement: jp_ASSERT Expression jp_COLON Expression jp_SEMICOL  */
-#line 2024 "cmDependsJavaParser.y"
+#line 2027 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -4848,11 +4851,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4852 "cmDependsJavaParser.cxx"
+#line 4855 "cmDependsJavaParser.cxx"
     break;
 
   case 225: /* BreakStatement: jp_BREAK Identifieropt jp_SEMICOL  */
-#line 2034 "cmDependsJavaParser.y"
+#line 2037 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[-1].str)));
@@ -4861,31 +4864,31 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4865 "cmDependsJavaParser.cxx"
+#line 4868 "cmDependsJavaParser.cxx"
     break;
 
   case 226: /* Identifieropt: %empty  */
-#line 2044 "cmDependsJavaParser.y"
+#line 2047 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4876 "cmDependsJavaParser.cxx"
+#line 4879 "cmDependsJavaParser.cxx"
     break;
 
   case 227: /* Identifieropt: Identifier  */
-#line 2052 "cmDependsJavaParser.y"
+#line 2055 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 4885 "cmDependsJavaParser.cxx"
+#line 4888 "cmDependsJavaParser.cxx"
     break;
 
   case 228: /* ContinueStatement: jp_CONTINUE Identifieropt jp_SEMICOL  */
-#line 2059 "cmDependsJavaParser.y"
+#line 2062 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[-1].str)));
@@ -4894,11 +4897,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4898 "cmDependsJavaParser.cxx"
+#line 4901 "cmDependsJavaParser.cxx"
     break;
 
   case 229: /* ReturnStatement: jp_RETURN Expressionopt jp_SEMICOL  */
-#line 2070 "cmDependsJavaParser.y"
+#line 2073 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4906,11 +4909,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4910 "cmDependsJavaParser.cxx"
+#line 4913 "cmDependsJavaParser.cxx"
     break;
 
   case 230: /* ThrowStatement: jp_THROW Expression jp_SEMICOL  */
-#line 2080 "cmDependsJavaParser.y"
+#line 2083 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4918,11 +4921,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4922 "cmDependsJavaParser.cxx"
+#line 4925 "cmDependsJavaParser.cxx"
     break;
 
   case 231: /* SynchronizedStatement: jp_SYNCHRONIZED jp_PARESTART Expression jp_PAREEND Block  */
-#line 2090 "cmDependsJavaParser.y"
+#line 2093 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -4930,11 +4933,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4934 "cmDependsJavaParser.cxx"
+#line 4937 "cmDependsJavaParser.cxx"
     break;
 
   case 232: /* TryStatement: jp_TRY Block Catches  */
-#line 2100 "cmDependsJavaParser.y"
+#line 2103 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -4942,11 +4945,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4946 "cmDependsJavaParser.cxx"
+#line 4949 "cmDependsJavaParser.cxx"
     break;
 
   case 233: /* TryStatement: jp_TRY Block Catchesopt Finally  */
-#line 2109 "cmDependsJavaParser.y"
+#line 2112 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -4954,22 +4957,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4958 "cmDependsJavaParser.cxx"
+#line 4961 "cmDependsJavaParser.cxx"
     break;
 
   case 234: /* Catchesopt: %empty  */
-#line 2118 "cmDependsJavaParser.y"
+#line 2121 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4969 "cmDependsJavaParser.cxx"
+#line 4972 "cmDependsJavaParser.cxx"
     break;
 
   case 235: /* Catchesopt: Catches  */
-#line 2126 "cmDependsJavaParser.y"
+#line 2129 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4977,11 +4980,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4981 "cmDependsJavaParser.cxx"
+#line 4984 "cmDependsJavaParser.cxx"
     break;
 
   case 236: /* Catches: CatchClause  */
-#line 2136 "cmDependsJavaParser.y"
+#line 2139 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -4989,11 +4992,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 4993 "cmDependsJavaParser.cxx"
+#line 4996 "cmDependsJavaParser.cxx"
     break;
 
   case 237: /* Catches: Catches CatchClause  */
-#line 2145 "cmDependsJavaParser.y"
+#line 2148 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5001,20 +5004,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5005 "cmDependsJavaParser.cxx"
+#line 5008 "cmDependsJavaParser.cxx"
     break;
 
   case 238: /* CatchClause: jp_CATCH jp_PARESTART FormalParameter jp_PAREEND Block  */
-#line 2155 "cmDependsJavaParser.y"
+#line 2158 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 5014 "cmDependsJavaParser.cxx"
+#line 5017 "cmDependsJavaParser.cxx"
     break;
 
   case 239: /* Finally: jp_FINALLY Block  */
-#line 2162 "cmDependsJavaParser.y"
+#line 2165 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5022,11 +5025,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5026 "cmDependsJavaParser.cxx"
+#line 5029 "cmDependsJavaParser.cxx"
     break;
 
   case 240: /* Primary: PrimaryNoNewArray  */
-#line 2172 "cmDependsJavaParser.y"
+#line 2175 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5034,11 +5037,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5038 "cmDependsJavaParser.cxx"
+#line 5041 "cmDependsJavaParser.cxx"
     break;
 
   case 241: /* Primary: ArrayCreationExpression  */
-#line 2181 "cmDependsJavaParser.y"
+#line 2184 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5046,11 +5049,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5050 "cmDependsJavaParser.cxx"
+#line 5053 "cmDependsJavaParser.cxx"
     break;
 
   case 242: /* PrimaryNoNewArray: Literal  */
-#line 2191 "cmDependsJavaParser.y"
+#line 2194 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5058,20 +5061,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5062 "cmDependsJavaParser.cxx"
+#line 5065 "cmDependsJavaParser.cxx"
     break;
 
   case 243: /* PrimaryNoNewArray: jp_THIS  */
-#line 2200 "cmDependsJavaParser.y"
+#line 2203 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
 
 }
-#line 5071 "cmDependsJavaParser.cxx"
+#line 5074 "cmDependsJavaParser.cxx"
     break;
 
   case 244: /* PrimaryNoNewArray: jp_PARESTART Expression jp_PAREEND  */
-#line 2206 "cmDependsJavaParser.y"
+#line 2209 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5079,11 +5082,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5083 "cmDependsJavaParser.cxx"
+#line 5086 "cmDependsJavaParser.cxx"
     break;
 
   case 245: /* PrimaryNoNewArray: ClassInstanceCreationExpression  */
-#line 2215 "cmDependsJavaParser.y"
+#line 2218 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5091,11 +5094,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5095 "cmDependsJavaParser.cxx"
+#line 5098 "cmDependsJavaParser.cxx"
     break;
 
   case 246: /* PrimaryNoNewArray: FieldAccess  */
-#line 2224 "cmDependsJavaParser.y"
+#line 2227 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5103,11 +5106,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5107 "cmDependsJavaParser.cxx"
+#line 5110 "cmDependsJavaParser.cxx"
     break;
 
   case 247: /* PrimaryNoNewArray: MethodInvocation  */
-#line 2233 "cmDependsJavaParser.y"
+#line 2236 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5115,11 +5118,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5119 "cmDependsJavaParser.cxx"
+#line 5122 "cmDependsJavaParser.cxx"
     break;
 
   case 248: /* PrimaryNoNewArray: ArrayAccess  */
-#line 2242 "cmDependsJavaParser.y"
+#line 2245 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5127,11 +5130,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5131 "cmDependsJavaParser.cxx"
+#line 5134 "cmDependsJavaParser.cxx"
     break;
 
   case 249: /* ClassInstanceCreationExpression: New ClassType jp_PARESTART ArgumentListopt jp_PAREEND ClassBodyOpt  */
-#line 2252 "cmDependsJavaParser.y"
+#line 2255 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   jpCheckEmpty(6);
@@ -5139,22 +5142,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5143 "cmDependsJavaParser.cxx"
+#line 5146 "cmDependsJavaParser.cxx"
     break;
 
   case 250: /* ClassBodyOpt: %empty  */
-#line 2261 "cmDependsJavaParser.y"
+#line 2264 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5154 "cmDependsJavaParser.cxx"
+#line 5157 "cmDependsJavaParser.cxx"
     break;
 
   case 251: /* ClassBodyOpt: ClassBody  */
-#line 2269 "cmDependsJavaParser.y"
+#line 2272 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5162,22 +5165,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5166 "cmDependsJavaParser.cxx"
+#line 5169 "cmDependsJavaParser.cxx"
     break;
 
   case 252: /* ArgumentListopt: %empty  */
-#line 2278 "cmDependsJavaParser.y"
+#line 2281 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5177 "cmDependsJavaParser.cxx"
+#line 5180 "cmDependsJavaParser.cxx"
     break;
 
   case 253: /* ArgumentListopt: ArgumentList  */
-#line 2286 "cmDependsJavaParser.y"
+#line 2289 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5185,11 +5188,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5189 "cmDependsJavaParser.cxx"
+#line 5192 "cmDependsJavaParser.cxx"
     break;
 
   case 254: /* ArgumentList: Expression  */
-#line 2296 "cmDependsJavaParser.y"
+#line 2299 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5197,11 +5200,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5201 "cmDependsJavaParser.cxx"
+#line 5204 "cmDependsJavaParser.cxx"
     break;
 
   case 255: /* ArgumentList: ArgumentList jp_COMMA Expression  */
-#line 2305 "cmDependsJavaParser.y"
+#line 2308 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5209,11 +5212,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5213 "cmDependsJavaParser.cxx"
+#line 5216 "cmDependsJavaParser.cxx"
     break;
 
   case 256: /* ArrayCreationExpression: New PrimitiveType DimExprs Dimsopt  */
-#line 2315 "cmDependsJavaParser.y"
+#line 2318 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5221,11 +5224,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5225 "cmDependsJavaParser.cxx"
+#line 5228 "cmDependsJavaParser.cxx"
     break;
 
   case 257: /* ArrayCreationExpression: New ClassOrInterfaceType DimExprs Dimsopt  */
-#line 2324 "cmDependsJavaParser.y"
+#line 2327 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5233,11 +5236,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5237 "cmDependsJavaParser.cxx"
+#line 5240 "cmDependsJavaParser.cxx"
     break;
 
   case 258: /* ArrayCreationExpression: New PrimitiveType Dims ArrayInitializer  */
-#line 2333 "cmDependsJavaParser.y"
+#line 2336 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5245,11 +5248,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5249 "cmDependsJavaParser.cxx"
+#line 5252 "cmDependsJavaParser.cxx"
     break;
 
   case 259: /* ArrayCreationExpression: New ClassOrInterfaceType Dims ArrayInitializer  */
-#line 2342 "cmDependsJavaParser.y"
+#line 2345 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5257,22 +5260,22 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5261 "cmDependsJavaParser.cxx"
+#line 5264 "cmDependsJavaParser.cxx"
     break;
 
   case 260: /* Dimsopt: %empty  */
-#line 2351 "cmDependsJavaParser.y"
+#line 2354 "cmDependsJavaParser.y"
 {
   jpElementStart(0);
   (yyval.str) = 0;
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5272 "cmDependsJavaParser.cxx"
+#line 5275 "cmDependsJavaParser.cxx"
     break;
 
   case 261: /* Dimsopt: Dims  */
-#line 2359 "cmDependsJavaParser.y"
+#line 2362 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5280,11 +5283,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5284 "cmDependsJavaParser.cxx"
+#line 5287 "cmDependsJavaParser.cxx"
     break;
 
   case 262: /* DimExprs: DimExpr  */
-#line 2369 "cmDependsJavaParser.y"
+#line 2372 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5292,11 +5295,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5296 "cmDependsJavaParser.cxx"
+#line 5299 "cmDependsJavaParser.cxx"
     break;
 
   case 263: /* DimExprs: DimExprs DimExpr  */
-#line 2378 "cmDependsJavaParser.y"
+#line 2381 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5304,11 +5307,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5308 "cmDependsJavaParser.cxx"
+#line 5311 "cmDependsJavaParser.cxx"
     break;
 
   case 264: /* DimExpr: jp_BRACKETSTART Expression jp_BRACKETEND  */
-#line 2388 "cmDependsJavaParser.y"
+#line 2391 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5316,29 +5319,29 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5320 "cmDependsJavaParser.cxx"
+#line 5323 "cmDependsJavaParser.cxx"
     break;
 
   case 265: /* Dims: jp_BRACKETSTART jp_BRACKETEND  */
-#line 2398 "cmDependsJavaParser.y"
+#line 2401 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
 
 }
-#line 5329 "cmDependsJavaParser.cxx"
+#line 5332 "cmDependsJavaParser.cxx"
     break;
 
   case 266: /* Dims: Dims jp_BRACKETSTART jp_BRACKETEND  */
-#line 2404 "cmDependsJavaParser.y"
+#line 2407 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
 
 }
-#line 5338 "cmDependsJavaParser.cxx"
+#line 5341 "cmDependsJavaParser.cxx"
     break;
 
   case 267: /* FieldAccess: Primary jp_DOT Identifier  */
-#line 2411 "cmDependsJavaParser.y"
+#line 2414 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5347,11 +5350,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5351 "cmDependsJavaParser.cxx"
+#line 5354 "cmDependsJavaParser.cxx"
     break;
 
   case 268: /* FieldAccess: jp_SUPER jp_DOT Identifier  */
-#line 2421 "cmDependsJavaParser.y"
+#line 2424 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5360,11 +5363,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5364 "cmDependsJavaParser.cxx"
+#line 5367 "cmDependsJavaParser.cxx"
     break;
 
   case 269: /* FieldAccess: jp_THIS jp_DOT Identifier  */
-#line 2431 "cmDependsJavaParser.y"
+#line 2434 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5373,11 +5376,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5377 "cmDependsJavaParser.cxx"
+#line 5380 "cmDependsJavaParser.cxx"
     break;
 
   case 270: /* FieldAccess: Primary jp_DOT jp_THIS  */
-#line 2441 "cmDependsJavaParser.y"
+#line 2444 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5386,11 +5389,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5390 "cmDependsJavaParser.cxx"
+#line 5393 "cmDependsJavaParser.cxx"
     break;
 
   case 271: /* MethodInvocation: Name jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2452 "cmDependsJavaParser.y"
+#line 2455 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5399,11 +5402,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5403 "cmDependsJavaParser.cxx"
+#line 5406 "cmDependsJavaParser.cxx"
     break;
 
   case 272: /* MethodInvocation: Primary jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2462 "cmDependsJavaParser.y"
+#line 2465 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   yyGetParser->DeallocateParserType(&((yyvsp[-5].str)));
@@ -5413,11 +5416,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5417 "cmDependsJavaParser.cxx"
+#line 5420 "cmDependsJavaParser.cxx"
     break;
 
   case 273: /* MethodInvocation: jp_SUPER jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2473 "cmDependsJavaParser.y"
+#line 2476 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5426,11 +5429,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5430 "cmDependsJavaParser.cxx"
+#line 5433 "cmDependsJavaParser.cxx"
     break;
 
   case 274: /* MethodInvocation: jp_THIS jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND  */
-#line 2483 "cmDependsJavaParser.y"
+#line 2486 "cmDependsJavaParser.y"
 {
   jpElementStart(6);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5439,11 +5442,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5443 "cmDependsJavaParser.cxx"
+#line 5446 "cmDependsJavaParser.cxx"
     break;
 
   case 275: /* ArrayAccess: Name jp_BRACKETSTART Expression jp_BRACKETEND  */
-#line 2494 "cmDependsJavaParser.y"
+#line 2497 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   yyGetParser->DeallocateParserType(&((yyvsp[-3].str)));
@@ -5452,11 +5455,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5456 "cmDependsJavaParser.cxx"
+#line 5459 "cmDependsJavaParser.cxx"
     break;
 
   case 276: /* ArrayAccess: PrimaryNoNewArray jp_BRACKETSTART Expression jp_BRACKETEND  */
-#line 2504 "cmDependsJavaParser.y"
+#line 2507 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5464,11 +5467,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5468 "cmDependsJavaParser.cxx"
+#line 5471 "cmDependsJavaParser.cxx"
     break;
 
   case 277: /* PostfixExpression: Primary  */
-#line 2514 "cmDependsJavaParser.y"
+#line 2517 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5476,11 +5479,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5480 "cmDependsJavaParser.cxx"
+#line 5483 "cmDependsJavaParser.cxx"
     break;
 
   case 278: /* PostfixExpression: Name  */
-#line 2523 "cmDependsJavaParser.y"
+#line 2526 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -5488,11 +5491,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5492 "cmDependsJavaParser.cxx"
+#line 5495 "cmDependsJavaParser.cxx"
     break;
 
   case 279: /* PostfixExpression: ArrayType jp_DOT jp_CLASS  */
-#line 2532 "cmDependsJavaParser.y"
+#line 2535 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5500,11 +5503,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5504 "cmDependsJavaParser.cxx"
+#line 5507 "cmDependsJavaParser.cxx"
     break;
 
   case 280: /* PostfixExpression: PostIncrementExpression  */
-#line 2541 "cmDependsJavaParser.y"
+#line 2544 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5512,11 +5515,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5516 "cmDependsJavaParser.cxx"
+#line 5519 "cmDependsJavaParser.cxx"
     break;
 
   case 281: /* PostfixExpression: PostDecrementExpression  */
-#line 2550 "cmDependsJavaParser.y"
+#line 2553 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5524,11 +5527,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5528 "cmDependsJavaParser.cxx"
+#line 5531 "cmDependsJavaParser.cxx"
     break;
 
   case 282: /* PostIncrementExpression: PostfixExpression jp_PLUSPLUS  */
-#line 2560 "cmDependsJavaParser.y"
+#line 2563 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5536,11 +5539,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5540 "cmDependsJavaParser.cxx"
+#line 5543 "cmDependsJavaParser.cxx"
     break;
 
   case 283: /* PostDecrementExpression: PostfixExpression jp_MINUSMINUS  */
-#line 2570 "cmDependsJavaParser.y"
+#line 2573 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5548,11 +5551,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5552 "cmDependsJavaParser.cxx"
+#line 5555 "cmDependsJavaParser.cxx"
     break;
 
   case 284: /* UnaryExpression: PreIncrementExpression  */
-#line 2580 "cmDependsJavaParser.y"
+#line 2583 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5560,11 +5563,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5564 "cmDependsJavaParser.cxx"
+#line 5567 "cmDependsJavaParser.cxx"
     break;
 
   case 285: /* UnaryExpression: PreDecrementExpression  */
-#line 2589 "cmDependsJavaParser.y"
+#line 2592 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5572,11 +5575,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5576 "cmDependsJavaParser.cxx"
+#line 5579 "cmDependsJavaParser.cxx"
     break;
 
   case 286: /* UnaryExpression: jp_PLUS UnaryExpression  */
-#line 2598 "cmDependsJavaParser.y"
+#line 2601 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5584,11 +5587,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5588 "cmDependsJavaParser.cxx"
+#line 5591 "cmDependsJavaParser.cxx"
     break;
 
   case 287: /* UnaryExpression: jp_MINUS UnaryExpression  */
-#line 2607 "cmDependsJavaParser.y"
+#line 2610 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5596,11 +5599,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5600 "cmDependsJavaParser.cxx"
+#line 5603 "cmDependsJavaParser.cxx"
     break;
 
   case 288: /* UnaryExpression: UnaryExpressionNotPlusMinus  */
-#line 2616 "cmDependsJavaParser.y"
+#line 2619 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5608,11 +5611,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5612 "cmDependsJavaParser.cxx"
+#line 5615 "cmDependsJavaParser.cxx"
     break;
 
   case 289: /* PreIncrementExpression: jp_PLUSPLUS UnaryExpression  */
-#line 2626 "cmDependsJavaParser.y"
+#line 2629 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5620,11 +5623,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5624 "cmDependsJavaParser.cxx"
+#line 5627 "cmDependsJavaParser.cxx"
     break;
 
   case 290: /* PreDecrementExpression: jp_MINUSMINUS UnaryExpression  */
-#line 2636 "cmDependsJavaParser.y"
+#line 2639 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5632,11 +5635,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5636 "cmDependsJavaParser.cxx"
+#line 5639 "cmDependsJavaParser.cxx"
     break;
 
   case 291: /* UnaryExpressionNotPlusMinus: PostfixExpression  */
-#line 2646 "cmDependsJavaParser.y"
+#line 2649 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5644,11 +5647,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5648 "cmDependsJavaParser.cxx"
+#line 5651 "cmDependsJavaParser.cxx"
     break;
 
   case 292: /* UnaryExpressionNotPlusMinus: jp_TILDE UnaryExpression  */
-#line 2655 "cmDependsJavaParser.y"
+#line 2658 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5656,11 +5659,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5660 "cmDependsJavaParser.cxx"
+#line 5663 "cmDependsJavaParser.cxx"
     break;
 
   case 293: /* UnaryExpressionNotPlusMinus: jp_EXCLAMATION UnaryExpression  */
-#line 2664 "cmDependsJavaParser.y"
+#line 2667 "cmDependsJavaParser.y"
 {
   jpElementStart(2);
   jpCheckEmpty(2);
@@ -5668,11 +5671,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5672 "cmDependsJavaParser.cxx"
+#line 5675 "cmDependsJavaParser.cxx"
     break;
 
   case 294: /* UnaryExpressionNotPlusMinus: CastExpression  */
-#line 2673 "cmDependsJavaParser.y"
+#line 2676 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5680,11 +5683,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5684 "cmDependsJavaParser.cxx"
+#line 5687 "cmDependsJavaParser.cxx"
     break;
 
   case 295: /* CastExpression: jp_PARESTART PrimitiveType Dimsopt jp_PAREEND UnaryExpression  */
-#line 2683 "cmDependsJavaParser.y"
+#line 2686 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -5692,11 +5695,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5696 "cmDependsJavaParser.cxx"
+#line 5699 "cmDependsJavaParser.cxx"
     break;
 
   case 296: /* CastExpression: jp_PARESTART Expression jp_PAREEND UnaryExpressionNotPlusMinus  */
-#line 2692 "cmDependsJavaParser.y"
+#line 2695 "cmDependsJavaParser.y"
 {
   jpElementStart(4);
   jpCheckEmpty(4);
@@ -5704,20 +5707,20 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5708 "cmDependsJavaParser.cxx"
+#line 5711 "cmDependsJavaParser.cxx"
     break;
 
   case 297: /* CastExpression: jp_PARESTART Name Dims jp_PAREEND UnaryExpressionNotPlusMinus  */
-#line 2701 "cmDependsJavaParser.y"
+#line 2704 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
 
 }
-#line 5717 "cmDependsJavaParser.cxx"
+#line 5720 "cmDependsJavaParser.cxx"
     break;
 
   case 298: /* MultiplicativeExpression: UnaryExpression  */
-#line 2708 "cmDependsJavaParser.y"
+#line 2711 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5725,11 +5728,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5729 "cmDependsJavaParser.cxx"
+#line 5732 "cmDependsJavaParser.cxx"
     break;
 
   case 299: /* MultiplicativeExpression: MultiplicativeExpression jp_TIMES UnaryExpression  */
-#line 2717 "cmDependsJavaParser.y"
+#line 2720 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5737,11 +5740,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5741 "cmDependsJavaParser.cxx"
+#line 5744 "cmDependsJavaParser.cxx"
     break;
 
   case 300: /* MultiplicativeExpression: MultiplicativeExpression jp_DIVIDE UnaryExpression  */
-#line 2726 "cmDependsJavaParser.y"
+#line 2729 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5749,11 +5752,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5753 "cmDependsJavaParser.cxx"
+#line 5756 "cmDependsJavaParser.cxx"
     break;
 
   case 301: /* MultiplicativeExpression: MultiplicativeExpression jp_PERCENT UnaryExpression  */
-#line 2735 "cmDependsJavaParser.y"
+#line 2738 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5761,11 +5764,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5765 "cmDependsJavaParser.cxx"
+#line 5768 "cmDependsJavaParser.cxx"
     break;
 
   case 302: /* AdditiveExpression: MultiplicativeExpression  */
-#line 2745 "cmDependsJavaParser.y"
+#line 2748 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5773,11 +5776,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5777 "cmDependsJavaParser.cxx"
+#line 5780 "cmDependsJavaParser.cxx"
     break;
 
   case 303: /* AdditiveExpression: AdditiveExpression jp_PLUS MultiplicativeExpression  */
-#line 2754 "cmDependsJavaParser.y"
+#line 2757 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5785,11 +5788,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5789 "cmDependsJavaParser.cxx"
+#line 5792 "cmDependsJavaParser.cxx"
     break;
 
   case 304: /* AdditiveExpression: AdditiveExpression jp_MINUS MultiplicativeExpression  */
-#line 2763 "cmDependsJavaParser.y"
+#line 2766 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5797,11 +5800,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5801 "cmDependsJavaParser.cxx"
+#line 5804 "cmDependsJavaParser.cxx"
     break;
 
   case 305: /* ShiftExpression: AdditiveExpression  */
-#line 2773 "cmDependsJavaParser.y"
+#line 2776 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5809,11 +5812,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5813 "cmDependsJavaParser.cxx"
+#line 5816 "cmDependsJavaParser.cxx"
     break;
 
   case 306: /* ShiftExpression: ShiftExpression jp_LTLT AdditiveExpression  */
-#line 2782 "cmDependsJavaParser.y"
+#line 2785 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5821,11 +5824,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5825 "cmDependsJavaParser.cxx"
+#line 5828 "cmDependsJavaParser.cxx"
     break;
 
   case 307: /* ShiftExpression: ShiftExpression jp_GTGT AdditiveExpression  */
-#line 2791 "cmDependsJavaParser.y"
+#line 2794 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5833,11 +5836,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5837 "cmDependsJavaParser.cxx"
+#line 5840 "cmDependsJavaParser.cxx"
     break;
 
   case 308: /* ShiftExpression: ShiftExpression jp_GTGTGT AdditiveExpression  */
-#line 2800 "cmDependsJavaParser.y"
+#line 2803 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5845,11 +5848,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5849 "cmDependsJavaParser.cxx"
+#line 5852 "cmDependsJavaParser.cxx"
     break;
 
   case 309: /* RelationalExpression: ShiftExpression  */
-#line 2810 "cmDependsJavaParser.y"
+#line 2813 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5857,11 +5860,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5861 "cmDependsJavaParser.cxx"
+#line 5864 "cmDependsJavaParser.cxx"
     break;
 
   case 310: /* RelationalExpression: RelationalExpression jp_LESSTHAN ShiftExpression  */
-#line 2819 "cmDependsJavaParser.y"
+#line 2822 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5869,11 +5872,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5873 "cmDependsJavaParser.cxx"
+#line 5876 "cmDependsJavaParser.cxx"
     break;
 
   case 311: /* RelationalExpression: RelationalExpression jp_GREATER ShiftExpression  */
-#line 2828 "cmDependsJavaParser.y"
+#line 2831 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5881,11 +5884,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5885 "cmDependsJavaParser.cxx"
+#line 5888 "cmDependsJavaParser.cxx"
     break;
 
   case 312: /* RelationalExpression: RelationalExpression jp_LTEQUALS ShiftExpression  */
-#line 2837 "cmDependsJavaParser.y"
+#line 2840 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5893,11 +5896,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5897 "cmDependsJavaParser.cxx"
+#line 5900 "cmDependsJavaParser.cxx"
     break;
 
   case 313: /* RelationalExpression: RelationalExpression jp_GTEQUALS ShiftExpression  */
-#line 2846 "cmDependsJavaParser.y"
+#line 2849 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5905,11 +5908,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5909 "cmDependsJavaParser.cxx"
+#line 5912 "cmDependsJavaParser.cxx"
     break;
 
   case 314: /* RelationalExpression: RelationalExpression jp_INSTANCEOF ReferenceType  */
-#line 2855 "cmDependsJavaParser.y"
+#line 2858 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5917,11 +5920,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5921 "cmDependsJavaParser.cxx"
+#line 5924 "cmDependsJavaParser.cxx"
     break;
 
   case 315: /* EqualityExpression: RelationalExpression  */
-#line 2865 "cmDependsJavaParser.y"
+#line 2868 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5929,11 +5932,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5933 "cmDependsJavaParser.cxx"
+#line 5936 "cmDependsJavaParser.cxx"
     break;
 
   case 316: /* EqualityExpression: EqualityExpression jp_EQUALSEQUALS RelationalExpression  */
-#line 2874 "cmDependsJavaParser.y"
+#line 2877 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5941,11 +5944,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5945 "cmDependsJavaParser.cxx"
+#line 5948 "cmDependsJavaParser.cxx"
     break;
 
   case 317: /* EqualityExpression: EqualityExpression jp_EXCLAMATIONEQUALS RelationalExpression  */
-#line 2883 "cmDependsJavaParser.y"
+#line 2886 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5953,11 +5956,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5957 "cmDependsJavaParser.cxx"
+#line 5960 "cmDependsJavaParser.cxx"
     break;
 
   case 318: /* AndExpression: EqualityExpression  */
-#line 2893 "cmDependsJavaParser.y"
+#line 2896 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5965,11 +5968,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5969 "cmDependsJavaParser.cxx"
+#line 5972 "cmDependsJavaParser.cxx"
     break;
 
   case 319: /* AndExpression: AndExpression jp_AND EqualityExpression  */
-#line 2902 "cmDependsJavaParser.y"
+#line 2905 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -5977,11 +5980,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5981 "cmDependsJavaParser.cxx"
+#line 5984 "cmDependsJavaParser.cxx"
     break;
 
   case 320: /* ExclusiveOrExpression: AndExpression  */
-#line 2912 "cmDependsJavaParser.y"
+#line 2915 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -5989,11 +5992,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 5993 "cmDependsJavaParser.cxx"
+#line 5996 "cmDependsJavaParser.cxx"
     break;
 
   case 321: /* ExclusiveOrExpression: ExclusiveOrExpression jp_CARROT AndExpression  */
-#line 2921 "cmDependsJavaParser.y"
+#line 2924 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6001,11 +6004,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6005 "cmDependsJavaParser.cxx"
+#line 6008 "cmDependsJavaParser.cxx"
     break;
 
   case 322: /* InclusiveOrExpression: ExclusiveOrExpression  */
-#line 2931 "cmDependsJavaParser.y"
+#line 2934 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6013,11 +6016,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6017 "cmDependsJavaParser.cxx"
+#line 6020 "cmDependsJavaParser.cxx"
     break;
 
   case 323: /* InclusiveOrExpression: InclusiveOrExpression jp_PIPE ExclusiveOrExpression  */
-#line 2940 "cmDependsJavaParser.y"
+#line 2943 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6025,11 +6028,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6029 "cmDependsJavaParser.cxx"
+#line 6032 "cmDependsJavaParser.cxx"
     break;
 
   case 324: /* ConditionalAndExpression: InclusiveOrExpression  */
-#line 2950 "cmDependsJavaParser.y"
+#line 2953 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6037,11 +6040,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6041 "cmDependsJavaParser.cxx"
+#line 6044 "cmDependsJavaParser.cxx"
     break;
 
   case 325: /* ConditionalAndExpression: ConditionalAndExpression jp_ANDAND InclusiveOrExpression  */
-#line 2959 "cmDependsJavaParser.y"
+#line 2962 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6049,11 +6052,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6053 "cmDependsJavaParser.cxx"
+#line 6056 "cmDependsJavaParser.cxx"
     break;
 
   case 326: /* ConditionalOrExpression: ConditionalAndExpression  */
-#line 2969 "cmDependsJavaParser.y"
+#line 2972 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6061,11 +6064,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6065 "cmDependsJavaParser.cxx"
+#line 6068 "cmDependsJavaParser.cxx"
     break;
 
   case 327: /* ConditionalOrExpression: ConditionalOrExpression jp_PIPEPIPE ConditionalAndExpression  */
-#line 2978 "cmDependsJavaParser.y"
+#line 2981 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6073,11 +6076,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6077 "cmDependsJavaParser.cxx"
+#line 6080 "cmDependsJavaParser.cxx"
     break;
 
   case 328: /* ConditionalExpression: ConditionalOrExpression  */
-#line 2988 "cmDependsJavaParser.y"
+#line 2991 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6085,11 +6088,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6089 "cmDependsJavaParser.cxx"
+#line 6092 "cmDependsJavaParser.cxx"
     break;
 
   case 329: /* ConditionalExpression: ConditionalOrExpression jp_QUESTION Expression jp_COLON ConditionalExpression  */
-#line 2997 "cmDependsJavaParser.y"
+#line 3000 "cmDependsJavaParser.y"
 {
   jpElementStart(5);
   jpCheckEmpty(5);
@@ -6097,11 +6100,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6101 "cmDependsJavaParser.cxx"
+#line 6104 "cmDependsJavaParser.cxx"
     break;
 
   case 330: /* AssignmentExpression: ConditionalExpression  */
-#line 3007 "cmDependsJavaParser.y"
+#line 3010 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6109,11 +6112,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6113 "cmDependsJavaParser.cxx"
+#line 6116 "cmDependsJavaParser.cxx"
     break;
 
   case 331: /* AssignmentExpression: Assignment  */
-#line 3016 "cmDependsJavaParser.y"
+#line 3019 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6121,11 +6124,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6125 "cmDependsJavaParser.cxx"
+#line 6128 "cmDependsJavaParser.cxx"
     break;
 
   case 332: /* Assignment: LeftHandSide AssignmentOperator AssignmentExpression  */
-#line 3026 "cmDependsJavaParser.y"
+#line 3029 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpCheckEmpty(3);
@@ -6133,11 +6136,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6137 "cmDependsJavaParser.cxx"
+#line 6140 "cmDependsJavaParser.cxx"
     break;
 
   case 333: /* LeftHandSide: Name  */
-#line 3036 "cmDependsJavaParser.y"
+#line 3039 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   yyGetParser->DeallocateParserType(&((yyvsp[0].str)));
@@ -6146,11 +6149,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6150 "cmDependsJavaParser.cxx"
+#line 6153 "cmDependsJavaParser.cxx"
     break;
 
   case 334: /* LeftHandSide: FieldAccess  */
-#line 3046 "cmDependsJavaParser.y"
+#line 3049 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6158,11 +6161,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6162 "cmDependsJavaParser.cxx"
+#line 6165 "cmDependsJavaParser.cxx"
     break;
 
   case 335: /* LeftHandSide: ArrayAccess  */
-#line 3055 "cmDependsJavaParser.y"
+#line 3058 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6170,11 +6173,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6174 "cmDependsJavaParser.cxx"
+#line 6177 "cmDependsJavaParser.cxx"
     break;
 
   case 336: /* AssignmentOperator: jp_EQUALS  */
-#line 3065 "cmDependsJavaParser.y"
+#line 3068 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6182,11 +6185,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6186 "cmDependsJavaParser.cxx"
+#line 6189 "cmDependsJavaParser.cxx"
     break;
 
   case 337: /* AssignmentOperator: jp_TIMESEQUALS  */
-#line 3074 "cmDependsJavaParser.y"
+#line 3077 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6194,11 +6197,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6198 "cmDependsJavaParser.cxx"
+#line 6201 "cmDependsJavaParser.cxx"
     break;
 
   case 338: /* AssignmentOperator: jp_DIVIDEEQUALS  */
-#line 3083 "cmDependsJavaParser.y"
+#line 3086 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6206,11 +6209,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6210 "cmDependsJavaParser.cxx"
+#line 6213 "cmDependsJavaParser.cxx"
     break;
 
   case 339: /* AssignmentOperator: jp_PERCENTEQUALS  */
-#line 3092 "cmDependsJavaParser.y"
+#line 3095 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6218,11 +6221,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6222 "cmDependsJavaParser.cxx"
+#line 6225 "cmDependsJavaParser.cxx"
     break;
 
   case 340: /* AssignmentOperator: jp_PLUSEQUALS  */
-#line 3101 "cmDependsJavaParser.y"
+#line 3104 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6230,11 +6233,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6234 "cmDependsJavaParser.cxx"
+#line 6237 "cmDependsJavaParser.cxx"
     break;
 
   case 341: /* AssignmentOperator: jp_MINUSEQUALS  */
-#line 3110 "cmDependsJavaParser.y"
+#line 3113 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6242,11 +6245,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6246 "cmDependsJavaParser.cxx"
+#line 6249 "cmDependsJavaParser.cxx"
     break;
 
   case 342: /* AssignmentOperator: jp_LESLESEQUALS  */
-#line 3119 "cmDependsJavaParser.y"
+#line 3122 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6254,11 +6257,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6258 "cmDependsJavaParser.cxx"
+#line 6261 "cmDependsJavaParser.cxx"
     break;
 
   case 343: /* AssignmentOperator: jp_GTGTEQUALS  */
-#line 3128 "cmDependsJavaParser.y"
+#line 3131 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6266,11 +6269,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6270 "cmDependsJavaParser.cxx"
+#line 6273 "cmDependsJavaParser.cxx"
     break;
 
   case 344: /* AssignmentOperator: jp_GTGTGTEQUALS  */
-#line 3137 "cmDependsJavaParser.y"
+#line 3140 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6278,11 +6281,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6282 "cmDependsJavaParser.cxx"
+#line 6285 "cmDependsJavaParser.cxx"
     break;
 
   case 345: /* AssignmentOperator: jp_ANDEQUALS  */
-#line 3146 "cmDependsJavaParser.y"
+#line 3149 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6290,11 +6293,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6294 "cmDependsJavaParser.cxx"
+#line 6297 "cmDependsJavaParser.cxx"
     break;
 
   case 346: /* AssignmentOperator: jp_CARROTEQUALS  */
-#line 3155 "cmDependsJavaParser.y"
+#line 3158 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6302,11 +6305,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6306 "cmDependsJavaParser.cxx"
+#line 6309 "cmDependsJavaParser.cxx"
     break;
 
   case 347: /* AssignmentOperator: jp_PIPEEQUALS  */
-#line 3164 "cmDependsJavaParser.y"
+#line 3167 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6314,11 +6317,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6318 "cmDependsJavaParser.cxx"
+#line 6321 "cmDependsJavaParser.cxx"
     break;
 
   case 348: /* Expression: AssignmentExpression  */
-#line 3174 "cmDependsJavaParser.y"
+#line 3177 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6326,11 +6329,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6330 "cmDependsJavaParser.cxx"
+#line 6333 "cmDependsJavaParser.cxx"
     break;
 
   case 349: /* ConstantExpression: Expression  */
-#line 3184 "cmDependsJavaParser.y"
+#line 3187 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6338,11 +6341,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6342 "cmDependsJavaParser.cxx"
+#line 6345 "cmDependsJavaParser.cxx"
     break;
 
   case 350: /* New: jp_NEW  */
-#line 3194 "cmDependsJavaParser.y"
+#line 3197 "cmDependsJavaParser.y"
 {
   jpElementStart(1);
   jpCheckEmpty(1);
@@ -6350,11 +6353,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6354 "cmDependsJavaParser.cxx"
+#line 6357 "cmDependsJavaParser.cxx"
     break;
 
   case 351: /* New: Name jp_DOT jp_NEW  */
-#line 3203 "cmDependsJavaParser.y"
+#line 3206 "cmDependsJavaParser.y"
 {
   jpElementStart(3);
   jpStoreClass((yyvsp[-2].str));
@@ -6363,11 +6366,11 @@
   yyGetParser->SetCurrentCombine("");
 
 }
-#line 6367 "cmDependsJavaParser.cxx"
+#line 6370 "cmDependsJavaParser.cxx"
     break;
 
 
-#line 6371 "cmDependsJavaParser.cxx"
+#line 6374 "cmDependsJavaParser.cxx"
 
       default: break;
     }
@@ -6591,7 +6594,7 @@
   return yyresult;
 }
 
-#line 3212 "cmDependsJavaParser.y"
+#line 3215 "cmDependsJavaParser.y"
 
 /* End of grammar */
 
diff --git a/Source/LexerParser/cmDependsJavaParser.y b/Source/LexerParser/cmDependsJavaParser.y
index 01d0017..7679212 100644
--- a/Source/LexerParser/cmDependsJavaParser.y
+++ b/Source/LexerParser/cmDependsJavaParser.y
@@ -44,6 +44,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
diff --git a/Source/LexerParser/cmExprParser.cxx b/Source/LexerParser/cmExprParser.cxx
index d30d5cf..d4168a0 100644
--- a/Source/LexerParser/cmExprParser.cxx
+++ b/Source/LexerParser/cmExprParser.cxx
@@ -112,6 +112,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
@@ -125,7 +128,7 @@
 #  pragma diag_suppress 550 /* variable set but never used */
 #endif
 
-#line 129 "cmExprParser.cxx"
+#line 132 "cmExprParser.cxx"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -567,9 +570,9 @@
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint8 yyrline[] =
 {
-       0,    86,    86,    91,    94,    99,   102,   107,   110,   115,
-     118,   122,   128,   131,   135,   141,   144,   148,   152,   158,
-     161,   164,   168,   173,   176
+       0,    89,    89,    94,    97,   102,   105,   110,   113,   118,
+     121,   125,   131,   134,   138,   144,   147,   151,   155,   161,
+     164,   167,   171,   176,   179
 };
 #endif
 
@@ -1430,199 +1433,199 @@
   switch (yyn)
     {
   case 2: /* start: exp  */
-#line 86 "cmExprParser.y"
+#line 89 "cmExprParser.y"
       {
     cmExpr_yyget_extra(yyscanner)->SetResult((yyvsp[0].Number));
   }
-#line 1438 "cmExprParser.cxx"
+#line 1441 "cmExprParser.cxx"
     break;
 
   case 3: /* exp: bitwiseor  */
-#line 91 "cmExprParser.y"
+#line 94 "cmExprParser.y"
             {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1446 "cmExprParser.cxx"
+#line 1449 "cmExprParser.cxx"
     break;
 
   case 4: /* exp: exp exp_OR bitwiseor  */
-#line 94 "cmExprParser.y"
+#line 97 "cmExprParser.y"
                        {
     (yyval.Number) = (yyvsp[-2].Number) | (yyvsp[0].Number);
   }
-#line 1454 "cmExprParser.cxx"
+#line 1457 "cmExprParser.cxx"
     break;
 
   case 5: /* bitwiseor: bitwisexor  */
-#line 99 "cmExprParser.y"
+#line 102 "cmExprParser.y"
              {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1462 "cmExprParser.cxx"
+#line 1465 "cmExprParser.cxx"
     break;
 
   case 6: /* bitwiseor: bitwiseor exp_XOR bitwisexor  */
-#line 102 "cmExprParser.y"
+#line 105 "cmExprParser.y"
                                {
     (yyval.Number) = (yyvsp[-2].Number) ^ (yyvsp[0].Number);
   }
-#line 1470 "cmExprParser.cxx"
+#line 1473 "cmExprParser.cxx"
     break;
 
   case 7: /* bitwisexor: bitwiseand  */
-#line 107 "cmExprParser.y"
+#line 110 "cmExprParser.y"
              {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1478 "cmExprParser.cxx"
+#line 1481 "cmExprParser.cxx"
     break;
 
   case 8: /* bitwisexor: bitwisexor exp_AND bitwiseand  */
-#line 110 "cmExprParser.y"
+#line 113 "cmExprParser.y"
                                 {
     (yyval.Number) = (yyvsp[-2].Number) & (yyvsp[0].Number);
   }
-#line 1486 "cmExprParser.cxx"
+#line 1489 "cmExprParser.cxx"
     break;
 
   case 9: /* bitwiseand: shift  */
-#line 115 "cmExprParser.y"
+#line 118 "cmExprParser.y"
         {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1494 "cmExprParser.cxx"
+#line 1497 "cmExprParser.cxx"
     break;
 
   case 10: /* bitwiseand: bitwiseand exp_SHIFTLEFT shift  */
-#line 118 "cmExprParser.y"
+#line 121 "cmExprParser.y"
                                  {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->ShL((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1503 "cmExprParser.cxx"
+#line 1506 "cmExprParser.cxx"
     break;
 
   case 11: /* bitwiseand: bitwiseand exp_SHIFTRIGHT shift  */
-#line 122 "cmExprParser.y"
+#line 125 "cmExprParser.y"
                                   {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->ShR((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1512 "cmExprParser.cxx"
+#line 1515 "cmExprParser.cxx"
     break;
 
   case 12: /* shift: term  */
-#line 128 "cmExprParser.y"
+#line 131 "cmExprParser.y"
        {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1520 "cmExprParser.cxx"
+#line 1523 "cmExprParser.cxx"
     break;
 
   case 13: /* shift: shift exp_PLUS term  */
-#line 131 "cmExprParser.y"
+#line 134 "cmExprParser.y"
                       {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Add((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1529 "cmExprParser.cxx"
+#line 1532 "cmExprParser.cxx"
     break;
 
   case 14: /* shift: shift exp_MINUS term  */
-#line 135 "cmExprParser.y"
+#line 138 "cmExprParser.y"
                        {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Sub((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1538 "cmExprParser.cxx"
+#line 1541 "cmExprParser.cxx"
     break;
 
   case 15: /* term: unary  */
-#line 141 "cmExprParser.y"
+#line 144 "cmExprParser.y"
         {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1546 "cmExprParser.cxx"
+#line 1549 "cmExprParser.cxx"
     break;
 
   case 16: /* term: term exp_TIMES unary  */
-#line 144 "cmExprParser.y"
+#line 147 "cmExprParser.y"
                        {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Mul((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1555 "cmExprParser.cxx"
+#line 1558 "cmExprParser.cxx"
     break;
 
   case 17: /* term: term exp_DIVIDE unary  */
-#line 148 "cmExprParser.y"
+#line 151 "cmExprParser.y"
                         {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Div((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1564 "cmExprParser.cxx"
+#line 1567 "cmExprParser.cxx"
     break;
 
   case 18: /* term: term exp_MOD unary  */
-#line 152 "cmExprParser.y"
+#line 155 "cmExprParser.y"
                      {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Mod((yyvsp[-2].Number), (yyvsp[0].Number));
   }
-#line 1573 "cmExprParser.cxx"
+#line 1576 "cmExprParser.cxx"
     break;
 
   case 19: /* unary: factor  */
-#line 158 "cmExprParser.y"
+#line 161 "cmExprParser.y"
          {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1581 "cmExprParser.cxx"
+#line 1584 "cmExprParser.cxx"
     break;
 
   case 20: /* unary: exp_PLUS unary  */
-#line 161 "cmExprParser.y"
+#line 164 "cmExprParser.y"
                  {
     (yyval.Number) = + (yyvsp[0].Number);
   }
-#line 1589 "cmExprParser.cxx"
+#line 1592 "cmExprParser.cxx"
     break;
 
   case 21: /* unary: exp_MINUS unary  */
-#line 164 "cmExprParser.y"
+#line 167 "cmExprParser.y"
                   {
     (yyval.Number) = cmExpr_yyget_extra(yyscanner)
       ->Neg((yyvsp[0].Number));
   }
-#line 1598 "cmExprParser.cxx"
+#line 1601 "cmExprParser.cxx"
     break;
 
   case 22: /* unary: exp_NOT unary  */
-#line 168 "cmExprParser.y"
+#line 171 "cmExprParser.y"
                 {
     (yyval.Number) = ~ (yyvsp[0].Number);
   }
-#line 1606 "cmExprParser.cxx"
+#line 1609 "cmExprParser.cxx"
     break;
 
   case 23: /* factor: exp_NUMBER  */
-#line 173 "cmExprParser.y"
+#line 176 "cmExprParser.y"
              {
     (yyval.Number) = (yyvsp[0].Number);
   }
-#line 1614 "cmExprParser.cxx"
+#line 1617 "cmExprParser.cxx"
     break;
 
   case 24: /* factor: exp_OPENPARENT exp exp_CLOSEPARENT  */
-#line 176 "cmExprParser.y"
+#line 179 "cmExprParser.y"
                                      {
     (yyval.Number) = (yyvsp[-1].Number);
   }
-#line 1622 "cmExprParser.cxx"
+#line 1625 "cmExprParser.cxx"
     break;
 
 
-#line 1626 "cmExprParser.cxx"
+#line 1629 "cmExprParser.cxx"
 
       default: break;
     }
@@ -1846,7 +1849,7 @@
   return yyresult;
 }
 
-#line 181 "cmExprParser.y"
+#line 184 "cmExprParser.y"
 
 /* End of grammar */
 
diff --git a/Source/LexerParser/cmExprParser.y b/Source/LexerParser/cmExprParser.y
index edd3bc5..b4f7e60 100644
--- a/Source/LexerParser/cmExprParser.y
+++ b/Source/LexerParser/cmExprParser.y
@@ -37,6 +37,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
diff --git a/Source/LexerParser/cmFortranParser.cxx b/Source/LexerParser/cmFortranParser.cxx
index a43f4fc..5bc20b0 100644
--- a/Source/LexerParser/cmFortranParser.cxx
+++ b/Source/LexerParser/cmFortranParser.cxx
@@ -132,13 +132,16 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
 # endif
 #endif
 
-#line 142 "cmFortranParser.cxx"
+#line 145 "cmFortranParser.cxx"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -610,13 +613,13 @@
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   106,   106,   106,   109,   113,   118,   123,   129,   136,
-     141,   146,   150,   155,   167,   172,   177,   182,   187,   192,
-     197,   202,   207,   211,   215,   219,   223,   224,   229,   229,
-     229,   230,   230,   231,   231,   232,   232,   233,   233,   234,
-     234,   235,   235,   236,   236,   237,   237,   238,   238,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257
+       0,   109,   109,   109,   112,   116,   121,   126,   132,   139,
+     144,   149,   153,   158,   170,   175,   180,   185,   190,   195,
+     200,   205,   210,   214,   218,   222,   226,   227,   232,   232,
+     232,   233,   233,   234,   234,   235,   235,   236,   236,   237,
+     237,   238,   238,   239,   239,   240,   240,   241,   241,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260
 };
 #endif
 
@@ -1327,21 +1330,21 @@
   switch (yykind)
     {
     case YYSYMBOL_STRING: /* STRING  */
-#line 100 "cmFortranParser.y"
+#line 103 "cmFortranParser.y"
             { free(((*yyvaluep).string)); }
-#line 1333 "cmFortranParser.cxx"
+#line 1336 "cmFortranParser.cxx"
         break;
 
     case YYSYMBOL_WORD: /* WORD  */
-#line 100 "cmFortranParser.y"
+#line 103 "cmFortranParser.y"
             { free(((*yyvaluep).string)); }
-#line 1339 "cmFortranParser.cxx"
+#line 1342 "cmFortranParser.cxx"
         break;
 
     case YYSYMBOL_CPP_INCLUDE_ANGLE: /* CPP_INCLUDE_ANGLE  */
-#line 100 "cmFortranParser.y"
+#line 103 "cmFortranParser.y"
             { free(((*yyvaluep).string)); }
-#line 1345 "cmFortranParser.cxx"
+#line 1348 "cmFortranParser.cxx"
         break;
 
       default:
@@ -1618,47 +1621,47 @@
   switch (yyn)
     {
   case 4: /* stmt: INTERFACE EOSTMT  */
-#line 109 "cmFortranParser.y"
+#line 112 "cmFortranParser.y"
                    {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, true);
   }
-#line 1627 "cmFortranParser.cxx"
+#line 1630 "cmFortranParser.cxx"
     break;
 
   case 5: /* stmt: USE WORD other EOSTMT  */
-#line 113 "cmFortranParser.y"
+#line 116 "cmFortranParser.y"
                         {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleUse(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1637 "cmFortranParser.cxx"
+#line 1640 "cmFortranParser.cxx"
     break;
 
   case 6: /* stmt: MODULE WORD EOSTMT  */
-#line 118 "cmFortranParser.y"
+#line 121 "cmFortranParser.y"
                      {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleModule(parser, (yyvsp[-1].string));
     free((yyvsp[-1].string));
   }
-#line 1647 "cmFortranParser.cxx"
+#line 1650 "cmFortranParser.cxx"
     break;
 
   case 7: /* stmt: SUBMODULE LPAREN WORD RPAREN WORD EOSTMT  */
-#line 123 "cmFortranParser.y"
+#line 126 "cmFortranParser.y"
                                            {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleSubmodule(parser, (yyvsp[-3].string), (yyvsp[-1].string));
     free((yyvsp[-3].string));
     free((yyvsp[-1].string));
   }
-#line 1658 "cmFortranParser.cxx"
+#line 1661 "cmFortranParser.cxx"
     break;
 
   case 8: /* stmt: SUBMODULE LPAREN WORD COLON WORD RPAREN WORD EOSTMT  */
-#line 129 "cmFortranParser.y"
+#line 132 "cmFortranParser.y"
                                                       {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleSubmoduleNested(parser, (yyvsp[-5].string), (yyvsp[-3].string), (yyvsp[-1].string));
@@ -1666,50 +1669,50 @@
     free((yyvsp[-3].string));
     free((yyvsp[-1].string));
   }
-#line 1670 "cmFortranParser.cxx"
+#line 1673 "cmFortranParser.cxx"
     break;
 
   case 9: /* stmt: INTERFACE WORD EOSTMT  */
-#line 136 "cmFortranParser.y"
+#line 139 "cmFortranParser.y"
                         {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, true);
     free((yyvsp[-1].string));
   }
-#line 1680 "cmFortranParser.cxx"
+#line 1683 "cmFortranParser.cxx"
     break;
 
   case 10: /* stmt: END INTERFACE WORD EOSTMT  */
-#line 141 "cmFortranParser.y"
+#line 144 "cmFortranParser.y"
                             {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, false);
     free((yyvsp[-1].string));
   }
-#line 1690 "cmFortranParser.cxx"
+#line 1693 "cmFortranParser.cxx"
     break;
 
   case 11: /* stmt: END INTERFACE EOSTMT  */
-#line 146 "cmFortranParser.y"
+#line 149 "cmFortranParser.y"
                        {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_SetInInterface(parser, false);
   }
-#line 1699 "cmFortranParser.cxx"
+#line 1702 "cmFortranParser.cxx"
     break;
 
   case 12: /* stmt: USE DCOLON WORD other EOSTMT  */
-#line 150 "cmFortranParser.y"
+#line 153 "cmFortranParser.y"
                                {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleUse(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1709 "cmFortranParser.cxx"
+#line 1712 "cmFortranParser.cxx"
     break;
 
   case 13: /* stmt: USE COMMA WORD DCOLON WORD other EOSTMT  */
-#line 155 "cmFortranParser.y"
+#line 158 "cmFortranParser.y"
                                           {
     if (cmsysString_strcasecmp((yyvsp[-4].string), "non_intrinsic") == 0) {
       cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
@@ -1722,139 +1725,139 @@
     free((yyvsp[-4].string));
     free((yyvsp[-2].string));
   }
-#line 1726 "cmFortranParser.cxx"
+#line 1729 "cmFortranParser.cxx"
     break;
 
   case 14: /* stmt: INCLUDE STRING EOSTMT  */
-#line 167 "cmFortranParser.y"
+#line 170 "cmFortranParser.y"
                         {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleInclude(parser, (yyvsp[-1].string));
     free((yyvsp[-1].string));
   }
-#line 1736 "cmFortranParser.cxx"
+#line 1739 "cmFortranParser.cxx"
     break;
 
   case 15: /* stmt: CPP_LINE_DIRECTIVE STRING other EOSTMT  */
-#line 172 "cmFortranParser.y"
+#line 175 "cmFortranParser.y"
                                          {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleLineDirective(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1746 "cmFortranParser.cxx"
+#line 1749 "cmFortranParser.cxx"
     break;
 
   case 16: /* stmt: CPP_INCLUDE_ANGLE other EOSTMT  */
-#line 177 "cmFortranParser.y"
+#line 180 "cmFortranParser.y"
                                  {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleInclude(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1756 "cmFortranParser.cxx"
+#line 1759 "cmFortranParser.cxx"
     break;
 
   case 17: /* stmt: include STRING other EOSTMT  */
-#line 182 "cmFortranParser.y"
+#line 185 "cmFortranParser.y"
                               {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleInclude(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1766 "cmFortranParser.cxx"
+#line 1769 "cmFortranParser.cxx"
     break;
 
   case 18: /* stmt: define WORD other EOSTMT  */
-#line 187 "cmFortranParser.y"
+#line 190 "cmFortranParser.y"
                            {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleDefine(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1776 "cmFortranParser.cxx"
+#line 1779 "cmFortranParser.cxx"
     break;
 
   case 19: /* stmt: undef WORD other EOSTMT  */
-#line 192 "cmFortranParser.y"
+#line 195 "cmFortranParser.y"
                           {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleUndef(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1786 "cmFortranParser.cxx"
+#line 1789 "cmFortranParser.cxx"
     break;
 
   case 20: /* stmt: ifdef WORD other EOSTMT  */
-#line 197 "cmFortranParser.y"
+#line 200 "cmFortranParser.y"
                           {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleIfdef(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1796 "cmFortranParser.cxx"
+#line 1799 "cmFortranParser.cxx"
     break;
 
   case 21: /* stmt: ifndef WORD other EOSTMT  */
-#line 202 "cmFortranParser.y"
+#line 205 "cmFortranParser.y"
                            {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleIfndef(parser, (yyvsp[-2].string));
     free((yyvsp[-2].string));
   }
-#line 1806 "cmFortranParser.cxx"
+#line 1809 "cmFortranParser.cxx"
     break;
 
   case 22: /* stmt: if other EOSTMT  */
-#line 207 "cmFortranParser.y"
+#line 210 "cmFortranParser.y"
                   {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleIf(parser);
   }
-#line 1815 "cmFortranParser.cxx"
+#line 1818 "cmFortranParser.cxx"
     break;
 
   case 23: /* stmt: elif other EOSTMT  */
-#line 211 "cmFortranParser.y"
+#line 214 "cmFortranParser.y"
                     {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleElif(parser);
   }
-#line 1824 "cmFortranParser.cxx"
+#line 1827 "cmFortranParser.cxx"
     break;
 
   case 24: /* stmt: else other EOSTMT  */
-#line 215 "cmFortranParser.y"
+#line 218 "cmFortranParser.y"
                     {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleElse(parser);
   }
-#line 1833 "cmFortranParser.cxx"
+#line 1836 "cmFortranParser.cxx"
     break;
 
   case 25: /* stmt: endif other EOSTMT  */
-#line 219 "cmFortranParser.y"
+#line 222 "cmFortranParser.y"
                      {
     cmFortranParser* parser = cmFortran_yyget_extra(yyscanner);
     cmFortranParser_RuleEndif(parser);
   }
-#line 1842 "cmFortranParser.cxx"
+#line 1845 "cmFortranParser.cxx"
     break;
 
   case 49: /* misc_code: WORD  */
-#line 241 "cmFortranParser.y"
+#line 244 "cmFortranParser.y"
                       { free ((yyvsp[0].string)); }
-#line 1848 "cmFortranParser.cxx"
+#line 1851 "cmFortranParser.cxx"
     break;
 
   case 56: /* misc_code: STRING  */
-#line 248 "cmFortranParser.y"
+#line 251 "cmFortranParser.y"
                       { free ((yyvsp[0].string)); }
-#line 1854 "cmFortranParser.cxx"
+#line 1857 "cmFortranParser.cxx"
     break;
 
 
-#line 1858 "cmFortranParser.cxx"
+#line 1861 "cmFortranParser.cxx"
 
       default: break;
     }
@@ -2078,6 +2081,6 @@
   return yyresult;
 }
 
-#line 260 "cmFortranParser.y"
+#line 263 "cmFortranParser.y"
 
 /* End of grammar */
diff --git a/Source/LexerParser/cmFortranParser.y b/Source/LexerParser/cmFortranParser.y
index 431d6ab..77eaf75 100644
--- a/Source/LexerParser/cmFortranParser.y
+++ b/Source/LexerParser/cmFortranParser.y
@@ -57,6 +57,9 @@
 # pragma GCC diagnostic ignored "-Wconversion"
 # pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
+#if defined(__GNUC__) && __GNUC__ >= 16
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 #if defined(__clang__) && defined(__has_warning)
 # if __has_warning("-Wunused-but-set-variable")
 #  pragma clang diagnostic ignored "-Wunused-but-set-variable"
diff --git a/Source/LexerParser/cmFortranParserTokens.h b/Source/LexerParser/cmFortranParserTokens.h
index cb2b999..51b6a45 100644
--- a/Source/LexerParser/cmFortranParserTokens.h
+++ b/Source/LexerParser/cmFortranParserTokens.h
@@ -100,7 +100,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 76 "cmFortranParser.y"
+#line 79 "cmFortranParser.y"
 
   char* string;
 
diff --git a/Source/cmCMakePresetsErrors.cxx b/Source/cmCMakePresetsErrors.cxx
index 8f82e66..be3d193 100644
--- a/Source/cmCMakePresetsErrors.cxx
+++ b/Source/cmCMakePresetsErrors.cxx
@@ -80,9 +80,16 @@
   state->AddErrorAtValue("Invalid preset", value);
 }
 
-void INVALID_PRESET_NAMED(std::string const& presetName, cmJSONState* state)
+void INVALID_PRESET_NAMED(std::string const& presetName,
+                          std::string const& kind, cmJSONState* state,
+                          std::string const& detail)
 {
-  state->AddError(cmStrCat("Invalid preset: \"", presetName, '"'));
+  std::string err_msg =
+    cmStrCat("Invalid ", kind, " preset: \"", presetName, '"');
+  if (!detail.empty()) {
+    err_msg = cmStrCat(err_msg, ": ", detail);
+  }
+  state->AddError(err_msg);
 }
 
 void INVALID_VARIABLE(Json::Value const* value, cmJSONState* state)
@@ -97,17 +104,18 @@
 }
 
 void CYCLIC_PRESET_INHERITANCE(std::string const& presetName,
-                               cmJSONState* state)
+                               std::string const& kind, cmJSONState* state)
 
 {
-  state->AddError(
-    cmStrCat("Cyclic preset inheritance for preset \"", presetName, '"'));
+  state->AddError(cmStrCat("Cyclic preset inheritance for ", kind,
+                           " preset \"", presetName, '"'));
 }
 
 void INHERITED_PRESET_UNREACHABLE_FROM_FILE(std::string const& presetName,
+                                            std::string const& kind,
                                             cmJSONState* state)
 {
-  state->AddError(cmStrCat("Inherited preset \"", presetName,
+  state->AddError(cmStrCat("Inherited ", kind, " preset \"", presetName,
                            "\" is unreachable from preset's file"));
 }
 
diff --git a/Source/cmCMakePresetsErrors.h b/Source/cmCMakePresetsErrors.h
index a153d92..e8ca3e5 100644
--- a/Source/cmCMakePresetsErrors.h
+++ b/Source/cmCMakePresetsErrors.h
@@ -35,16 +35,19 @@
 
 void INVALID_PRESET(Json::Value const* value, cmJSONState* state);
 
-void INVALID_PRESET_NAMED(std::string const& presetName, cmJSONState* state);
+void INVALID_PRESET_NAMED(std::string const& presetName,
+                          std::string const& kind, cmJSONState* state,
+                          std::string const& detail);
 
 void INVALID_VARIABLE(Json::Value const* value, cmJSONState* state);
 
 void DUPLICATE_PRESETS(std::string const& presetName, cmJSONState* state);
 
 void CYCLIC_PRESET_INHERITANCE(std::string const& presetName,
-                               cmJSONState* state);
+                               std::string const& kind, cmJSONState* state);
 
 void INHERITED_PRESET_UNREACHABLE_FROM_FILE(std::string const& presetName,
+                                            std::string const& kind,
                                             cmJSONState* state);
 
 void CONFIGURE_PRESET_UNREACHABLE_FROM_FILE(std::string const& presetName,
diff --git a/Source/cmCMakePresetsGraph.cxx b/Source/cmCMakePresetsGraph.cxx
index 212a97b..98dc6c6 100644
--- a/Source/cmCMakePresetsGraph.cxx
+++ b/Source/cmCMakePresetsGraph.cxx
@@ -109,8 +109,8 @@
 {
   switch (cycleStatus[preset.Name]) {
     case CycleStatus::InProgress:
-      cmCMakePresetsErrors::CYCLIC_PRESET_INHERITANCE(preset.Name,
-                                                      &graph.parseState);
+      cmCMakePresetsErrors::CYCLIC_PRESET_INHERITANCE(
+        preset.Name, preset.kind(), &graph.parseState);
       return false;
     case CycleStatus::Verified:
       return true;
@@ -121,28 +121,32 @@
   cycleStatus[preset.Name] = CycleStatus::InProgress;
 
   if (preset.Environment.count("") != 0) {
-    cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name, &graph.parseState);
+    cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+      preset.Name, preset.kind(), &graph.parseState,
+      "Empty environment variable names are not allowed");
     return false;
   }
 
   bool result = preset.VisitPresetBeforeInherit();
   if (!result) {
-    cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name, &graph.parseState);
+    cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+      preset.Name, preset.kind(), &graph.parseState, preset.ErrorDetail);
     return false;
   }
 
   for (auto const& i : preset.Inherits) {
     auto parent = presets.find(i);
     if (parent == presets.end()) {
-      cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                 &graph.parseState);
+      cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+        preset.Name, preset.kind(), &graph.parseState,
+        cmStrCat("Could not find inherited preset \"", i, "\""));
       return false;
     }
 
     auto& parentPreset = parent->second.Unexpanded;
     if (!preset.OriginFile->ReachableFiles.count(parentPreset.OriginFile)) {
       cmCMakePresetsErrors::INHERITED_PRESET_UNREACHABLE_FROM_FILE(
-        preset.Name, &graph.parseState);
+        preset.Name, preset.kind(), &graph.parseState);
       return false;
     }
 
@@ -152,8 +156,8 @@
 
     result = preset.VisitPresetInherit(parentPreset);
     if (!result) {
-      cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                 &graph.parseState);
+      cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+        preset.Name, preset.kind(), &graph.parseState, preset.ErrorDetail);
       return false;
     }
 
@@ -171,7 +175,8 @@
   result = preset.VisitPresetAfterInherit(graph.GetVersion(preset),
                                           &graph.parseState);
   if (!result) {
-    cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name, &graph.parseState);
+    cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+      preset.Name, preset.kind(), &graph.parseState, preset.ErrorDetail);
     return false;
   }
 
@@ -453,8 +458,9 @@
       switch (VisitEnv(*v.second, envCycles[v.first], macroExpanders,
                        graph->GetVersion(preset))) {
         case ExpandMacroResult::Error:
-          cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                     &graph->parseState);
+          cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+            preset.Name, preset.kind(), &graph->parseState,
+            "Invalid macro expansion");
           return false;
         case ExpandMacroResult::Ignore:
           out.reset();
@@ -471,8 +477,8 @@
     cm::optional<bool> result;
     if (!preset.ConditionEvaluator->Evaluate(
           macroExpanders, graph->GetVersion(preset), result)) {
-      cmCMakePresetsErrors::INVALID_PRESET_NAMED(preset.Name,
-                                                 &graph->parseState);
+      cmCMakePresetsErrors::INVALID_PRESET_NAMED(
+        preset.Name, preset.kind(), &graph->parseState, "Invalid condition");
       return false;
     }
     if (!result) {
@@ -911,6 +917,8 @@
 {
   auto& preset = *this;
   if (preset.Environment.count("") != 0) {
+    this->ErrorDetail =
+      "Empty environment variable names are not allowed in configure presets";
     return false;
   }
 
@@ -945,6 +953,7 @@
     }
 
     if (preset.CacheVariables.count("") != 0) {
+      this->ErrorDetail = "Empty cache variable names are not allowed";
       return false;
     }
   }
@@ -977,7 +986,12 @@
 bool cmCMakePresetsGraph::BuildPreset::VisitPresetAfterInherit(
   int /* version */, cmJSONState* /*stat*/)
 {
-  return this->Hidden || !this->ConfigurePreset.empty();
+  if (!this->Hidden && this->ConfigurePreset.empty()) {
+    this->ErrorDetail = "Build presets must either be hidden or have an "
+                        "associated configure preset";
+    return false;
+  }
+  return true;
 }
 
 bool cmCMakePresetsGraph::TestPreset::VisitPresetInherit(
@@ -1087,7 +1101,12 @@
 bool cmCMakePresetsGraph::TestPreset::VisitPresetAfterInherit(
   int /* version */, cmJSONState* /*state*/)
 {
-  return this->Hidden || !this->ConfigurePreset.empty();
+  if (!this->Hidden && this->ConfigurePreset.empty()) {
+    this->ErrorDetail = "Test presets must either be hidden or have an "
+                        "associated configure preset";
+    return false;
+  }
+  return true;
 }
 
 bool cmCMakePresetsGraph::PackagePreset::VisitPresetInherit(
@@ -1116,7 +1135,12 @@
 bool cmCMakePresetsGraph::PackagePreset::VisitPresetAfterInherit(
   int /* version */, cmJSONState* /*state*/)
 {
-  return this->Hidden || !this->ConfigurePreset.empty();
+  if (!this->Hidden && this->ConfigurePreset.empty()) {
+    this->ErrorDetail = "Package presets must either be hidden or have an "
+                        "associated configure preset";
+    return false;
+  }
+  return true;
 }
 
 bool cmCMakePresetsGraph::WorkflowPreset::VisitPresetInherit(
diff --git a/Source/cmCMakePresetsGraph.h b/Source/cmCMakePresetsGraph.h
index 74063e4..f04dfdd 100644
--- a/Source/cmCMakePresetsGraph.h
+++ b/Source/cmCMakePresetsGraph.h
@@ -84,6 +84,8 @@
 
     std::map<std::string, cm::optional<std::string>> Environment;
 
+    std::string ErrorDetail;
+
     virtual bool VisitPresetInherit(Preset const& parent) = 0;
     virtual bool VisitPresetBeforeInherit() { return true; }
 
diff --git a/Source/cmDiagnostics.cxx b/Source/cmDiagnostics.cxx
index 60d3ec4..50d3c02 100644
--- a/Source/cmDiagnostics.cxx
+++ b/Source/cmDiagnostics.cxx
@@ -12,6 +12,28 @@
 #include "cmStringAlgorithms.h"
 
 namespace {
+
+#if __cplusplus >= 201703L
+constexpr unsigned validateDiagnosticsSubtree(unsigned parent, unsigned index)
+{
+  // Ensure that all diagnostics, starting from the specified index, have the
+  // specified parent as an ancestor. Return the first index that violates
+  // this condition.
+  while (index < cmDiagnostics::CategoryCount &&
+         cmDiagnostics::CategoryInfo[index].Parent == parent) {
+    unsigned const child = index;
+    // For each diagnostic, 'consume' its children (if any).
+    index = validateDiagnosticsSubtree(child, ++index);
+  }
+  return index;
+}
+
+static_assert(validateDiagnosticsSubtree(cmDiagnostics::CMD_NONE, 1) ==
+                cmDiagnostics::CategoryCount,
+              "Diagnostics are not properly ordered"
+              " (hint: LHS is the index of the first misordered diagnostic)");
+#endif
+
 cm::optional<cmDiagnosticCategory> stringToCategory(cm::string_view input)
 {
   using Map = std::map<cm::string_view, cmDiagnosticCategory>;
diff --git a/Source/cmDiagnostics.h b/Source/cmDiagnostics.h
index bad732b..84fe098 100644
--- a/Source/cmDiagnostics.h
+++ b/Source/cmDiagnostics.h
@@ -36,7 +36,7 @@
 #define CM_FOR_EACH_DIAGNOSTIC_CATEGORY(ACTION)                               \
   CM_FOR_EACH_DIAGNOSTIC_TABLE(ACTION, CM_SELECT_CATEGORY)
 
-/** \class cmDiagnostic
+/** \class cmDiagnostics
  * \brief Handles CMake diagnostic (warning) behavior
  *
  * See the cmake-diagnostics(7) manual for an overview of this class's purpose.
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index aeb68a3..9d8311d 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -63,8 +63,8 @@
                                                openmodeApp);
   } else {
     // Generate atomically and with copy-if-different.
-    std::unique_ptr<cmGeneratedFileStream> ap(
-      new cmGeneratedFileStream(this->MainImportFile, true));
+    auto ap =
+      cm::make_unique<cmGeneratedFileStream>(this->MainImportFile, true);
     ap->SetCopyIfDifferent(true);
     foutPtr = std::move(ap);
   }
diff --git a/Source/cmFastbuildNormalTargetGenerator.cxx b/Source/cmFastbuildNormalTargetGenerator.cxx
index 6aa2ee4..f450823 100644
--- a/Source/cmFastbuildNormalTargetGenerator.cxx
+++ b/Source/cmFastbuildNormalTargetGenerator.cxx
@@ -1141,10 +1141,16 @@
 std::string cmFastbuildNormalTargetGenerator::ComputeCodeCheckOptions(
   cmSourceFile const& srcFile)
 {
+  cmGeneratorFileSet const* fileSet =
+    this->GeneratorTarget->GetFileSetForSource(Config, &srcFile);
+  cmValue const fsSkipCodeCheckVal =
+    fileSet ? fileSet->GetProperty("SKIP_LINTING") : nullptr;
   cmValue const srcSkipCodeCheckVal = srcFile.GetProperty("SKIP_LINTING");
-  bool const skipCodeCheck = srcSkipCodeCheckVal.IsSet()
-    ? srcSkipCodeCheckVal.IsOn()
-    : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING");
+  bool const skipCodeCheck = fsSkipCodeCheckVal.IsSet()
+    ? fsSkipCodeCheckVal.IsOn()
+    : (srcSkipCodeCheckVal.IsSet()
+         ? srcSkipCodeCheckVal.IsOn()
+         : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING"));
 
   if (skipCodeCheck) {
     return {};
@@ -1413,8 +1419,8 @@
     useUnity = false;
   }
 
-  // List of sources isolated from the unity build if enabled.
-  std::set<std::string> isolatedFromUnity;
+  // List of sources excluded from the unity build if enabled.
+  std::set<std::string> excludedFromUnity;
 
   // Mapping from unity group (if any) to sources belonging to that group.
   std::map<std::string, std::vector<std::string>> sourcesWithGroups;
@@ -1425,10 +1431,10 @@
     std::string const pathToFile = srcFile.GetFullPath();
     bool fileUsesUnity = useUnity;
     if (useUnity) {
-      // Check if the source should be added to "UnityInputIsolatedFiles".
+      // Check if the source should be added to "UnityInputExcludedFiles".
       if (srcFile.GetPropertyAsBool(SKIP_UNITY_BUILD_INCLUSION)) {
         fileUsesUnity = false;
-        isolatedFromUnity.emplace(pathToFile);
+        excludedFromUnity.emplace(pathToFile);
       }
       std::string const perFileUnityGroup =
         srcFile.GetSafeProperty(UNITY_GROUP);
@@ -1567,27 +1573,27 @@
   }
   if (useUnity) {
     target.UnityNodes =
-      GenerateUnity(objects, isolatedFromUnity, sourcesWithGroups);
+      GenerateUnity(objects, excludedFromUnity, sourcesWithGroups);
   }
 }
 
 FastbuildUnityNode cmFastbuildNormalTargetGenerator::GetOneUnity(
-  std::set<std::string> const& isolatedFiles, std::vector<std::string>& files,
+  std::set<std::string> const& excludedFiles, std::vector<std::string>& files,
   int unitySize) const
 {
   FastbuildUnityNode result;
   for (auto iter = files.begin(); iter != files.end();) {
     std::string pathToFile = std::move(*iter);
     iter = files.erase(iter);
-    // This source must be isolated
-    if (isolatedFiles.find(pathToFile) != isolatedFiles.end()) {
+    // This source must be excluded from the generated unity file.
+    if (excludedFiles.find(pathToFile) != excludedFiles.end()) {
       result.UnityInputFiles.emplace_back(pathToFile);
-      result.UnityInputIsolatedFiles.emplace_back(std::move(pathToFile));
+      result.UnityInputExcludedFiles.emplace_back(std::move(pathToFile));
     } else {
       result.UnityInputFiles.emplace_back(std::move(pathToFile));
     }
     if (int(result.UnityInputFiles.size() -
-            result.UnityInputIsolatedFiles.size()) == unitySize) {
+            result.UnityInputExcludedFiles.size()) == unitySize) {
       break;
     }
   }
@@ -1617,7 +1623,7 @@
 std::vector<FastbuildUnityNode>
 cmFastbuildNormalTargetGenerator::GenerateUnity(
   std::vector<FastbuildObjectListNode>& objects,
-  std::set<std::string> const& isolatedSources,
+  std::set<std::string> const& excludedSources,
   std::map<std::string, std::vector<std::string>> const& sourcesWithGroups)
 {
   int const unitySize = GetUnityBatchSize();
@@ -1650,14 +1656,14 @@
     // General unity batching of the remaining (non-grouped) sources.
     while (!obj.CompilerInputFiles.empty()) {
       FastbuildUnityNode node =
-        GetOneUnity(isolatedSources, obj.CompilerInputFiles, unitySize);
+        GetOneUnity(excludedSources, obj.CompilerInputFiles, unitySize);
       node.Name = cmStrCat(this->GetName(), "_Unity_", ++unityNumber);
       node.UnityOutputPath = obj.CompilerOutputPath;
       node.UnityOutputPattern = cmStrCat(node.Name, ext);
 
-      // Unity group of size 1 doesn't make sense - just isolate the source.
+      // Unity group of size 1 doesn't make sense - just exclude the source.
       if (groupedNode.UnityInputFiles.size() == 1) {
-        node.UnityInputIsolatedFiles.emplace_back(
+        node.UnityInputExcludedFiles.emplace_back(
           groupedNode.UnityInputFiles[0]);
         node.UnityInputFiles.emplace_back(
           std::move(groupedNode.UnityInputFiles[0]));
diff --git a/Source/cmFastbuildNormalTargetGenerator.h b/Source/cmFastbuildNormalTargetGenerator.h
index 8a01f77..bc630b4 100644
--- a/Source/cmFastbuildNormalTargetGenerator.h
+++ b/Source/cmFastbuildNormalTargetGenerator.h
@@ -76,14 +76,14 @@
                                       std::string& args) const;
   void GenerateCudaDeviceLink(FastbuildTarget& target) const;
   void GenerateObjects(FastbuildTarget& target);
-  FastbuildUnityNode GetOneUnity(std::set<std::string> const& isolatedFiles,
+  FastbuildUnityNode GetOneUnity(std::set<std::string> const& excludedFiles,
                                  std::vector<std::string>& files,
                                  int unitySize) const;
 
   int GetUnityBatchSize() const;
   std::vector<FastbuildUnityNode> GenerateUnity(
     std::vector<FastbuildObjectListNode>& objects,
-    std::set<std::string> const& isolatedSources,
+    std::set<std::string> const& excludedSources,
     std::map<std::string, std::vector<std::string>> const& sourcesWithGroups);
   FastbuildUnityNode GenerateGroupedUnityNode(
     std::vector<std::string>& inputFiles,
diff --git a/Source/cmFileAPI.cxx b/Source/cmFileAPI.cxx
index be816d5..ff31855 100644
--- a/Source/cmFileAPI.cxx
+++ b/Source/cmFileAPI.cxx
@@ -823,7 +823,7 @@
 // Update the following files as well when updating this constant:
 //   Help/manual/cmake-file-api.7.rst
 //   Tests/RunCMake/FileAPI/codemodel-v2-check.py (check_objects())
-static unsigned int const CodeModelV2Minor = 10;
+static unsigned int const CodeModelV2Minor = 11;
 
 void cmFileAPI::BuildClientRequestCodeModel(
   ClientRequest& r, std::vector<RequestVersion> const& versions)
diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx
index 8b214b6..3627cb9 100644
--- a/Source/cmFileAPICodemodel.cxx
+++ b/Source/cmFileAPICodemodel.cxx
@@ -1495,6 +1495,9 @@
   cmGeneratorExpressionInterpreter genexInterpreter(lg, this->Config, this->GT,
                                                     fd.Language);
 
+  cmGeneratorFileSet const* fileSet =
+    GT->GetFileSetForSource(this->Config, sf);
+
   std::string const COMPILE_FLAGS("COMPILE_FLAGS");
   if (cmValue cflags = sf->GetProperty(COMPILE_FLAGS)) {
     std::string flags = genexInterpreter.Evaluate(*cflags, COMPILE_FLAGS);
@@ -1511,6 +1514,19 @@
     BT<std::string> opt(tmp, tmpOpt.Backtrace);
     fd.Flags.emplace_back(this->ToJBT(opt));
   }
+  // File set compile options, if any
+  if (fileSet) {
+    for (BT<std::string> const& tmpOpt : fileSet->BelongsTo(this->GT)
+           ? fileSet->GetCompileOptions(this->Config, fd.Language)
+           : fileSet->GetInterfaceCompileOptions(this->Config, fd.Language)) {
+      // We need to use the AppendCompileOptions method so we handle situations
+      // where backtrace entries have list and properly escape flags.
+      std::string tmp;
+      lg->AppendCompileOptions(tmp, tmpOpt.Value);
+      BT<std::string> opt(tmp, tmpOpt.Backtrace);
+      fd.Flags.emplace_back(this->ToJBT(opt));
+    }
+  }
 
   // Add precompile headers compile options.
   std::vector<std::string> pchArchs =
@@ -1548,9 +1564,31 @@
     fd.Flags.emplace_back(this->ToJBT(opt));
   }
 
+  std::string const INCLUDE_DIRECTORIES("INCLUDE_DIRECTORIES");
+  // Add include directories from file set properties.
+  if (fileSet) {
+    for (BT<std::string> const& tmpInclude : fileSet->BelongsTo(this->GT)
+           ? fileSet->GetIncludeDirectories(this->Config, fd.Language)
+           : fileSet->GetInterfaceIncludeDirectories(this->Config,
+                                                     fd.Language)) {
+      // We need to use the AppendIncludeDirectories method so we handle
+      // situations where backtrace entries have lists.
+      std::vector<std::string> tmp;
+      lg->AppendIncludeDirectories(tmp, tmpInclude.Value, *sf);
+      for (std::string& i : tmp) {
+        bool const isSystemInclude =
+          this->GT->IsSystemIncludeDirectory(i, this->Config, fd.Language);
+        BT<std::string> include(i, tmpInclude.Backtrace);
+        if (this->GT->IsApple() && cmSystemTools::IsPathToFramework(i)) {
+          fd.Frameworks.emplace_back(this->ToJBT(include), isSystemInclude);
+        } else {
+          fd.Includes.emplace_back(this->ToJBT(include), isSystemInclude);
+        }
+      }
+    }
+  }
   // Add include directories from source file properties.
   {
-    std::string const INCLUDE_DIRECTORIES("INCLUDE_DIRECTORIES");
     for (BT<std::string> tmpInclude : sf->GetIncludeDirectories()) {
       tmpInclude.Value =
         genexInterpreter.Evaluate(tmpInclude.Value, INCLUDE_DIRECTORIES);
@@ -1597,7 +1635,25 @@
       genexInterpreter.Evaluate(*config_defs, COMPILE_DEFINITIONS));
   }
 
-  fd.Defines.reserve(fileDefines.size() + configFileDefines.size());
+  std::set<BT<std::string>> fileSetDefines;
+  if (fileSet) {
+    for (BT<std::string> const& tmpDef : fileSet->BelongsTo(this->GT)
+           ? fileSet->GetCompileDefinitions(this->Config, fd.Language)
+           : fileSet->GetInterfaceCompileDefinitions(this->Config,
+                                                     fd.Language)) {
+      // We need to use the AppendDefines method so we handle situations where
+      // backtrace entries have lists.
+      std::set<std::string> tmp;
+      lg->AppendDefines(tmp, tmpDef.Value);
+      for (std::string const& i : tmp) {
+        BT<std::string> def(i, tmpDef.Backtrace);
+        fileSetDefines.insert(def);
+      }
+    }
+  }
+
+  fd.Defines.reserve(fileDefines.size() + configFileDefines.size() +
+                     fileSetDefines.size());
 
   for (BT<std::string> const& def : fileDefines) {
     fd.Defines.emplace_back(this->ToJBT(def));
@@ -1607,6 +1663,10 @@
     fd.Defines.emplace_back(d, JBTIndex());
   }
 
+  for (BT<std::string> const& def : fileSetDefines) {
+    fd.Defines.emplace_back(this->ToJBT(def));
+  }
+
   return fd;
 }
 
diff --git a/Source/cmGeneratorTarget_HeaderSetVerification.cxx b/Source/cmGeneratorTarget_HeaderSetVerification.cxx
index 57d82b2..a84ad97 100644
--- a/Source/cmGeneratorTarget_HeaderSetVerification.cxx
+++ b/Source/cmGeneratorTarget_HeaderSetVerification.cxx
@@ -89,8 +89,11 @@
     std::set<cmGeneratorFileSet const*> fileSets;
     for (auto const& fileSet : fileSetEntries) {
       if (all || verifySet.count(fileSet->GetName())) {
-        fileSets.insert(fileSet);
         verifySet.erase(fileSet->GetName());
+        if (fileSet->GetProperty("SKIP_LINTING").IsOn()) {
+          continue;
+        }
+        fileSets.insert(fileSet);
       }
     }
 
diff --git a/Source/cmGlobalFastbuildGenerator.cxx b/Source/cmGlobalFastbuildGenerator.cxx
index 9013c5e..e906e6f 100644
--- a/Source/cmGlobalFastbuildGenerator.cxx
+++ b/Source/cmGlobalFastbuildGenerator.cxx
@@ -1201,9 +1201,9 @@
     WriteVariable("UnityOutputPath", Quote(Unity.UnityOutputPath), 2);
     WriteVariable("UnityOutputPattern", Quote(Unity.UnityOutputPattern), 2);
     WriteArray("UnityInputFiles", Wrap(Unity.UnityInputFiles), 2);
-    if (!Unity.UnityInputIsolatedFiles.empty()) {
-      WriteArray("UnityInputIsolatedFiles",
-                 Wrap(Unity.UnityInputIsolatedFiles), 2);
+    if (!Unity.UnityInputExcludedFiles.empty()) {
+      WriteArray("UnityInputExcludedFiles",
+                 Wrap(Unity.UnityInputExcludedFiles), 2);
     }
     if (UsingRelativePaths) {
       WriteVariable("UseRelativePaths_Experimental", "true", 2);
diff --git a/Source/cmGlobalFastbuildGenerator.h b/Source/cmGlobalFastbuildGenerator.h
index f2aa938..07e8772 100644
--- a/Source/cmGlobalFastbuildGenerator.h
+++ b/Source/cmGlobalFastbuildGenerator.h
@@ -233,7 +233,7 @@
   std::string UnityOutputPath;
   std::vector<std::string> UnityInputFiles;
   std::string UnityOutputPattern;
-  std::vector<std::string> UnityInputIsolatedFiles;
+  std::vector<std::string> UnityInputExcludedFiles;
   FastbuildUnityNode()
     : FastbuildTargetBase(FastbuildTargetType::UNITY)
   {
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index 8137d69..5a3c72d 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -306,10 +306,10 @@
 
   std::string component = helper.DefaultComponentName;
   int componentCount = 0;
-  bool doing_script = false;
-  bool doing_code = false;
-  bool exclude_from_all = false;
-  bool all_components = false;
+  bool doingScript = false;
+  bool doingCode = false;
+  bool excludeFromAll = false;
+  bool allComponents = false;
 
   // Scan the args once for COMPONENT. Only allow one.
   //
@@ -320,9 +320,9 @@
       component = args[i];
     }
     if (args[i] == "EXCLUDE_FROM_ALL") {
-      exclude_from_all = true;
+      excludeFromAll = true;
     } else if (args[i] == "ALL_COMPONENTS") {
-      all_components = true;
+      allComponents = true;
     }
   }
 
@@ -333,7 +333,7 @@
     return false;
   }
 
-  if (all_components && componentCount == 1) {
+  if (allComponents && componentCount == 1) {
     status.SetError("ALL_COMPONENTS and COMPONENT are mutually exclusive");
     return false;
   }
@@ -343,16 +343,16 @@
   //
   for (std::string const& arg : args) {
     if (arg == "SCRIPT") {
-      doing_script = true;
-      doing_code = false;
+      doingScript = true;
+      doingCode = false;
     } else if (arg == "CODE") {
-      doing_script = false;
-      doing_code = true;
+      doingScript = false;
+      doingCode = true;
     } else if (arg == "COMPONENT") {
-      doing_script = false;
-      doing_code = false;
-    } else if (doing_script) {
-      doing_script = false;
+      doingScript = false;
+      doingCode = false;
+    } else if (doingScript) {
+      doingScript = false;
       std::string script = arg;
       if (!cmHasLiteralPrefix(script, "$<INSTALL_PREFIX>")) {
         if (!cmSystemTools::FileIsFullPath(script)) {
@@ -366,23 +366,23 @@
       }
       helper.Makefile->AddInstallGenerator(
         cm::make_unique<cmInstallScriptGenerator>(
-          script, false, component, exclude_from_all, all_components,
+          script, false, component, excludeFromAll, allComponents,
           helper.Makefile->GetBacktrace()));
-    } else if (doing_code) {
-      doing_code = false;
+    } else if (doingCode) {
+      doingCode = false;
       std::string const& code = arg;
       helper.Makefile->AddInstallGenerator(
         cm::make_unique<cmInstallScriptGenerator>(
-          code, true, component, exclude_from_all, all_components,
+          code, true, component, excludeFromAll, allComponents,
           helper.Makefile->GetBacktrace()));
     }
   }
 
-  if (doing_script) {
+  if (doingScript) {
     status.SetError("given no value for SCRIPT argument.");
     return false;
   }
-  if (doing_code) {
+  if (doingCode) {
     status.SetError("given no value for CODE argument.");
     return false;
   }
@@ -699,11 +699,11 @@
     cmTarget* target = helper.Makefile->FindLocalNonAliasTarget(tgt);
     if (!target) {
       // If no local target has been found, find it in the global scope.
-      cmTarget* const global_target =
+      cmTarget* const globalTarget =
         helper.Makefile->GetGlobalGenerator()->FindTarget(
           tgt, { cmStateEnums::TargetDomain::NATIVE });
-      if (global_target && !global_target->IsImported()) {
-        target = global_target;
+      if (globalTarget && !globalTarget->IsImported()) {
+        target = globalTarget;
       }
     }
     if (target) {
@@ -1364,11 +1364,11 @@
     cmTarget* target = helper.Makefile->FindTargetToUse(tgt);
     if (!target || !target->IsImported()) {
       // If no local target has been found, find it in the global scope.
-      cmTarget* const global_target =
+      cmTarget* const globalTarget =
         helper.Makefile->GetGlobalGenerator()->FindTarget(
           tgt, { cmStateEnums::TargetDomain::NATIVE });
-      if (global_target && global_target->IsImported()) {
-        target = global_target;
+      if (globalTarget && globalTarget->IsImported()) {
+        target = globalTarget;
       }
     }
     if (target) {
@@ -1634,21 +1634,21 @@
     DoingType
   };
   Doing doing = DoingDirs;
-  bool in_match_mode = false;
+  bool inMatchMode = false;
   bool optional = false;
-  bool exclude_from_all = false;
-  bool message_never = false;
+  bool excludeFromAll = false;
+  bool messageNever = false;
   std::vector<std::string> dirs;
   cm::optional<std::string> destination;
-  std::string permissions_file;
-  std::string permissions_dir;
+  std::string permissionsFile;
+  std::string permissionsDir;
   std::vector<std::string> configurations;
   std::string component = helper.DefaultComponentName;
-  std::string literal_args;
+  std::string literalArgs;
   std::string type;
   for (unsigned int i = 1; i < args.size(); ++i) {
     if (args[i] == "DESTINATION") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
@@ -1657,7 +1657,7 @@
       // Switch to setting the destination property.
       doing = DoingDestination;
     } else if (args[i] == "TYPE") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
@@ -1666,7 +1666,7 @@
       // Switch to setting the type.
       doing = DoingType;
     } else if (args[i] == "OPTIONAL") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
@@ -1676,44 +1676,44 @@
       optional = true;
       doing = DoingNone;
     } else if (args[i] == "MESSAGE_NEVER") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
       }
 
       // Mark the rule as quiet.
-      message_never = true;
+      messageNever = true;
       doing = DoingNone;
     } else if (args[i] == "PATTERN") {
       // Switch to a new pattern match rule.
       doing = DoingPattern;
-      in_match_mode = true;
+      inMatchMode = true;
     } else if (args[i] == "REGEX") {
       // Switch to a new regex match rule.
       doing = DoingRegex;
-      in_match_mode = true;
+      inMatchMode = true;
     } else if (args[i] == "EXCLUDE") {
       // Add this property to the current match rule.
-      if (!in_match_mode || doing == DoingPattern || doing == DoingRegex) {
+      if (!inMatchMode || doing == DoingPattern || doing == DoingRegex) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" before a PATTERN or REGEX is given."));
         return false;
       }
-      literal_args += " EXCLUDE";
+      literalArgs += " EXCLUDE";
       doing = DoingNone;
     } else if (args[i] == "PERMISSIONS") {
-      if (!in_match_mode) {
+      if (!inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" before a PATTERN or REGEX is given."));
         return false;
       }
 
       // Switch to setting the current match permissions property.
-      literal_args += " PERMISSIONS";
+      literalArgs += " PERMISSIONS";
       doing = DoingPermsMatch;
     } else if (args[i] == "FILE_PERMISSIONS") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
@@ -1722,7 +1722,7 @@
       // Switch to setting the file permissions property.
       doing = DoingPermsFile;
     } else if (args[i] == "DIRECTORY_PERMISSIONS") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
@@ -1731,27 +1731,27 @@
       // Switch to setting the directory permissions property.
       doing = DoingPermsDir;
     } else if (args[i] == "USE_SOURCE_PERMISSIONS") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
       }
 
       // Add this option literally.
-      literal_args += " USE_SOURCE_PERMISSIONS";
+      literalArgs += " USE_SOURCE_PERMISSIONS";
       doing = DoingNone;
     } else if (args[i] == "FILES_MATCHING") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
       }
 
       // Add this option literally.
-      literal_args += " FILES_MATCHING";
+      literalArgs += " FILES_MATCHING";
       doing = DoingNone;
     } else if (args[i] == "CONFIGURATIONS") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
@@ -1760,7 +1760,7 @@
       // Switch to setting the configurations property.
       doing = DoingConfigurations;
     } else if (args[i] == "COMPONENT") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
@@ -1769,12 +1769,12 @@
       // Switch to setting the component property.
       doing = DoingComponent;
     } else if (args[i] == "EXCLUDE_FROM_ALL") {
-      if (in_match_mode) {
+      if (inMatchMode) {
         status.SetError(cmStrCat(args[0], " does not allow \"", args[i],
                                  "\" after PATTERN or REGEX."));
         return false;
       }
-      exclude_from_all = true;
+      excludeFromAll = true;
       doing = DoingNone;
     } else if (doing == DoingDirs) {
       // If the given directory is not a full path, convert it to one by
@@ -1833,14 +1833,14 @@
       // leading slash and trailing end-of-string in the matched
       // string to make sure the pattern matches only whole file
       // names.
-      literal_args += " REGEX \"/";
+      literalArgs += " REGEX \"/";
       std::string regex = cmsys::Glob::PatternToRegex(args[i], false);
       cmSystemTools::ReplaceString(regex, "\\", "\\\\");
-      literal_args += regex;
-      literal_args += "$\"";
+      literalArgs += regex;
+      literalArgs += "$\"";
       doing = DoingNone;
     } else if (doing == DoingRegex) {
-      literal_args += " REGEX \"";
+      literalArgs += " REGEX \"";
 // Match rules are case-insensitive on some platforms.
 #if defined(_WIN32) || defined(__APPLE__)
       std::string regex = cmSystemTools::LowerCase(args[i]);
@@ -1848,8 +1848,8 @@
       std::string regex = args[i];
 #endif
       cmSystemTools::ReplaceString(regex, "\\", "\\\\");
-      literal_args += regex;
-      literal_args += "\"";
+      literalArgs += regex;
+      literalArgs += "\"";
       doing = DoingNone;
     } else if (doing == DoingComponent) {
       component = args[i];
@@ -1857,7 +1857,7 @@
     } else if (doing == DoingPermsFile) {
       // Check the requested permission.
       if (!cmInstallCommandArguments::CheckPermissions(args[i],
-                                                       permissions_file)) {
+                                                       permissionsFile)) {
         status.SetError(cmStrCat(args[0], " given invalid file permission \"",
                                  args[i], "\"."));
         return false;
@@ -1865,15 +1865,14 @@
     } else if (doing == DoingPermsDir) {
       // Check the requested permission.
       if (!cmInstallCommandArguments::CheckPermissions(args[i],
-                                                       permissions_dir)) {
+                                                       permissionsDir)) {
         status.SetError(cmStrCat(
           args[0], " given invalid directory permission \"", args[i], "\"."));
         return false;
       }
     } else if (doing == DoingPermsMatch) {
       // Check the requested permission.
-      if (!cmInstallCommandArguments::CheckPermissions(args[i],
-                                                       literal_args)) {
+      if (!cmInstallCommandArguments::CheckPermissions(args[i], literalArgs)) {
         status.SetError(
           cmStrCat(args[0], " given invalid permission \"", args[i], "\"."));
         return false;
@@ -1910,7 +1909,7 @@
   }
 
   cmInstallGenerator::MessageLevel message =
-    cmInstallGenerator::SelectMessageLevel(helper.Makefile, message_never);
+    cmInstallGenerator::SelectMessageLevel(helper.Makefile, messageNever);
 
   // Check for an absolute destination.
   if (cmGeneratorExpression::Find(*destination) == std::string::npos &&
@@ -1924,8 +1923,8 @@
   // Create the directory install generator.
   helper.Makefile->AddInstallGenerator(
     cm::make_unique<cmInstallDirectoryGenerator>(
-      dirs, *destination, permissions_file, permissions_dir, configurations,
-      component, message, exclude_from_all, literal_args, optional,
+      dirs, *destination, permissionsFile, permissionsDir, configurations,
+      component, message, excludeFromAll, literalArgs, optional,
       helper.Makefile->GetBacktrace()));
 
   // Tell the global generator about any installation component names
@@ -1945,12 +1944,12 @@
   cmInstallCommandArguments ica(helper.DefaultComponentName, *helper.Makefile);
 
   std::string exp;
-  std::string name_space;
+  std::string exportNamespace;
   bool exportOld = false;
   std::string filename;
 
   ica.Bind("EXPORT_ANDROID_MK"_s, exp);
-  ica.Bind("NAMESPACE"_s, name_space);
+  ica.Bind("NAMESPACE"_s, exportNamespace);
   ica.Bind("EXPORT_LINK_INTERFACE_LIBRARIES"_s, exportOld);
   ica.Bind("FILE"_s, filename);
 
@@ -2022,7 +2021,7 @@
     cm::make_unique<cmInstallAndroidMKExportGenerator>(
       &exportSet, ica.GetDestination(), ica.GetPermissions(),
       ica.GetConfigurations(), ica.GetComponent(), message,
-      ica.GetExcludeFromAll(), std::move(fname), std::move(name_space),
+      ica.GetExcludeFromAll(), std::move(fname), std::move(exportNamespace),
       helper.Makefile->GetBacktrace()));
 
   return true;
@@ -2188,17 +2187,17 @@
   cmInstallCommandArguments ica(helper.DefaultComponentName, *helper.Makefile);
 
   std::string exp;
-  std::string name_space;
+  std::string exportNamespace;
   bool exportOld = false;
   std::string filename;
-  std::string cxx_modules_directory;
+  std::string cxxModulesDirectory;
   bool exportPackageDependencies = false;
 
   ica.Bind("EXPORT"_s, exp);
-  ica.Bind("NAMESPACE"_s, name_space);
+  ica.Bind("NAMESPACE"_s, exportNamespace);
   ica.Bind("EXPORT_LINK_INTERFACE_LIBRARIES"_s, exportOld);
   ica.Bind("FILE"_s, filename);
-  ica.Bind("CXX_MODULES_DIRECTORY"_s, cxx_modules_directory);
+  ica.Bind("CXX_MODULES_DIRECTORY"_s, cxxModulesDirectory);
 
   if (cmExperimental::HasSupportEnabled(
         status.GetMakefile(),
@@ -2288,8 +2287,7 @@
         cm::optional<cm::string_view> const directive = MatchExport(pie, exp);
         if (directive) {
           if (!HandleMappedPackageInfo(exportSet, *directive, helper, ica,
-                                       status, message,
-                                       cxx_modules_directory)) {
+                                       status, message, cxxModulesDirectory)) {
             return false;
           }
         }
@@ -2303,8 +2301,8 @@
     cm::make_unique<cmInstallCMakeConfigExportGenerator>(
       &exportSet, ica.GetDestination(), ica.GetPermissions(),
       ica.GetConfigurations(), ica.GetComponent(), message,
-      ica.GetExcludeFromAll(), std::move(fname), std::move(name_space),
-      std::move(cxx_modules_directory), exportOld, exportPackageDependencies,
+      ica.GetExcludeFromAll(), std::move(fname), std::move(exportNamespace),
+      std::move(cxxModulesDirectory), exportOld, exportPackageDependencies,
       helper.Makefile->GetBacktrace()));
 
   return true;
diff --git a/Source/cmInstallCxxModuleBmiGenerator.cxx b/Source/cmInstallCxxModuleBmiGenerator.cxx
index 66f39a4..99e32cb 100644
--- a/Source/cmInstallCxxModuleBmiGenerator.cxx
+++ b/Source/cmInstallCxxModuleBmiGenerator.cxx
@@ -14,14 +14,14 @@
 #include "cmStringAlgorithms.h"
 
 cmInstallCxxModuleBmiGenerator::cmInstallCxxModuleBmiGenerator(
-  std::string target, std::string const& dest, std::string file_permissions,
+  std::string target, std::string const& dest, std::string filePermissions,
   std::vector<std::string> const& configurations, std::string const& component,
-  MessageLevel message, bool exclude_from_all, bool optional,
+  MessageLevel message, bool excludeFromAll, bool optional,
   cmListFileBacktrace backtrace)
   : cmInstallGenerator(dest, configurations, component, message,
-                       exclude_from_all, false, std::move(backtrace))
+                       excludeFromAll, false, std::move(backtrace))
   , TargetName(std::move(target))
-  , FilePermissions(std::move(file_permissions))
+  , FilePermissions(std::move(filePermissions))
   , Optional(optional)
 {
   this->ActionsPerConfig = true;
@@ -46,12 +46,12 @@
 std::string cmInstallCxxModuleBmiGenerator::GetScriptLocation(
   std::string const& config) const
 {
-  char const* config_name = config.c_str();
+  char const* configName = config.c_str();
   if (config.empty()) {
-    config_name = "noconfig";
+    configName = "noconfig";
   }
   return cmStrCat(this->Target->GetCMFSupportDirectory(),
-                  "/install-cxx-module-bmi-", config_name, ".cmake");
+                  "/install-cxx-module-bmi-", configName, ".cmake");
 }
 
 std::string cmInstallCxxModuleBmiGenerator::GetDestination(
diff --git a/Source/cmInstallCxxModuleBmiGenerator.h b/Source/cmInstallCxxModuleBmiGenerator.h
index b3b5d37..28ed2b5 100644
--- a/Source/cmInstallCxxModuleBmiGenerator.h
+++ b/Source/cmInstallCxxModuleBmiGenerator.h
@@ -21,9 +21,9 @@
 {
 public:
   cmInstallCxxModuleBmiGenerator(
-    std::string target, std::string const& dest, std::string file_permissions,
+    std::string target, std::string const& dest, std::string filePermissions,
     std::vector<std::string> const& configurations,
-    std::string const& component, MessageLevel message, bool exclude_from_all,
+    std::string const& component, MessageLevel message, bool excludeFromAll,
     bool optional, cmListFileBacktrace backtrace);
   ~cmInstallCxxModuleBmiGenerator() override;
 
diff --git a/Source/cmInstallDirectoryGenerator.cxx b/Source/cmInstallDirectoryGenerator.cxx
index bd62dd3..96d32ba 100644
--- a/Source/cmInstallDirectoryGenerator.cxx
+++ b/Source/cmInstallDirectoryGenerator.cxx
@@ -16,16 +16,16 @@
 
 cmInstallDirectoryGenerator::cmInstallDirectoryGenerator(
   std::vector<std::string> const& dirs, std::string const& dest,
-  std::string file_permissions, std::string dir_permissions,
+  std::string filePermissions, std::string dirPermissions,
   std::vector<std::string> const& configurations, std::string const& component,
-  MessageLevel message, bool exclude_from_all, std::string literal_args,
+  MessageLevel message, bool excludeFromAll, std::string literalArgs,
   bool optional, cmListFileBacktrace backtrace)
   : cmInstallGenerator(dest, configurations, component, message,
-                       exclude_from_all, false, std::move(backtrace))
+                       excludeFromAll, false, std::move(backtrace))
   , Directories(dirs)
-  , FilePermissions(std::move(file_permissions))
-  , DirPermissions(std::move(dir_permissions))
-  , LiteralArguments(std::move(literal_args))
+  , FilePermissions(std::move(filePermissions))
+  , DirPermissions(std::move(dirPermissions))
+  , LiteralArguments(std::move(literalArgs))
   , Optional(optional)
 {
   // We need per-config actions if destination have generator expressions.
@@ -107,11 +107,11 @@
   std::vector<std::string> const& dirs)
 {
   // Write code to install the directories.
-  char const* no_rename = nullptr;
+  char const* noRename = nullptr;
   this->AddInstallRule(os, this->GetDestination(config),
                        cmInstallType_DIRECTORY, dirs, this->Optional,
                        this->FilePermissions.c_str(),
-                       this->DirPermissions.c_str(), no_rename,
+                       this->DirPermissions.c_str(), noRename,
                        this->LiteralArguments.c_str(), indent);
 }
 
diff --git a/Source/cmInstallDirectoryGenerator.h b/Source/cmInstallDirectoryGenerator.h
index b02824a..d228f9b 100644
--- a/Source/cmInstallDirectoryGenerator.h
+++ b/Source/cmInstallDirectoryGenerator.h
@@ -21,10 +21,10 @@
 public:
   cmInstallDirectoryGenerator(
     std::vector<std::string> const& dirs, std::string const& dest,
-    std::string file_permissions, std::string dir_permissions,
+    std::string filePermissions, std::string dirPermissions,
     std::vector<std::string> const& configurations,
-    std::string const& component, MessageLevel message, bool exclude_from_all,
-    std::string literal_args, bool optional, cmListFileBacktrace backtrace);
+    std::string const& component, MessageLevel message, bool excludeFromAll,
+    std::string literalArgs, bool optional, cmListFileBacktrace backtrace);
   ~cmInstallDirectoryGenerator() override;
 
   bool Compute(cmLocalGenerator* lg) override;
diff --git a/Source/cmInstallExportGenerator.cxx b/Source/cmInstallExportGenerator.cxx
index 8886439..7f2474d 100644
--- a/Source/cmInstallExportGenerator.cxx
+++ b/Source/cmInstallExportGenerator.cxx
@@ -122,8 +122,8 @@
   std::vector<std::string> files;
   for (auto const& i : this->EFGen->GetConfigImportFiles()) {
     files.push_back(i.second);
-    std::string config_test = this->CreateConfigTest(i.first);
-    os << indent << "if(" << config_test << ")\n";
+    std::string configTest = this->CreateConfigTest(i.first);
+    os << indent << "if(" << configTest << ")\n";
     this->AddInstallRule(os, this->Destination, cmInstallType_FILES, files,
                          false, this->FilePermissions.c_str(), nullptr,
                          nullptr, nullptr, indent.Next());
@@ -182,8 +182,8 @@
   }
   for (auto const& i : this->EFGen->GetConfigCxxModuleFiles()) {
     files.push_back(i.second);
-    std::string config_test = this->CreateConfigTest(i.first);
-    os << indent << "if(" << config_test << ")\n";
+    std::string configTest = this->CreateConfigTest(i.first);
+    os << indent << "if(" << configTest << ")\n";
     this->AddInstallRule(os, cxxModuleDestination, cmInstallType_FILES, files,
                          false, this->FilePermissions.c_str(), nullptr,
                          nullptr, nullptr, indent.Next());
@@ -191,8 +191,8 @@
     files.clear();
   }
   for (auto const& i : this->EFGen->GetConfigCxxModuleTargetFiles()) {
-    std::string config_test = this->CreateConfigTest(i.first);
-    os << indent << "if(" << config_test << ")\n";
+    std::string configTest = this->CreateConfigTest(i.first);
+    os << indent << "if(" << configTest << ")\n";
     this->AddInstallRule(os, cxxModuleDestination, cmInstallType_FILES,
                          i.second, false, this->FilePermissions.c_str(),
                          nullptr, nullptr, nullptr, indent.Next());
diff --git a/Source/cmInstallFileSetGenerator.cxx b/Source/cmInstallFileSetGenerator.cxx
index e6e9f03..60bacc9 100644
--- a/Source/cmInstallFileSetGenerator.cxx
+++ b/Source/cmInstallFileSetGenerator.cxx
@@ -29,14 +29,14 @@
 
 cmInstallFileSetGenerator::cmInstallFileSetGenerator(
   std::string targetName, std::string fileSetName, std::string destination,
-  std::string file_permissions, std::vector<std::string> const& configurations,
-  std::string const& component, MessageLevel message, bool exclude_from_all,
+  std::string filePermissions, std::vector<std::string> const& configurations,
+  std::string const& component, MessageLevel message, bool excludeFromAll,
   bool optional, cmListFileBacktrace backtrace)
   : cmInstallGenerator(std::move(destination), configurations, component,
-                       message, exclude_from_all, false, std::move(backtrace))
+                       message, excludeFromAll, false, std::move(backtrace))
   , TargetName(std::move(targetName))
   , FileSetName(std::move(fileSetName))
-  , FilePermissions(std::move(file_permissions))
+  , FilePermissions(std::move(filePermissions))
   , Optional(optional)
 {
   this->ActionsPerConfig = true;
diff --git a/Source/cmInstallFileSetGenerator.h b/Source/cmInstallFileSetGenerator.h
index b0488fb..8586692 100644
--- a/Source/cmInstallFileSetGenerator.h
+++ b/Source/cmInstallFileSetGenerator.h
@@ -20,10 +20,10 @@
 public:
   cmInstallFileSetGenerator(std::string targetName, std::string fileSetName,
                             std::string destination,
-                            std::string file_permissions,
+                            std::string filePermissions,
                             std::vector<std::string> const& configurations,
                             std::string const& component, MessageLevel message,
-                            bool exclude_from_all, bool optional,
+                            bool excludeFromAll, bool optional,
                             cmListFileBacktrace backtrace);
   ~cmInstallFileSetGenerator() override;
 
diff --git a/Source/cmInstallFilesGenerator.cxx b/Source/cmInstallFilesGenerator.cxx
index f5613fa..bc9517a 100644
--- a/Source/cmInstallFilesGenerator.cxx
+++ b/Source/cmInstallFilesGenerator.cxx
@@ -11,14 +11,14 @@
 
 cmInstallFilesGenerator::cmInstallFilesGenerator(
   std::vector<std::string> const& files, std::string const& dest,
-  bool programs, std::string file_permissions,
+  bool programs, std::string filePermissions,
   std::vector<std::string> const& configurations, std::string const& component,
-  MessageLevel message, bool exclude_from_all, std::string rename,
-  bool optional, cmListFileBacktrace backtrace)
+  MessageLevel message, bool excludeFromAll, std::string rename, bool optional,
+  cmListFileBacktrace backtrace)
   : cmInstallGenerator(dest, configurations, component, message,
-                       exclude_from_all, false, std::move(backtrace))
+                       excludeFromAll, false, std::move(backtrace))
   , Files(files)
-  , FilePermissions(std::move(file_permissions))
+  , FilePermissions(std::move(filePermissions))
   , Rename(std::move(rename))
   , Programs(programs)
   , Optional(optional)
@@ -86,11 +86,11 @@
   std::vector<std::string> const& files)
 {
   // Write code to install the files.
-  char const* no_dir_permissions = nullptr;
+  char const* noDirPermissions = nullptr;
   this->AddInstallRule(
     os, this->GetDestination(config),
     (this->Programs ? cmInstallType_PROGRAMS : cmInstallType_FILES), files,
-    this->Optional, this->FilePermissions.c_str(), no_dir_permissions,
+    this->Optional, this->FilePermissions.c_str(), noDirPermissions,
     this->GetRename(config).c_str(), nullptr, indent);
 }
 
diff --git a/Source/cmInstallFilesGenerator.h b/Source/cmInstallFilesGenerator.h
index 5ab2f50..c8f4842 100644
--- a/Source/cmInstallFilesGenerator.h
+++ b/Source/cmInstallFilesGenerator.h
@@ -21,10 +21,10 @@
 public:
   cmInstallFilesGenerator(std::vector<std::string> const& files,
                           std::string const& dest, bool programs,
-                          std::string file_permissions,
+                          std::string filePermissions,
                           std::vector<std::string> const& configurations,
                           std::string const& component, MessageLevel message,
-                          bool exclude_from_all, std::string rename,
+                          bool excludeFromAll, std::string rename,
                           bool optional, cmListFileBacktrace backtrace);
   ~cmInstallFilesGenerator() override;
 
diff --git a/Source/cmInstallGenerator.cxx b/Source/cmInstallGenerator.cxx
index 9317f94..585bf80 100644
--- a/Source/cmInstallGenerator.cxx
+++ b/Source/cmInstallGenerator.cxx
@@ -16,14 +16,14 @@
 
 cmInstallGenerator::cmInstallGenerator(
   std::string destination, std::vector<std::string> const& configurations,
-  std::string component, MessageLevel message, bool exclude_from_all,
-  bool all_components, cmListFileBacktrace backtrace)
+  std::string component, MessageLevel message, bool excludeFromAll,
+  bool allComponents, cmListFileBacktrace backtrace)
   : cmScriptGenerator("CMAKE_INSTALL_CONFIG_NAME", configurations)
   , Destination(std::move(destination))
   , Component(std::move(component))
   , Message(message)
-  , ExcludeFromAll(exclude_from_all)
-  , AllComponents(all_components)
+  , ExcludeFromAll(excludeFromAll)
+  , AllComponents(allComponents)
   , Backtrace(std::move(backtrace))
 {
 }
@@ -46,10 +46,10 @@
 void cmInstallGenerator::AddInstallRule(
   std::ostream& os, std::string const& dest, cmInstallType type,
   std::vector<std::string> const& files, bool optional /* = false */,
-  char const* permissions_file /* = nullptr */,
-  char const* permissions_dir /* = nullptr */,
-  char const* rename /* = nullptr */, char const* literal_args /* = nullptr */,
-  Indent indent, char const* files_var /* = nullptr */)
+  char const* permissionsFile /* = nullptr */,
+  char const* permissionsDir /* = nullptr */,
+  char const* rename /* = nullptr */, char const* literalArgs /* = nullptr */,
+  Indent indent, char const* filesVar /* = nullptr */)
 {
   // Use the FILE command to install the file.
   std::string stype;
@@ -95,9 +95,8 @@
       }
       os << "\")\n";
     }
-    if (files_var) {
-      os << indent << "foreach(_cmake_abs_file IN LISTS " << files_var
-         << ")\n";
+    if (filesVar) {
+      os << indent << "foreach(_cmake_abs_file IN LISTS " << filesVar << ")\n";
       os << indent.Next()
          << "get_filename_component(_cmake_abs_file_name "
             "\"${_cmake_abs_file}\" NAME)\n";
@@ -139,11 +138,11 @@
       os << " MESSAGE_NEVER";
       break;
   }
-  if (permissions_file && *permissions_file) {
-    os << " PERMISSIONS" << permissions_file;
+  if (permissionsFile && *permissionsFile) {
+    os << " PERMISSIONS" << permissionsFile;
   }
-  if (permissions_dir && *permissions_dir) {
-    os << " DIR_PERMISSIONS" << permissions_dir;
+  if (permissionsDir && *permissionsDir) {
+    os << " DIR_PERMISSIONS" << permissionsDir;
   }
   if (rename && *rename) {
     os << " RENAME \"" << rename << "\"";
@@ -155,25 +154,25 @@
     for (std::string const& f : files) {
       os << "\n" << indent << "  \"" << f << "\"";
     }
-    if (files_var) {
-      os << " ${" << files_var << "}";
+    if (filesVar) {
+      os << " ${" << filesVar << "}";
     }
     os << "\n" << indent << " ";
-    if (!(literal_args && *literal_args)) {
+    if (!(literalArgs && *literalArgs)) {
       os << " ";
     }
   }
-  if (literal_args && *literal_args) {
-    os << literal_args;
+  if (literalArgs && *literalArgs) {
+    os << literalArgs;
   }
   os << ")\n";
 }
 
 std::string cmInstallGenerator::CreateComponentTest(
-  std::string const& component, bool exclude_from_all, bool all_components)
+  std::string const& component, bool excludeFromAll, bool allComponents)
 {
-  if (all_components) {
-    if (exclude_from_all) {
+  if (allComponents) {
+    if (excludeFromAll) {
       return "CMAKE_INSTALL_COMPONENT";
     }
     return {};
@@ -182,7 +181,7 @@
   std::string result = "CMAKE_INSTALL_COMPONENT STREQUAL \"";
   result += component;
   result += "\"";
-  if (!exclude_from_all) {
+  if (!excludeFromAll) {
     result += " OR NOT CMAKE_INSTALL_COMPONENT";
   }
 
@@ -194,12 +193,12 @@
   // Track indentation.
   Indent indent;
 
-  std::string component_test = this->CreateComponentTest(
+  std::string componentTest = this->CreateComponentTest(
     this->Component, this->ExcludeFromAll, this->AllComponents);
 
   // Begin this block of installation.
-  if (!component_test.empty()) {
-    os << indent << "if(" << component_test << ")\n";
+  if (!componentTest.empty()) {
+    os << indent << "if(" << componentTest << ")\n";
   }
 
   // Generate the script possibly with per-configuration code.
@@ -207,7 +206,7 @@
                               this->AllComponents ? indent : indent.Next());
 
   // End this block of installation.
-  if (!component_test.empty()) {
+  if (!componentTest.empty()) {
     os << indent << "endif()\n\n";
   }
 }
diff --git a/Source/cmInstallGenerator.h b/Source/cmInstallGenerator.h
index d35a4b6..9a4b68b 100644
--- a/Source/cmInstallGenerator.h
+++ b/Source/cmInstallGenerator.h
@@ -34,7 +34,7 @@
   cmInstallGenerator(std::string destination,
                      std::vector<std::string> const& configurations,
                      std::string component, MessageLevel message,
-                     bool exclude_from_all, bool all_components,
+                     bool excludeFromAll, bool allComponents,
                      cmListFileBacktrace backtrace);
   ~cmInstallGenerator() override;
 
@@ -48,10 +48,10 @@
   void AddInstallRule(
     std::ostream& os, std::string const& dest, cmInstallType type,
     std::vector<std::string> const& files, bool optional = false,
-    char const* permissions_file = nullptr,
-    char const* permissions_dir = nullptr, char const* rename = nullptr,
-    char const* literal_args = nullptr, Indent indent = Indent(),
-    char const* files_var = nullptr);
+    char const* permissionsFile = nullptr,
+    char const* permissionsDir = nullptr, char const* rename = nullptr,
+    char const* literalArgs = nullptr, Indent indent = Indent(),
+    char const* filesVar = nullptr);
 
   /** Get the install destination as it should appear in the
       installation script.  */
@@ -81,8 +81,8 @@
   void GenerateScript(std::ostream& os) override;
 
   std::string CreateComponentTest(std::string const& component,
-                                  bool exclude_from_all,
-                                  bool all_components = false);
+                                  bool excludeFromAll,
+                                  bool allComponents = false);
 
   using TweakMethod =
     std::function<void(std::ostream& os, Indent indent,
diff --git a/Source/cmInstallGetRuntimeDependenciesGenerator.cxx b/Source/cmInstallGetRuntimeDependenciesGenerator.cxx
index 4292f8f..6e27498 100644
--- a/Source/cmInstallGetRuntimeDependenciesGenerator.cxx
+++ b/Source/cmInstallGetRuntimeDependenciesGenerator.cxx
@@ -84,10 +84,10 @@
     std::vector<std::string> postExcludeFiles, std::string libraryComponent,
     std::string frameworkComponent, bool noInstallRPath, char const* depsVar,
     char const* rpathPrefix, std::vector<std::string> const& configurations,
-    MessageLevel message, bool exclude_from_all, cmListFileBacktrace backtrace,
+    MessageLevel message, bool excludeFromAll, cmListFileBacktrace backtrace,
     cmPolicies::PolicyStatus policyStatusCMP0207)
-  : cmInstallGenerator("", configurations, "", message, exclude_from_all,
-                       false, std::move(backtrace))
+  : cmInstallGenerator("", configurations, "", message, excludeFromAll, false,
+                       std::move(backtrace))
   , RuntimeDependencySet(runtimeDependencySet)
   , Directories(std::move(directories))
   , PreIncludeRegexes(std::move(preIncludeRegexes))
diff --git a/Source/cmInstallGetRuntimeDependenciesGenerator.h b/Source/cmInstallGetRuntimeDependenciesGenerator.h
index 9670dcf..413d2b8 100644
--- a/Source/cmInstallGetRuntimeDependenciesGenerator.h
+++ b/Source/cmInstallGetRuntimeDependenciesGenerator.h
@@ -27,7 +27,7 @@
     std::vector<std::string> postExcludeFiles, std::string libraryComponent,
     std::string frameworkComponent, bool noInstallRPath, char const* depsVar,
     char const* rpathPrefix, std::vector<std::string> const& configurations,
-    MessageLevel message, bool exclude_from_all, cmListFileBacktrace backtrace,
+    MessageLevel message, bool excludeFromAll, cmListFileBacktrace backtrace,
     cmPolicies::PolicyStatus policyStatusCMP0207);
 
   bool Compute(cmLocalGenerator* lg) override;
diff --git a/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx b/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx
index 9552748..a2ae0ff 100644
--- a/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx
+++ b/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx
@@ -32,14 +32,14 @@
 cmInstallImportedRuntimeArtifactsGenerator::
   cmInstallImportedRuntimeArtifactsGenerator(
     std::string targetName, std::string const& dest,
-    std::string file_permissions,
+    std::string filePermissions,
     std::vector<std::string> const& configurations,
-    std::string const& component, MessageLevel message, bool exclude_from_all,
+    std::string const& component, MessageLevel message, bool excludeFromAll,
     bool optional, cmListFileBacktrace backtrace)
   : cmInstallGenerator(dest, configurations, component, message,
-                       exclude_from_all, false, std::move(backtrace))
+                       excludeFromAll, false, std::move(backtrace))
   , TargetName(std::move(targetName))
-  , FilePermissions(std::move(file_permissions))
+  , FilePermissions(std::move(filePermissions))
   , Optional(optional)
 {
   this->ActionsPerConfig = true;
diff --git a/Source/cmInstallImportedRuntimeArtifactsGenerator.h b/Source/cmInstallImportedRuntimeArtifactsGenerator.h
index 90c13a8..411d472 100644
--- a/Source/cmInstallImportedRuntimeArtifactsGenerator.h
+++ b/Source/cmInstallImportedRuntimeArtifactsGenerator.h
@@ -16,9 +16,9 @@
 public:
   cmInstallImportedRuntimeArtifactsGenerator(
     std::string targetName, std::string const& dest,
-    std::string file_permissions,
+    std::string filePermissions,
     std::vector<std::string> const& configurations,
-    std::string const& component, MessageLevel message, bool exclude_from_all,
+    std::string const& component, MessageLevel message, bool excludeFromAll,
     bool optional, cmListFileBacktrace backtrace = cmListFileBacktrace());
   ~cmInstallImportedRuntimeArtifactsGenerator() override = default;
 
diff --git a/Source/cmInstallProgramsCommand.cxx b/Source/cmInstallProgramsCommand.cxx
index 63f40e2..0a808b7 100644
--- a/Source/cmInstallProgramsCommand.cxx
+++ b/Source/cmInstallProgramsCommand.cxx
@@ -48,18 +48,18 @@
 static void FinalAction(cmMakefile& makefile, std::string const& dest,
                         std::vector<std::string> const& args)
 {
-  bool files_mode = false;
+  bool filesMode = false;
   if (!args.empty() && args[0] == "FILES") {
-    files_mode = true;
+    filesMode = true;
   }
 
   std::vector<std::string> files;
 
   // two different options
-  if (args.size() > 1 || files_mode) {
+  if (args.size() > 1 || filesMode) {
     // for each argument, get the programs
     auto s = args.begin();
-    if (files_mode) {
+    if (filesMode) {
       // Skip the FILES argument in files mode.
       ++s;
     }
diff --git a/Source/cmInstallRuntimeDependencySetGenerator.cxx b/Source/cmInstallRuntimeDependencySetGenerator.cxx
index ec46045..53c3429 100644
--- a/Source/cmInstallRuntimeDependencySetGenerator.cxx
+++ b/Source/cmInstallRuntimeDependencySetGenerator.cxx
@@ -24,10 +24,10 @@
   std::string installNameDir, bool noInstallName, char const* depsVar,
   char const* rpathPrefix, char const* tmpVarPrefix, std::string destination,
   std::vector<std::string> const& configurations, std::string component,
-  std::string permissions, MessageLevel message, bool exclude_from_all,
+  std::string permissions, MessageLevel message, bool excludeFromAll,
   cmListFileBacktrace backtrace)
   : cmInstallGenerator(std::move(destination), configurations,
-                       std::move(component), message, exclude_from_all, false,
+                       std::move(component), message, excludeFromAll, false,
                        std::move(backtrace))
   , Type(type)
   , DependencySet(dependencySet)
diff --git a/Source/cmInstallRuntimeDependencySetGenerator.h b/Source/cmInstallRuntimeDependencySetGenerator.h
index f8a7a4f..80f4cc3 100644
--- a/Source/cmInstallRuntimeDependencySetGenerator.h
+++ b/Source/cmInstallRuntimeDependencySetGenerator.h
@@ -27,7 +27,7 @@
     std::string installNameDir, bool noInstallName, char const* depsVar,
     char const* rpathPrefix, char const* tmpVarPrefix, std::string destination,
     std::vector<std::string> const& configurations, std::string component,
-    std::string permissions, MessageLevel message, bool exclude_from_all,
+    std::string permissions, MessageLevel message, bool excludeFromAll,
     cmListFileBacktrace backtrace);
 
   bool Compute(cmLocalGenerator* lg) override;
diff --git a/Source/cmInstallScriptGenerator.cxx b/Source/cmInstallScriptGenerator.cxx
index a75e924..0070b60 100644
--- a/Source/cmInstallScriptGenerator.cxx
+++ b/Source/cmInstallScriptGenerator.cxx
@@ -14,9 +14,9 @@
 
 cmInstallScriptGenerator::cmInstallScriptGenerator(
   std::string script, bool code, std::string const& component,
-  bool exclude_from_all, bool all_components, cmListFileBacktrace backtrace)
+  bool excludeFromAll, bool allComponents, cmListFileBacktrace backtrace)
   : cmInstallGenerator("", std::vector<std::string>(), component,
-                       MessageDefault, exclude_from_all, all_components,
+                       MessageDefault, excludeFromAll, allComponents,
                        std::move(backtrace))
   , Script(std::move(script))
   , Code(code)
diff --git a/Source/cmInstallScriptGenerator.h b/Source/cmInstallScriptGenerator.h
index 104d432..fe7ca8f 100644
--- a/Source/cmInstallScriptGenerator.h
+++ b/Source/cmInstallScriptGenerator.h
@@ -20,7 +20,7 @@
 public:
   cmInstallScriptGenerator(
     std::string script, bool code, std::string const& component,
-    bool exclude_from_all, bool all_components,
+    bool excludeFromAll, bool allComponents,
     cmListFileBacktrace backtrace = cmListFileBacktrace());
   ~cmInstallScriptGenerator() override;
 
diff --git a/Source/cmInstallScriptHandler.cxx b/Source/cmInstallScriptHandler.cxx
index 6a268f9..99a0694 100644
--- a/Source/cmInstallScriptHandler.cxx
+++ b/Source/cmInstallScriptHandler.cxx
@@ -34,86 +34,86 @@
 using InstallScriptRunner = cmInstallScriptHandler::InstallScriptRunner;
 
 cmInstallScriptHandler::cmInstallScriptHandler(
-  std::string _binaryDir, std::vector<std::string> _components,
-  std::string _config, std::vector<std::string>& args)
-  : components(std::move(_components))
-  , binaryDir(std::move(_binaryDir))
+  std::string binaryDir, std::vector<std::string> components,
+  std::string installConfig, std::vector<std::string>& args)
+  : Components(std::move(components))
+  , BinaryDir(std::move(binaryDir))
 {
-  if (this->components.empty()) {
-    this->components.emplace_back(std::string{});
+  if (this->Components.empty()) {
+    this->Components.emplace_back(std::string{});
   }
 
   std::string const& file =
-    cmStrCat(this->binaryDir, "/CMakeFiles/InstallScripts.json");
-  this->parallel = false;
+    cmStrCat(this->BinaryDir, "/CMakeFiles/InstallScripts.json");
+  this->Parallel = false;
 
   auto addScript = [this, &args](std::string script, std::string component,
                                  std::string config) -> void {
-    this->scripts.push_back({ script, config, args });
+    this->Scripts.push_back({ script, config, args });
     if (!component.empty()) {
-      this->scripts.back().command.insert(
-        this->scripts.back().command.end() - 1,
+      this->Scripts.back().command.insert(
+        this->Scripts.back().command.end() - 1,
         cmStrCat("-DCMAKE_INSTALL_COMPONENT=", component));
     }
     if (!config.empty()) {
-      this->scripts.back().command.insert(
-        this->scripts.back().command.end() - 1,
+      this->Scripts.back().command.insert(
+        this->Scripts.back().command.end() - 1,
         cmStrCat("-DCMAKE_INSTALL_CONFIG_NAME=", config));
     }
-    this->scripts.back().command.emplace_back(script);
-    this->directories.push_back(cmSystemTools::GetFilenamePath(script));
+    this->Scripts.back().command.emplace_back(script);
+    this->Directories.push_back(cmSystemTools::GetFilenamePath(script));
   };
 
   int compare = 1;
   if (cmSystemTools::FileExists(file)) {
     cmSystemTools::FileTimeCompare(
-      cmStrCat(this->binaryDir, "/CMakeFiles/cmake.check_cache"), file,
+      cmStrCat(this->BinaryDir, "/CMakeFiles/cmake.check_cache"), file,
       &compare);
   }
   if (compare < 1) {
     Json::CharReaderBuilder rbuilder;
-    auto JsonReader =
+    auto jsonReader =
       std::unique_ptr<Json::CharReader>(rbuilder.newCharReader());
     std::vector<char> content;
     Json::Value value;
     cmJSONState state(file, &value);
-    this->parallel = value["Parallel"].asBool();
-    if (this->parallel) {
+    this->Parallel = value["Parallel"].asBool();
+    if (this->Parallel) {
       args.insert(args.end() - 1, "-DCMAKE_INSTALL_LOCAL_ONLY=1");
     }
-    if (_config.empty() && value.isMember("Configs")) {
+    if (installConfig.empty() && value.isMember("Configs")) {
       for (auto const& config : value["Configs"]) {
-        this->configs.push_back(config.asCString());
+        this->Configs.push_back(config.asCString());
       }
     } else {
-      this->configs.push_back(_config);
+      this->Configs.push_back(installConfig);
     }
     for (auto const& script : value["InstallScripts"]) {
-      for (auto const& component : components) {
-        for (auto const& config : configs) {
+      for (auto const& component : Components) {
+        for (auto const& config : Configs) {
           addScript(script.asCString(), component, config);
         }
       }
-      if (!this->parallel) {
+      if (!this->Parallel) {
         break;
       }
     }
   } else {
-    for (auto const& component : components) {
-      addScript(cmStrCat(this->binaryDir, "/cmake_install.cmake"), component,
-                _config);
+    for (auto const& component : Components) {
+      addScript(cmStrCat(this->BinaryDir, "/cmake_install.cmake"), component,
+                installConfig);
     }
   }
 }
 
 bool cmInstallScriptHandler::IsParallel()
 {
-  return this->parallel;
+  return this->Parallel;
 }
 
 std::vector<InstallScript> cmInstallScriptHandler::GetScripts() const
 {
-  return this->scripts;
+  return this->Scripts;
 }
 
 int cmInstallScriptHandler::Install(unsigned int j,
@@ -122,27 +122,27 @@
   cm::uv_loop_ptr loop;
   loop.init();
   std::vector<InstallScriptRunner> runners;
-  runners.reserve(this->scripts.size());
+  runners.reserve(this->Scripts.size());
 
-  std::vector<std::string> instrument_arg;
+  std::vector<std::string> instrumentArg;
   if (instrumentation.HasQuery()) {
-    instrument_arg = { cmSystemTools::GetCTestCommand(),
-                       "--instrument",
-                       "--command-type",
-                       "install",
-                       "--build-dir",
-                       this->binaryDir,
-                       "--config",
-                       "",
-                       "--" };
+    instrumentArg = { cmSystemTools::GetCTestCommand(),
+                      "--instrument",
+                      "--command-type",
+                      "install",
+                      "--build-dir",
+                      this->BinaryDir,
+                      "--config",
+                      "",
+                      "--" };
   }
 
-  for (auto& script : this->scripts) {
-    if (!instrument_arg.empty()) {
-      instrument_arg[7] = script.config; // --config <script.config>
+  for (auto& script : this->Scripts) {
+    if (!instrumentArg.empty()) {
+      instrumentArg[7] = script.config; // --config <script.config>
     }
-    script.command.insert(script.command.begin(), instrument_arg.begin(),
-                          instrument_arg.end());
+    script.command.insert(script.command.begin(), instrumentArg.begin(),
+                          instrumentArg.end());
     runners.emplace_back(script);
   }
   std::size_t working = 0;
@@ -168,28 +168,28 @@
   uv_run(loop, UV_RUN_DEFAULT);
 
   // Write install manifest
-  std::string install_manifest;
-  for (auto const& component : this->components) {
+  std::string installManifest;
+  for (auto const& component : this->Components) {
     if (component.empty()) {
-      install_manifest = "install_manifest.txt";
+      installManifest = "install_manifest.txt";
     } else {
       cmsys::RegularExpression regEntry;
       if (regEntry.compile("^[a-zA-Z0-9_.+-]+$") && regEntry.find(component)) {
-        install_manifest = cmStrCat("install_manifest_", component, ".txt");
+        installManifest = cmStrCat("install_manifest_", component, ".txt");
       } else {
         cmCryptoHash md5(cmCryptoHash::AlgoMD5);
         md5.Initialize();
-        install_manifest =
+        installManifest =
           cmStrCat("install_manifest_", md5.HashString(component), ".txt");
       }
     }
     cmGeneratedFileStream fout(
-      cmStrCat(this->binaryDir, '/', install_manifest));
+      cmStrCat(this->BinaryDir, '/', installManifest));
     fout.SetCopyIfDifferent(true);
-    for (auto const& dir : this->directories) {
-      auto local_manifest = cmStrCat(dir, "/install_local_manifest.txt");
-      if (cmSystemTools::FileExists(local_manifest)) {
-        cmsys::ifstream fin(local_manifest.c_str());
+    for (auto const& dir : this->Directories) {
+      auto localManifest = cmStrCat(dir, "/install_local_manifest.txt");
+      if (cmSystemTools::FileExists(localManifest)) {
+        cmsys::ifstream fin(localManifest.c_str());
         std::string line;
         while (std::getline(fin, line)) {
           fout << line << "\n";
@@ -202,34 +202,34 @@
 
 InstallScriptRunner::InstallScriptRunner(InstallScript const& script)
 {
-  this->name = cmSystemTools::RelativePath(
+  this->Name = cmSystemTools::RelativePath(
     cmSystemTools::GetLogicalWorkingDirectory(), script.path);
-  this->command = script.command;
+  this->Command = script.command;
 }
 
 void InstallScriptRunner::start(cm::uv_loop_ptr& loop,
                                 std::function<void()> callback)
 {
   cmUVProcessChainBuilder builder;
-  builder.AddCommand(this->command)
+  builder.AddCommand(this->Command)
     .SetExternalLoop(*loop)
     .SetMergedBuiltinStreams();
-  this->chain = cm::make_unique<cmUVProcessChain>(builder.Start());
-  this->streamHandler = cmUVStreamRead(
-    this->chain->OutputStream(),
+  this->Chain = cm::make_unique<cmUVProcessChain>(builder.Start());
+  this->StreamHandler = cmUVStreamRead(
+    this->Chain->OutputStream(),
     [this](std::vector<char> data) {
       std::string strdata;
       cmProcessOutput(cmProcessOutput::Auto)
         .DecodeText(data.data(), data.size(), strdata);
-      this->output.push_back(strdata);
+      this->Output.push_back(strdata);
     },
     std::move(callback));
 }
 
 void InstallScriptRunner::printResult(std::size_t n, std::size_t total)
 {
-  cmSystemTools::Stdout(cmStrCat('[', n, '/', total, "] ", this->name, '\n'));
-  for (auto const& line : this->output) {
+  cmSystemTools::Stdout(cmStrCat('[', n, '/', total, "] ", this->Name, '\n'));
+  for (auto const& line : this->Output) {
     cmSystemTools::Stdout(line);
   }
 }
diff --git a/Source/cmInstallScriptHandler.h b/Source/cmInstallScriptHandler.h
index 3fcfac0..9ab8f8e 100644
--- a/Source/cmInstallScriptHandler.h
+++ b/Source/cmInstallScriptHandler.h
@@ -40,18 +40,18 @@
     void printResult(std::size_t n, std::size_t total);
 
   private:
-    std::vector<std::string> command;
-    std::vector<std::string> output;
-    std::string name;
-    std::unique_ptr<cmUVProcessChain> chain;
-    std::unique_ptr<cmUVStreamReadHandle> streamHandler;
+    std::vector<std::string> Command;
+    std::vector<std::string> Output;
+    std::string Name;
+    std::unique_ptr<cmUVProcessChain> Chain;
+    std::unique_ptr<cmUVStreamReadHandle> StreamHandler;
   };
 
 private:
-  std::vector<InstallScript> scripts;
-  std::vector<std::string> configs;
-  std::vector<std::string> directories;
-  std::vector<std::string> components;
-  std::string binaryDir;
-  bool parallel;
+  std::vector<InstallScript> Scripts;
+  std::vector<std::string> Configs;
+  std::vector<std::string> Directories;
+  std::vector<std::string> Components;
+  std::string BinaryDir;
+  bool Parallel;
 };
diff --git a/Source/cmInstallTargetGenerator.cxx b/Source/cmInstallTargetGenerator.cxx
index e2e7924..e38b296 100644
--- a/Source/cmInstallTargetGenerator.cxx
+++ b/Source/cmInstallTargetGenerator.cxx
@@ -128,13 +128,13 @@
 
 cmInstallTargetGenerator::cmInstallTargetGenerator(
   std::string targetName, std::string const& dest, bool implib,
-  std::string file_permissions, std::vector<std::string> const& configurations,
-  std::string const& component, MessageLevel message, bool exclude_from_all,
+  std::string filePermissions, std::vector<std::string> const& configurations,
+  std::string const& component, MessageLevel message, bool excludeFromAll,
   bool optional, cmListFileBacktrace backtrace)
   : cmInstallGenerator(dest, configurations, component, message,
-                       exclude_from_all, false, std::move(backtrace))
+                       excludeFromAll, false, std::move(backtrace))
   , TargetName(std::move(targetName))
-  , FilePermissions(std::move(file_permissions))
+  , FilePermissions(std::move(filePermissions))
   , ImportLibrary(implib)
   , Optional(optional)
 {
@@ -177,9 +177,9 @@
   // Write code to install the target file.
   char const* no_dir_permissions = nullptr;
   bool optional = this->Optional || this->ImportLibrary;
-  std::string literal_args;
+  std::string literalArgs;
   if (files.UseSourcePermissions) {
-    literal_args += " USE_SOURCE_PERMISSIONS";
+    literalArgs += " USE_SOURCE_PERMISSIONS";
   }
   if (files.Rename) {
     if (files.From.size() != files.To.size()) {
@@ -199,16 +199,16 @@
       }
       this->AddInstallRule(os, dest, files.Type, FileNames, optional,
                            this->FilePermissions.c_str(), no_dir_permissions,
-                           files.To[i].c_str(), literal_args.c_str(), indent);
+                           files.To[i].c_str(), literalArgs.c_str(), indent);
     }
   } else {
     char const* no_rename = nullptr;
     if (!files.FromDir.empty()) {
-      literal_args += " FILES_FROM_DIR \"" + files.FromDir + "\"";
+      literalArgs += " FILES_FROM_DIR \"" + files.FromDir + "\"";
     }
     this->AddInstallRule(os, dest, files.Type, files.From, optional,
                          this->FilePermissions.c_str(), no_dir_permissions,
-                         no_rename, literal_args.c_str(), indent);
+                         no_rename, literalArgs.c_str(), indent);
   }
 
   // Add post-installation tweaks.
diff --git a/Source/cmInstallTargetGenerator.h b/Source/cmInstallTargetGenerator.h
index 7421d0d..dd1a596 100644
--- a/Source/cmInstallTargetGenerator.h
+++ b/Source/cmInstallTargetGenerator.h
@@ -22,9 +22,9 @@
 public:
   cmInstallTargetGenerator(
     std::string targetName, std::string const& dest, bool implib,
-    std::string file_permissions,
+    std::string filePermissions,
     std::vector<std::string> const& configurations,
-    std::string const& component, MessageLevel message, bool exclude_from_all,
+    std::string const& component, MessageLevel message, bool excludeFromAll,
     bool optional, cmListFileBacktrace backtrace = cmListFileBacktrace());
   ~cmInstallTargetGenerator() override;
 
diff --git a/Source/cmInstallTargetsCommand.cxx b/Source/cmInstallTargetsCommand.cxx
index 66d40b0..6b18410 100644
--- a/Source/cmInstallTargetsCommand.cxx
+++ b/Source/cmInstallTargetsCommand.cxx
@@ -26,7 +26,7 @@
   cmMakefile::cmTargetMap& tgts = mf.GetTargets();
   auto s = args.begin();
   ++s;
-  std::string runtime_dir = "/bin";
+  std::string runtimeDir = "/bin";
   for (; s != args.end(); ++s) {
     if (*s == "RUNTIME_DIRECTORY") {
       ++s;
@@ -36,12 +36,12 @@
         return false;
       }
 
-      runtime_dir = *s;
+      runtimeDir = *s;
     } else {
       auto ti = tgts.find(*s);
       if (ti != tgts.end()) {
         ti->second.SetInstallPath(args[0]);
-        ti->second.SetRuntimeInstallPath(runtime_dir);
+        ti->second.SetRuntimeInstallPath(runtimeDir);
         ti->second.SetHaveInstallRule(true);
       } else {
         std::string str = "Cannot find target: \"" + *s + "\" to install.";
diff --git a/Source/cmList.cxx b/Source/cmList.cxx
index 1c76664..4dfeaa2 100644
--- a/Source/cmList.cxx
+++ b/Source/cmList.cxx
@@ -81,6 +81,92 @@
   cmsys::RegularExpression& Regex;
   bool const IncludeMatches;
 };
+
+// Hash of call site (FilePath:Line) for unique variable names across recursive
+// calls.
+std::string OutputVarFor(cm::string_view prefix, cmMakefile& makefile)
+{
+  cmListFileContext context = makefile.GetBacktrace().Top();
+  std::size_t hash =
+    std::hash<std::string>{}(cmStrCat(context.FilePath, ":", context.Line));
+  return cmStrCat(prefix, hash, "_");
+}
+
+class PredicateEvaluator
+{
+public:
+  PredicateEvaluator(std::string functionName, cmMakefile& makefile,
+                     std::string errorPrefix = "sub-command TRANSFORM, "
+                                               "selector PREDICATE")
+    : FunctionName(std::move(functionName))
+    , Makefile(&makefile)
+    , ErrorPrefix(std::move(errorPrefix))
+    , OutputVar(OutputVarFor("_cmake_predicate_out_", makefile))
+  {
+    if (!makefile.GetState()->GetCommand(this->FunctionName)) {
+      throw cmList::transform_error(cmStrCat(this->ErrorPrefix,
+                                             ": unknown function \"",
+                                             this->FunctionName, "\"."));
+    }
+  }
+
+  bool operator()(std::string const& value)
+  {
+    this->Makefile->RemoveDefinition(this->OutputVar);
+
+    cmListFileContext context = this->Makefile->GetBacktrace().Top();
+    std::vector<cmListFileArgument> funcArgs;
+    funcArgs.emplace_back(value, cmListFileArgument::Quoted, context.Line);
+    funcArgs.emplace_back(this->OutputVar, cmListFileArgument::Quoted,
+                          context.Line);
+    cmListFileFunction func{ this->FunctionName, context.Line, context.Line,
+                             std::move(funcArgs) };
+
+    cmExecutionStatus status(*this->Makefile);
+    if (!this->Makefile->ExecuteCommand(func, status) ||
+        status.GetNestedError()) {
+      throw cmList::transform_error(
+        cmStrCat(this->ErrorPrefix, ": function \"", this->FunctionName,
+                 "\" failed during execution."));
+    }
+
+    cmValue result = this->Makefile->GetDefinition(this->OutputVar);
+    if (!result) {
+      throw cmList::transform_error(
+        cmStrCat(this->ErrorPrefix, ": function \"", this->FunctionName,
+                 "\" did not set the output variable."));
+    }
+
+    bool boolResult = cmIsOn(*result);
+    this->Makefile->RemoveDefinition(this->OutputVar);
+    return boolResult;
+  }
+
+private:
+  std::string FunctionName;
+  cmMakefile* Makefile = nullptr;
+  std::string ErrorPrefix;
+  std::string OutputVar;
+};
+
+class MatchesPredicate
+{
+public:
+  MatchesPredicate(PredicateEvaluator& evaluator, cmList::FilterMode mode)
+    : Evaluator(evaluator)
+    , IncludeMatches(mode == cmList::FilterMode::INCLUDE)
+  {
+  }
+
+  bool operator()(std::string const& target)
+  {
+    return this->Evaluator(target) ^ this->IncludeMatches;
+  }
+
+private:
+  PredicateEvaluator& Evaluator;
+  bool IncludeMatches;
+};
 }
 
 cmList& cmList::filter(cm::string_view pattern, FilterMode mode)
@@ -99,6 +185,23 @@
   return *this;
 }
 
+cmList& cmList::filter(std::string const& functionName, FilterMode mode,
+                       cmMakefile& makefile)
+{
+  try {
+    PredicateEvaluator evaluator(functionName, makefile,
+                                 "sub-command FILTER, mode PREDICATE");
+
+    auto it = std::remove_if(this->Values.begin(), this->Values.end(),
+                             MatchesPredicate{ evaluator, mode });
+    this->Values.erase(it, this->Values.end());
+  } catch (transform_error& e) {
+    throw std::invalid_argument(e.what());
+  }
+
+  return *this;
+}
+
 namespace {
 class StringSorter
 {
@@ -270,6 +373,26 @@
 
   cmsys::RegularExpression Regex;
 };
+class TransformSelectorPredicate : public TransformSelector
+{
+public:
+  TransformSelectorPredicate(std::string const& functionName,
+                             cmMakefile& makefile)
+    : TransformSelector("PREDICATE")
+    , Evaluator(functionName, makefile)
+  {
+  }
+
+  bool Validate(std::size_t) override { return true; }
+
+  bool InSelection(std::string const& value) override
+  {
+    return this->Evaluator(value);
+  }
+
+private:
+  PredicateEvaluator Evaluator;
+};
 class TransformSelectorIndexes : public TransformSelector
 {
 public:
@@ -580,6 +703,7 @@
     TransformAction::Initialize(selector);
     this->FunctionName = functionName;
     this->Makefile = &makefile;
+    this->OutputVar = OutputVarFor("_cmake_transform_apply_out_", makefile);
 
     // Validate: command must exist
     if (!makefile.GetState()->GetCommand(this->FunctionName)) {
@@ -603,17 +727,15 @@
       return s;
     }
 
-    // Use a unique output variable name to avoid collisions
-    std::string const outputVar = "_list_transform_apply_out_";
-
     // Unset the output variable before calling
-    this->Makefile->RemoveDefinition(outputVar);
+    this->Makefile->RemoveDefinition(this->OutputVar);
 
     // Build the function call: functionName(s, outputVar)
     cmListFileContext context = this->Makefile->GetBacktrace().Top();
     std::vector<cmListFileArgument> funcArgs;
     funcArgs.emplace_back(s, cmListFileArgument::Quoted, context.Line);
-    funcArgs.emplace_back(outputVar, cmListFileArgument::Quoted, context.Line);
+    funcArgs.emplace_back(this->OutputVar, cmListFileArgument::Quoted,
+                          context.Line);
     cmListFileFunction func{ this->FunctionName, context.Line, context.Line,
                              std::move(funcArgs) };
 
@@ -626,7 +748,7 @@
     }
 
     // Read back the output variable
-    cmValue result = this->Makefile->GetDefinition(outputVar);
+    cmValue result = this->Makefile->GetDefinition(this->OutputVar);
     if (!result) {
       throw transform_error(
         cmStrCat("sub-command TRANSFORM, action APPLY: function \"",
@@ -638,7 +760,7 @@
     std::string output = *result;
 
     // Clean up
-    this->Makefile->RemoveDefinition(outputVar);
+    this->Makefile->RemoveDefinition(this->OutputVar);
 
     return output;
   }
@@ -646,6 +768,7 @@
 private:
   std::string FunctionName;
   cmMakefile* Makefile = nullptr;
+  std::string OutputVar;
 };
 
 // Descriptor of action
@@ -827,6 +950,14 @@
   return std::unique_ptr<cmList::TransformSelector>(selector.release());
 }
 
+std::unique_ptr<cmList::TransformSelector>
+cmList::TransformSelector::NewPREDICATE(std::string const& functionName,
+                                        cmMakefile& makefile)
+{
+  return std::unique_ptr<cmList::TransformSelector>(
+    new TransformSelectorPredicate(functionName, makefile));
+}
+
 cmList& cmList::transform(TransformAction action,
                           std::unique_ptr<TransformSelector> selector)
 {
@@ -897,16 +1028,19 @@
                           cmMakefile& makefile,
                           std::unique_ptr<TransformSelector> selector)
 {
-  auto descriptor = TransformConfigure(action, selector, 1);
+  // Validate action and arity via the static registry.
+  TransformConfigure(action, selector, 1);
 
-  auto* applyAction =
-    static_cast<TransformActionApply*>(descriptor->Transform.get());
-  applyAction->Initialize(static_cast<::TransformSelector*>(selector.get()),
-                          arg, makefile);
+  // Create a local instance rather than reusing the singleton from
+  // Descriptors.  A user function invoked by APPLY may itself call
+  // list(TRANSFORM ... APPLY ...), which would clobber a shared instance.
+  TransformActionApply applyAction;
+  applyAction.Initialize(static_cast<::TransformSelector*>(selector.get()),
+                         arg, makefile);
 
   static_cast<::TransformSelector&>(*selector).Transform(
-    this->Values, [&descriptor](std::string const& s) -> std::string {
-      return (*descriptor->Transform)(s);
+    this->Values, [&applyAction](std::string const& s) -> std::string {
+      return applyAction(s);
     });
 
   return *this;
diff --git a/Source/cmList.h b/Source/cmList.h
index febc2c5f..b34a6ca 100644
--- a/Source/cmList.h
+++ b/Source/cmList.h
@@ -821,8 +821,11 @@
     EXCLUDE
   };
   // Includes or removes items from the list
-  // Throw std::invalid_argument if regular expression is invalid
+  // Throw std::invalid_argument if regular expression is invalid or predicate
+  // function is unknown / does not set its output variable
   cmList& filter(cm::string_view regex, FilterMode mode);
+  cmList& filter(std::string const& functionName, FilterMode mode,
+                 cmMakefile& makefile);
 
   cmList& reverse()
   {
@@ -886,6 +889,7 @@
     struct AT;
     struct FOR;
     struct REGEX;
+    struct PREDICATE;
 
     virtual ~TransformSelector() = default;
 
@@ -911,6 +915,12 @@
     template <typename Type>
     static std::unique_ptr<TransformSelector> New(std::string&&);
 
+    // NewPREDICATE is public (unlike NewAT/NewFOR/NewREGEX) because it takes
+    // a cmMakefile& parameter that cannot be dispatched through the existing
+    // New<Type>() templates.
+    static std::unique_ptr<TransformSelector> NewPREDICATE(
+      std::string const& functionName, cmMakefile& makefile);
+
     cmMakefile* Makefile = nullptr;
 
   private:
diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx
index 06eba11..e5338d2 100644
--- a/Source/cmListCommand.cxx
+++ b/Source/cmListCommand.cxx
@@ -520,6 +520,7 @@
   std::string const REGEX{ "REGEX" };
   std::string const AT{ "AT" };
   std::string const FOR{ "FOR" };
+  std::string const PREDICATE{ "PREDICATE" };
   std::string const OUTPUT_VARIABLE{ "OUTPUT_VARIABLE" };
   std::unique_ptr<cmList::TransformSelector> selector;
   std::string outputName = listName;
@@ -527,7 +528,8 @@
   try {
     // handle optional arguments
     while (args.size() > index) {
-      if ((args[index] == REGEX || args[index] == AT || args[index] == FOR) &&
+      if ((args[index] == REGEX || args[index] == AT || args[index] == FOR ||
+           args[index] == PREDICATE) &&
           selector) {
         status.SetError(
           cmStrCat("sub-command TRANSFORM, selector already specified (",
@@ -653,6 +655,21 @@
         continue;
       }
 
+      // PREDICATE selector
+      if (args[index] == PREDICATE) {
+        if (args.size() == ++index) {
+          status.SetError("sub-command TRANSFORM, selector PREDICATE expects "
+                          "'function name' argument.");
+          return false;
+        }
+
+        selector = cmList::TransformSelector::NewPREDICATE(
+          args[index], status.GetMakefile());
+
+        index += 1;
+        continue;
+      }
+
       // output variable
       if (args[index] == OUTPUT_VARIABLE) {
         if (args.size() == ++index) {
@@ -951,25 +968,46 @@
   }
 
   std::string const& mode = args[3];
-  if (mode != "REGEX") {
-    status.SetError("sub-command FILTER does not recognize mode " + mode);
-    return false;
-  }
-  if (args.size() != 5) {
-    status.SetError("sub-command FILTER, mode REGEX "
-                    "requires five arguments.");
-    return false;
-  }
-  std::string const& pattern = args[4];
+  if (mode == "REGEX") {
+    if (args.size() != 5) {
+      status.SetError("sub-command FILTER, mode REGEX "
+                      "requires five arguments.");
+      return false;
+    }
+    std::string const& pattern = args[4];
 
-  try {
-    status.GetMakefile().AddDefinition(
-      listName, list->filter(pattern, filterMode).to_string());
-    return true;
-  } catch (std::invalid_argument& e) {
-    status.SetError(e.what());
-    return false;
+    try {
+      status.GetMakefile().AddDefinition(
+        listName, list->filter(pattern, filterMode).to_string());
+      return true;
+    } catch (std::invalid_argument& e) {
+      status.SetError(e.what());
+      return false;
+    }
   }
+
+  if (mode == "PREDICATE") {
+    if (args.size() != 5) {
+      status.SetError("sub-command FILTER, mode PREDICATE "
+                      "requires five arguments.");
+      return false;
+    }
+    std::string const& functionName = args[4];
+
+    try {
+      status.GetMakefile().AddDefinition(
+        listName,
+        list->filter(functionName, filterMode, status.GetMakefile())
+          .to_string());
+      return true;
+    } catch (std::invalid_argument& e) {
+      status.SetError(e.what());
+      return false;
+    }
+  }
+
+  status.SetError("sub-command FILTER does not recognize mode " + mode);
+  return false;
 }
 } // namespace
 
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index d755360..11b5446 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -3870,11 +3870,11 @@
                                         bool global)
 {
   // Create the target.
-  std::unique_ptr<cmTarget> target(
-    new cmTarget(name, type,
-                 global ? cmTarget::Visibility::ImportedGlobally
-                        : cmTarget::Visibility::Imported,
-                 this, cmTarget::PerConfig::Yes));
+  auto target =
+    cm::make_unique<cmTarget>(name, type,
+                              global ? cmTarget::Visibility::ImportedGlobally
+                                     : cmTarget::Visibility::Imported,
+                              this, cmTarget::PerConfig::Yes);
 
   // Add to the set of available imported targets.
   this->ImportedTargets[name] = target.get();
@@ -3890,9 +3890,9 @@
                                        std::string const& name)
 {
   auto foreign_name = cmStrCat("@foreign_", origin, "::", name);
-  std::unique_ptr<cmTarget> target(new cmTarget(
+  auto target = cm::make_unique<cmTarget>(
     foreign_name, cmStateEnums::TargetType::INTERFACE_LIBRARY,
-    cmTarget::Visibility::Foreign, this, cmTarget::PerConfig::Yes));
+    cmTarget::Visibility::Foreign, this, cmTarget::PerConfig::Yes);
 
   this->ImportedTargets[foreign_name] = target.get();
   this->GetGlobalGenerator()->IndexTarget(target.get());
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index 09026ca..c046e11 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -755,9 +755,13 @@
     // Construct object file lists that may be needed to expand the
     // rule.
     std::string buildObjs;
+    cmMakefileTargetGenerator::ResponseFlagFor responseMode =
+      this->GeneratorTarget->GetType() == cmStateEnums::STATIC_LIBRARY
+      ? cmMakefileTargetGenerator::ResponseFlagFor::Archive
+      : cmMakefileTargetGenerator::ResponseFlagFor::Link;
     this->CreateObjectLists(useLinkScript, useArchiveRules,
                             useResponseFileForObjects, buildObjs, depends,
-                            useWatcomQuote, linkLanguage);
+                            useWatcomQuote, linkLanguage, responseMode);
     if (!this->DeviceLinkObject.empty()) {
       buildObjs += " " +
         this->LocalGenerator->ConvertToOutputFormat(
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 77b1550..59c0519 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -1107,10 +1107,14 @@
       compilerLauncher = GetCompilerLauncher(lang, config);
     }
 
+    cmValue const fsSkipCodeCheckVal =
+      fileSet ? fileSet->GetProperty("SKIP_LINTING") : nullptr;
     cmValue const srcSkipCodeCheckVal = source.GetProperty("SKIP_LINTING");
-    bool const skipCodeCheck = srcSkipCodeCheckVal.IsSet()
-      ? srcSkipCodeCheckVal.IsOn()
-      : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING");
+    bool const skipCodeCheck = fsSkipCodeCheckVal.IsSet()
+      ? fsSkipCodeCheckVal.IsOn()
+      : (srcSkipCodeCheckVal.IsSet()
+           ? srcSkipCodeCheckVal.IsOn()
+           : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING"));
 
     if (!skipCodeCheck) {
       std::string const codeCheck = this->GenerateCodeCheckRules(
@@ -2256,9 +2260,9 @@
 
     // Create this response file.
     std::string const responseFileName =
-      (responseMode == Link) ? "linkLibs.rsp" : "deviceLinkLibs.rsp";
+      (responseMode == DeviceLink) ? "deviceLinkLibs.rsp" : "linkLibs.rsp";
     std::string const responseLang =
-      (responseMode == Link) ? linkLanguage : "CUDA";
+      (responseMode == DeviceLink) ? "CUDA" : linkLanguage;
     std::string link_rsp = this->CreateResponseFile(
       responseFileName, linkLibs, makefile_depends, responseLang);
 
@@ -2295,8 +2299,9 @@
     char const* sep = "";
     for (unsigned int i = 0; i < object_strings.size(); ++i) {
       // Number the response files.
-      std::string responseFileName = cmStrCat(
-        (responseMode == Link) ? "objects" : "deviceObjects", i + 1, ".rsp");
+      std::string responseFileName =
+        cmStrCat((responseMode == DeviceLink) ? "deviceObjects" : "objects",
+                 i + 1, ".rsp");
 
       // Create this response file.
       std::string objects_rsp = this->CreateResponseFile(
@@ -2419,10 +2424,17 @@
     responseFlagVar = cmStrCat("CMAKE_", lang, "_RESPONSE_FILE_LINK_FLAG");
   } else if (mode == cmMakefileTargetGenerator::ResponseFlagFor::DeviceLink) {
     responseFlagVar = "CMAKE_CUDA_RESPONSE_FILE_DEVICE_LINK_FLAG";
+  } else if (mode == cmMakefileTargetGenerator::ResponseFlagFor::Archive) {
+    responseFlagVar = cmStrCat("CMAKE_", lang, "_RESPONSE_FILE_ARCHIVE_FLAG");
   }
 
   if (cmValue const p = this->Makefile->GetDefinition(responseFlagVar)) {
     responseFlag = *p;
+  } else if (mode == cmMakefileTargetGenerator::ResponseFlagFor::Archive) {
+    responseFlagVar = cmStrCat("CMAKE_", lang, "_RESPONSE_FILE_LINK_FLAG");
+    if (cmValue const q = this->Makefile->GetDefinition(responseFlagVar)) {
+      responseFlag = *q;
+    }
   }
   return responseFlag;
 }
diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h
index fe255f4..bcb5f26 100644
--- a/Source/cmMakefileTargetGenerator.h
+++ b/Source/cmMakefileTargetGenerator.h
@@ -174,8 +174,9 @@
 
   enum ResponseFlagFor
   {
+    Archive,
     Link,
-    DeviceLink
+    DeviceLink,
   };
 
   /** Create list of flags for link libraries. */
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index c962997..7ff9bb2 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -498,8 +498,15 @@
     }
 
     // build response file name
-    std::string cmakeLinkVar = cmakeVarLang + "_RESPONSE_FILE_LINK_FLAG";
-    cmValue flag = this->GetMakefile()->GetDefinition(cmakeLinkVar);
+    cmValue flag;
+    if (targetType == cmStateEnums::STATIC_LIBRARY) {
+      std::string cmakeLinkVar = cmakeVarLang + "_RESPONSE_FILE_ARCHIVE_FLAG";
+      flag = this->GetMakefile()->GetDefinition(cmakeLinkVar);
+    }
+    if (!flag) {
+      std::string cmakeLinkVar = cmakeVarLang + "_RESPONSE_FILE_LINK_FLAG";
+      flag = this->GetMakefile()->GetDefinition(cmakeLinkVar);
+    }
 
     if (flag) {
       responseFlag = *flag;
@@ -1041,7 +1048,8 @@
                               vars["LINK_FLAGS"], frameworkPath, linkPath,
                               genTarget);
 
-  this->addPoolNinjaVariable("JOB_POOL_LINK", genTarget, nullptr, vars);
+  this->addPoolNinjaVariable("JOB_POOL_LINK", config, genTarget, nullptr,
+                             vars);
 
   vars["MANIFESTS"] = this->GetManifests(config);
 
@@ -1384,7 +1392,7 @@
                            this->TargetLinkLanguage(config), "CURRENT", false);
   }
 
-  this->addPoolNinjaVariable("JOB_POOL_LINK", gt, nullptr, vars);
+  this->addPoolNinjaVariable("JOB_POOL_LINK", config, gt, nullptr, vars);
 
   this->UseLWYU = this->GetLocalGenerator()->AppendLWYUFlags(
     vars["LINK_FLAGS"], this->GetGeneratorTarget(),
@@ -1589,9 +1597,15 @@
     cmStrCat("CMAKE_", this->TargetLinkLanguage(config));
 
   // build response file name
-  std::string cmakeLinkVar = cmakeVarLang + "_RESPONSE_FILE_LINK_FLAG";
-
-  cmValue flag = this->GetMakefile()->GetDefinition(cmakeLinkVar);
+  cmValue flag;
+  if (targetType == cmStateEnums::STATIC_LIBRARY) {
+    std::string cmakeLinkVar = cmakeVarLang + "_RESPONSE_FILE_ARCHIVE_FLAG";
+    flag = this->GetMakefile()->GetDefinition(cmakeLinkVar);
+  }
+  if (!flag) {
+    std::string cmakeLinkVar = cmakeVarLang + "_RESPONSE_FILE_LINK_FLAG";
+    flag = this->GetMakefile()->GetDefinition(cmakeLinkVar);
+  }
 
   bool const lang_supports_response =
     !(this->TargetLinkLanguage(config) == "RC" ||
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 762da6c..a07fe1c 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -1585,10 +1585,17 @@
 
   auto compilerLauncher = this->GetCompilerLauncher(language, config);
 
+  cmGeneratorFileSet const* fileSet =
+    this->GeneratorTarget->GetFileSetForSource(config, source);
+
+  cmValue const fsSkipCodeCheckVal =
+    fileSet ? fileSet->GetProperty("SKIP_LINTING") : nullptr;
   cmValue const srcSkipCodeCheckVal = source->GetProperty("SKIP_LINTING");
-  bool const skipCodeCheck = srcSkipCodeCheckVal.IsSet()
-    ? srcSkipCodeCheckVal.IsOn()
-    : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING");
+  bool const skipCodeCheck = fsSkipCodeCheckVal.IsSet()
+    ? fsSkipCodeCheckVal.IsOn()
+    : (srcSkipCodeCheckVal.IsSet()
+         ? srcSkipCodeCheckVal.IsOn()
+         : this->GetGeneratorTarget()->GetPropertyAsBool("SKIP_LINTING"));
 
   if (!skipCodeCheck) {
     auto const cmakeCmd =
@@ -1780,8 +1787,9 @@
       scanningFiles.ScanningOutput = cmStrCat(objectFileName, ".ddi");
     }
 
-    this->addPoolNinjaVariable("JOB_POOL_COMPILE", this->GetGeneratorTarget(),
-                               source, ppBuild.Variables);
+    this->addPoolNinjaVariable("JOB_POOL_COMPILE", config,
+                               this->GetGeneratorTarget(), source,
+                               ppBuild.Variables);
 
     this->GetGlobalGenerator()->WriteBuild(this->GetImplFileStream(fileConfig),
                                            ppBuild, commandLineLengthLimit);
@@ -1814,13 +1822,13 @@
     this->ConvertToOutputFormatForShell(targetSupportDir);
   vars["OBJECT_FILE_DIR"] = this->ConvertToOutputFormatForShell(objectFileDir);
 
-  this->addPoolNinjaVariable("JOB_POOL_COMPILE", this->GetGeneratorTarget(),
-                             source, vars);
+  this->addPoolNinjaVariable("JOB_POOL_COMPILE", config,
+                             this->GetGeneratorTarget(), source, vars);
 
   if (!pchSources.empty() && !source->GetProperty("SKIP_PRECOMPILE_HEADERS")) {
     auto pchIt = pchSources.find(source->GetFullPath());
     if (pchIt != pchSources.end()) {
-      this->addPoolNinjaVariable("JOB_POOL_PRECOMPILE_HEADER",
+      this->addPoolNinjaVariable("JOB_POOL_PRECOMPILE_HEADER", config,
                                  this->GetGeneratorTarget(), nullptr, vars);
     }
   }
@@ -2017,8 +2025,9 @@
       scanningFiles.ScanningOutput = cmStrCat(bmiFileName, ".ddi");
     }
 
-    this->addPoolNinjaVariable("JOB_POOL_COMPILE", this->GetGeneratorTarget(),
-                               source, ppBuild.Variables);
+    this->addPoolNinjaVariable("JOB_POOL_COMPILE", config,
+                               this->GetGeneratorTarget(), source,
+                               ppBuild.Variables);
 
     this->GetGlobalGenerator()->WriteBuild(this->GetImplFileStream(fileConfig),
                                            ppBuild, commandLineLengthLimit);
@@ -2046,8 +2055,8 @@
     this->ConvertToOutputFormatForShell(targetSupportDir);
   vars["OBJECT_FILE_DIR"] = this->ConvertToOutputFormatForShell(bmiFileDir);
 
-  this->addPoolNinjaVariable("JOB_POOL_COMPILE", this->GetGeneratorTarget(),
-                             source, vars);
+  this->addPoolNinjaVariable("JOB_POOL_COMPILE", config,
+                             this->GetGeneratorTarget(), source, vars);
 
   bmiBuild.RspFile = cmStrCat(bmiFileName, ".rsp");
 
@@ -2768,15 +2777,22 @@
 }
 
 void cmNinjaTargetGenerator::addPoolNinjaVariable(
-  std::string const& pool_property, cmGeneratorTarget* target,
-  cmSourceFile const* source, cmNinjaVars& vars)
+  std::string const& pool_property, std::string const& config,
+  cmGeneratorTarget* target, cmSourceFile const* source, cmNinjaVars& vars)
 {
-  // First check the current source properties, then if not found, its target
-  // ones. Allows to override a target-wide compile pool with a source-specific
-  // one.
+  // First check file set properties, then if not found the current source
+  // properties, then if not found, its target ones. Allows to override a
+  // target-wide compile pool with file set-specific or source-specific one.
   cmValue pool = {};
   if (source) {
-    pool = source->GetProperty(pool_property);
+    cmGeneratorFileSet const* fileSet =
+      target->GetFileSetForSource(config, source);
+    if (fileSet) {
+      pool = fileSet->GetProperty(pool_property);
+    }
+    if (!pool) {
+      pool = source->GetProperty(pool_property);
+    }
   }
   if (!pool) {
     pool = target->GetProperty(pool_property);
diff --git a/Source/cmNinjaTargetGenerator.h b/Source/cmNinjaTargetGenerator.h
index 41f3f7c..a019df2 100644
--- a/Source/cmNinjaTargetGenerator.h
+++ b/Source/cmNinjaTargetGenerator.h
@@ -247,6 +247,7 @@
 
   /// @param source may be nullptr.
   void addPoolNinjaVariable(std::string const& pool_property,
+                            std::string const& config,
                             cmGeneratorTarget* target,
                             cmSourceFile const* source, cmNinjaVars& vars);
 
diff --git a/Source/cmStringAlgorithms.h b/Source/cmStringAlgorithms.h
index 966091a..9e846d5 100644
--- a/Source/cmStringAlgorithms.h
+++ b/Source/cmStringAlgorithms.h
@@ -226,9 +226,9 @@
   {
   }
   cmAlphaNum(char ch)
-    : View_(this->Digits_, 1)
   {
     this->Digits_[0] = ch;
+    this->View_ = cm::string_view(this->Digits_, 1);
   }
   cmAlphaNum(int val);
   cmAlphaNum(unsigned int val);
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 8ec4cb0..6bb6935 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -2084,6 +2084,9 @@
   static Resolver<Policies::LogicalPath> const resolver(RealOS);
 #endif
   resolver.Resolve(std::move(p), p);
+#ifdef __clang_analyzer__ /* cplusplus.Move */
+  p.clear();
+#endif
   return p;
 }
 
diff --git a/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-result.txt b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-stderr.txt
new file mode 100644
index 0000000..e8d349d
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey:
+Invalid build preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey.json.in b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey.json.in
new file mode 100644
index 0000000..7e9932b
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildEmptyEnvKey.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "buildPresets": [
+    {
+      "name": "EmptyEnvKey",
+      "environment": {
+        "": "value"
+      }
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-result.txt b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-stderr.txt
new file mode 100644
index 0000000..e9ba8c2
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/BuildInvalidInheritance:
+Invalid build preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/BuildInvalidInheritance.json.in b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance.json.in
new file mode 100644
index 0000000..2dd5d81
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/BuildInvalidInheritance.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "buildPresets": [
+    {
+      "name": "InvalidInheritance",
+      "inherits": [
+        "NoExist"
+      ]
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt b/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt
index 2d5b477..d7366f7 100644
--- a/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/CyclicInheritance0-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/CyclicInheritance0:
-Cyclic preset inheritance for preset "CyclicInheritance0"$
+Cyclic preset inheritance for configure preset "CyclicInheritance0"$
diff --git a/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt b/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt
index 596fcf8..e2d9d11 100644
--- a/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/CyclicInheritance1-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/CyclicInheritance1:
-Cyclic preset inheritance for preset "CyclicInheritance0"$
+Cyclic preset inheritance for configure preset "CyclicInheritance0"$
diff --git a/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt b/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt
index a6b83c8..99fe0bd 100644
--- a/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/CyclicInheritance2-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/CyclicInheritance2:
-Cyclic preset inheritance for preset "CyclicInheritance0"$
+Cyclic preset inheritance for configure preset "CyclicInheritance0"$
diff --git a/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt b/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt
index cb9e545..d6f402f 100644
--- a/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EmptyCacheKey-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EmptyCacheKey:
-Invalid preset: "EmptyCacheKey"$
+Invalid configure preset: "EmptyCacheKey": Empty cache variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt
index bc0f866..a357267 100644
--- a/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EmptyEnvKey-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EmptyEnvKey:
-Invalid preset: "EmptyEnvKey"$
+Invalid configure preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt b/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt
index 8e19c69..eb658ce 100644
--- a/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/EnvCycle-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/EnvCycle:
-Invalid preset: "EnvCycle"
+Invalid configure preset: "EnvCycle": Invalid macro expansion
 Invalid macro expansion in "EnvCycle"$
diff --git a/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt b/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt
index 5c02d5b..dd47dc7 100644
--- a/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/ErrorNoWarningDeprecated:
-Invalid preset: "ErrorNoWarningDeprecated"$
+Invalid configure preset: "ErrorNoWarningDeprecated"$
diff --git a/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt b/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt
index 4640b1e..ca087b1 100644
--- a/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/ErrorNoWarningDev-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/ErrorNoWarningDev:
-Invalid preset: "ErrorNoWarningDev"$
+Invalid configure preset: "ErrorNoWarningDev"$
diff --git a/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt
index 216f308..a8eb597 100644
--- a/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidInheritance-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidInheritance:
-Invalid preset: "InvalidInheritance"$
+Invalid configure preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt b/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt
index 86cd861..b948676 100644
--- a/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/InvalidRegex-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/InvalidRegex:
-Invalid preset: "InvalidRegex"
+Invalid configure preset: "InvalidRegex": Invalid condition
 Invalid macro expansion in "InvalidRegex"$
diff --git a/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt b/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt
index bae9794..ccd3d4c 100644
--- a/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/NoPresetBinaryDir-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/NoPresetBinaryDir:
 Preset "NoPresetBinaryDir" missing field "binaryDir"
-Invalid preset: "NoPresetBinaryDir"$
+Invalid configure preset: "NoPresetBinaryDir"$
diff --git a/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt b/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt
index c7e5b5e..51558cd 100644
--- a/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/NoPresetGenerator-stderr.txt
@@ -1,4 +1,4 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/NoPresetGenerator:
 Preset "NoPresetGenerator" missing field "generator"
-Invalid preset: "NoPresetGenerator"$
+Invalid configure preset: "NoPresetGenerator"$
diff --git a/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-result.txt b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-stderr.txt
new file mode 100644
index 0000000..6d18c7a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey:
+Invalid package preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey.json.in b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey.json.in
new file mode 100644
index 0000000..f181e45
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageEmptyEnvKey.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 6,
+  "packagePresets": [
+    {
+      "name": "EmptyEnvKey",
+      "environment": {
+        "": "value"
+      }
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-result.txt b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-stderr.txt
new file mode 100644
index 0000000..ad32da4
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/PackageInvalidInheritance:
+Invalid package preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/PackageInvalidInheritance.json.in b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance.json.in
new file mode 100644
index 0000000..7076ecc
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageInvalidInheritance.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 6,
+  "packagePresets": [
+    {
+      "name": "InvalidInheritance",
+      "inherits": [
+        "NoExist"
+      ]
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-result.txt b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-stderr.txt
new file mode 100644
index 0000000..b29e953
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset:
+Invalid package preset: "noConfigurePreset": Package presets must either be hidden or have an associated configure preset$
diff --git a/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset.json.in b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset.json.in
new file mode 100644
index 0000000..03b09ed
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/PackageNoConfigurePreset.json.in
@@ -0,0 +1,8 @@
+{
+  "version": 6,
+  "packagePresets": [
+    {
+      "name": "noConfigurePreset"
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
index 8ca58a2..95acf52 100644
--- a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
@@ -181,6 +181,10 @@
 run_cmake_presets(CyclicInheritance1)
 run_cmake_presets(CyclicInheritance2)
 run_cmake_presets(InvalidInheritance)
+run_cmake_presets(BuildInvalidInheritance)
+run_cmake_presets(PackageInvalidInheritance)
+run_cmake_presets(TestInvalidInheritance)
+run_cmake_presets(PackageNoConfigurePreset)
 run_cmake_presets(ErrorNoWarningDev)
 run_cmake_presets(ErrorNoWarningDeprecated)
 set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
@@ -190,6 +194,9 @@
 run_cmake_presets(UnknownToolsetStrategy)
 run_cmake_presets(EmptyCacheKey)
 run_cmake_presets(EmptyEnvKey)
+run_cmake_presets(BuildEmptyEnvKey)
+run_cmake_presets(PackageEmptyEnvKey)
+run_cmake_presets(TestEmptyEnvKey)
 set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
 run_cmake_presets(UnclosedMacro)
 run_cmake_presets(NoSuchMacro)
diff --git a/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-result.txt b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-stderr.txt b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-stderr.txt
new file mode 100644
index 0000000..df00af9
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/TestEmptyEnvKey:
+Invalid test preset: "EmptyEnvKey": Empty environment variable names are not allowed$
diff --git a/Tests/RunCMake/CMakePresets/TestEmptyEnvKey.json.in b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey.json.in
new file mode 100644
index 0000000..50741d1
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestEmptyEnvKey.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "testPresets": [
+    {
+      "name": "EmptyEnvKey",
+      "environment": {
+        "": "value"
+      }
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/TestInvalidInheritance-result.txt b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/TestInvalidInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-stderr.txt
new file mode 100644
index 0000000..a72e498
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestInvalidInheritance-stderr.txt
@@ -0,0 +1,3 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/TestInvalidInheritance:
+Invalid test preset: "InvalidInheritance": Could not find inherited preset "NoExist"$
diff --git a/Tests/RunCMake/CMakePresets/TestInvalidInheritance.json.in b/Tests/RunCMake/CMakePresets/TestInvalidInheritance.json.in
new file mode 100644
index 0000000..e137f52
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/TestInvalidInheritance.json.in
@@ -0,0 +1,11 @@
+{
+  "version": 2,
+  "testPresets": [
+    {
+      "name": "InvalidInheritance",
+      "inherits": [
+        "NoExist"
+      ]
+    }
+  ]
+}
diff --git a/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt b/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt
index 2ce1316..65d1a5f 100644
--- a/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt
+++ b/Tests/RunCMake/CMakePresets/UserInheritance-stderr.txt
@@ -1,3 +1,3 @@
 ^CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresets/UserInheritance:
-Inherited preset "UserInheritance" is unreachable from preset's file$
+Inherited configure preset "UserInheritance" is unreachable from preset's file$
diff --git a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt
index 9ce6ea5..4749340 100644
--- a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt
+++ b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt
@@ -1,3 +1,3 @@
 CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset:
-Invalid preset: "noConfigurePreset"$
+Invalid build preset: "noConfigurePreset": Build presets must either be hidden or have an associated configure preset$
diff --git a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt
index a70497f..d414ed8 100644
--- a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt
+++ b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt
@@ -1,3 +1,3 @@
 CMake Error: Could not read presets from [^
 ]*/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset:
-Invalid preset: "noConfigurePreset"$
+Invalid test preset: "noConfigurePreset": Test presets must either be hidden or have an associated configure preset$
diff --git a/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt b/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt
index 2b4587f..d90b345 100644
--- a/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt
+++ b/Tests/RunCMake/CommandLine/E_capabilities-stdout.txt
@@ -1 +1 @@
-^{"debugger":(true|false),"fileApi":{"requests":\[{"kind":"codemodel","version":\[{"major":2,"minor":10}]},{"kind":"configureLog","version":\[{"major":1,"minor":0}]},{"kind":"cache","version":\[{"major":2,"minor":0}]},{"kind":"cmakeFiles","version":\[{"major":1,"minor":1}]},{"kind":"toolchains","version":\[{"major":1,"minor":1}]}]},"generators":\[.*\],"serverMode":false,"tls":(true|false),"version":{.*}}$
+^{"debugger":(true|false),"fileApi":{"requests":\[{"kind":"codemodel","version":\[{"major":2,"minor":11}]},{"kind":"configureLog","version":\[{"major":1,"minor":0}]},{"kind":"cache","version":\[{"major":2,"minor":0}]},{"kind":"cmakeFiles","version":\[{"major":1,"minor":1}]},{"kind":"toolchains","version":\[{"major":1,"minor":1}]}]},"generators":\[.*\],"serverMode":false,"tls":(true|false),"version":{.*}}$
diff --git a/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake b/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake
index f42bb1b..94ead02 100644
--- a/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake
+++ b/Tests/RunCMake/FASTBuild/UnityIsolate-check.cmake
@@ -10,7 +10,7 @@
       '.*some_source_file_3.cpp',
       '.*some_source_file_4.cpp'
     }
-    .UnityInputIsolatedFiles =
+    .UnityInputExcludedFiles =
     {
       '.*some_source_file_1.cpp',
       '.*some_source_file_4.cpp'
diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-check.py b/Tests/RunCMake/FileAPI/codemodel-v2-check.py
index 34d0e86..b3958e7 100644
--- a/Tests/RunCMake/FileAPI/codemodel-v2-check.py
+++ b/Tests/RunCMake/FileAPI/codemodel-v2-check.py
@@ -13,7 +13,7 @@
     assert is_list(o)
     assert len(o) == 1
     major = 2
-    minor = 10
+    minor = 11
     check_index_object(o[0], "codemodel", major, minor, check_object_codemodel(g, major, minor))
 
 def check_backtrace(t, b, backtrace):
@@ -1077,6 +1077,8 @@
 
         read_codemodel_json_data("targets/c_headers_1.json"),
         read_codemodel_json_data("targets/c_headers_2.json"),
+        read_codemodel_json_data("targets/c_sources_1.json"),
+        read_codemodel_json_data("targets/c_sources_2.json"),
     ]
 
     if sys.platform == "darwin":
diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json
index ea7a079..1e84bb9 100644
--- a/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json
+++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json
@@ -5,7 +5,9 @@
   "childSources": null,
   "targetIds": [
     "^c_headers_1::@6b8db101d64c125f29fe$",
-    "^c_headers_2::@6b8db101d64c125f29fe$"
+    "^c_headers_2::@6b8db101d64c125f29fe$",
+    "^c_sources_1::@6b8db101d64c125f29fe$",
+    "^c_sources_2::@6b8db101d64c125f29fe$"
   ],
   "abstractTargetIds": null,
   "projectName": "codemodel-v2",
diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/projects/codemodel-v2.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/projects/codemodel-v2.json
index ad73de9..658d77b 100644
--- a/Tests/RunCMake/FileAPI/codemodel-v2-data/projects/codemodel-v2.json
+++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/projects/codemodel-v2.json
@@ -32,7 +32,9 @@
         "^c_static_exe::@6890427a1f51a3e7e1df$",
         "^c_subdir::@6890427a1f51a3e7e1df$",
         "^c_headers_1::@6b8db101d64c125f29fe$",
-        "^c_headers_2::@6b8db101d64c125f29fe$"
+        "^c_headers_2::@6b8db101d64c125f29fe$",
+        "^c_sources_1::@6b8db101d64c125f29fe$",
+        "^c_sources_2::@6b8db101d64c125f29fe$"
     ],
     "abstractTargetIds": [
         "^interface_lib::@6890427a1f51a3e7e1df$"
diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_top.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_top.json
index 1cad522..8df8133 100644
--- a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_top.json
+++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/all_build_top.json
@@ -230,6 +230,14 @@
             "backtrace": null
         },
         {
+            "id": "^c_sources_1::@6b8db101d64c125f29fe$",
+            "backtrace": null
+        },
+        {
+            "id": "^c_sources_2::@6b8db101d64c125f29fe$",
+            "backtrace": null
+        },
+        {
             "id": "^static_framework::@217a96c3a62328a73ef4$",
             "backtrace": null
         },
@@ -421,6 +429,14 @@
             "backtrace": null
         },
         {
+            "id": "^c_sources_1::@6b8db101d64c125f29fe$",
+            "backtrace": null
+        },
+        {
+            "id": "^c_sources_2::@6b8db101d64c125f29fe$",
+            "backtrace": null
+        },
+        {
             "id": "^static_framework::@217a96c3a62328a73ef4$",
             "backtrace": null
         },
diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_sources_1.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_sources_1.json
new file mode 100644
index 0000000..64adf2e
--- /dev/null
+++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_sources_1.json
@@ -0,0 +1,188 @@
+{
+  "name": "c_sources_1",
+  "id": "^c_sources_1::@6b8db101d64c125f29fe$",
+  "directorySource": "^fileset$",
+  "projectName": "codemodel-v2",
+  "type": "STATIC_LIBRARY",
+  "imported": null,
+  "local": null,
+  "abstract": null,
+  "symbolic": null,
+  "isGeneratorProvided": null,
+  "fileSets": [
+    {
+      "name": "SOURCES",
+      "type": "SOURCES",
+      "visibility": "PRIVATE",
+      "baseDirectories": [
+        "^fileset$"
+      ]
+    },
+    {
+      "name": "public_srcs",
+      "type": "SOURCES",
+      "visibility": "PUBLIC",
+      "baseDirectories": [
+        "^fileset$"
+      ]
+    }
+  ],
+  "sources": [
+    {
+      "path": "^fileset/empty\\.c$",
+      "isGenerated": null,
+      "fileSetName": "public_srcs",
+      "sourceGroupName": "Source Files",
+      "compileGroupLanguage": "C",
+      "backtrace": [
+        {
+          "file": "^fileset/CMakeLists\\.txt$",
+          "line": 40,
+          "command": "target_sources",
+          "hasParent": true
+        },
+        {
+          "file": "^fileset/CMakeLists\\.txt$",
+          "line": null,
+          "command": null,
+          "hasParent": false
+        }
+      ]
+    },
+    {
+      "path": "^fileset/other\\.c$",
+      "isGenerated": null,
+      "fileSetName": "SOURCES",
+      "sourceGroupName": "Source Files",
+      "compileGroupLanguage": null,
+      "backtrace": [
+        {
+          "file": "^fileset/CMakeLists\\.txt$",
+          "line": 35,
+          "command": "target_sources",
+          "hasParent": true
+        },
+        {
+          "file": "^fileset/CMakeLists\\.txt$",
+          "line": null,
+          "command": null,
+          "hasParent": false
+        }
+      ]
+    }
+  ],
+  "interfaceSources": [
+    {
+      "path": "^fileset/empty\\.c$",
+      "isGenerated": null,
+      "fileSetName": "SOURCES",
+      "sourceGroupName": "Source Files"
+    }
+  ],
+  "sourceGroups": [
+    {
+      "name": "Source Files",
+      "sourcePaths": [
+        "^fileset/empty\\.c$",
+        "^fileset/other\\.c$"
+      ],
+      "interfaceSourcePaths": [
+        "^fileset/empty\\.c$"
+      ]
+    }
+  ],
+  "compileGroups": [
+    {
+      "language": "C",
+      "sourcePaths": [
+        "^fileset/empty\\.c$"
+      ],
+      "includes": [
+        {
+          "path": "^.*/Tests/RunCMake/FileAPI/fileset/dir$",
+          "isSystem": null,
+          "backtrace": [
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": 46,
+              "command": "set_property",
+              "hasParent": true
+            },
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": null,
+              "command": null,
+              "hasParent": false
+            }
+          ]
+        }
+      ],
+      "frameworks": null,
+      "defines": [
+        {
+          "define": "DEF2",
+          "backtrace": [
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": 43,
+              "command": "set_property",
+              "hasParent": true
+            },
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": null,
+              "command": null,
+              "hasParent": false
+            }
+          ]
+        },
+        {
+          "define": "_MBCS",
+          "backtrace": null
+        }
+      ],
+      "compileCommandFragments": null
+    }
+  ],
+  "backtrace": [
+    {
+      "file": "^fileset/CMakeLists\\.txt$",
+      "line": 33,
+      "command": "add_library",
+      "hasParent": true
+    },
+    {
+      "file": "^fileset/CMakeLists\\.txt$",
+      "line": null,
+      "command": null,
+      "hasParent": false
+    }
+  ],
+  "folder": null,
+  "nameOnDisk": "^(lib)?c_sources_1\\.(a|lib|l)$",
+  "artifacts": [
+    {
+      "path": "^fileset/((Debug|Release|RelWithDebInfo|MinSizeRel)/)?(lib)?c_sources_1\\.(a|lib|l)$",
+      "_dllExtra": false
+    }
+  ],
+  "build": "^fileset$",
+  "source": "^fileset$",
+  "install": null,
+  "link": null,
+  "archive": {
+    "lto": null
+  },
+  "dependencies": [
+    {
+      "id": "^ZERO_CHECK::@6890427a1f51a3e7e1df$",
+      "backtrace": null
+    }
+  ],
+  "linkLibraries": null,
+  "interfaceLinkLibraries": null,
+  "compileDependencies": null,
+  "interfaceCompileDependencies": null,
+  "objectDependencies": null,
+  "orderDependencies": null
+}
diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_sources_2.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_sources_2.json
new file mode 100644
index 0000000..65c7c77
--- /dev/null
+++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_sources_2.json
@@ -0,0 +1,218 @@
+{
+  "name": "c_sources_2",
+  "id": "^c_sources_2::@6b8db101d64c125f29fe$",
+  "directorySource": "^fileset$",
+  "projectName": "codemodel-v2",
+  "type": "STATIC_LIBRARY",
+  "imported": null,
+  "local": null,
+  "abstract": null,
+  "symbolic": null,
+  "isGeneratorProvided": null,
+  "fileSets": null,
+  "sources": [
+    {
+      "path": "^fileset/empty\\.c$",
+      "isGenerated": null,
+      "fileSetName": null,
+      "sourceGroupName": "Source Files",
+      "compileGroupLanguage": "C",
+      "backtrace": [
+        {
+          "file": "^fileset/CMakeLists\\.txt$",
+          "line": 50,
+          "command": "target_link_libraries",
+          "hasParent": true
+        },
+        {
+          "file": "^fileset/CMakeLists\\.txt$",
+          "line": null,
+          "command": null,
+          "hasParent": false
+        }
+      ]
+    }
+  ],
+  "interfaceSources": null,
+  "sourceGroups": [
+    {
+      "name": "Source Files",
+      "sourcePaths": [
+        "^fileset/empty\\.c$"
+      ],
+      "interfaceSourcePaths": null
+    }
+  ],
+  "compileGroups": [
+    {
+      "language": "C",
+      "sourcePaths": [
+        "^fileset/empty\\.c$"
+      ],
+      "includes": [
+        {
+          "path": "^.*/Tests/RunCMake/FileAPI/fileset/dir$",
+          "isSystem": null,
+          "backtrace": [
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": 47,
+              "command": "set_property",
+              "hasParent": true
+            },
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": null,
+              "command": null,
+              "hasParent": false
+            }
+          ]
+        }
+      ],
+      "frameworks": null,
+      "defines": [
+        {
+          "define": "DEF3",
+          "backtrace": [
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": 44,
+              "command": "set_property",
+              "hasParent": true
+            },
+            {
+              "file": "^fileset/CMakeLists\\.txt$",
+              "line": null,
+              "command": null,
+              "hasParent": false
+            }
+          ]
+        },
+        {
+          "define": "_MBCS",
+          "backtrace": null
+        }
+      ],
+      "compileCommandFragments": null
+    }
+  ],
+  "backtrace": [
+    {
+      "file": "^fileset/CMakeLists\\.txt$",
+      "line": 49,
+      "command": "add_library",
+      "hasParent": true
+    },
+    {
+      "file": "^fileset/CMakeLists\\.txt$",
+      "line": null,
+      "command": null,
+      "hasParent": false
+    }
+  ],
+  "folder": null,
+  "nameOnDisk": "^(lib)?c_sources_2\\.(a|lib|l)$",
+  "artifacts": [
+    {
+      "path": "^fileset/((Debug|Release|RelWithDebInfo|MinSizeRel)/)?(lib)?c_sources_2\\.(a|lib|l)$",
+      "_dllExtra": false
+    }
+  ],
+  "build": "^fileset$",
+  "source": "^fileset$",
+  "install": null,
+  "link": null,
+  "archive": {
+    "lto": null
+  },
+  "dependencies": [
+    {
+      "id": "^ZERO_CHECK::@6890427a1f51a3e7e1df$",
+      "backtrace": null
+    },
+    {
+        "id": "^c_sources_1::@6b8db101d64c125f29fe$",
+        "fragment": null,
+        "backtrace": [
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": 50,
+                "command": "target_link_libraries",
+                "hasParent": true
+            },
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": null,
+                "command": null,
+                "hasParent": false
+            }
+        ],
+        "fromDependency": null
+    }
+  ],
+  "linkLibraries": [
+    {
+        "id": "^c_sources_1::@6b8db101d64c125f29fe$",
+        "fragment": null,
+        "backtrace": [
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": 50,
+                "command": "target_link_libraries",
+                "hasParent": true
+            },
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": null,
+                "command": null,
+                "hasParent": false
+            }
+        ],
+        "fromDependency": null
+    }
+  ],
+  "interfaceLinkLibraries": [
+    {
+        "id": "^c_sources_1::@6b8db101d64c125f29fe$",
+        "fragment": null,
+        "backtrace": [
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": 50,
+                "command": "target_link_libraries",
+                "hasParent": true
+            },
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": null,
+                "command": null,
+                "hasParent": false
+            }
+        ]
+    }
+  ],
+  "compileDependencies": [
+    {
+        "id": "^c_sources_1::@6b8db101d64c125f29fe$",
+        "fragment": null,
+        "backtrace": [
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": 50,
+                "command": "target_link_libraries",
+                "hasParent": true
+            },
+            {
+                "file": "^fileset/CMakeLists\\.txt$",
+                "line": null,
+                "command": null,
+                "hasParent": false
+            }
+        ],
+        "fromDependency": null
+    }
+  ],
+  "interfaceCompileDependencies": null,
+  "objectDependencies": null,
+  "orderDependencies": null
+}
diff --git a/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt b/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt
index c318b21..183d721 100644
--- a/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt
+++ b/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt
@@ -26,3 +26,25 @@
   FILE_SET d
   )
 install(TARGETS c_headers_2)
+
+#
+# SOURCES file set type
+#
+add_library(c_sources_1 STATIC)
+
+target_sources(c_sources_1
+  PRIVATE FILE_SET SOURCES BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}" FILES other.c
+  )
+set_property(FILE_SET SOURCES TARGET c_sources_1 PROPERTY COMPILE_DEFINITIONS DEF1)
+
+target_sources(c_sources_1
+  PUBLIC FILE_SET public_srcs TYPE SOURCES BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}" FILES empty.c
+  )
+set_property(FILE_SET public_srcs TARGET c_sources_1 PROPERTY COMPILE_DEFINITIONS DEF2)
+set_property(FILE_SET public_srcs TARGET c_sources_1 PROPERTY INTERFACE_COMPILE_DEFINITIONS DEF3)
+
+set_property(FILE_SET public_srcs TARGET c_sources_1 PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/dir")
+set_property(FILE_SET public_srcs TARGET c_sources_1 PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/dir")
+
+add_library(c_sources_2 STATIC)
+target_link_libraries(c_sources_2 PRIVATE c_sources_1)
diff --git a/Tests/RunCMake/MultiLint/RunCMakeTest.cmake b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake
index b9b69fb..a42945a 100644
--- a/Tests/RunCMake/MultiLint/RunCMakeTest.cmake
+++ b/Tests/RunCMake/MultiLint/RunCMakeTest.cmake
@@ -28,9 +28,9 @@
   run_multilint(genex)
 endif()
 
-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}")
+function(run_skip_linting test_name prop_fs prop_sf prop_tgt)
+  set(RunCMake_TEST_VARIANT_DESCRIPTION " (prop_fs=${prop_fs}, prop_sf=${prop_sf}, prop_tgt=${prop_tgt})")
+  list(APPEND RunCMake_TEST_OPTIONS "-Dprop_fs=${prop_fs}" "-Dprop_sf=${prop_sf}" "-Dprop_tgt=${prop_tgt}")
 
   set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test_name}-build")
   set(RunCMake_TEST_NO_CLEAN 1)
@@ -40,52 +40,90 @@
   run_cmake_command(${test_name}-Build ${CMAKE_COMMAND} --build .)
 endfunction()
 
-# There are a few `SKIP_LINTING` source/target propertiy combinations
+# There are a few `SKIP_LINTING` file set/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
+#  prop_fs  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
+#    -        -         OFF       OFF
+#    OFF      -         OFF       OFF
+#    ON       -         OFF       ON
+#    -        -         ON        ON
+#    OFF      -         ON        OFF
+#    ON       -         ON        ON
+#    -        OFF       OFF       OFF
+#    OFF      OFF       OFF       OFF
+#    ON       OFF       OFF       ON
+#    -        OFF       ON        OFF
+#    OFF      OFF       ON        OFF
+#    ON       OFF       ON        ON
+#    -        ON        OFF       ON
+#    OFF      ON        OFF       OFF
+#    ON       ON        OFF       ON
+#    -        ON        ON        ON
+#    OFF      ON        ON        OFF
+#    ON       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
+#  prop_fs  prop_sf   prop_tgt   result
+#  ------------------------------------
+#    -        -         -         OFF
+#    OFF      -         -         OFF
+#    -        OFF       -         OFF
+#    OFF      OFF       -         OFF
+#    OFF      ON        -         OFF
+#    -        -         OFF       OFF
+#    OFF      -         OFF       OFF
+#    OFF      -         ON        OFF
+#    -        OFF       OFF       OFF
+#    OFF      OFF       OFF       OFF
+#    -        OFF       ON        OFF
+#    OFF      OFF       ON        OFF
+#    OFF      ON        OFF       OFF
+#    OFF      ON        ON        OFF
+#    ON       -         -         ON
+#    ON       OFF       -         ON
+#    -        ON        -         ON
+#    ON       ON        -         ON
+#    ON       -         OFF       ON
+#    -        -         ON        ON
+#    ON       -         ON        ON
+#    ON       OFF       OFF       ON
+#    ON       OFF       ON        ON
+#    -        ON        OFF       ON
+#    ON       ON        OFF       ON
+#    -        ON        ON        ON
+#    ON       ON        ON        ON
 
 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}")
+  set(prop_fs_OFF_variants  "-" OFF "-" OFF OFF "-" OFF OFF "-" OFF "-" OFF OFF OFF)
+  set(prop_sf_OFF_variants  "-" "-" OFF OFF ON  "-" "-" "-" OFF OFF OFF OFF ON  ON)
+  set(prop_tgt_OFF_variants "-" "-" "-" "-" "-" OFF OFF ON  OFF OFF ON  ON  OFF ON)
+  foreach(prop_fs prop_sf prop_tgt IN ZIP_LISTS prop_fs_OFF_variants prop_sf_OFF_variants prop_tgt_OFF_variants)
+    run_skip_linting(${lang}_skip_linting_OFF "${prop_fs}" "${prop_sf}" "${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}")
+  set(prop_fs_ON_variants  ON  ON  "-" ON  ON  "-" ON  ON  ON  "-" ON  "-" ON)
+  set(prop_sf_ON_variants  "-" OFF ON  ON  "-" "-" "-" OFF OFF ON  ON  ON  ON)
+  set(prop_tgt_ON_variants "-" "-" "-" "-" OFF ON  ON  OFF ON  OFF OFF ON  ON)
+  foreach(prop_fs prop_sf prop_tgt IN ZIP_LISTS prop_fs_ON_variants prop_sf_ON_variants prop_tgt_ON_variants)
+    run_skip_linting(${lang}_skip_linting_ON "${prop_fs}" "${prop_sf}" "${prop_tgt}")
     if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
-      run_skip_linting(${lang}-launch_skip_linting_ON "${prop_fs}" "${prop_tgt}")
+      run_skip_linting(${lang}-launch_skip_linting_ON "${prop_fs}" "${prop_sf}" "${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 ab8d646..a655339 100644
--- a/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake
+++ b/Tests/RunCMake/MultiLint/setup_skip_linter_test.cmake
@@ -12,7 +12,12 @@
   set(CMAKE_${lang}_CPPCHECK "${maybe_genex_pre}${PSEUDO_CPPCHECK}${maybe_genex_post}" -error)
 
   string(TOLOWER "${lang}" ext)
-  add_executable(main main.${ext})
+  add_executable(main)
+  target_sources(main PRIVATE FILE_SET SOURCES FILES main.${ext})
+
+  if(NOT prop_fs STREQUAL "-")
+    set_property(FILE_SET SOURCES TARGET main PROPERTY SKIP_LINTING ${prop_fs})
+  endif()
 
   if(NOT prop_sf STREQUAL "-")
     set_source_files_properties(main.${ext} PROPERTIES SKIP_LINTING ${prop_sf})
diff --git a/Tests/RunCMake/Ninja/FileSetJobPool-check.cmake b/Tests/RunCMake/Ninja/FileSetJobPool-check.cmake
new file mode 100644
index 0000000..0998a22
--- /dev/null
+++ b/Tests/RunCMake/Ninja/FileSetJobPool-check.cmake
@@ -0,0 +1,17 @@
+set(log "${RunCMake_BINARY_DIR}/FileSetJobPool-build/build.ninja")
+file(READ "${log}" build_file)
+if(NOT "${build_file}" MATCHES "pool = file_set_compile_pool")
+  string(CONCAT RunCMake_TEST_FAILED "Log file:\n ${log}\n" "does not have expected line: pool = file_set_compile_pool")
+endif()
+if(NOT "${build_file}" MATCHES "pool = target_link_pool")
+  string(CONCAT RunCMake_TEST_FAILED "Log file:\n ${log}\n" "does not have expected line: pool = target_link_pool")
+endif()
+# Even though `source_file_compile_pool` and `target_compile_pool` were defined as the target's compile jobs pool,
+# since the file set property overrides it with `file_set_compile_pool` pool, the source file compile job
+# and the target compile job pool should not exist in the generated Ninja file.
+if("${build_file}" MATCHES "pool = source_file_compile_pool")
+  string(CONCAT RunCMake_TEST_FAILED "Log file:\n ${log}\n" "have unexpected line: pool = source_file_compile_pool")
+endif()
+if("${build_file}" MATCHES "pool = target_compile_pool")
+  string(CONCAT RunCMake_TEST_FAILED "Log file:\n ${log}\n" "have unexpected line: pool = target_compile_pool")
+endif()
diff --git a/Tests/RunCMake/Ninja/FileSetJobPool.cmake b/Tests/RunCMake/Ninja/FileSetJobPool.cmake
new file mode 100644
index 0000000..cd9dfad
--- /dev/null
+++ b/Tests/RunCMake/Ninja/FileSetJobPool.cmake
@@ -0,0 +1,16 @@
+set_property(GLOBAL PROPERTY JOB_POOLS source_file_compile_tool=2 file_set_compile_pool=2
+                                       target_compile_pool=4 target_link_pool=1)
+
+enable_language(C)
+
+set_property(SOURCE hello.c PROPERTY JOB_POOL_COMPILE "source_file_compile_pool")
+
+add_executable(hello)
+target_sources(hello PRIVATE FILE_SET SOURCES FILES hello.c)
+
+set_property(FILE_SET SOURCES TARGET hello PROPERTY JOB_POOL_COMPILE "file_set_compile_pool")
+
+set_property(TARGET hello PROPERTY JOB_POOL_COMPILE "target_compile_pool")
+set_property(TARGET hello PROPERTY JOB_POOL_LINK "target_link_pool")
+
+include(CheckNoPrefixSubDir.cmake)
diff --git a/Tests/RunCMake/Ninja/RunCMakeTest.cmake b/Tests/RunCMake/Ninja/RunCMakeTest.cmake
index 32eda9d..65202f7 100644
--- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake
+++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake
@@ -121,6 +121,7 @@
 run_cmake_with_options(CustomCommandDepfileAsByproduct -DCMAKE_BUILD_TYPE=Debug)
 run_cmake(CustomCommandJobPool)
 run_cmake(SourceFileJobPool)
+run_cmake(FileSetJobPool)
 run_cmake(JobPoolUsesTerminal)
 
 run_cmake(RspFileC)
diff --git a/Tests/RunCMake/VerifyHeaderSets/VerifyInterfaceHeaderSets.cmake b/Tests/RunCMake/VerifyHeaderSets/VerifyInterfaceHeaderSets.cmake
index 2efd560..c96279a 100644
--- a/Tests/RunCMake/VerifyHeaderSets/VerifyInterfaceHeaderSets.cmake
+++ b/Tests/RunCMake/VerifyHeaderSets/VerifyInterfaceHeaderSets.cmake
@@ -83,3 +83,10 @@
 target_sources(skip_linting INTERFACE FILE_SET HEADERS FILES lang_test.h skip_linting.h)
 set_property(SOURCE skip_linting.h PROPERTY LANGUAGE C)
 set_property(SOURCE skip_linting.h PROPERTY SKIP_LINTING TRUE)
+
+add_library(skip_linting2 STATIC lib.c)
+target_sources(skip_linting2 INTERFACE FILE_SET HEADERS FILES lang_test.h)
+target_sources(skip_linting2 INTERFACE FILE_SET skip_headers TYPE HEADERS FILES skip_linting2.h)
+set_property(FILE_SET skip_headers TARGET skip_linting2 PROPERTY SKIP_LINTING TRUE)
+
+set_property(SOURCE skip_linting2.h PROPERTY LANGUAGE C)
diff --git a/Tests/RunCMake/VerifyHeaderSets/VerifyPrivateHeaderSets.cmake b/Tests/RunCMake/VerifyHeaderSets/VerifyPrivateHeaderSets.cmake
index 1fc92e1..975a398 100644
--- a/Tests/RunCMake/VerifyHeaderSets/VerifyPrivateHeaderSets.cmake
+++ b/Tests/RunCMake/VerifyHeaderSets/VerifyPrivateHeaderSets.cmake
@@ -86,3 +86,10 @@
 target_sources(skip_linting PRIVATE FILE_SET HEADERS FILES lang_test.h skip_linting.h)
 set_property(SOURCE skip_linting.h PROPERTY LANGUAGE C)
 set_property(SOURCE skip_linting.h PROPERTY SKIP_LINTING TRUE)
+
+add_library(skip_linting2 STATIC lib.c)
+target_sources(skip_linting2 PRIVATE FILE_SET HEADERS FILES lang_test.h)
+target_sources(skip_linting2 PRIVATE FILE_SET skip_headers TYPE HEADERS FILES skip_linting2.h)
+set_property(FILE_SET skip_headers TARGET skip_linting2 PROPERTY SKIP_LINTING TRUE)
+
+set_property(SOURCE skip_linting2.h PROPERTY LANGUAGE C)
diff --git a/Tests/RunCMake/VerifyHeaderSets/skip_linting2.h b/Tests/RunCMake/VerifyHeaderSets/skip_linting2.h
new file mode 100644
index 0000000..8a268bd
--- /dev/null
+++ b/Tests/RunCMake/VerifyHeaderSets/skip_linting2.h
@@ -0,0 +1,3 @@
+#error "This file should not be included"
+
+extern void skip_linting2_h(void);
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-Exclude-stderr.txt b/Tests/RunCMake/list/FILTER-PREDICATE-Exclude-stderr.txt
new file mode 100644
index 0000000..d9ba38d
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-Exclude-stderr.txt
@@ -0,0 +1,2 @@
+^mylist was: FILTER_THIS_BIT;DO_NOT_FILTER_THIS;thisisanitem;FILTER_THIS_THING
+mylist is: DO_NOT_FILTER_THIS;thisisanitem$
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-Exclude.cmake b/Tests/RunCMake/list/FILTER-PREDICATE-Exclude.cmake
new file mode 100644
index 0000000..7b1f349
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-Exclude.cmake
@@ -0,0 +1,50 @@
+# Predicate: returns TRUE for items starting with "FILTER_THIS_"
+function(starts_with_filter input result)
+  if(input MATCHES "^FILTER_THIS_")
+    set(${result} TRUE PARENT_SCOPE)
+  else()
+    set(${result} FALSE PARENT_SCOPE)
+  endif()
+endfunction()
+
+set(mylist FILTER_THIS_BIT DO_NOT_FILTER_THIS thisisanitem FILTER_THIS_THING)
+message("mylist was: ${mylist}")
+list(FILTER mylist EXCLUDE PREDICATE starts_with_filter)
+message("mylist is: ${mylist}")
+
+# EXCLUDE with macro predicate
+macro(is_short input result)
+  string(LENGTH "${input}" _len)
+  if(_len LESS 6)
+    set(${result} TRUE)
+  else()
+    set(${result} FALSE)
+  endif()
+endmacro()
+
+set(mylist ab cdefgh ij klmnop qr)
+list(FILTER mylist EXCLUDE PREDICATE is_short)
+if(NOT mylist STREQUAL "cdefgh;klmnop")
+  message(FATAL_ERROR "FILTER(EXCLUDE PREDICATE macro) is \"${mylist}\", expected \"cdefgh;klmnop\"")
+endif()
+
+# EXCLUDE on empty list
+set(empty_list "")
+list(FILTER empty_list EXCLUDE PREDICATE starts_with_filter)
+if(NOT empty_list STREQUAL "")
+  message(FATAL_ERROR "FILTER(EXCLUDE PREDICATE empty) is \"${empty_list}\", expected \"\"")
+endif()
+
+# EXCLUDE where nothing matches (all elements kept)
+set(mylist alpha bravo charlie)
+list(FILTER mylist EXCLUDE PREDICATE starts_with_filter)
+if(NOT mylist STREQUAL "alpha;bravo;charlie")
+  message(FATAL_ERROR "FILTER(EXCLUDE PREDICATE no-match) is \"${mylist}\", expected \"alpha;bravo;charlie\"")
+endif()
+
+# EXCLUDE where everything matches (all elements removed)
+set(mylist FILTER_THIS_A FILTER_THIS_B FILTER_THIS_C)
+list(FILTER mylist EXCLUDE PREDICATE starts_with_filter)
+if(NOT mylist STREQUAL "")
+  message(FATAL_ERROR "FILTER(EXCLUDE PREDICATE all-match) is \"${mylist}\", expected \"\"")
+endif()
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-Include-stderr.txt b/Tests/RunCMake/list/FILTER-PREDICATE-Include-stderr.txt
new file mode 100644
index 0000000..5e5280d
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-Include-stderr.txt
@@ -0,0 +1,2 @@
+^mylist was: FILTER_THIS_BIT;DO_NOT_FILTER_THIS;thisisanitem;FILTER_THIS_THING
+mylist is: FILTER_THIS_BIT;FILTER_THIS_THING$
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-Include.cmake b/Tests/RunCMake/list/FILTER-PREDICATE-Include.cmake
new file mode 100644
index 0000000..412ff25
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-Include.cmake
@@ -0,0 +1,51 @@
+# Predicate: returns TRUE for items starting with "FILTER_THIS_"
+function(starts_with_filter input result)
+  if(input MATCHES "^FILTER_THIS_")
+    set(${result} TRUE PARENT_SCOPE)
+  else()
+    set(${result} FALSE PARENT_SCOPE)
+  endif()
+endfunction()
+
+# Predicate as macro
+macro(is_short input result)
+  string(LENGTH "${input}" _len)
+  if(_len LESS 6)
+    set(${result} TRUE)
+  else()
+    set(${result} FALSE)
+  endif()
+endmacro()
+
+set(mylist FILTER_THIS_BIT DO_NOT_FILTER_THIS thisisanitem FILTER_THIS_THING)
+message("mylist was: ${mylist}")
+list(FILTER mylist INCLUDE PREDICATE starts_with_filter)
+message("mylist is: ${mylist}")
+
+# INCLUDE with macro predicate
+set(mylist ab cdefgh ij klmnop qr)
+list(FILTER mylist INCLUDE PREDICATE is_short)
+if(NOT mylist STREQUAL "ab;ij;qr")
+  message(FATAL_ERROR "FILTER(INCLUDE PREDICATE macro) is \"${mylist}\", expected \"ab;ij;qr\"")
+endif()
+
+# INCLUDE on empty list
+set(empty_list "")
+list(FILTER empty_list INCLUDE PREDICATE starts_with_filter)
+if(NOT empty_list STREQUAL "")
+  message(FATAL_ERROR "FILTER(INCLUDE PREDICATE empty) is \"${empty_list}\", expected \"\"")
+endif()
+
+# INCLUDE where nothing matches (all elements removed)
+set(mylist alpha bravo charlie)
+list(FILTER mylist INCLUDE PREDICATE starts_with_filter)
+if(NOT mylist STREQUAL "")
+  message(FATAL_ERROR "FILTER(INCLUDE PREDICATE no-match) is \"${mylist}\", expected \"\"")
+endif()
+
+# INCLUDE where everything matches
+set(mylist FILTER_THIS_A FILTER_THIS_B FILTER_THIS_C)
+list(FILTER mylist INCLUDE PREDICATE starts_with_filter)
+if(NOT mylist STREQUAL "FILTER_THIS_A;FILTER_THIS_B;FILTER_THIS_C")
+  message(FATAL_ERROR "FILTER(INCLUDE PREDICATE all-match) is \"${mylist}\", expected \"FILTER_THIS_A;FILTER_THIS_B;FILTER_THIS_C\"")
+endif()
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput-result.txt b/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput-stderr.txt b/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput-stderr.txt
new file mode 100644
index 0000000..2fbc148
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at FILTER-PREDICATE-NoOutput\.cmake:6 \(list\):
+  list sub-command FILTER, mode PREDICATE: function "bad_predicate" did not
+  set the output variable\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput.cmake b/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput.cmake
new file mode 100644
index 0000000..f1f4621
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-NoOutput.cmake
@@ -0,0 +1,6 @@
+function(bad_predicate in out)
+  # Deliberately does NOT set ${out}
+endfunction()
+
+set(mylist alpha bravo charlie)
+list(FILTER mylist INCLUDE PREDICATE bad_predicate)
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments-result.txt b/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments-stderr.txt b/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments-stderr.txt
new file mode 100644
index 0000000..e3c7a10
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments-stderr.txt
@@ -0,0 +1,4 @@
+^CMake Error at FILTER-PREDICATE-TooManyArguments\.cmake:6 \(list\):
+  list sub-command FILTER, mode PREDICATE requires five arguments\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments.cmake b/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments.cmake
new file mode 100644
index 0000000..87a8532
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-TooManyArguments.cmake
@@ -0,0 +1,6 @@
+function(my_predicate in out)
+  set(${out} TRUE PARENT_SCOPE)
+endfunction()
+
+set(mylist alpha bravo charlie)
+list(FILTER mylist INCLUDE PREDICATE my_predicate extra_arg)
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction-result.txt b/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction-stderr.txt b/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction-stderr.txt
new file mode 100644
index 0000000..2b6234b
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at FILTER-PREDICATE-UnknownFunction\.cmake:2 \(list\):
+  list sub-command FILTER, mode PREDICATE: unknown function
+  "no_such_function"\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$
diff --git a/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction.cmake b/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction.cmake
new file mode 100644
index 0000000..48461bd
--- /dev/null
+++ b/Tests/RunCMake/list/FILTER-PREDICATE-UnknownFunction.cmake
@@ -0,0 +1,2 @@
+set(mylist alpha bravo charlie)
+list(FILTER mylist INCLUDE PREDICATE no_such_function)
diff --git a/Tests/RunCMake/list/RunCMakeTest.cmake b/Tests/RunCMake/list/RunCMakeTest.cmake
index dd4264c..1fd86a9 100644
--- a/Tests/RunCMake/list/RunCMakeTest.cmake
+++ b/Tests/RunCMake/list/RunCMakeTest.cmake
@@ -37,6 +37,11 @@
 run_cmake(FILTER-REGEX-InvalidOperator)
 run_cmake(FILTER-REGEX-Valid0)
 run_cmake(FILTER-REGEX-Valid1)
+run_cmake(FILTER-PREDICATE-UnknownFunction)
+run_cmake(FILTER-PREDICATE-NoOutput)
+run_cmake(FILTER-PREDICATE-TooManyArguments)
+run_cmake(FILTER-PREDICATE-Include)
+run_cmake(FILTER-PREDICATE-Exclude)
 
 run_cmake(JOIN-NoArguments)
 run_cmake(JOIN-NoVariable)
@@ -65,6 +70,7 @@
 run_cmake(TRANSFORM-REPLACE-InvalidReplace1)
 run_cmake(TRANSFORM-REPLACE-InvalidReplace2)
 run_cmake(TRANSFORM-APPLY-NoFunction)
+run_cmake(TRANSFORM-APPLY-UnknownFunction)
 run_cmake(TRANSFORM-APPLY-NoOutput)
 # 'selector' oriented tests
 run_cmake(TRANSFORM-Selector-REGEX-NoArguments)
@@ -81,6 +87,9 @@
 run_cmake(TRANSFORM-Selector-FOR-ZeroStepArgument)
 run_cmake(TRANSFORM-Selector-FOR-NegativeStepArgument)
 run_cmake(TRANSFORM-Selector-FOR-BackwardsRange)
+run_cmake(TRANSFORM-Selector-PREDICATE-NoArguments)
+run_cmake(TRANSFORM-Selector-PREDICATE-UnknownFunction)
+run_cmake(TRANSFORM-Selector-PREDICATE-NoOutput)
 # 'output' oriented tests
 run_cmake(TRANSFORM-Output-OUTPUT_VARIABLE-NoArguments)
 run_cmake(TRANSFORM-Output-OUTPUT_VARIABLE-TooManyArguments)
@@ -93,6 +102,7 @@
 run_cmake(TRANSFORM-PREPEND)
 run_cmake(TRANSFORM-REPLACE)
 run_cmake(TRANSFORM-APPLY)
+run_cmake(TRANSFORM-PREDICATE)
 run_cmake(CMP0186)
 
 # argument tests
diff --git a/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction-result.txt b/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction-stderr.txt b/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction-stderr.txt
new file mode 100644
index 0000000..cb59954
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at TRANSFORM-APPLY-UnknownFunction\.cmake:2 \(list\):
+  list sub-command TRANSFORM, action APPLY: unknown function
+  "no_such_function"\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$
diff --git a/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction.cmake b/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction.cmake
new file mode 100644
index 0000000..5275439
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-APPLY-UnknownFunction.cmake
@@ -0,0 +1,2 @@
+set(mylist alpha bravo charlie)
+list(TRANSFORM mylist APPLY no_such_function)
diff --git a/Tests/RunCMake/list/TRANSFORM-APPLY.cmake b/Tests/RunCMake/list/TRANSFORM-APPLY.cmake
index 14fe360..68e1528 100644
--- a/Tests/RunCMake/list/TRANSFORM-APPLY.cmake
+++ b/Tests/RunCMake/list/TRANSFORM-APPLY.cmake
@@ -104,3 +104,28 @@
 if(NOT mylist STREQUAL ";;")
   message(FATAL_ERROR "TRANSFORM(APPLY make_empty) is \"${mylist}\", expected is \";;\"")
 endif()
+
+# Recursive APPLY: an APPLY function that itself calls list(TRANSFORM APPLY).
+# The inner function returns the output variable name it was given.
+function(return_out_var_name in out)
+  set(${out} "${out}" PARENT_SCOPE)
+endfunction()
+
+# The outer function triggers a nested APPLY and verifies that the inner
+# output variable name differs from its own.
+function(inner_name_is_different in out)
+  set(_inner x)
+  list(TRANSFORM _inner APPLY return_out_var_name OUTPUT_VARIABLE _inner_out)
+  # _inner_out now holds the inner output variable name
+  if("${out}" STREQUAL "${_inner_out}")
+    set(${out} "FALSE" PARENT_SCOPE)
+  else()
+    set(${out} "TRUE" PARENT_SCOPE)
+  endif()
+endfunction()
+
+set(mylist a b c)
+list(TRANSFORM mylist APPLY inner_name_is_different OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "TRUE;TRUE;TRUE")
+  message(FATAL_ERROR "TRANSFORM(APPLY nested smoke) is \"${output}\", expected \"TRUE;TRUE;TRUE\"")
+endif()
diff --git a/Tests/RunCMake/list/TRANSFORM-PREDICATE.cmake b/Tests/RunCMake/list/TRANSFORM-PREDICATE.cmake
new file mode 100644
index 0000000..103f021
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-PREDICATE.cmake
@@ -0,0 +1,100 @@
+# Predicate: returns TRUE for items starting with "b"
+function(starts_with_b input result)
+  if(input MATCHES "^b")
+    set(${result} TRUE PARENT_SCOPE)
+  else()
+    set(${result} FALSE PARENT_SCOPE)
+  endif()
+endfunction()
+
+# Predicate as macro
+macro(is_short input result)
+  string(LENGTH "${input}" _len)
+  if(_len LESS 4)
+    set(${result} TRUE)
+  else()
+    set(${result} FALSE)
+  endif()
+endmacro()
+
+set(mylist alpha bravo charlie bravo_two delta)
+
+# Basic PREDICATE with TOUPPER - only items starting with "b" are uppercased
+list(TRANSFORM mylist TOUPPER PREDICATE starts_with_b OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "alpha;BRAVO;charlie;BRAVO_TWO;delta")
+  message(FATAL_ERROR "TRANSFORM(TOUPPER PREDICATE) is \"${output}\", expected \"alpha;BRAVO;charlie;BRAVO_TWO;delta\"")
+endif()
+
+# Verify original list unchanged (OUTPUT_VARIABLE)
+if(NOT mylist STREQUAL "alpha;bravo;charlie;bravo_two;delta")
+  message(FATAL_ERROR "Original list modified: \"${mylist}\"")
+endif()
+
+# PREDICATE in-place
+list(TRANSFORM mylist TOUPPER PREDICATE starts_with_b)
+if(NOT mylist STREQUAL "alpha;BRAVO;charlie;BRAVO_TWO;delta")
+  message(FATAL_ERROR "TRANSFORM(TOUPPER PREDICATE in-place) is \"${mylist}\", expected \"alpha;BRAVO;charlie;BRAVO_TWO;delta\"")
+endif()
+
+# PREDICATE with macro
+set(mylist ab cde fg hijklm no)
+list(TRANSFORM mylist TOUPPER PREDICATE is_short OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "AB;CDE;FG;hijklm;NO")
+  message(FATAL_ERROR "TRANSFORM(TOUPPER PREDICATE macro) is \"${output}\", expected \"AB;CDE;FG;hijklm;NO\"")
+endif()
+
+# PREDICATE combined with APPLY
+function(add_prefix in out)
+  set(${out} "prefix_${in}" PARENT_SCOPE)
+endfunction()
+
+set(mylist alpha bravo charlie delta)
+list(TRANSFORM mylist APPLY add_prefix PREDICATE starts_with_b OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "alpha;prefix_bravo;charlie;delta")
+  message(FATAL_ERROR "TRANSFORM(APPLY PREDICATE) is \"${output}\", expected \"alpha;prefix_bravo;charlie;delta\"")
+endif()
+
+# PREDICATE on empty list
+set(empty_list "")
+list(TRANSFORM empty_list TOUPPER PREDICATE starts_with_b OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "")
+  message(FATAL_ERROR "TRANSFORM(PREDICATE empty) is \"${output}\", expected \"\"")
+endif()
+
+# PREDICATE where nothing matches (all elements unchanged)
+set(mylist alpha charlie delta)
+list(TRANSFORM mylist TOUPPER PREDICATE starts_with_b OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "alpha;charlie;delta")
+  message(FATAL_ERROR "TRANSFORM(PREDICATE no-match) is \"${output}\", expected \"alpha;charlie;delta\"")
+endif()
+
+# PREDICATE where everything matches
+set(mylist bravo bronze bull)
+list(TRANSFORM mylist TOUPPER PREDICATE starts_with_b OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "BRAVO;BRONZE;BULL")
+  message(FATAL_ERROR "TRANSFORM(PREDICATE all-match) is \"${output}\", expected \"BRAVO;BRONZE;BULL\"")
+endif()
+
+# Recursive PREDICATE: a PREDICATE function that itself calls list(TRANSFORM APPLY).
+# The inner function returns the output variable name it was given.
+function(return_pred_var_name in out)
+  set(${out} "${out}" PARENT_SCOPE)
+endfunction()
+
+# The outer predicate triggers a nested APPLY and verifies that the inner
+# output variable name differs from its own result variable.
+function(inner_pred_name_is_different input result)
+  set(_inner x)
+  list(TRANSFORM _inner APPLY return_pred_var_name OUTPUT_VARIABLE _inner_names)
+  if("${result}" STREQUAL "${_inner_names}")
+    set(${result} FALSE PARENT_SCOPE)
+  else()
+    set(${result} TRUE PARENT_SCOPE)
+  endif()
+endfunction()
+
+set(mylist x y z)
+list(TRANSFORM mylist TOUPPER PREDICATE inner_pred_name_is_different OUTPUT_VARIABLE output)
+if(NOT output STREQUAL "X;Y;Z")
+  message(FATAL_ERROR "TRANSFORM(PREDICATE nested smoke) is \"${output}\", expected \"X;Y;Z\"")
+endif()
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments-result.txt b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments-stderr.txt b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments-stderr.txt
new file mode 100644
index 0000000..22c4133
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at TRANSFORM-Selector-PREDICATE-NoArguments\.cmake:2 \(list\):
+  list sub-command TRANSFORM, selector PREDICATE expects 'function name'
+  argument\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments.cmake b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments.cmake
new file mode 100644
index 0000000..f263d8b
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoArguments.cmake
@@ -0,0 +1,2 @@
+set(mylist alpha bravo charlie)
+list(TRANSFORM mylist TOUPPER PREDICATE)
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput-result.txt b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput-stderr.txt b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput-stderr.txt
new file mode 100644
index 0000000..87310b2
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at TRANSFORM-Selector-PREDICATE-NoOutput\.cmake:6 \(list\):
+  list sub-command TRANSFORM, selector PREDICATE: function "bad_predicate"
+  did not set the output variable\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput.cmake b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput.cmake
new file mode 100644
index 0000000..73b18c2
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-NoOutput.cmake
@@ -0,0 +1,6 @@
+function(bad_predicate in out)
+  # Deliberately does NOT set ${out}
+endfunction()
+
+set(mylist alpha bravo charlie)
+list(TRANSFORM mylist TOUPPER PREDICATE bad_predicate)
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction-result.txt b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction-stderr.txt b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction-stderr.txt
new file mode 100644
index 0000000..21bea51
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at TRANSFORM-Selector-PREDICATE-UnknownFunction\.cmake:2 \(list\):
+  list sub-command TRANSFORM, selector PREDICATE: unknown function
+  "no_such_function"\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction.cmake b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction.cmake
new file mode 100644
index 0000000..d497288
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-PREDICATE-UnknownFunction.cmake
@@ -0,0 +1,2 @@
+set(mylist alpha bravo charlie)
+list(TRANSFORM mylist TOUPPER PREDICATE no_such_function)
diff --git a/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx b/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx
index 8265e32..801c9f6 100644
--- a/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx
+++ b/Utilities/ClangTidyModule/OstringstreamUseCmstrcatCheck.cxx
@@ -18,13 +18,10 @@
 
 void OstringstreamUseCmstrcatCheck::registerMatchers(MatchFinder* Finder)
 {
-  Finder->addMatcher(
-    typeLoc(unless(elaboratedTypeLoc()),
-            optionally(hasParent(elaboratedTypeLoc().bind("parentType"))),
-            loc(qualType(
-              hasDeclaration(namedDecl(hasName("::std::ostringstream"))))))
-      .bind("ostringstream"),
-    this);
+  Finder->addMatcher(typeLoc(loc(qualType(hasDeclaration(
+                               namedDecl(hasName("::std::ostringstream"))))))
+                       .bind("ostringstream"),
+                     this);
 }
 
 void OstringstreamUseCmstrcatCheck::check(
diff --git a/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx b/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx
index 5f28054..cf75bfc 100644
--- a/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx
+++ b/Utilities/ClangTidyModule/UseCmsysFstreamCheck.cxx
@@ -90,8 +90,7 @@
     loc(usingType(throughUsingDecl(namedDecl(hasName(CmsysName)))));
 
   Finder->addMatcher(
-    typeLoc(IsStd, unless(IsCmsys), unless(elaboratedTypeLoc()),
-            optionally(hasParent(elaboratedTypeLoc().bind("parentType"))),
+    typeLoc(IsStd, unless(IsCmsys),
             optionally(hasParent(nestedNameSpecifierLoc().bind("parentName"))))
       .bind(Bind),
     this);