Merge topic 'fix-win-flex-bison' into release-3.18

0faa2b9870 Find{FLEX,BISON}: Add 'win-' executable names

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4931
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3447964..ec2393b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,553 +1,200 @@
-.manual_rules_settings: &manual_rules_settings
-    - if: '$CI_PROJECT_PATH == "cmake/cmake"'
-      when: delayed
-      start_in: 5 minutes
-    - if: '$CI_MERGE_REQUEST_ID'
-      when: manual
-    - when: never
+include:
+    # Metadata shared my many jobs
+    - local: .gitlab/rules.yml
+    - local: .gitlab/artifacts.yml
 
-.rules_settings: &rules_settings
-    - if: '$CI_PROJECT_PATH == "cmake/cmake"'
-      when: always
-    - if: '$CI_MERGE_REQUEST_ID'
-      when: always
-    - when: never
-
-.release_linux: &release_linux
-    image: "kitware/cmake:build-linux-x86_64-deps-2020-04-02@sha256:77e9ab183f34680990db9da5945473e288f0d6556bce79ecc1589670d656e157"
-
-    variables:
-        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
-        LAUNCHER: "scl enable devtoolset-6 rh-python36 --"
-
-.fedora31: &fedora31
-    image: "kitware/cmake:ci-fedora31-x86_64-2020-06-01"
-
-    variables:
-        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
-
-.debian10: &debian10
-    image: "kitware/cmake:ci-debian10-x86_64-2020-04-27"
-
-    variables:
-        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
-
-.debian10_iwyu: &debian10_iwyu
-    extends: .debian10
-
-    variables:
-        CMAKE_CONFIGURATION: debian10_iwyu
-        CTEST_NO_WARNINGS_ALLOWED: 1
-        CMake_SKIP_INSTALL: 1
-
-.fedora31_tidy: &fedora31_tidy
-    extends: .fedora31
-
-    variables:
-        CMAKE_CONFIGURATION: fedora31_tidy
-        CTEST_NO_WARNINGS_ALLOWED: 1
-        CMake_SKIP_INSTALL: 1
-
-.fedora31_sphinx: &fedora31_sphinx
-    extends: .fedora31
-
-    variables:
-        CMAKE_CONFIGURATION: fedora31_sphinx
-        CTEST_NO_WARNINGS_ALLOWED: 1
-        CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
-        CMake_SKIP_INSTALL: 1
-
-.fedora31_ninja: &fedora31_ninja
-    extends: .fedora31
-
-    variables:
-        CMAKE_CONFIGURATION: fedora31_ninja
-        CTEST_NO_WARNINGS_ALLOWED: 1
-
-.fedora31_ninja_multi: &fedora31_ninja_multi
-    extends: .fedora31
-
-    variables:
-        CMAKE_CONFIGURATION: fedora31_ninja_multi
-        CTEST_NO_WARNINGS_ALLOWED: 1
-        CMAKE_GENERATOR: "Ninja Multi-Config"
-
-.fedora31_makefiles: &fedora31_makefiles
-    extends: .fedora31
-
-    variables:
-        CMAKE_CONFIGURATION: fedora31_makefiles
-        CTEST_NO_WARNINGS_ALLOWED: 1
-        CMAKE_GENERATOR: "Unix Makefiles"
-
-.macos: &macos
-    variables:
-        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci ext/$CI_CONCURRENT_ID"
-        # TODO: Factor this out so that each job selects the Xcode version to
-        # use so that different versions can be tested in a single pipeline.
-        DEVELOPER_DIR: "/Applications/Xcode-11.5.app/Contents/Developer"
-
-.macos_build: &macos_build
-    extends: .macos
-
-    variables:
-        # Note that shell runners only support runners with a single
-        # concurrency level. We can't use `$CI_CONCURRENCY_ID` because this may
-        # change between the build and test stages which CMake doesn't support.
-        # Even if we could, it could change if other runners on the machine
-        # could run at the same time, so we drop it.
-        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
-
-.macos_ninja: &macos_ninja
-    extends: .macos_build
-
-    variables:
-        CMAKE_CONFIGURATION: macos_ninja
-        CTEST_NO_WARNINGS_ALLOWED: 1
-
-.macos_makefiles: &macos_makefiles
-    extends: .macos_build
-
-    variables:
-        CMAKE_CONFIGURATION: macos_makefiles
-        CTEST_NO_WARNINGS_ALLOWED: 1
-        CMAKE_GENERATOR: "Unix Makefiles"
-
-.windows: &windows
-    variables:
-        GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake ci ext\\$CI_CONCURRENT_ID"
-
-.windows_build: &windows_build
-    extends: .windows
-
-    variables:
-        # Note that shell runners only support runners with a single
-        # concurrency level. We can't use `$CI_CONCURRENCY_ID` because this may
-        # change between the build and test stages which CMake doesn't support.
-        # Even if we could, it could change if other runners on the machine
-        # could run at the same time, so we drop it.
-        GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake ci"
-
-.windows_ninja: &windows_ninja
-    extends: .windows_build
-
-    variables:
-        # Debug and RelWithDebinfo build types use the `/Zi` which results in
-        # uncacheable compiations.
-        # https://github.com/mozilla/sccache/issues/242
-        CMAKE_BUILD_TYPE: Release
-        CTEST_NO_WARNINGS_ALLOWED: 1
-
-.windows_vs2019_x64_ninja: &windows_vs2019_x64_ninja
-    extends: .windows_ninja
-
-    variables:
-        CMAKE_CONFIGURATION: windows_vs2019_x64_ninja
-        VCVARSALL: "${VS160COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
-        VCVARSPLATFORM: "x64"
-        VCVARSVERSION: "14.26"
-
-.windows_vs2019_x64: &windows_vs2019_x64
-    extends: .windows
-
-    variables:
-        CMAKE_CONFIGURATION: windows_vs2019_x64
-        CMAKE_GENERATOR: "Visual Studio 16 2019"
-        CMAKE_GENERATOR_PLATFORM: "x64"
-        CMAKE_GENERATOR_TOOLSET: "v142,version=14.26"
-
-.linux_builder_tags: &linux_builder_tags
-    tags:
-        - build
-        - docker
-        - linux
-
-.linux_builder_tags_qt: &linux_builder_tags_qt
-    tags:
-        - build
-        - docker
-        - linux
-        - linux-3.17 # Needed to be able to load Fedora's Qt libraries.
-
-.macos_builder_tags: &macos_builder_tags
-    tags:
-        - cmake # Since this is a bare runner, pin to a project.
-        - macos
-        - shell
-        - xcode-11.5
-        - nonconcurrent
-
-.macos_builder_ext_tags: &macos_builder_ext_tags
-    tags:
-        - cmake # Since this is a bare runner, pin to a project.
-        - macos
-        - shell
-        - xcode-11.5
-        - concurrent
-
-.windows_builder_tags: &windows_builder_tags
-    tags:
-        - cmake # Since this is a bare runner, pin to a project.
-        - windows
-        - shell
-        - vs2019
-        - msvc-19.25
-        - nonconcurrent
-
-.windows_builder_ext_tags: &windows_builder_ext_tags
-    tags:
-        - cmake # Since this is a bare runner, pin to a project.
-        - windows
-        - shell
-        - vs2019
-        - msvc-19.25
-        - concurrent
-
-.before_script_unix: &before_script_unix
-    - .gitlab/ci/cmake.sh
-    - .gitlab/ci/ninja.sh
-    - export PATH=$PWD/.gitlab:$PWD/.gitlab/cmake/bin:$PATH
-    - cmake --version
-    - ninja --version
-
-.before_script_windows: &before_script_windows
-    - Invoke-Expression -Command .gitlab/ci/cmake.ps1
-    - Invoke-Expression -Command .gitlab/ci/ninja.ps1
-    - $pwdpath = $pwd.Path
-    - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab;$pwdpath\.gitlab\cmake\bin;$env:PATH"
-    - cmake --version
-    - ninja --version
-
-.cmake_build_unix: &cmake_build_unix
-    stage: build
-
-    script:
-        - *before_script_unix
-        - .gitlab/ci/sccache.sh
-        # Allow the server to already be running.
-        - "sccache --start-server || :"
-        - sccache --show-stats
-        - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
-        - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
-        - sccache --show-stats
-
-    interruptible: true
-
-.cmake_build_release_linux: &cmake_build_release_linux
-    stage: build
-
-    script:
-        # Bootstrap.
-        - mkdir build/
-        - cp -v Utilities/Release/linux/x86_64/cache.txt build/CMakeCache.txt
-        # Make sccache available.
-        - .gitlab/ci/sccache.sh
-        - export PATH=$PWD/.gitlab:$PATH
-        # Append sccache settings to the cache.
-        - echo "CMAKE_C_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt
-        - echo "CMAKE_CXX_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt
-        # CI settings.
-        - echo "CMake_TEST_INSTALL:BOOL=OFF" >> build/CMakeCache.txt
-        - echo "CMAKE_INSTALL_PREFIX:PATH=$PWD/build/install" >> build/CMakeCache.txt
-        - echo "CMAKE_SKIP_INSTALL_ALL_DEPENDENCY:BOOL=ON" >> build/CMakeCache.txt
-        # Bootstrap
-        - cd build/
-        - "$LAUNCHER ../bootstrap --parallel=$(nproc) --docdir=doc/cmake"
-        # FIXME: When CTest can drive an external CMake for the build as well,
-        # use the scripts here.
-        - "$LAUNCHER make -j$(nproc)"
-        # NOTE: This regex matches that used in the release build.
-        - "$LAUNCHER bin/ctest --output-on-failure -j$(nproc) -R '^(CMake\\.|CMakeLib\\.|CMakeServerLib\\.|RunCMake\\.ctest_memcheck)'"
-        # Make a package.
-        - bin/cpack -G TGZ
-        - bin/cpack -G STGZ
-        - sccache --show-stats
-
-    interruptible: true
-
-.cmake_build_windows: &cmake_build_windows
-    stage: build
-
-    script:
-        - *before_script_windows
-        - Set-Item -Force -Path "env:PATH" -Value "$env:PATH;$env:SCCACHE_PATH"
-        - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
-        - sccache --start-server
-        - sccache --show-stats
-        - ctest -VV -S .gitlab/ci/ctest_configure.cmake
-        - ctest -VV -S .gitlab/ci/ctest_build.cmake
-        - sccache --show-stats
-        - sccache --stop-server
-
-    interruptible: true
-
-.cmake_build_artifacts: &cmake_build_artifacts
-    artifacts:
-        expire_in: 1d
-        paths:
-            # XXX(globbing): Can be simplified with support from
-            # https://gitlab.com/gitlab-org/gitlab-runner/issues/4840
-            - build/CTestTestfile.cmake
-            - build/*/CTestTestfile.cmake
-            - build/*/*/CTestTestfile.cmake
-            - build/*/*/*/CTestTestfile.cmake
-            - build/*/*/*/*/CTestTestfile.cmake
-
-            # Allow CMake to find CMAKE_ROOT.
-            - build/CMakeFiles/CMakeSourceDir.txt
-
-            # Take the install tree.
-            - build/install/
-
-            # We need the main binaries.
-            - build/bin/
-            # The cache is needed for the installation test.
-            - build/CMakeCache.txt
-            # Test binaries. Eventually these might be better under
-            # `Source/Tests` or the like.
-            - build/Tests/EnforceConfig.cmake
-            - build/Tests/CMakeBuildTest.cmake
-            - build/Tests/CMakeBuildDoubleProjectTest.cmake
-            - build/Tests/CMake*/runcompilecommands
-            - build/Tests/CMake*/runcompilecommands.exe
-            - build/Tests/CMake*/test*
-            - build/Tests/CMake*/PseudoMemcheck/valgrind
-            - build/Tests/CMake*/PseudoMemcheck/purify
-            - build/Tests/CMake*/PseudoMemcheck/memcheck_fail
-            - build/Tests/CMake*/PseudoMemcheck/BC
-            - build/Tests/CMake*/PseudoMemcheck/valgrind.exe
-            - build/Tests/CMake*/PseudoMemcheck/purify.exe
-            - build/Tests/CMake*/PseudoMemcheck/memcheck_fail.exe
-            - build/Tests/CMake*/PseudoMemcheck/BC.exe
-            - build/Tests/CMake*/PseudoMemcheck/NoLog
-            - build/Tests/CMake*Lib/*LibTests
-            - build/Tests/CMake*Lib/*LibTests.exe
-            - build/Source/kwsys/cmsysTest*
-            - build/Source/kwsys/testConsoleBufChild.exe
-            - build/Utilities/cmcurl/curltest
-            - build/Utilities/cmcurl/curltest.exe
-            - build/Utilities/KWIML/test/kwiml_test
-            - build/Utilities/KWIML/test/kwiml_test.exe
-            - build/Source/kwsys/*cmsysTestDynload.*
-            - build/Source/kwsys/dynloaddir/cmsysTestDynloadImpl.dll
-            - build/Source/kwsys/dynloaddir/cmsysTestDynloadUse.dll
-
-            # Test directories.
-            - build/Tests/CTest*
-            - build/Tests/Find*
-            - build/Tests/Qt5*
-            - build/Tests/RunCMake/
-            - build/Tests/CMakeOnly/
-            - build/Tests/CMakeTests/
-
-            # CTest/CDash information.
-            - build/Testing/
-            - build/DartConfiguation.tcl
-            - build/CTestCustom.cmake
-
-.cmake_release_artifacts: &cmake_release_artifacts
-    artifacts:
-        expire_in: 5d
-        paths:
-            # Any packages made.
-            - build/cmake-*-Linux-x86_64.*
-
-.cmake_test_artifacts: &cmake_test_artifacts
-    artifacts:
-        expire_in: 1d
-        paths:
-            # Take the install tree.
-            - build/install/
-
-.cmake_test_unix: &cmake_test_unix
-    stage: test
-
-    script:
-        - *before_script_unix
-        - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake"
-
-    interruptible: true
-
-.cmake_test_windows: &cmake_test_windows
-    stage: test
-
-    script:
-        - *before_script_windows
-        - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
-        - ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake
-
-    interruptible: true
-
-.cmake_test_unix_external: &cmake_test_unix_external
-    stage: test-ext
-
-    script:
-        - *before_script_unix
-        - .gitlab/ci/sccache.sh
-        # Allow the server to already be running.
-        - "sccache --start-server || :"
-        - sccache --show-stats
-        - "$LAUNCHER build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake"
-        - sccache --show-stats
-
-    interruptible: true
-
-.cmake_test_windows_external: &cmake_test_windows_external
-    stage: test-ext
-
-    script:
-        - build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
-
-    interruptible: true
+    # OS builds.
+    - local: .gitlab/os-linux.yml
+    - local: .gitlab/os-macos.yml
+    - local: .gitlab/os-windows.yml
 
 stages:
     - build
     - test
     - test-ext
 
+################################################################################
+# Job declarations
+#
+# Each job must pull in each of the following keys:
+#
+#   - a "base image"
+#   - a build script
+#   - tags for the jobs
+#   - rules for when to run the job
+#
+# Additionally, jobs may also contain:
+#
+#   - artifacts
+#   - dependency/needs jobs for required jobs
+################################################################################
+
+# Lint builds
+
 build:debian10-iwyu:
-    <<:
-        - *debian10_iwyu
-        - *cmake_build_unix
-        - *linux_builder_tags
-    rules: *rules_settings
+    extends:
+        - .debian10_iwyu
+        - .cmake_build_linux
+        - .linux_builder_tags
+        - .run_automatically
 
 build:fedora31-tidy:
-    <<:
-        - *fedora31_tidy
-        - *cmake_build_unix
-        - *linux_builder_tags_qt
-    rules: *rules_settings
+    extends:
+        - .fedora31_tidy
+        - .cmake_build_linux
+        - .linux_builder_tags_qt
+        - .run_automatically
 
 build:fedora31-sphinx:
-    <<:
-        - *fedora31_sphinx
-        - *cmake_build_unix
-        - *linux_builder_tags_qt
-    rules: *rules_settings
+    extends:
+        - .fedora31_sphinx
+        - .cmake_build_linux
+        - .linux_builder_tags_qt
+        - .run_automatically
+
+# Linux builds
 
 build:centos6-release:
-    <<:
-        - *release_linux
-        - *cmake_build_release_linux
-        - *cmake_release_artifacts
-        - *linux_builder_tags
-    rules: *manual_rules_settings
+    extends:
+        - .release_linux
+        - .cmake_build_release_linux
+        - .cmake_release_artifacts
+        - .linux_builder_tags
+        - .run_manually
+
+test:fedora31-makefiles:
+    extends:
+        - .fedora31_makefiles
+        - .cmake_test_linux_package
+        - .linux_builder_tags_qt
+        - .run_automatically
+    dependencies:
+        - build:centos6-release
+    needs:
+        - build:centos6-release
+
+test:cuda10.2-nvidia:
+    extends:
+        - .cuda10.2_nvidia
+        - .cmake_test_linux_package
+        - .linux_builder_tags_cuda
+        - .run_automatically
+    dependencies:
+        - build:centos6-release
+    needs:
+        - build:centos6-release
 
 build:fedora31-ninja:
-    <<:
-        - *fedora31_ninja
-        - *cmake_build_unix
-        - *cmake_build_artifacts
-        - *linux_builder_tags_qt
-    rules: *manual_rules_settings
+    extends:
+        - .fedora31_ninja
+        - .cmake_build_linux
+        - .cmake_build_artifacts
+        - .linux_builder_tags_qt
+        - .run_manually
 
 test:fedora31-ninja:
-    <<:
-        - *fedora31_ninja
-        - *cmake_test_unix
-        - *linux_builder_tags_qt
-        - *cmake_test_artifacts
-    rules: *rules_settings
+    extends:
+        - .fedora31_ninja
+        - .cmake_test_linux
+        - .linux_builder_tags_qt
+        - .cmake_test_artifacts
+        - .run_automatically
     dependencies:
         - build:fedora31-ninja
     needs:
         - build:fedora31-ninja
 
 test:fedora31-ninja-multi:
-    <<:
-        - *fedora31_ninja_multi
-        - *cmake_test_unix_external
-        - *linux_builder_tags_qt
-    rules: *rules_settings
+    extends:
+        - .fedora31_ninja_multi
+        - .cmake_test_linux_external
+        - .linux_builder_tags_qt
+        - .run_automatically
     dependencies:
         - test:fedora31-ninja
     needs:
         - test:fedora31-ninja
 
-build:fedora31-makefiles:
-    <<:
-        - *fedora31_makefiles
-        - *cmake_build_unix
-        - *cmake_build_artifacts
-        - *linux_builder_tags_qt
-    rules: *manual_rules_settings
-
-test:fedora31-makefiles:
-    <<:
-        - *fedora31_makefiles
-        - *cmake_test_unix
-        - *linux_builder_tags_qt
-    rules: *rules_settings
-    dependencies:
-        - build:fedora31-makefiles
-    needs:
-        - build:fedora31-makefiles
+# macOS builds
 
 build:macos-ninja:
-    <<:
-        - *macos_ninja
-        - *cmake_build_unix
-        - *cmake_build_artifacts
-        - *macos_builder_tags
-    rules: *manual_rules_settings
+    extends:
+        - .macos_ninja
+        - .cmake_build_macos
+        - .cmake_build_artifacts
+        - .macos_builder_tags
+        - .run_manually
 
 test:macos-ninja:
-    <<:
-        - *macos_ninja
-        - *cmake_test_unix
-        - *macos_builder_tags
-    rules: *rules_settings
+    extends:
+        - .macos_ninja
+        - .cmake_test_macos
+        - .cmake_test_artifacts
+        - .macos_builder_tags
+        - .run_automatically
     dependencies:
         - build:macos-ninja
     needs:
         - build:macos-ninja
 
 build:macos-makefiles:
-    <<:
-        - *macos_makefiles
-        - *cmake_build_unix
-        - *cmake_build_artifacts
-        - *macos_builder_tags
-    rules: *manual_rules_settings
+    extends:
+        - .macos_makefiles
+        - .cmake_build_macos
+        - .cmake_build_artifacts
+        - .macos_builder_tags
+        - .run_manually
 
 test:macos-makefiles:
-    <<:
-        - *macos_makefiles
-        - *cmake_test_unix
-        - *macos_builder_tags
-    rules: *rules_settings
+    extends:
+        - .macos_makefiles
+        - .cmake_test_macos
+        - .macos_builder_tags
+        - .run_automatically
     dependencies:
         - build:macos-makefiles
     needs:
         - build:macos-makefiles
 
+test:macos-xcode:
+    extends:
+        - .macos_xcode
+        - .cmake_test_macos_external
+        - .macos_builder_ext_tags
+        - .run_automatically
+    dependencies:
+        - test:macos-ninja
+    needs:
+        - test:macos-ninja
+
+# Windows builds
+
 build:windows-vs2019-x64-ninja:
-    <<:
-        - *windows_vs2019_x64_ninja
-        - *cmake_build_windows
-        - *cmake_build_artifacts
-        - *windows_builder_tags
-    rules: *manual_rules_settings
+    extends:
+        - .windows_vs2019_x64_ninja
+        - .cmake_build_windows
+        - .cmake_build_artifacts
+        - .windows_builder_tags
+        - .run_manually
 
 test:windows-vs2019-x64-ninja:
-    <<:
-        - *windows_vs2019_x64_ninja
-        - *cmake_test_windows
-        - *windows_builder_tags
-        - *cmake_test_artifacts
-    rules: *rules_settings
+    extends:
+        - .windows_vs2019_x64_ninja
+        - .cmake_test_windows
+        - .windows_builder_tags
+        - .cmake_test_artifacts
+        - .run_automatically
     dependencies:
         - build:windows-vs2019-x64-ninja
     needs:
         - build:windows-vs2019-x64-ninja
 
 test:windows-vs2019-x64:
-    <<:
-        - *windows_vs2019_x64
-        - *cmake_test_windows_external
-        - *windows_builder_ext_tags
-    rules: *rules_settings
+    extends:
+        - .windows_vs2019_x64
+        - .cmake_test_windows_external
+        - .windows_builder_ext_tags
+        - .run_automatically
     dependencies:
         - test:windows-vs2019-x64-ninja
     needs:
diff --git a/.gitlab/artifacts.yml b/.gitlab/artifacts.yml
new file mode 100644
index 0000000..c2d28da
--- /dev/null
+++ b/.gitlab/artifacts.yml
@@ -0,0 +1,79 @@
+# Lists of paths for artifacts of various stages.
+
+.cmake_build_artifacts:
+    artifacts:
+        expire_in: 1d
+        paths:
+            # XXX(globbing): Can be simplified with support from
+            # https://gitlab.com/gitlab-org/gitlab-runner/issues/4840
+            - build/CTestTestfile.cmake
+            - build/*/CTestTestfile.cmake
+            - build/*/*/CTestTestfile.cmake
+            - build/*/*/*/CTestTestfile.cmake
+            - build/*/*/*/*/CTestTestfile.cmake
+
+            # Allow CMake to find CMAKE_ROOT.
+            - build/CMakeFiles/CMakeSourceDir.txt
+
+            # Take the install tree.
+            - build/install/
+
+            # We need the main binaries.
+            - build/bin/
+            # The cache is needed for the installation test.
+            - build/CMakeCache.txt
+            # Test binaries. Eventually these might be better under
+            # `Source/Tests` or the like.
+            - build/Tests/EnforceConfig.cmake
+            - build/Tests/CMakeBuildTest.cmake
+            - build/Tests/CMakeBuildDoubleProjectTest.cmake
+            - build/Tests/CMake*/runcompilecommands
+            - build/Tests/CMake*/runcompilecommands.exe
+            - build/Tests/CMake*/test*
+            - build/Tests/CMake*/PseudoMemcheck/valgrind
+            - build/Tests/CMake*/PseudoMemcheck/purify
+            - build/Tests/CMake*/PseudoMemcheck/memcheck_fail
+            - build/Tests/CMake*/PseudoMemcheck/BC
+            - build/Tests/CMake*/PseudoMemcheck/valgrind.exe
+            - build/Tests/CMake*/PseudoMemcheck/purify.exe
+            - build/Tests/CMake*/PseudoMemcheck/memcheck_fail.exe
+            - build/Tests/CMake*/PseudoMemcheck/BC.exe
+            - build/Tests/CMake*/PseudoMemcheck/NoLog
+            - build/Tests/CMake*Lib/*LibTests
+            - build/Tests/CMake*Lib/*LibTests.exe
+            - build/Source/kwsys/cmsysTest*
+            - build/Source/kwsys/testConsoleBufChild.exe
+            - build/Utilities/cmcurl/curltest
+            - build/Utilities/cmcurl/curltest.exe
+            - build/Utilities/KWIML/test/kwiml_test
+            - build/Utilities/KWIML/test/kwiml_test.exe
+            - build/Source/kwsys/*cmsysTestDynload.*
+            - build/Source/kwsys/dynloaddir/cmsysTestDynloadImpl.dll
+            - build/Source/kwsys/dynloaddir/cmsysTestDynloadUse.dll
+
+            # Test directories.
+            - build/Tests/CTest*
+            - build/Tests/Find*
+            - build/Tests/Qt5*
+            - build/Tests/RunCMake/
+            - build/Tests/CMakeOnly/
+            - build/Tests/CMakeTests/
+
+            # CTest/CDash information.
+            - build/Testing/
+            - build/DartConfiguation.tcl
+            - build/CTestCustom.cmake
+
+.cmake_release_artifacts:
+    artifacts:
+        expire_in: 5d
+        paths:
+            # Any packages made.
+            - build/cmake-*-Linux-x86_64.*
+
+.cmake_test_artifacts:
+    artifacts:
+        expire_in: 1d
+        paths:
+            # Take the install tree.
+            - build/install/
diff --git a/.gitlab/ci/configure_cuda10.2_nvidia.cmake b/.gitlab/ci/configure_cuda10.2_nvidia.cmake
new file mode 100644
index 0000000..519699b
--- /dev/null
+++ b/.gitlab/ci/configure_cuda10.2_nvidia.cmake
@@ -0,0 +1,3 @@
+set(CMake_TEST_CUDA "NVIDIA" CACHE STRING "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora31_makefiles.cmake b/.gitlab/ci/configure_fedora31_makefiles.cmake
index 74768b7..20863a2 100644
--- a/.gitlab/ci/configure_fedora31_makefiles.cmake
+++ b/.gitlab/ci/configure_fedora31_makefiles.cmake
@@ -1 +1 @@
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora31_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_macos_common.cmake b/.gitlab/ci/configure_macos_common.cmake
index 4b86d21..bd5902b 100644
--- a/.gitlab/ci/configure_macos_common.cmake
+++ b/.gitlab/ci/configure_macos_common.cmake
@@ -6,4 +6,4 @@
 set(Java_JAVAC_EXECUTABLE "" CACHE FILEPATH "")
 set(Java_JAR_EXECUTABLE "" CACHE FILEPATH "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")
+set(BUILD_QtDialog ON CACHE BOOL "")
diff --git a/.gitlab/ci/configure_macos_makefiles.cmake b/.gitlab/ci/configure_macos_makefiles.cmake
index 0f4f194..85f67b5 100644
--- a/.gitlab/ci/configure_macos_makefiles.cmake
+++ b/.gitlab/ci/configure_macos_makefiles.cmake
@@ -1 +1,2 @@
 include("${CMAKE_CURRENT_LIST_DIR}/configure_macos_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")
diff --git a/.gitlab/ci/configure_macos_ninja.cmake b/.gitlab/ci/configure_macos_ninja.cmake
index 0f4f194..85f67b5 100644
--- a/.gitlab/ci/configure_macos_ninja.cmake
+++ b/.gitlab/ci/configure_macos_ninja.cmake
@@ -1 +1,2 @@
 include("${CMAKE_CURRENT_LIST_DIR}/configure_macos_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")
diff --git a/.gitlab/ci/configure_macos_xcode.cmake b/.gitlab/ci/configure_macos_xcode.cmake
new file mode 100644
index 0000000..1b976d2
--- /dev/null
+++ b/.gitlab/ci/configure_macos_xcode.cmake
@@ -0,0 +1,2 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_macos_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_windows_common.cmake b/.gitlab/ci/configure_windows_common.cmake
new file mode 100644
index 0000000..45250ac
--- /dev/null
+++ b/.gitlab/ci/configure_windows_common.cmake
@@ -0,0 +1,4 @@
+set(BUILD_QtDialog ON CACHE BOOL "")
+set(CMAKE_PREFIX_PATH "$ENV{CI_PROJECT_DIR}/.gitlab/qt" CACHE STRING "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")
diff --git a/.gitlab/ci/configure_windows_vs2019_x64_ninja.cmake b/.gitlab/ci/configure_windows_vs2019_x64_ninja.cmake
index e2f00dd..719c93c 100644
--- a/.gitlab/ci/configure_windows_vs2019_x64_ninja.cmake
+++ b/.gitlab/ci/configure_windows_vs2019_x64_ninja.cmake
@@ -1,3 +1,3 @@
 set(CMake_TEST_WIX_NO_VERIFY "ON" CACHE BOOL "")
 
-include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_common.cmake")
diff --git a/.gitlab/ci/ctest_exclusions.cmake b/.gitlab/ci/ctest_exclusions.cmake
index eb9b724..b885a6a 100644
--- a/.gitlab/ci/ctest_exclusions.cmake
+++ b/.gitlab/ci/ctest_exclusions.cmake
@@ -1,4 +1,7 @@
 set(test_exclusions
+  # This test hits global resources and can be handled by nightly testing.
+  # https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4769
+  "^BundleGeneratorTest$"
 )
 
 if (CTEST_CMAKE_GENERATOR MATCHES "Visual Studio")
diff --git a/.gitlab/ci/ctest_test_external.cmake b/.gitlab/ci/ctest_test_external.cmake
index 1e61d52..d92b936 100644
--- a/.gitlab/ci/ctest_test_external.cmake
+++ b/.gitlab/ci/ctest_test_external.cmake
@@ -53,10 +53,17 @@
     "Found ${num_warnings} warnings (treating as fatal).")
 endif ()
 
+set(ctest_label_args)
+if (NOT "$ENV{CTEST_LABELS}" STREQUAL "")
+  list(APPEND ctest_label_args
+    INCLUDE_LABEL "$ENV{CTEST_LABELS}")
+endif ()
+
 include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake")
 ctest_test(
   PARALLEL_LEVEL "${nproc}"
   RETURN_VALUE test_result
+  ${ctest_label_args}
   EXCLUDE "${test_exclusions}")
 ctest_submit(PARTS Test)
 
diff --git a/.gitlab/ci/docker/cuda10.2/Dockerfile b/.gitlab/ci/docker/cuda10.2/Dockerfile
new file mode 100644
index 0000000..e0ea0e7
--- /dev/null
+++ b/.gitlab/ci/docker/cuda10.2/Dockerfile
@@ -0,0 +1,5 @@
+FROM nvidia/cuda:10.2-devel-ubuntu18.04
+MAINTAINER Ben Boeckel <ben.boeckel@kitware.com>
+
+COPY install_deps.sh /root/install_deps.sh
+RUN sh /root/install_deps.sh
diff --git a/.gitlab/ci/docker/cuda10.2/install_deps.sh b/.gitlab/ci/docker/cuda10.2/install_deps.sh
new file mode 100755
index 0000000..0d57cd3
--- /dev/null
+++ b/.gitlab/ci/docker/cuda10.2/install_deps.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -e
+
+apt-get update
+
+# Install development tools.
+apt-get install -y \
+    g++ \
+    curl \
+    git
+
+apt-get clean
diff --git a/.gitlab/ci/download_qt.cmake b/.gitlab/ci/download_qt.cmake
new file mode 100644
index 0000000..c392b1c
--- /dev/null
+++ b/.gitlab/ci/download_qt.cmake
@@ -0,0 +1,146 @@
+cmake_minimum_required(VERSION 3.12)
+
+# Input variables.
+set(qt_version_major "5")
+set(qt_version_minor "15")
+set(qt_version_patch "0")
+# This URL is only visible inside of Kitware's network. Please use your own Qt
+# Account to obtain these files.
+set(qt_url_root "https://paraview.org/files/dependencies/internal/qt")
+
+# Determine the ABI to fetch for Qt.
+if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "vs2015")
+  set(qt_platform "windows_x86")
+  set(msvc_year "2015")
+  set(qt_abi "win64_msvc${msvc_year}_64")
+elseif ("$ENV{CMAKE_CONFIGURATION}" MATCHES "vs2017" OR
+        "$ENV{CMAKE_CONFIGURATION}" MATCHES "vs2019")
+  set(qt_platform "windows_x86")
+  set(msvc_year "2017")
+  set(qt_abi "win64_msvc${msvc_year}_64")
+elseif ("$ENV{CMAKE_CONFIGURATION}" MATCHES "macos")
+  set(qt_platform "mac_x64")
+  set(qt_abi "clang_64")
+else ()
+  message(FATAL_ERROR
+    "Unknown ABI to use for Qt")
+endif ()
+
+# Combined version variables.
+set(qt_version "${qt_version_major}.${qt_version_minor}.${qt_version_patch}")
+set(qt_version_nodot "${qt_version_major}${qt_version_minor}${qt_version_patch}")
+
+# Files needed to download.
+set(qt_files)
+if (qt_platform STREQUAL "windows_x86")
+  if (msvc_year STREQUAL "2017")
+    set(qt_build_stamp "202002260536")
+  elseif (msvc_year STREQUAL "2015")
+    set(qt_build_stamp "202005150700")
+  else ()
+    message(FATAL_ERROR
+      "Build stamp for MSVC ${msvc_year} is unknown")
+  endif ()
+
+  set(qt_file_name_prefix "${qt_version}-0-${qt_build_stamp}")
+
+  foreach (qt_component IN ITEMS qtbase qtwinextras)
+    list(APPEND qt_files
+      "${qt_file_name_prefix}${qt_component}-Windows-Windows_10-MSVC${msvc_year}-Windows-Windows_10-X86_64.7z")
+  endforeach ()
+
+  set(qt_subdir "${qt_version}/msvc${msvc_year}_64")
+elseif (qt_platform STREQUAL "mac_x64")
+  set(qt_build_stamp "202005140805")
+  set(qt_file_name_prefix "${qt_version}-0-${qt_build_stamp}")
+
+  foreach (qt_component IN ITEMS qtbase)
+    list(APPEND qt_files
+      "${qt_file_name_prefix}${qt_component}-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z")
+  endforeach ()
+
+  set(qt_subdir "${qt_version}/clang_64")
+else ()
+  message(FATAL_ERROR
+    "Unknown files for ${qt_platform}")
+endif ()
+
+# Verify that we know what directory will be extracted.
+if (NOT qt_subdir)
+  message(FATAL_ERROR
+    "The extracted subdirectory is not set")
+endif ()
+
+# Build up the path to the file to download.
+set(qt_url_path "${qt_platform}/desktop/qt5_${qt_version_nodot}/qt.qt5.${qt_version_nodot}.${qt_abi}")
+set(qt_url_prefix "${qt_url_root}/${qt_url_path}")
+
+# Include the file containing the hashes of the files that matter.
+include("${CMAKE_CURRENT_LIST_DIR}/download_qt_hashes.cmake")
+
+# Download and extract each file.
+foreach (qt_file IN LISTS qt_files)
+  # Ensure we have a hash to verify.
+  if (NOT DEFINED "${qt_file}_hash")
+    message(FATAL_ERROR
+      "Unknown hash for ${qt_file}")
+  endif ()
+
+  # Download the file.
+  file(DOWNLOAD
+    "${qt_url_prefix}/${qt_file}"
+    ".gitlab/${qt_file}"
+    STATUS download_status
+    EXPECTED_HASH "SHA256=${${qt_file}_hash}")
+
+  # Check the download status.
+  list(GET download_status 0 res)
+  if (res)
+    list(GET download_status 1 err)
+    message(FATAL_ERROR
+      "Failed to download ${qt_file}: ${err}")
+  endif ()
+
+  # Extract the file.
+  execute_process(
+    COMMAND
+      "${CMAKE_COMMAND}"
+      -E tar
+      xf "${qt_file}"
+    WORKING_DIRECTORY ".gitlab"
+    RESULT_VARIABLE res
+    ERROR_VARIABLE err
+    ERROR_STRIP_TRAILING_WHITESPACE)
+  if (res)
+    message(FATAL_ERROR
+      "Failed to extract ${qt_file}: ${err}")
+  endif ()
+endforeach ()
+
+# The Windows tarballs have some unfortunate permissions in them that prevent
+# deletion when `git clean -ffdx` tries to clean up the directory.
+if (qt_platform STREQUAL "windows_x86")
+  # Fix permissions.
+  file(TO_NATIVE_PATH ".gitlab/${qt_subdir}/*.*" native_qt_dir)
+  execute_process(
+    # Remove any read-only flags that aren't affected by `icacls`.
+    COMMAND
+      attrib
+      -r # Remove readonly flag
+      "${native_qt_dir}"
+      /d # Treat as a directory
+      /s # Recursive
+      /l # Don't dereference symlinks
+    RESULT_VARIABLE res
+    ERROR_VARIABLE err
+    ERROR_STRIP_TRAILING_WHITESPACE)
+  if (res)
+    message(FATAL_ERROR
+      "Failed to fix remove read-only flags in ${qt_file}: ${err}")
+  endif ()
+endif ()
+
+# Move to a predictable prefix.
+file(RENAME
+  ".gitlab/${qt_subdir}"
+  ".gitlab/qt")
diff --git a/.gitlab/ci/download_qt_hashes.cmake b/.gitlab/ci/download_qt_hashes.cmake
new file mode 100644
index 0000000..59cb597
--- /dev/null
+++ b/.gitlab/ci/download_qt_hashes.cmake
@@ -0,0 +1,11 @@
+# Lines can be generated by doing:
+#
+#   sha256sum $files | awk '{ print "set(\"" $2 "_hash\" " $1 ")" }' >> $thisfile
+
+set("5.15.0-0-202002260536qtbase-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z_hash" c041596be8f7a16c7be9ea6757c14766ff3200ab6d56f7db8f865dbfe039fe20)
+set("5.15.0-0-202002260536qtwinextras-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z_hash" 10796128fac54f146767e33f6872975ba238858547de7a9650ec4cd9581fe71a)
+
+set("5.15.0-0-202005150700qtbase-Windows-Windows_10-MSVC2015-Windows-Windows_10-X86_64.7z_hash" 0c2653c5eca256f59c0b48b537cd633b05560e4241c0226856d2ae22ab066df4)
+set("5.15.0-0-202005150700qtwinextras-Windows-Windows_10-MSVC2015-Windows-Windows_10-X86_64.7z_hash" 4bca3a8d8c7611e211a82d86b3396f8a622abe7859d5052452414642ec191844)
+
+set("5.15.0-0-202005140805qtbase-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64.7z_hash" 04d867c81d2431f288c42c9752642759460b9468477de349368dcc8de0c8ddc4)
diff --git a/.gitlab/os-linux.yml b/.gitlab/os-linux.yml
new file mode 100644
index 0000000..1c97377
--- /dev/null
+++ b/.gitlab/os-linux.yml
@@ -0,0 +1,210 @@
+# Linux-specific builder configurations and build commands
+
+## Base images
+
+### Release
+
+.release_linux:
+    image: "kitware/cmake:build-linux-x86_64-deps-2020-04-02@sha256:77e9ab183f34680990db9da5945473e288f0d6556bce79ecc1589670d656e157"
+
+    variables:
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
+        LAUNCHER: "scl enable devtoolset-6 rh-python36 --"
+
+### Debian
+
+.debian10:
+    image: "kitware/cmake:ci-debian10-x86_64-2020-04-27"
+
+    variables:
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
+
+.debian10_iwyu:
+    extends: .debian10
+
+    variables:
+        CMAKE_CONFIGURATION: debian10_iwyu
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMake_SKIP_INSTALL: 1
+
+### Fedora
+
+.fedora31:
+    image: "kitware/cmake:ci-fedora31-x86_64-2020-06-01"
+
+    variables:
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
+
+#### Lint builds
+
+.fedora31_tidy:
+    extends: .fedora31
+
+    variables:
+        CMAKE_CONFIGURATION: fedora31_tidy
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMake_SKIP_INSTALL: 1
+
+.fedora31_sphinx:
+    extends: .fedora31
+
+    variables:
+        CMAKE_CONFIGURATION: fedora31_sphinx
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
+        CMake_SKIP_INSTALL: 1
+
+#### Build and test
+
+.fedora31_ninja:
+    extends: .fedora31
+
+    variables:
+        CMAKE_CONFIGURATION: fedora31_ninja
+        CTEST_NO_WARNINGS_ALLOWED: 1
+
+.fedora31_ninja_multi:
+    extends: .fedora31
+
+    variables:
+        CMAKE_CONFIGURATION: fedora31_ninja_multi
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMAKE_GENERATOR: "Ninja Multi-Config"
+
+.fedora31_makefiles:
+    extends: .fedora31
+
+    variables:
+        CMAKE_CONFIGURATION: fedora31_makefiles
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMAKE_GENERATOR: "Unix Makefiles"
+
+### CUDA builds
+
+.cuda10.2:
+    image: "kitware/cmake:ci-cuda10.2-x86_64-2020-06-11"
+
+    variables:
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
+        CTEST_LABELS: "CUDA"
+
+.cuda10.2_nvidia:
+    extends: .cuda10.2
+
+    variables:
+        CMAKE_CONFIGURATION: cuda10.2_nvidia
+        CTEST_NO_WARNINGS_ALLOWED: 1
+
+## Tags
+
+.linux_builder_tags:
+    tags:
+        - build
+        - docker
+        - linux
+
+.linux_builder_tags_qt:
+    tags:
+        - build
+        - docker
+        - linux
+        - linux-3.17 # Needed to be able to load Fedora's Qt libraries.
+
+.linux_builder_tags_cuda:
+    tags:
+        - cuda-rt
+        - docker
+        - linux
+
+## Linux-specific scripts
+
+.before_script_linux: &before_script_linux
+    - .gitlab/ci/cmake.sh
+    - .gitlab/ci/ninja.sh
+    - export PATH=$PWD/.gitlab:$PWD/.gitlab/cmake/bin:$PATH
+    - cmake --version
+    - ninja --version
+
+.cmake_build_linux:
+    stage: build
+
+    script:
+        - *before_script_linux
+        - .gitlab/ci/sccache.sh
+        - sccache --start-server
+        - sccache --show-stats
+        - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
+        - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
+        - sccache --show-stats
+
+    interruptible: true
+
+.cmake_test_linux:
+    stage: test
+
+    script:
+        - *before_script_linux
+        - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake"
+
+    interruptible: true
+
+.cmake_build_release_linux:
+    stage: build
+
+    script:
+        # Bootstrap.
+        - mkdir build/
+        - cp -v Utilities/Release/linux/x86_64/cache.txt build/CMakeCache.txt
+        # Make sccache available.
+        - .gitlab/ci/sccache.sh
+        - export PATH=$PWD/.gitlab:$PATH
+        # Append sccache settings to the cache.
+        - echo "CMAKE_C_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt
+        - echo "CMAKE_CXX_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt
+        # CI settings.
+        - echo "CMake_TEST_INSTALL:BOOL=OFF" >> build/CMakeCache.txt
+        - echo "CMAKE_INSTALL_PREFIX:PATH=$PWD/build/install" >> build/CMakeCache.txt
+        - echo "CMAKE_SKIP_INSTALL_ALL_DEPENDENCY:BOOL=ON" >> build/CMakeCache.txt
+        # Bootstrap
+        - cd build/
+        - "$LAUNCHER ../bootstrap --parallel=$(nproc) --docdir=doc/cmake"
+        # FIXME: When CTest can drive an external CMake for the build as well,
+        # use the scripts here.
+        - "$LAUNCHER make -j$(nproc)"
+        # NOTE: This regex matches that used in the release build.
+        - "$LAUNCHER bin/ctest --output-on-failure -j$(nproc) -R '^(CMake\\.|CMakeLib\\.|CMakeServerLib\\.|RunCMake\\.ctest_memcheck)'"
+        # Make a package.
+        - bin/cpack -G TGZ
+        - bin/cpack -G STGZ
+        - sccache --show-stats
+
+    interruptible: true
+
+.cmake_test_linux_package:
+    stage: test-ext
+
+    script:
+        - *before_script_linux
+        # Make the CMake package available.
+        - mkdir -p build/install
+        - tar -C build/install --strip-components=1 -xzf build/cmake-*-Linux-x86_64.tar.gz
+        - .gitlab/ci/sccache.sh
+        - sccache --start-server
+        - sccache --show-stats
+        - "$LAUNCHER build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake"
+        - sccache --show-stats
+
+    interruptible: true
+
+.cmake_test_linux_external:
+    stage: test-ext
+
+    script:
+        - *before_script_linux
+        - .gitlab/ci/sccache.sh
+        - sccache --start-server
+        - sccache --show-stats
+        - "$LAUNCHER build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake"
+        - sccache --show-stats
+
+    interruptible: true
diff --git a/.gitlab/os-macos.yml b/.gitlab/os-macos.yml
new file mode 100644
index 0000000..9d123ec
--- /dev/null
+++ b/.gitlab/os-macos.yml
@@ -0,0 +1,115 @@
+# macOS-specific builder configurations and build commands
+
+## Base configurations
+
+.macos:
+    variables:
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci ext/$CI_CONCURRENT_ID"
+        # TODO: Factor this out so that each job selects the Xcode version to
+        # use so that different versions can be tested in a single pipeline.
+        DEVELOPER_DIR: "/Applications/Xcode-11.5.app/Contents/Developer"
+
+### Build and test
+
+.macos_build:
+    extends: .macos
+
+    variables:
+        # Note that shell runners only support runners with a single
+        # concurrency level. We can't use `$CI_CONCURRENCY_ID` because this may
+        # change between the build and test stages which CMake doesn't support.
+        # Even if we could, it could change if other runners on the machine
+        # could run at the same time, so we drop it.
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
+
+.macos_ninja:
+    extends: .macos_build
+
+    variables:
+        CMAKE_CONFIGURATION: macos_ninja
+        CTEST_NO_WARNINGS_ALLOWED: 1
+
+.macos_makefiles:
+    extends: .macos_build
+
+    variables:
+        CMAKE_CONFIGURATION: macos_makefiles
+        CTEST_NO_WARNINGS_ALLOWED: 1
+        CMAKE_GENERATOR: "Unix Makefiles"
+
+### External testing
+
+.macos_xcode:
+    extends: .macos
+
+    variables:
+        CMAKE_CONFIGURATION: macos_xcode
+        CMAKE_GENERATOR: Xcode
+
+## Tags
+
+.macos_builder_tags:
+    tags:
+        - cmake # Since this is a bare runner, pin to a project.
+        - macos
+        - shell
+        - xcode-11.5
+        - nonconcurrent
+
+.macos_builder_ext_tags:
+    tags:
+        - cmake # Since this is a bare runner, pin to a project.
+        - macos
+        - shell
+        - xcode-11.5
+        - concurrent
+
+## macOS-specific scripts
+
+.before_script_macos: &before_script_macos
+    - .gitlab/ci/cmake.sh
+    - .gitlab/ci/ninja.sh
+    - export PATH=$PWD/.gitlab:$PWD/.gitlab/cmake/bin:$PATH
+    - cmake --version
+    - ninja --version
+    # Download Qt
+    - cmake -P .gitlab/ci/download_qt.cmake
+    - export CMAKE_PREFIX_PATH=$PWD/.gitlab/qt
+
+.cmake_build_macos:
+    stage: build
+
+    script:
+        - *before_script_macos
+        - .gitlab/ci/sccache.sh
+        # Allow the server to already be running.
+        - "sccache --start-server || :"
+        - sccache --show-stats
+        - ctest -VV -S .gitlab/ci/ctest_configure.cmake
+        - ctest -VV -S .gitlab/ci/ctest_build.cmake
+        - sccache --show-stats
+
+    interruptible: true
+
+.cmake_test_macos:
+    stage: test
+
+    script:
+        - *before_script_macos
+        - ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake
+
+    interruptible: true
+
+.cmake_test_macos_external:
+    stage: test-ext
+
+    script:
+        - *before_script_macos
+        - .gitlab/ci/sccache.sh
+        # Allow the server to already be running.
+        - "sccache --start-server || :"
+        - sccache --show-stats
+        - "$LAUNCHER build/install/CMake.app/Contents/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake"
+        - sccache --show-stats
+
+    interruptible: true
diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml
new file mode 100644
index 0000000..910a232
--- /dev/null
+++ b/.gitlab/os-windows.yml
@@ -0,0 +1,116 @@
+# Windows-specific builder configurations and build commands
+
+## Base configurations
+
+.windows:
+    variables:
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake ci ext\\$CI_CONCURRENT_ID"
+
+### Build and test
+
+.windows_build:
+    extends: .windows
+
+    variables:
+        # Note that shell runners only support runners with a single
+        # concurrency level. We can't use `$CI_CONCURRENCY_ID` because this may
+        # change between the build and test stages which CMake doesn't support.
+        # Even if we could, it could change if other runners on the machine
+        # could run at the same time, so we drop it.
+        GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake ci"
+
+.windows_ninja:
+    extends: .windows_build
+
+    variables:
+        # Debug and RelWithDebinfo build types use the `/Zi` which results in
+        # uncacheable compiations.
+        # https://github.com/mozilla/sccache/issues/242
+        CMAKE_BUILD_TYPE: Release
+        CTEST_NO_WARNINGS_ALLOWED: 1
+
+.windows_vs2019_x64_ninja:
+    extends: .windows_ninja
+
+    variables:
+        CMAKE_CONFIGURATION: windows_vs2019_x64_ninja
+        VCVARSALL: "${VS160COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
+        VCVARSPLATFORM: "x64"
+        VCVARSVERSION: "14.26"
+
+### External testing
+
+.windows_vs2019_x64:
+    extends: .windows
+
+    variables:
+        CMAKE_CONFIGURATION: windows_vs2019_x64
+        CMAKE_GENERATOR: "Visual Studio 16 2019"
+        CMAKE_GENERATOR_PLATFORM: "x64"
+        CMAKE_GENERATOR_TOOLSET: "v142,version=14.26"
+
+## Tags
+
+.windows_builder_tags:
+    tags:
+        - cmake # Since this is a bare runner, pin to a project.
+        - windows
+        - shell
+        - vs2019
+        - msvc-19.25
+        - nonconcurrent
+
+.windows_builder_ext_tags:
+    tags:
+        - cmake # Since this is a bare runner, pin to a project.
+        - windows
+        - shell
+        - vs2019
+        - msvc-19.25
+        - concurrent
+
+## Windows-specific scripts
+
+.before_script_windows: &before_script_windows
+    - Invoke-Expression -Command .gitlab/ci/cmake.ps1
+    - Invoke-Expression -Command .gitlab/ci/ninja.ps1
+    - $pwdpath = $pwd.Path
+    - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab;$pwdpath\.gitlab\cmake\bin;$env:PATH"
+    - cmake --version
+    - ninja --version
+    - cmake -P .gitlab/ci/download_qt.cmake
+    - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\qt\bin;$env:PATH"
+
+.cmake_build_windows:
+    stage: build
+
+    script:
+        - *before_script_windows
+        - Set-Item -Force -Path "env:PATH" -Value "$env:PATH;$env:SCCACHE_PATH"
+        - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
+        - sccache --start-server
+        - sccache --show-stats
+        - ctest -VV -S .gitlab/ci/ctest_configure.cmake
+        - ctest -VV -S .gitlab/ci/ctest_build.cmake
+        - sccache --show-stats
+        - sccache --stop-server
+
+    interruptible: true
+
+.cmake_test_windows:
+    stage: test
+
+    script:
+        - *before_script_windows
+        - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
+        - ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake
+
+    interruptible: true
+
+.cmake_test_windows_external:
+    stage: test-ext
+
+    script:
+        - build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
+
+    interruptible: true
diff --git a/.gitlab/rules.yml b/.gitlab/rules.yml
new file mode 100644
index 0000000..96b95c8
--- /dev/null
+++ b/.gitlab/rules.yml
@@ -0,0 +1,18 @@
+# Rules for where jobs can run
+
+.run_manually:
+    rules:
+        - if: '$CI_PROJECT_PATH == "cmake/cmake"'
+          when: delayed
+          start_in: 5 minutes
+        - if: '$CI_MERGE_REQUEST_ID'
+          when: manual
+        - when: never
+
+.run_automatically:
+    rules:
+        - if: '$CI_PROJECT_PATH == "cmake/cmake"'
+          when: always
+        - if: '$CI_MERGE_REQUEST_ID'
+          when: always
+        - when: never
diff --git a/Help/command/DEVICE_LINK_OPTIONS.txt b/Help/command/DEVICE_LINK_OPTIONS.txt
index 012e9b1..3f0226f 100644
--- a/Help/command/DEVICE_LINK_OPTIONS.txt
+++ b/Help/command/DEVICE_LINK_OPTIONS.txt
@@ -1,9 +1,10 @@
 
 When a device link step is involved, which is controlled by
 :prop_tgt:`CUDA_SEPARABLE_COMPILATION` and
-:prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties, the raw options will be
-delivered to the host and device link steps (wrapped in ``-Xcompiler`` or
-equivalent for device link). Options wrapped with ``$<DEVICE_LINK:...>``
+:prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties and policy :policy:`CMP0105`,
+the raw options will be delivered to the host and device link steps (wrapped in
+``-Xcompiler`` or equivalent for device link). Options wrapped with
+``$<DEVICE_LINK:...>``
 :manual:`generator expression <cmake-generator-expressions(7)>` will be used
 only for the device link step. Options wrapped with ``$<HOST_LINK:...>``
 :manual:`generator expression <cmake-generator-expressions(7)>` will be used
diff --git a/Help/dev/review.rst b/Help/dev/review.rst
index e430fbb..6c7e92c 100644
--- a/Help/dev/review.rst
+++ b/Help/dev/review.rst
@@ -306,6 +306,19 @@
   * ``--named <regex>``, ``-n <regex>``: Trigger jobs matching ``<regex>``
     anywhere in their name.  Job names may be seen on the merge request's
     pipeline page.
+  * ``--stage <stage>``, ``-s <stage>``: Only affect jobs in a given stage.
+    Stage names may be seen on the merge request's pipeline page.  Note that
+    the names are determined by what is in the ``.gitlab-ci.yml`` file and may
+    be capitalized in the web page, so lowercasing the webpage's display name
+    for stages may be required.
+  * ``--action <action>``, ``-a <action>``: The action to perform on the jobs.
+    Possible actions:
+
+    * ``manual`` (the default): Start jobs awaiting manual interaction.
+    * ``unsuccessful``: Start or restart jobs which have not completed
+      successfully.
+    * ``failed``: Restart jobs which have completed, but without success.
+    * ``completed``: Restart all completed jobs.
 
 If the merge request topic branch is updated by a push, a new manual trigger
 using one of the above methods is needed to start CI again.
diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst
index 9e411a4..124da44 100644
--- a/Help/manual/cmake-generator-expressions.7.rst
+++ b/Help/manual/cmake-generator-expressions.7.rst
@@ -365,8 +365,9 @@
 ``$<DEVICE_LINK:list>``
   Returns the list if it is the device link step, an empty list otherwise.
   The device link step is controlled by :prop_tgt:`CUDA_SEPARABLE_COMPILATION`
-  and :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties. This expression can
-  only be used to specify link options.
+  and :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties and
+  policy :policy:`CMP0105`. This expression can only be used to specify link
+  options.
 
 ``$<HOST_LINK:list>``
   Returns the list if it is the normal link step, an empty list otherwise.
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index 7f7ed50..30b2a05 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -128,7 +128,6 @@
    /prop_tgt/ARCHIVE_OUTPUT_DIRECTORY
    /prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG
    /prop_tgt/ARCHIVE_OUTPUT_NAME
-   /prop_tgt/PCH_WARN_INVALID
    /prop_tgt/AUTOGEN_BUILD_DIR
    /prop_tgt/AUTOGEN_ORIGIN_DEPENDS
    /prop_tgt/AUTOGEN_PARALLEL
@@ -312,6 +311,7 @@
    /prop_tgt/OSX_ARCHITECTURES
    /prop_tgt/OUTPUT_NAME_CONFIG
    /prop_tgt/OUTPUT_NAME
+   /prop_tgt/PCH_WARN_INVALID
    /prop_tgt/PDB_NAME_CONFIG
    /prop_tgt/PDB_NAME
    /prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG
diff --git a/Help/policy/CMP0104.rst b/Help/policy/CMP0104.rst
index ca2c571..8516716 100644
--- a/Help/policy/CMP0104.rst
+++ b/Help/policy/CMP0104.rst
@@ -23,9 +23,34 @@
 :variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``
 and raise an error if :prop_tgt:`CUDA_ARCHITECTURES` is empty during generation.
 
+If :prop_tgt:`CUDA_ARCHITECTURES` is set to a false value no architectures
+flags are passed to the compiler. This is intended to support packagers and
+the rare cases where full control over the passed flags is required.
+
 This policy was introduced in CMake version 3.18.  CMake version
 |release| warns when the policy is not set and uses ``OLD`` behavior.
 Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
 explicitly.
 
 .. include:: DEPRECATED.txt
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 35 50 72)
+
+Generates code for real and virtual architectures ``30``, ``50`` and ``72``.
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
+
+Generates code for real architecture ``70`` and virtual architecture ``72``.
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
+
+CMake will not pass any architecture flags to the compiler.
diff --git a/Help/prop_sf/VS_SETTINGS.rst b/Help/prop_sf/VS_SETTINGS.rst
index 0719406..50034fb 100644
--- a/Help/prop_sf/VS_SETTINGS.rst
+++ b/Help/prop_sf/VS_SETTINGS.rst
@@ -15,4 +15,4 @@
 will set ``Key`` to ``Value`` and ``Key2`` to ``Value2`` on the
 ``file.hlsl`` item as metadata.
 
-Generator expressions are supported.
+:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
diff --git a/Help/prop_tgt/CUDA_ARCHITECTURES.rst b/Help/prop_tgt/CUDA_ARCHITECTURES.rst
index 328f40b..bae3c6f 100644
--- a/Help/prop_tgt/CUDA_ARCHITECTURES.rst
+++ b/Help/prop_tgt/CUDA_ARCHITECTURES.rst
@@ -8,6 +8,10 @@
 If no suffix is given then code is generated for both real and virtual
 architectures.
 
+A non-empty false value (e.g. ``OFF``) disables adding architectures.
+This is intended to support packagers and rare cases where full control
+over the passed flags is required.
+
 This property is initialized by the value of the :variable:`CMAKE_CUDA_ARCHITECTURES`
 variable if it is set when a target is created.
 
@@ -28,3 +32,9 @@
   set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
 
 Generates code for real architecture ``70`` and virtual architecture ``72``.
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
+
+CMake will not pass any architecture flags to the compiler.
diff --git a/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst b/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
index 2b20bf9..5d0fc3d 100644
--- a/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
+++ b/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
@@ -1,24 +1,25 @@
 FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>
 ---------------------------------------
 
-Postfix to append to the framework file name for configuration <CONFIG>,
+Postfix to append to the framework file name for configuration ``<CONFIG>``,
 when using a multi-config generator (like Xcode and Ninja Multi-Config).
 
-When building with configuration <CONFIG> the value of this property
+When building with configuration ``<CONFIG>`` the value of this property
 is appended to the framework file name built on disk.
 
-For example given a framework called ``my_fw``, a value of ``_debug``
-for the :prop_tgt:`FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` property, and
-``Debug;Release`` in `CMAKE_CONFIGURATION_TYPES`, the following relevant
-files would be created for the ``Debug`` and ``Release`` configurations:
+For example, given a framework called ``my_fw``, a value of ``_debug``
+for the ``FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>`` property, and
+``Debug;Release`` in :variable:`CMAKE_CONFIGURATION_TYPES`, the following
+relevant files would be created for the ``Debug`` and ``Release``
+configurations:
 
-- Release/my_fw.framework/my_fw
-- Release/my_fw.framework/Versions/A/my_fw
-- Debug/my_fw.framework/my_fw_debug
-- Debug/my_fw.framework/Versions/A/my_fw_debug
+- ``Release/my_fw.framework/my_fw``
+- ``Release/my_fw.framework/Versions/A/my_fw``
+- ``Debug/my_fw.framework/my_fw_debug``
+- ``Debug/my_fw.framework/Versions/A/my_fw_debug``
 
 For framework targets, this property is initialized by the value of the
-variable :variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` if it
+:variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` variable if it
 is set when a target is created.
 
 This property is ignored for non-framework targets, and when using single
diff --git a/Help/prop_tgt/PCH_WARN_INVALID.rst b/Help/prop_tgt/PCH_WARN_INVALID.rst
index 36ec348..96e1abd 100644
--- a/Help/prop_tgt/PCH_WARN_INVALID.rst
+++ b/Help/prop_tgt/PCH_WARN_INVALID.rst
@@ -2,7 +2,9 @@
 ----------------
 
 When this property is set to true, the precompile header compiler options
-will contain a compiler flag wich should warn about invalid precompiled
+will contain a compiler flag which should warn about invalid precompiled
 headers e.g. ``-Winvalid-pch`` for GNU compiler.
 
-The defalut value is ``ON``.
+This property is initialized by the value of the
+:variable:`CMAKE_PCH_WARN_INVALID` variable if it is set when a target is
+created.  If that variable is not set, the property defaults to ``ON``.
diff --git a/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst b/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst
index 7906d75..eef848f 100644
--- a/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst
+++ b/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst
@@ -4,24 +4,22 @@
 Specify that the target should be marked for deployment when not targeting
 Windows CE, Windows Phone or a Windows Store application.
 
-If the target platform doesn't support deployment, this property won't have any effect.
+If the target platform doesn't support deployment, this property won't have
+any effect.
 
-Generator expressions are supported.
+:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
 
-Example 1
-^^^^^^^^^
+Examples
+^^^^^^^^
 
-This shows setting the variable for the target foo.
+Always deploy target ``foo``:
 
 .. code-block:: cmake
 
   add_executable(foo SHARED foo.cpp)
   set_property(TARGET foo PROPERTY VS_SOLUTION_DEPLOY ON)
 
-Example 2
-^^^^^^^^^
-
-This shows setting the variable for the Release configuration only.
+Deploy target ``foo`` for all configurations except ``Release``:
 
 .. code-block:: cmake
 
diff --git a/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst b/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst
index f706888..738a912 100644
--- a/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst
+++ b/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst
@@ -16,4 +16,4 @@
 will set ``Key`` to ``Value`` and ``Key2`` to ``Value2`` for all
 non-built files that use ``FXCompile``.
 
-Generator expressions are supported.
+:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
diff --git a/Help/release/3.18.rst b/Help/release/3.18.rst
index 71f9d85..c98b12a 100644
--- a/Help/release/3.18.rst
+++ b/Help/release/3.18.rst
@@ -13,7 +13,8 @@
 Languages
 ---------
 
-* The ``CUDA`` language can now be compiled using Clang.
+* The ``CUDA`` language can now be compiled using Clang on non-Windows
+  platforms. Separable compilation is not yet supported on any platform.
 
 Command-Line
 ------------
@@ -116,6 +117,9 @@
 * The :prop_sf:`OBJECT_OUTPUTS` source file property now supports
   :manual:`generator expressions <cmake-generator-expressions(7)>`.
 
+* The :prop_tgt:`PCH_WARN_INVALID` target property was added to allow the
+  removal of the precompiled header invalid warning.
+
 * The :prop_tgt:`UNITY_BUILD_MODE` target property was added to tell
   generators which algorithm to use for grouping included source
   files.
@@ -156,6 +160,14 @@
 
 * The :module:`FindBLAS` module now provides an imported target.
 
+* The :module:`FindCUDAToolkit` module:
+
+  * gained the variable
+    ``CUDAToolkit_LIBRARY_ROOT``, which is the directory containing the
+    ``nvvm`` directory and ``version.txt``.
+
+  * uses toolkit and library root found during ``CUDA`` compiler detection.
+
 * The :module:`FindLAPACK` module now provides an imported target.
 
 * The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
@@ -234,9 +246,9 @@
   installer is DPI-aware.
 
 * The :cpack_gen:`CPack RPM Generator` gained
-  :variable:`CPACK_RPM_PRE_TRANS_SCRIPT_FILE`
+  :variable:`CPACK_RPM_PRE_TRANS_SCRIPT_FILE` and
   :variable:`CPACK_RPM_POST_TRANS_SCRIPT_FILE`
-  variables to specify pre- and post-trans scripts.
+  variables to specify pre- and post-transaction scripts.
 
 Other
 -----
diff --git a/Modules/CMakeCUDACompiler.cmake.in b/Modules/CMakeCUDACompiler.cmake.in
index 64fb469..704ad09 100644
--- a/Modules/CMakeCUDACompiler.cmake.in
+++ b/Modules/CMakeCUDACompiler.cmake.in
@@ -43,6 +43,9 @@
   set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_CUDA_LIBRARY_ARCHITECTURE@")
 endif()
 
+set(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "@CMAKE_CUDA_COMPILER_TOOLKIT_ROOT@")
+set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "@CMAKE_CUDA_COMPILER_LIBRARY_ROOT@")
+
 set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "@CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES@")
 
 set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "@CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES@")
diff --git a/Modules/CMakeDetermineCUDACompiler.cmake b/Modules/CMakeDetermineCUDACompiler.cmake
index 5ae3908..692ce20 100644
--- a/Modules/CMakeDetermineCUDACompiler.cmake
+++ b/Modules/CMakeDetermineCUDACompiler.cmake
@@ -51,32 +51,155 @@
 if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
   set(CMAKE_CUDA_COMPILER_ID_RUN 1)
 
-  # Try to identify the compiler.
-  set(CMAKE_CUDA_COMPILER_ID)
-  set(CMAKE_CUDA_PLATFORM_ID)
-  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
-    CMAKE_CUDA_COMPILER_ID_PLATFORM_CONTENT)
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
 
-  list(APPEND CMAKE_CUDA_COMPILER_ID_VENDORS NVIDIA Clang)
-  set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_NVIDIA "nvcc: NVIDIA \\(R\\) Cuda compiler driver")
-  set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_Clang "(clang version)")
+  if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+    # We will not know CMAKE_CUDA_COMPILER until the main compiler id step
+    # below extracts it, but we do know that the compiler id will be NVIDIA.
+    set(CMAKE_CUDA_COMPILER_ID "NVIDIA")
+  else()
+    # We determine the vendor to help with find the toolkit and use the right flags for detection right away.
+    # The main compiler identification is still needed below to extract other information.
+    list(APPEND CMAKE_CUDA_COMPILER_ID_VENDORS NVIDIA Clang)
+    set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_NVIDIA "nvcc: NVIDIA \\(R\\) Cuda compiler driver")
+    set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_Clang "(clang version)")
+    CMAKE_DETERMINE_COMPILER_ID_VENDOR(CUDA "--version")
 
-  set(CMAKE_CXX_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdCUDA/(\\./)?(CompilerIdCUDA.xctest/)?CompilerIdCUDA[ \t\n\\\"]")
-  set(CMAKE_CXX_COMPILER_ID_TOOL_MATCH_INDEX 2)
-  set(CMAKE_CUDA_COMPILER_ID_FLAGS_ALWAYS "-v")
+    # Find the CUDA toolkit. We store the CMAKE_CUDA_COMPILER_TOOLKIT_ROOT and CMAKE_CUDA_COMPILER_LIBRARY_ROOT
+    # in CMakeCUDACompiler.cmake, so FindCUDAToolkit can avoid searching on future runs and the toolkit stays the same.
+    # This is very similar to FindCUDAToolkit, but somewhat simplified since we can issue fatal errors
+    # if we fail to find things we need and we don't need to account for searching the libraries.
 
-  # nvcc
-  set(nvcc_test_flags "--keep --keep-dir tmp")
-  if(CMAKE_CUDA_HOST_COMPILER)
-    string(APPEND nvcc_test_flags " -ccbin=${CMAKE_CUDA_HOST_COMPILER}")
+    # For NVCC we can easily deduce the SDK binary directory from the compiler path.
+    if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+      set(_CUDA_NVCC_EXECUTABLE "${CMAKE_CUDA_COMPILER}")
+    else()
+      # Search using CUDAToolkit_ROOT and then CUDA_PATH for equivalence with FindCUDAToolkit.
+      # In FindCUDAToolkit CUDAToolkit_ROOT is searched automatically due to being in a find_package().
+      # First we search candidate non-default paths to give them priority.
+      find_program(_CUDA_NVCC_EXECUTABLE
+        NAMES nvcc nvcc.exe
+        PATHS ${CUDAToolkit_ROOT}
+        ENV CUDAToolkit_ROOT
+        ENV CUDA_PATH
+        PATH_SUFFIXES bin
+        NO_DEFAULT_PATH
+      )
+
+      # If we didn't find NVCC, then try the default paths.
+      find_program(_CUDA_NVCC_EXECUTABLE
+        NAMES nvcc nvcc.exe
+        PATH_SUFFIXES bin
+      )
+
+      # If the user specified CUDAToolkit_ROOT but nvcc could not be found, this is an error.
+      if(NOT _CUDA_NVCC_EXECUTABLE AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT}))
+        set(fail_base "Could not find nvcc executable in path specified by")
+
+        if(DEFINED CUDAToolkit_ROOT)
+          message(FATAL_ERROR "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}")
+        elseif(DEFINED ENV{CUDAToolkit_ROOT})
+          message(FATAL_ERROR "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}")
+        endif()
+      endif()
+
+      # CUDAToolkit_ROOT cmake/env variable not specified, try platform defaults.
+      #
+      # - Linux: /usr/local/cuda-X.Y
+      # - macOS: /Developer/NVIDIA/CUDA-X.Y
+      # - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
+      #
+      # We will also search the default symlink location /usr/local/cuda first since
+      # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked
+      # directory is the desired location.
+      if(NOT _CUDA_NVCC_EXECUTABLE)
+        if(UNIX)
+          if(NOT APPLE)
+            set(platform_base "/usr/local/cuda-")
+          else()
+            set(platform_base "/Developer/NVIDIA/CUDA-")
+          endif()
+        else()
+          set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v")
+        endif()
+
+        # Build out a descending list of possible cuda installations, e.g.
+        file(GLOB possible_paths "${platform_base}*")
+        # Iterate the glob results and create a descending list.
+        set(versions)
+        foreach(p ${possible_paths})
+          # Extract version number from end of string
+          string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p})
+          if(IS_DIRECTORY ${p} AND p_version)
+            list(APPEND versions ${p_version})
+          endif()
+        endforeach()
+
+        # Sort numerically in descending order, so we try the newest versions first.
+        list(SORT versions COMPARE NATURAL ORDER DESCENDING)
+
+        # With a descending list of versions, populate possible paths to search.
+        set(search_paths)
+        foreach(v ${versions})
+          list(APPEND search_paths "${platform_base}${v}")
+        endforeach()
+
+        # Force the global default /usr/local/cuda to the front on Unix.
+        if(UNIX)
+          list(INSERT search_paths 0 "/usr/local/cuda")
+        endif()
+
+        # Now search for nvcc again using the platform default search paths.
+        find_program(_CUDA_NVCC_EXECUTABLE
+          NAMES nvcc nvcc.exe
+          PATHS ${search_paths}
+          PATH_SUFFIXES bin
+        )
+
+        # We are done with these variables now, cleanup.
+        unset(platform_base)
+        unset(possible_paths)
+        unset(versions)
+        unset(search_paths)
+
+        if(NOT _CUDA_NVCC_EXECUTABLE)
+          message(FATAL_ERROR "Could not find nvcc, please set CUDAToolkit_ROOT.")
+        endif()
+      endif()
+    endif()
+
+    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${_CUDA_NVCC_EXECUTABLE}" DIRECTORY)
+    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}" DIRECTORY)
+
+    # CMAKE_CUDA_COMPILER_LIBRARY_ROOT contains the device library and version file.
+    # In a non-scattered installation this is equivalent to CMAKE_CUDA_COMPILER_TOOLKIT_ROOT.
+    # We first check for a non-scattered installation to prefer it over a scattered installation.
+    if(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/version.txt")
+      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+    elseif(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt")
+      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_SYSROOT_LINK}/usr/lib/cuda")
+    elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt")
+      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_SYSROOT}/usr/lib/cuda")
+    endif()
   endif()
 
-  # Clang
-  if(CMAKE_CROSSCOMPILING)
-    # Need to pass the host target and include directories if we're crosscompiling.
-    set(clang_test_flags "--sysroot=\"${CMAKE_SYSROOT}\" --target=${CMAKE_CUDA_COMPILER_TARGET}")
-  else()
-    set(clang_test_flags)
+  set(CMAKE_CUDA_COMPILER_ID_FLAGS_ALWAYS "-v")
+
+  if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+    set(nvcc_test_flags "--keep --keep-dir tmp")
+    if(CMAKE_CUDA_HOST_COMPILER)
+      string(APPEND nvcc_test_flags " -ccbin=${CMAKE_CUDA_HOST_COMPILER}")
+    endif()
+  elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
+    if(WIN32)
+      message(FATAL_ERROR "Clang with CUDA is not yet supported on Windows. See CMake issue #20776.")
+    endif()
+
+    set(clang_test_flags "--cuda-path=\"${CMAKE_CUDA_COMPILER_LIBRARY_ROOT}\"")
+    if(CMAKE_CROSSCOMPILING)
+      # Need to pass the host target and include directories if we're crosscompiling.
+      string(APPEND clang_test_flags " --sysroot=\"${CMAKE_SYSROOT}\" --target=${CMAKE_CUDA_COMPILER_TARGET}")
+    endif()
   endif()
 
   # First try with the user-specified architectures.
@@ -108,9 +231,24 @@
   # Finally also try the default.
   list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${clang_test_flags}")
 
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  # We perform compiler identification for a second time to extract implicit linking info and host compiler for NVCC.
+  # We also use it to verify that CMAKE_CUDA_ARCHITECTURES and additionaly on Clang that CUDA toolkit path works.
+  # The latter could be done during compiler testing in the future to avoid doing this for Clang.
+  # We need to unset the compiler ID otherwise CMAKE_DETERMINE_COMPILER_ID() doesn't work.
+  set(CMAKE_CUDA_COMPILER_ID)
+  set(CMAKE_CUDA_PLATFORM_ID)
+  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
+    CMAKE_CUDA_COMPILER_ID_PLATFORM_CONTENT)
+
   CMAKE_DETERMINE_COMPILER_ID(CUDA CUDAFLAGS CMakeCUDACompilerId.cu)
 
+  if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+    # Now that we have the path to nvcc, we can compute the toolkit root.
+    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER}" DIRECTORY)
+    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}" DIRECTORY)
+    set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+  endif()
+
   _cmake_find_compiler_sysroot(CUDA)
 endif()
 
@@ -157,12 +295,54 @@
     endforeach()
   endif()
 
+  # Find target directory. Account for crosscompiling.
+  if(CMAKE_CROSSCOMPILING)
+    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
+      # Support for NVPACK
+      set(_CUDA_TARGET_NAME "armv7-linux-androideabi")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+      set(_CUDA_TARGET_NAME "armv7-linux-gnueabihf")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
+      if(ANDROID_ARCH_NAME STREQUAL "arm64")
+        set(_CUDA_TARGET_NAME "aarch64-linux-androideabi")
+      else()
+        set(_CUDA_TARGET_NAME "aarch64-linux")
+      endif()
+    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+      set(_CUDA_TARGET_NAME "x86_64-linux")
+    endif()
+
+    if(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
+      set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
+    endif()
+  else()
+    set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+  endif()
+
+  # We can't use find_library() yet at this point, so try a few guesses.
+  if(EXISTS "${_CUDA_TARGET_DIR}/lib64")
+    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib64")
+  elseif(EXISTS "${_CUDA_TARGET_DIR}/lib/x64")
+    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib/x64")
+  elseif(EXISTS "${_CUDA_TARGET_DIR}/lib")
+    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib")
+  else()
+    message(FATAL_ERROR "Unable to find _CUDA_LIBRARY_DIR based on _CUDA_TARGET_DIR=${_CUDA_TARGET_DIR}")
+  endif()
+
+  # _CUDA_TARGET_DIR always points to the directory containing the include directory.
+  # On a scattered installation /usr, on a non-scattered something like /usr/local/cuda or /usr/local/cuda-10.2/targets/aarch64-linux.
+  if(EXISTS "${_CUDA_TARGET_DIR}/include/cuda_runtime.h")
+    set(_CUDA_INCLUDE_DIR "${_CUDA_TARGET_DIR}/include")
+  else()
+    message(FATAL_ERROR "Unable to find cuda_runtime.h in \"${_CUDA_TARGET_DIR}/include\" for _CUDA_INCLUDE_DIR.")
+  endif()
+
   # Clang does not add any CUDA SDK libraries or directories when invoking the host linker.
   # Add the CUDA toolkit library directory ourselves so that linking works.
   # The CUDA runtime libraries are handled elsewhere by CMAKE_CUDA_RUNTIME_LIBRARY.
-  include(Internal/CUDAToolkit)
-  set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIR}")
-  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "${CUDAToolkit_LIBRARY_DIR}")
+  set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${_CUDA_INCLUDE_DIR}")
+  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "${_CUDA_LIBRARY_DIR}")
   set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "")
   set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
 elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
@@ -352,7 +532,7 @@
 
 # If the user didn't set the architectures, then set them to a default.
 # If the user did, then make sure those architectures worked.
-if(DEFINED detected_architecture)
+if(DEFINED detected_architecture AND "${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
   set(CMAKE_CUDA_ARCHITECTURES "${detected_architecture}" CACHE STRING "CUDA architectures")
 
   if(NOT CMAKE_CUDA_ARCHITECTURES)
@@ -382,7 +562,14 @@
 configure_file(${CMAKE_ROOT}/Modules/CMakeCUDACompiler.cmake.in
   ${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake
   @ONLY
-  )
+)
+
+# Don't leak variables unnecessarily to user code.
+unset(_CUDA_INCLUDE_DIR CACHE)
+unset(_CUDA_NVCC_EXECUTABLE CACHE)
+unset(_CUDA_LIBRARY_DIR)
+unset(_CUDA_TARGET_DIR)
+unset(_CUDA_TARGET_NAME)
 
 set(CMAKE_CUDA_COMPILER_ENV_VAR "CUDACXX")
 set(CMAKE_CUDA_HOST_COMPILER_ENV_VAR "CUDAHOSTCXX")
diff --git a/Modules/Compiler/ARMClang.cmake b/Modules/Compiler/ARMClang.cmake
index d412399..01ce91d 100644
--- a/Modules/Compiler/ARMClang.cmake
+++ b/Modules/Compiler/ARMClang.cmake
@@ -61,7 +61,7 @@
   if(__CMAKE_ARMClang_USING_armlink)
     set(__linker_wrapper_flags "")
   else()
-    set(__linker_wrapper_flags --target=${CMAKE_${lang}_COMPILER_TARGET} -XLinker)
+    set(__linker_wrapper_flags --target=${CMAKE_${lang}_COMPILER_TARGET} -Xlinker)
   endif()
 
   execute_process(COMMAND "${CMAKE_LINKER}" ${__linker_wrapper_flags} --cpu=list
diff --git a/Modules/Compiler/Clang.cmake b/Modules/Compiler/Clang.cmake
index cd47aa6..bb516d3 100644
--- a/Modules/Compiler/Clang.cmake
+++ b/Modules/Compiler/Clang.cmake
@@ -146,7 +146,14 @@
       set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
     endif()
 
-    if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 6.0)
+      set(CMAKE_${lang}17_STANDARD__HAS_FULL_SUPPORT ON)
+    endif()
+
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 11.0)
+      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++20")
+      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
+    elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
       set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
       set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
     endif()
diff --git a/Modules/Compiler/NVIDIA-CUDA.cmake b/Modules/Compiler/NVIDIA-CUDA.cmake
index 87607e2..feb5ecc 100644
--- a/Modules/Compiler/NVIDIA-CUDA.cmake
+++ b/Modules/Compiler/NVIDIA-CUDA.cmake
@@ -78,6 +78,12 @@
     set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "")
     set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "")
   endif()
+
+  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0)
+    set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "")
+  endif()
+
 else()
   set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "")
   set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "")
@@ -92,6 +98,11 @@
     set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14")
   endif()
 
+  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0)
+    set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "-std=c++17")
+    set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17")
+  endif()
+
 endif()
 
 # FIXME: investigate use of --options-file.
diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake
index e1af2d6..a93d4fd 100644
--- a/Modules/FindCUDA.cmake
+++ b/Modules/FindCUDA.cmake
@@ -357,7 +357,8 @@
   CUDA_nppicc_LIBRARY   -- NVIDIA Performance Primitives lib (image processing).
                            Only available for CUDA version 9.0.
   CUDA_nppicom_LIBRARY  -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
+                           Only available for CUDA version 9.0 - 10.2.
+                           Replaced by nvjpeg.
   CUDA_nppidei_LIBRARY  -- NVIDIA Performance Primitives lib (image processing).
                            Only available for CUDA version 9.0.
   CUDA_nppif_LIBRARY    -- NVIDIA Performance Primitives lib (image processing).
@@ -1002,7 +1003,9 @@
   find_cuda_helper_libs(nppc)
   find_cuda_helper_libs(nppial)
   find_cuda_helper_libs(nppicc)
-  find_cuda_helper_libs(nppicom)
+  if(CUDA_VERSION VERSION_LESS "11.0")
+    find_cuda_helper_libs(nppicom)
+  endif()
   find_cuda_helper_libs(nppidei)
   find_cuda_helper_libs(nppif)
   find_cuda_helper_libs(nppig)
diff --git a/Modules/FindCUDAToolkit.cmake b/Modules/FindCUDAToolkit.cmake
index 7d4e168..47bc546 100644
--- a/Modules/FindCUDAToolkit.cmake
+++ b/Modules/FindCUDAToolkit.cmake
@@ -154,6 +154,8 @@
 
 - ``CUDA::cublas``
 - ``CUDA::cublas_static``
+- ``CUDA::cublasLt`` starting in CUDA 10.1
+- ``CUDA::cublasLt_static`` starting in CUDA 10.1
 
 .. _`cuda_toolkit_cuFFT`:
 
@@ -240,6 +242,7 @@
   - ``CUDA::nppicc_static``
 
 - `nppicom`: JPEG compression and decompression functions in `nppi_compression_functions.h`
+  Removed starting in CUDA 11.0, use :ref:`nvJPEG<cuda_toolkit_nvJPEG>` instead.
 
   - ``CUDA::nppicom``
   - ``CUDA::nppicom_static``
@@ -302,6 +305,7 @@
 """""""
 
 The `nvGRAPH <https://docs.nvidia.com/cuda/nvgraph/index.html>`_ library.
+Removed starting in CUDA 11.0
 
 Targets Created:
 
@@ -421,6 +425,10 @@
     The path to the CUDA Toolkit library directory that contains the CUDA
     Runtime library ``cudart``.
 
+``CUDAToolkit_LIBRARY_ROOT``
+    The path to the CUDA Toolkit directory containing the nvvm directory and
+    version.txt.
+
 ``CUDAToolkit_TARGET_DIR``
     The path to the CUDA Toolkit directory including the target architecture
     when cross-compiling. When not cross-compiling this will be equivalant to
@@ -473,8 +481,207 @@
 #
 ###############################################################################
 
-# Include shared CUDA toolkit location code.
-include(Internal/CUDAToolkit)
+# The toolkit is located during compiler detection for CUDA and stored in CMakeCUDACompiler.cmake as
+# CMAKE_CUDA_COMPILER_TOOLKIT_ROOT and CMAKE_CUDA_COMPILER_LIBRARY_ROOT.
+# We compute the rest based on those here to avoid re-searching and to avoid finding a possibly
+# different installation.
+if(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT)
+  set(CUDAToolkit_ROOT_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+  set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_LIBRARY_ROOT}")
+  set(CUDAToolkit_BIN_DIR "${CUDAToolkit_ROOT_DIR}/bin")
+  set(CUDAToolkit_NVCC_EXECUTABLE "${CUDAToolkit_BIN_DIR}/nvcc${CMAKE_EXECUTABLE_SUFFIX}")
+else()
+  # For NVCC we can easily deduce the SDK binary directory from the compiler path.
+  if(CMAKE_CUDA_COMPILER_LOADED AND NOT CUDAToolkit_BIN_DIR AND CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+    get_filename_component(CUDAToolkit_BIN_DIR "${CMAKE_CUDA_COMPILER}" DIRECTORY)
+    set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "")
+    mark_as_advanced(CUDAToolkit_BIN_DIR)
+  endif()
+
+  # Try language- or user-provided path first.
+  if(CUDAToolkit_BIN_DIR)
+    find_program(CUDAToolkit_NVCC_EXECUTABLE
+      NAMES nvcc nvcc.exe
+      PATHS ${CUDAToolkit_BIN_DIR}
+      NO_DEFAULT_PATH
+    )
+  endif()
+
+  # Search using CUDAToolkit_ROOT
+  find_program(CUDAToolkit_NVCC_EXECUTABLE
+    NAMES nvcc nvcc.exe
+    PATHS ENV CUDA_PATH
+    PATH_SUFFIXES bin
+  )
+
+  # If the user specified CUDAToolkit_ROOT but nvcc could not be found, this is an error.
+  if(NOT CUDAToolkit_NVCC_EXECUTABLE AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT}))
+    # Declare error messages now, print later depending on find_package args.
+    set(fail_base "Could not find nvcc executable in path specified by")
+    set(cuda_root_fail "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}")
+    set(env_cuda_root_fail "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}")
+
+    if(CUDAToolkit_FIND_REQUIRED)
+      if(DEFINED CUDAToolkit_ROOT)
+        message(FATAL_ERROR ${cuda_root_fail})
+      elseif(DEFINED ENV{CUDAToolkit_ROOT})
+        message(FATAL_ERROR ${env_cuda_root_fail})
+      endif()
+    else()
+      if(NOT CUDAToolkit_FIND_QUIETLY)
+        if(DEFINED CUDAToolkit_ROOT)
+          message(STATUS ${cuda_root_fail})
+        elseif(DEFINED ENV{CUDAToolkit_ROOT})
+          message(STATUS ${env_cuda_root_fail})
+        endif()
+      endif()
+      set(CUDAToolkit_FOUND FALSE)
+      unset(fail_base)
+      unset(cuda_root_fail)
+      unset(env_cuda_root_fail)
+      return()
+    endif()
+  endif()
+
+  # CUDAToolkit_ROOT cmake / env variable not specified, try platform defaults.
+  #
+  # - Linux: /usr/local/cuda-X.Y
+  # - macOS: /Developer/NVIDIA/CUDA-X.Y
+  # - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
+  #
+  # We will also search the default symlink location /usr/local/cuda first since
+  # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked
+  # directory is the desired location.
+  if(NOT CUDAToolkit_NVCC_EXECUTABLE)
+    if(UNIX)
+      if(NOT APPLE)
+        set(platform_base "/usr/local/cuda-")
+      else()
+        set(platform_base "/Developer/NVIDIA/CUDA-")
+      endif()
+    else()
+      set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v")
+    endif()
+
+    # Build out a descending list of possible cuda installations, e.g.
+    file(GLOB possible_paths "${platform_base}*")
+    # Iterate the glob results and create a descending list.
+    set(versions)
+    foreach(p ${possible_paths})
+      # Extract version number from end of string
+      string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p})
+      if(IS_DIRECTORY ${p} AND p_version)
+        list(APPEND versions ${p_version})
+      endif()
+    endforeach()
+
+    # Sort numerically in descending order, so we try the newest versions first.
+    list(SORT versions COMPARE NATURAL ORDER DESCENDING)
+
+    # With a descending list of versions, populate possible paths to search.
+    set(search_paths)
+    foreach(v ${versions})
+      list(APPEND search_paths "${platform_base}${v}")
+    endforeach()
+
+    # Force the global default /usr/local/cuda to the front on Unix.
+    if(UNIX)
+      list(INSERT search_paths 0 "/usr/local/cuda")
+    endif()
+
+    # Now search for nvcc again using the platform default search paths.
+    find_program(CUDAToolkit_NVCC_EXECUTABLE
+      NAMES nvcc nvcc.exe
+      PATHS ${search_paths}
+      PATH_SUFFIXES bin
+    )
+
+    # We are done with these variables now, cleanup for caller.
+    unset(platform_base)
+    unset(possible_paths)
+    unset(versions)
+    unset(search_paths)
+
+    if(NOT CUDAToolkit_NVCC_EXECUTABLE)
+      if(CUDAToolkit_FIND_REQUIRED)
+        message(FATAL_ERROR "Could not find nvcc, please set CUDAToolkit_ROOT.")
+      elseif(NOT CUDAToolkit_FIND_QUIETLY)
+        message(STATUS "Could not find nvcc, please set CUDAToolkit_ROOT.")
+      endif()
+
+      set(CUDAToolkit_FOUND FALSE)
+      return()
+    endif()
+  endif()
+
+  if(NOT CUDAToolkit_BIN_DIR AND CUDAToolkit_NVCC_EXECUTABLE)
+    get_filename_component(CUDAToolkit_BIN_DIR "${CUDAToolkit_NVCC_EXECUTABLE}" DIRECTORY)
+    set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "" FORCE)
+    mark_as_advanced(CUDAToolkit_BIN_DIR)
+  endif()
+
+  get_filename_component(CUDAToolkit_ROOT_DIR ${CUDAToolkit_BIN_DIR} DIRECTORY ABSOLUTE)
+
+  # CUDAToolkit_LIBRARY_ROOT contains the device library and version file.
+  # In a non-scattered installation this is equivalent to CUDAToolkit_ROOT_DIR.
+  # We first check for a non-scattered installation to prefer it over a scattered installation.
+  if(EXISTS "${CUDAToolkit_ROOT_DIR}/version.txt")
+    set(CUDAToolkit_LIBRARY_ROOT "${CUDAToolkit_ROOT_DIR}")
+  elseif(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt")
+    set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_SYSROOT_LINK}/usr/lib/cuda")
+  elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt")
+    set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_SYSROOT}/usr/lib/cuda")
+  endif()
+endif()
+
+# Handle cross compilation
+if(CMAKE_CROSSCOMPILING)
+  if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
+    # Support for NVPACK
+    set(CUDAToolkit_TARGET_NAME "armv7-linux-androideabi")
+  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+    # Support for arm cross compilation
+    set(CUDAToolkit_TARGET_NAME "armv7-linux-gnueabihf")
+  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
+    # Support for aarch64 cross compilation
+    if(ANDROID_ARCH_NAME STREQUAL "arm64")
+      set(CUDAToolkit_TARGET_NAME "aarch64-linux-androideabi")
+    else()
+      set(CUDAToolkit_TARGET_NAME "aarch64-linux")
+    endif(ANDROID_ARCH_NAME STREQUAL "arm64")
+  elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+    set(CUDAToolkit_TARGET_NAME "x86_64-linux")
+  endif()
+
+  if(EXISTS "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
+    set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
+    # add known CUDA target root path to the set of directories we search for programs, libraries and headers
+    list(PREPEND CMAKE_FIND_ROOT_PATH "${CUDAToolkit_TARGET_DIR}")
+
+    # Mark that we need to pop the root search path changes after we have
+    # found all cuda libraries so that searches for our cross-compilation
+    # libraries work when another cuda sdk is in CMAKE_PREFIX_PATH or
+    # PATh
+    set(_CUDAToolkit_Pop_ROOT_PATH True)
+  endif()
+else()
+  # Not cross compiling
+  set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}")
+  # Now that we have the real ROOT_DIR, find components inside it.
+  list(APPEND CMAKE_PREFIX_PATH ${CUDAToolkit_ROOT_DIR})
+
+  # Mark that we need to pop the prefix path changes after we have
+  # found the cudart library.
+  set(_CUDAToolkit_Pop_Prefix True)
+endif()
+
+# CUDAToolkit_TARGET_DIR always points to the directory containing the include directory.
+# On a scattered installation /usr, on a non-scattered something like /usr/local/cuda or /usr/local/cuda-10.2/targets/aarch64-linux.
+if(EXISTS "${CUDAToolkit_TARGET_DIR}/include/cuda_runtime.h")
+  set(CUDAToolkit_INCLUDE_DIR "${CUDAToolkit_TARGET_DIR}/include")
+elseif(NOT CUDAToolkit_FIND_QUIETLY)
+  message(STATUS "Unable to find cuda_runtime.h in \"${CUDAToolkit_TARGET_DIR}/include\" for CUDAToolkit_INCLUDE_DIR.")
+endif()
 
 if(CUDAToolkit_NVCC_EXECUTABLE AND
    CUDAToolkit_NVCC_EXECUTABLE STREQUAL CMAKE_CUDA_COMPILER)
@@ -488,7 +695,7 @@
   endif()
 else()
   # Compute the version by invoking nvcc
-  execute_process (COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT)
+  execute_process(COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT)
   if(NVCC_OUT MATCHES [=[ V([0-9]+)\.([0-9]+)\.([0-9]+)]=])
     set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}")
     set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}")
@@ -503,12 +710,10 @@
   NAMES cudart
   PATH_SUFFIXES lib64 lib/x64
 )
-if(NOT CUDA_CUDART)
-  find_library(CUDA_CUDART
-    NAMES cudart
-    PATH_SUFFIXES lib64/stubs lib/x64/stubs
-  )
-endif()
+find_library(CUDA_CUDART
+  NAMES cudart
+  PATH_SUFFIXES lib64/stubs lib/x64/stubs
+)
 
 if(NOT CUDA_CUDART AND NOT CUDAToolkit_FIND_QUIETLY)
   message(STATUS "Unable to find cudart library.")
@@ -559,16 +764,14 @@
       PATH_SUFFIXES nvidia/current lib64 lib/x64 lib
                     ${arg_EXTRA_PATH_SUFFIXES}
     )
-    # Don't try any stub directories intil we have exhausted all other
+    # Don't try any stub directories until we have exhausted all other
     # search locations.
-    if(NOT CUDA_${lib_name}_LIBRARY)
-      find_library(CUDA_${lib_name}_LIBRARY
-        NAMES ${search_names}
-        HINTS ${CUDAToolkit_LIBRARY_DIR}
-              ENV CUDA_PATH
-        PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs
-      )
-    endif()
+    find_library(CUDA_${lib_name}_LIBRARY
+      NAMES ${search_names}
+      HINTS ${CUDAToolkit_LIBRARY_DIR}
+            ENV CUDA_PATH
+      PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs
+    )
 
     mark_as_advanced(CUDA_${lib_name}_LIBRARY)
 
@@ -622,7 +825,7 @@
   endif()
 
   _CUDAToolkit_find_and_add_import_lib(culibos) # it's a static library
-  foreach (cuda_lib cublas cufft curand cusparse nppc nvjpeg)
+  foreach (cuda_lib cublasLt cublas cufft curand cusparse nppc nvjpeg)
     _CUDAToolkit_find_and_add_import_lib(${cuda_lib})
     _CUDAToolkit_find_and_add_import_lib(${cuda_lib}_static DEPS culibos)
   endforeach()
diff --git a/Modules/FindProtobuf.cmake b/Modules/FindProtobuf.cmake
index f35978d..e09717d 100644
--- a/Modules/FindProtobuf.cmake
+++ b/Modules/FindProtobuf.cmake
@@ -117,7 +117,7 @@
   ``PY``
     Variable to define with autogenerated Python files
   ``ARGN``
-    ``.proto`` filess
+    ``.proto`` files
 #]=======================================================================]
 
 function(protobuf_generate)
diff --git a/Modules/GoogleTest.cmake b/Modules/GoogleTest.cmake
index 975ce6c..f75d6ad 100644
--- a/Modules/GoogleTest.cmake
+++ b/Modules/GoogleTest.cmake
@@ -155,7 +155,7 @@
                          [DISCOVERY_MODE <POST_BUILD|PRE_TEST>]
     )
 
-  ``gtest_discover_tests`` sets up a post-build command on the test executable
+  ``gtest_discover_tests()`` sets up a post-build command on the test executable
   that generates the list of tests by parsing the output from running the test
   with the ``--gtest_list_tests`` argument.  Compared to the source parsing
   approach of :command:`gtest_add_tests`, this ensures that the full list of
@@ -212,7 +212,7 @@
 
   ``PROPERTIES name1 value1...``
     Specifies additional properties to be set on all tests discovered by this
-    invocation of ``gtest_discover_tests``.
+    invocation of ``gtest_discover_tests()``.
 
   ``TEST_LIST var``
     Make the list of tests available in the variable ``var``, rather than the
@@ -246,7 +246,7 @@
     XML result output when using parallel test execution.
 
   ``DISCOVERY_MODE``
-    Provides greater control over when ``gtest_discover_tests``performs test
+    Provides greater control over when ``gtest_discover_tests()`` performs test
     discovery. By default, ``POST_BUILD`` sets up a post-build command
     to perform test discovery at build time. In certain scenarios, like
     cross-compiling, this ``POST_BUILD`` behavior is not desirable.
@@ -257,7 +257,7 @@
 
     ``DISCOVERY_MODE`` defaults to the value of the
     ``CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE`` variable if it is not
-    passed when calling ``gtest_discover_tests``. This provides a mechanism
+    passed when calling ``gtest_discover_tests()``. This provides a mechanism
     for globally selecting a preferred test discovery behavior without having
     to modify each call site.
 
diff --git a/Modules/Internal/CUDAToolkit.cmake b/Modules/Internal/CUDAToolkit.cmake
deleted file mode 100644
index 291bb01..0000000
--- a/Modules/Internal/CUDAToolkit.cmake
+++ /dev/null
@@ -1,227 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# This file is for sharing code for finding basic CUDA toolkit information between
-# CMakeDetermineCUDACompiler.cmake and FindCUDAToolkit.cmake.
-
-# For NVCC we can easily deduce the SDK binary directory from the compiler path.
-if(CMAKE_CUDA_COMPILER_LOADED AND NOT CUDAToolkit_BIN_DIR AND CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-  get_filename_component(cuda_dir "${CMAKE_CUDA_COMPILER}" DIRECTORY)
-  set(CUDAToolkit_BIN_DIR "${cuda_dir}" CACHE PATH "")
-  mark_as_advanced(CUDAToolkit_BIN_DIR)
-  unset(cuda_dir)
-endif()
-
-# Try language- or user-provided path first.
-if(CUDAToolkit_BIN_DIR)
-  find_program(CUDAToolkit_NVCC_EXECUTABLE
-    NAMES nvcc nvcc.exe
-    PATHS ${CUDAToolkit_BIN_DIR}
-    NO_DEFAULT_PATH
-    )
-endif()
-
-# Search using CUDAToolkit_ROOT
-find_program(CUDAToolkit_NVCC_EXECUTABLE
-  NAMES nvcc nvcc.exe
-  PATHS ENV CUDA_PATH
-  PATH_SUFFIXES bin
-)
-
-# If the user specified CUDAToolkit_ROOT but nvcc could not be found, this is an error.
-if(NOT CUDAToolkit_NVCC_EXECUTABLE AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT}))
-  # Declare error messages now, print later depending on find_package args.
-  set(fail_base "Could not find nvcc executable in path specified by")
-  set(cuda_root_fail "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}")
-  set(env_cuda_root_fail "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}")
-
-  if(CUDAToolkit_FIND_REQUIRED)
-    if(DEFINED CUDAToolkit_ROOT)
-      message(FATAL_ERROR ${cuda_root_fail})
-    elseif(DEFINED ENV{CUDAToolkit_ROOT})
-      message(FATAL_ERROR ${env_cuda_root_fail})
-    endif()
-  else()
-    if(NOT CUDAToolkit_FIND_QUIETLY)
-      if(DEFINED CUDAToolkit_ROOT)
-        message(STATUS ${cuda_root_fail})
-      elseif(DEFINED ENV{CUDAToolkit_ROOT})
-        message(STATUS ${env_cuda_root_fail})
-      endif()
-    endif()
-    set(CUDAToolkit_FOUND FALSE)
-    unset(fail_base)
-    unset(cuda_root_fail)
-    unset(env_cuda_root_fail)
-    return()
-  endif()
-endif()
-
-# CUDAToolkit_ROOT cmake / env variable not specified, try platform defaults.
-#
-# - Linux: /usr/local/cuda-X.Y
-# - macOS: /Developer/NVIDIA/CUDA-X.Y
-# - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
-#
-# We will also search the default symlink location /usr/local/cuda first since
-# if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked
-# directory is the desired location.
-if(NOT CUDAToolkit_NVCC_EXECUTABLE)
-  if(UNIX)
-    if(NOT APPLE)
-      set(platform_base "/usr/local/cuda-")
-    else()
-      set(platform_base "/Developer/NVIDIA/CUDA-")
-    endif()
-  else()
-    set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v")
-  endif()
-
-  # Build out a descending list of possible cuda installations, e.g.
-  file(GLOB possible_paths "${platform_base}*")
-  # Iterate the glob results and create a descending list.
-  set(possible_versions)
-  foreach (p ${possible_paths})
-    # Extract version number from end of string
-    string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p})
-    if(IS_DIRECTORY ${p} AND p_version)
-      list(APPEND possible_versions ${p_version})
-    endif()
-  endforeach()
-
-  # Cannot use list(SORT) because that is alphabetical, we need numerical.
-  # NOTE: this is not an efficient sorting strategy.  But even if a user had
-  # every possible version of CUDA installed, this wouldn't create any
-  # significant overhead.
-  set(versions)
-  foreach (v ${possible_versions})
-    list(LENGTH versions num_versions)
-    # First version, nothing to compare with so just append.
-    if(num_versions EQUAL 0)
-      list(APPEND versions ${v})
-    else()
-      # Loop through list.  Insert at an index when comparison is
-      # VERSION_GREATER since we want a descending list.  Duplicates will not
-      # happen since this came from a glob list of directories.
-      set(i 0)
-      set(early_terminate FALSE)
-      while (i LESS num_versions)
-        list(GET versions ${i} curr)
-        if(v VERSION_GREATER curr)
-          list(INSERT versions ${i} ${v})
-          set(early_terminate TRUE)
-          break()
-        endif()
-        math(EXPR i "${i} + 1")
-      endwhile()
-      # If it did not get inserted, place it at the end.
-      if(NOT early_terminate)
-        list(APPEND versions ${v})
-      endif()
-    endif()
-  endforeach()
-
-  # With a descending list of versions, populate possible paths to search.
-  set(search_paths)
-  foreach (v ${versions})
-    list(APPEND search_paths "${platform_base}${v}")
-  endforeach()
-
-  # Force the global default /usr/local/cuda to the front on Unix.
-  if(UNIX)
-    list(INSERT search_paths 0 "/usr/local/cuda")
-  endif()
-
-  # Now search for nvcc again using the platform default search paths.
-  find_program(CUDAToolkit_NVCC_EXECUTABLE
-    NAMES nvcc nvcc.exe
-    PATHS ${search_paths}
-    PATH_SUFFIXES bin
-  )
-
-  # We are done with these variables now, cleanup for caller.
-  unset(platform_base)
-  unset(possible_paths)
-  unset(possible_versions)
-  unset(versions)
-  unset(i)
-  unset(early_terminate)
-  unset(search_paths)
-
-  if(NOT CUDAToolkit_NVCC_EXECUTABLE)
-    if(CUDAToolkit_FIND_REQUIRED)
-      message(FATAL_ERROR "Could not find nvcc, please set CUDAToolkit_ROOT.")
-    elseif(NOT CUDAToolkit_FIND_QUIETLY)
-      message(STATUS "Could not find nvcc, please set CUDAToolkit_ROOT.")
-    endif()
-
-    set(CUDAToolkit_FOUND FALSE)
-    return()
-  endif()
-endif()
-
-if(NOT CUDAToolkit_BIN_DIR AND CUDAToolkit_NVCC_EXECUTABLE)
-  get_filename_component(cuda_dir "${CUDAToolkit_NVCC_EXECUTABLE}" DIRECTORY)
-  set(CUDAToolkit_BIN_DIR "${cuda_dir}" CACHE PATH "" FORCE)
-  mark_as_advanced(CUDAToolkit_BIN_DIR)
-  unset(cuda_dir)
-endif()
-
-get_filename_component(CUDAToolkit_ROOT_DIR ${CUDAToolkit_BIN_DIR} DIRECTORY ABSOLUTE)
-
-# Handle cross compilation
-if(CMAKE_CROSSCOMPILING)
-  if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
-    # Support for NVPACK
-    set(CUDAToolkit_TARGET_NAME "armv7-linux-androideabi")
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
-    # Support for arm cross compilation
-    set(CUDAToolkit_TARGET_NAME "armv7-linux-gnueabihf")
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
-    # Support for aarch64 cross compilation
-    if(ANDROID_ARCH_NAME STREQUAL "arm64")
-      set(CUDAToolkit_TARGET_NAME "aarch64-linux-androideabi")
-    else()
-      set(CUDAToolkit_TARGET_NAME "aarch64-linux")
-    endif(ANDROID_ARCH_NAME STREQUAL "arm64")
-  elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
-      set(CUDAToolkit_TARGET_NAME "x86_64-linux")
-  endif()
-
-  if(EXISTS "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
-    set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
-    # add known CUDA target root path to the set of directories we search for programs, libraries and headers
-    list(PREPEND CMAKE_FIND_ROOT_PATH "${CUDAToolkit_TARGET_DIR}")
-
-    # Mark that we need to pop the root search path changes after we have
-    # found all cuda libraries so that searches for our cross-compilation
-    # libraries work when another cuda sdk is in CMAKE_PREFIX_PATH or
-    # PATh
-    set(_CUDAToolkit_Pop_ROOT_PATH True)
-  endif()
-else()
-  # Not cross compiling
-  set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}")
-  # Now that we have the real ROOT_DIR, find components inside it.
-  list(APPEND CMAKE_PREFIX_PATH ${CUDAToolkit_ROOT_DIR})
-
-  # Mark that we need to pop the prefix path changes after we have
-  # found the cudart library.
-  set(_CUDAToolkit_Pop_Prefix True)
-endif()
-
-# Find the include/ directory
-find_path(CUDAToolkit_INCLUDE_DIR
-  NAMES cuda_runtime.h
-)
-
-# Find a tentative CUDAToolkit_LIBRARY_DIR. FindCUDAToolkit overrides it by searching for the CUDA runtime,
-# but we can't do that here, as CMakeDetermineCUDACompiler wants to use it before the variables necessary
-# for find_library() have been initialized.
-if(EXISTS "${CUDAToolkit_TARGET_DIR}/lib64")
-  set(CUDAToolkit_LIBRARY_DIR "${CUDAToolkit_TARGET_DIR}/lib64")
-elseif(EXISTS "${CUDAToolkit_TARGET_DIR}/lib/x64")
-  set(CUDAToolkit_LIBRARY_DIR "${CUDAToolkit_TARGET_DIR}/lib/x64")
-elseif(EXISTS "${CUDAToolkit_TARGET_DIR}/lib")
-  set(CUDAToolkit_LIBRARY_DIR "${CUDAToolkit_TARGET_DIR}/lib")
-endif()
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index ed7c211..04d083b 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -2,7 +2,7 @@
 set(CMake_VERSION_MAJOR 3)
 set(CMake_VERSION_MINOR 18)
 set(CMake_VERSION_PATCH 0)
-set(CMake_VERSION_RC 1)
+set(CMake_VERSION_RC 2)
 set(CMake_VERSION_IS_DIRTY 0)
 
 # Start with the full version number used in tags.  It has no dev info.
diff --git a/Source/QtDialog/QCMakeCacheView.cxx b/Source/QtDialog/QCMakeCacheView.cxx
index 40cc89c..541d3e9 100644
--- a/Source/QtDialog/QCMakeCacheView.cxx
+++ b/Source/QtDialog/QCMakeCacheView.cxx
@@ -217,14 +217,27 @@
   QSet<QCMakeProperty> newProps2;
 
   if (this->ShowNewProperties) {
+#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
     newProps = props.toSet();
+#else
+    newProps = QSet(props.begin(), props.end());
+#endif
     newProps2 = newProps;
+#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
     QSet<QCMakeProperty> oldProps = this->properties().toSet();
+#else
+    QSet<QCMakeProperty> oldProps =
+      QSet(this->properties().begin(), this->properties().end());
+#endif
     oldProps.intersect(newProps);
     newProps.subtract(oldProps);
     newProps2.subtract(newProps);
   } else {
+#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
     newProps2 = props.toSet();
+#else
+    newProps2 = QSet(props.begin(), props.end());
+#endif
   }
 
   bool b = this->blockSignals(true);
@@ -233,8 +246,8 @@
   this->NewPropertyCount = newProps.size();
 
   if (View == FlatView) {
-    QCMakePropertyList newP = newProps.toList();
-    QCMakePropertyList newP2 = newProps2.toList();
+    QCMakePropertyList newP = newProps.values();
+    QCMakePropertyList newP2 = newProps2.values();
 #if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)
     std::sort(newP.begin(), newP.end());
     std::sort(newP2.begin(), newP2.end());
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index a7acadc..8550d04 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -1050,7 +1050,9 @@
   std::set<std::string> deletedFiles;
   for (unsigned long i = 0; i < dir.GetNumberOfFiles(); ++i) {
     const char* fileName = dir.GetFile(i);
-    if (strcmp(fileName, ".") != 0 && strcmp(fileName, "..") != 0) {
+    if (strcmp(fileName, ".") != 0 && strcmp(fileName, "..") != 0 &&
+        // Do not delete NFS temporary files.
+        !cmHasPrefix(fileName, ".nfs")) {
       if (deletedFiles.insert(fileName).second) {
         std::string const fullPath =
           std::string(binDir).append("/").append(fileName);
diff --git a/Source/cmFindProgramCommand.cxx b/Source/cmFindProgramCommand.cxx
index 599b1d2..4b88bea 100644
--- a/Source/cmFindProgramCommand.cxx
+++ b/Source/cmFindProgramCommand.cxx
@@ -85,7 +85,7 @@
       this->TestNameExt = cmStrCat(name, ext);
       this->TestPath =
         cmSystemTools::CollapseFullPath(this->TestNameExt, path);
-      bool exists = cmSystemTools::FileIsExecutable(this->TestPath);
+      bool exists = cmSystemTools::FileExists(this->TestPath, true);
       exists ? this->DebugSearches.FoundAt(this->TestPath)
              : this->DebugSearches.FailedAt(this->TestPath);
       if (exists) {
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 250910a..f2011ee 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -37,6 +37,7 @@
 #include "cmLocalGenerator.h"
 #include "cmMakefile.h"
 #include "cmMessageType.h"
+#include "cmOutputConverter.h"
 #include "cmPropertyMap.h"
 #include "cmRange.h"
 #include "cmSourceFile.h"
@@ -3044,6 +3045,34 @@
 
 void cmGeneratorTarget::AddCUDAArchitectureFlags(std::string& flags) const
 {
+  const std::string& property = this->GetSafeProperty("CUDA_ARCHITECTURES");
+
+  if (property.empty()) {
+    switch (this->GetPolicyStatusCMP0104()) {
+      case cmPolicies::WARN:
+        if (!this->LocalGenerator->GetCMakeInstance()->GetIsInTryCompile()) {
+          this->Makefile->IssueMessage(
+            MessageType::AUTHOR_WARNING,
+            cmPolicies::GetPolicyWarning(cmPolicies::CMP0104) +
+              "\nCUDA_ARCHITECTURES is empty for target \"" + this->GetName() +
+              "\".");
+        }
+        CM_FALLTHROUGH;
+      case cmPolicies::OLD:
+        break;
+      default:
+        this->Makefile->IssueMessage(
+          MessageType::FATAL_ERROR,
+          "CUDA_ARCHITECTURES is empty for target \"" + this->GetName() +
+            "\".");
+    }
+  }
+
+  // If CUDA_ARCHITECTURES is false we don't add any architectures.
+  if (cmIsOff(property)) {
+    return;
+  }
+
   struct CudaArchitecture
   {
     std::string name;
@@ -3054,28 +3083,7 @@
 
   {
     std::vector<std::string> options;
-    cmExpandList(this->GetSafeProperty("CUDA_ARCHITECTURES"), options);
-
-    if (options.empty()) {
-      switch (this->GetPolicyStatusCMP0104()) {
-        case cmPolicies::WARN:
-          if (!this->LocalGenerator->GetCMakeInstance()->GetIsInTryCompile()) {
-            this->Makefile->IssueMessage(
-              MessageType::AUTHOR_WARNING,
-              cmPolicies::GetPolicyWarning(cmPolicies::CMP0104) +
-                "\nCUDA_ARCHITECTURES is empty for target \"" +
-                this->GetName() + "\".");
-          }
-          CM_FALLTHROUGH;
-        case cmPolicies::OLD:
-          break;
-        default:
-          this->Makefile->IssueMessage(
-            MessageType::FATAL_ERROR,
-            "CUDA_ARCHITECTURES is empty for target \"" + this->GetName() +
-              "\".");
-      }
-    }
+    cmExpandList(property, options);
 
     for (std::string& option : options) {
       CudaArchitecture architecture;
@@ -3145,6 +3153,28 @@
   }
 }
 
+void cmGeneratorTarget::AddCUDAToolkitFlags(std::string& flags) const
+{
+  std::string const& compiler =
+    this->Makefile->GetSafeDefinition("CMAKE_CUDA_COMPILER_ID");
+
+  if (compiler == "Clang") {
+    // Pass CUDA toolkit explicitly to Clang.
+    // Clang's searching for the system CUDA toolkit isn't very good and it's
+    // expected the user will explicitly pass the toolkit path.
+    // This also avoids Clang having to search for the toolkit on every
+    // invocation.
+    std::string toolkitRoot =
+      this->Makefile->GetSafeDefinition("CMAKE_CUDA_COMPILER_LIBRARY_ROOT");
+
+    if (!toolkitRoot.empty()) {
+      flags += " --cuda-path=" +
+        this->LocalGenerator->ConvertToOutputFormat(toolkitRoot,
+                                                    cmOutputConverter::SHELL);
+    }
+  }
+}
+
 //----------------------------------------------------------------------------
 std::string cmGeneratorTarget::GetFeatureSpecificLinkRuleVariable(
   std::string const& var, std::string const& lang,
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index a7201dc..3aedbf5 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -426,6 +426,7 @@
                      std::vector<std::string>& archVec) const;
 
   void AddCUDAArchitectureFlags(std::string& flags) const;
+  void AddCUDAToolkitFlags(std::string& flags) const;
 
   std::string GetFeatureSpecificLinkRuleVariable(
     std::string const& var, std::string const& lang,
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index fba9cdb..3b3f110 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1986,6 +1986,7 @@
     }
   } else if (lang == "CUDA") {
     target->AddCUDAArchitectureFlags(flags);
+    target->AddCUDAToolkitFlags(flags);
 
     std::string const& compiler =
       this->Makefile->GetSafeDefinition("CMAKE_CUDA_COMPILER_ID");
@@ -1996,7 +1997,8 @@
       if (separable) {
         this->Makefile->IssueMessage(
           MessageType::FATAL_ERROR,
-          "CUDA_SEPARABLE_COMPILATION isn't supported on Clang.");
+          "CUDA_SEPARABLE_COMPILATION isn't supported on Clang. "
+          "See CMake issue #20726.");
       }
     }
   }
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 97c4c85..a3ccd2b 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -2321,11 +2321,14 @@
   }
 
   // Force language if the file extension does not match.
+  // Note that MSVC treats the upper-case '.C' extension as C and not C++.
+  std::string const ext = sf.GetExtension();
+  std::string const extLang = ext == "C"
+    ? "C"
+    : this->GlobalGenerator->GetLanguageFromExtension(ext.c_str());
   std::string lang = this->LocalGenerator->GetSourceFileLanguage(sf);
   const char* compileAs = 0;
-  if (lang !=
-      this->GlobalGenerator->GetLanguageFromExtension(
-        sf.GetExtension().c_str())) {
+  if (lang != extLang) {
     if (lang == "CXX") {
       // force a C++ file type
       compileAs = "CompileAsCpp";
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index d7e567c..db6dbf3 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -349,7 +349,6 @@
   # add a bunch of standard build-and-test style tests
   ADD_TEST_MACRO(CommandLineTest CommandLineTest)
   ADD_TEST_MACRO(FindPackageTest FindPackageTest)
-  ADD_TEST_MACRO(FindModulesExecuteAll FindModulesExecuteAll)
   ADD_TEST_MACRO(StringFileTest StringFileTest)
   ADD_TEST_MACRO(TryCompile TryCompile)
   ADD_TEST_MACRO(SystemInformation SystemInformation)
@@ -450,6 +449,8 @@
                                  -DCMake_TEST_CUDA:BOOL=${CMake_TEST_CUDA}
                                  )
   ADD_TEST_MACRO(ExportImport ExportImport)
+  set_property(TEST ExportImport APPEND
+    PROPERTY LABELS "CUDA")
   ADD_TEST_MACRO(Unset Unset)
   ADD_TEST_MACRO(PolicyScope PolicyScope)
   ADD_TEST_MACRO(EmptyLibrary EmptyLibrary)
@@ -1896,6 +1897,8 @@
     endif()
     set(MSVCRuntimeLibrary_BUILD_OPTIONS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
     ADD_TEST_MACRO(MSVCRuntimeLibrary)
+    set_property(TEST MSVCRuntimeLibrary APPEND
+      PROPERTY LABELS "CUDA")
     if(CMAKE_Fortran_COMPILER)
       ADD_TEST_MACRO(MSVCRuntimeLibrary.Fortran)
     endif()
diff --git a/Tests/Cuda/CMakeLists.txt b/Tests/Cuda/CMakeLists.txt
index 630cea2..35ceb33 100644
--- a/Tests/Cuda/CMakeLists.txt
+++ b/Tests/Cuda/CMakeLists.txt
@@ -1,30 +1,35 @@
+macro (add_cuda_test_macro name)
+  add_test_macro("${name}" ${ARGN})
+  set_property(TEST "${name}" APPEND
+    PROPERTY LABELS "CUDA")
+endmacro ()
 
-ADD_TEST_MACRO(Cuda.ConsumeCompileFeatures CudaConsumeCompileFeatures)
-ADD_TEST_MACRO(Cuda.CXXStandardSetTwice CXXStandardSetTwice)
-ADD_TEST_MACRO(Cuda.ObjectLibrary CudaObjectLibrary)
-ADD_TEST_MACRO(Cuda.MixedStandardLevels1 MixedStandardLevels1)
-ADD_TEST_MACRO(Cuda.MixedStandardLevels2 MixedStandardLevels2)
-ADD_TEST_MACRO(Cuda.MixedStandardLevels3 MixedStandardLevels3)
-ADD_TEST_MACRO(Cuda.MixedStandardLevels4 MixedStandardLevels4)
-ADD_TEST_MACRO(Cuda.MixedStandardLevels5 MixedStandardLevels5)
-ADD_TEST_MACRO(Cuda.NotEnabled CudaNotEnabled)
-ADD_TEST_MACRO(Cuda.SeparableCompCXXOnly SeparableCompCXXOnly)
-ADD_TEST_MACRO(Cuda.Toolkit Toolkit)
-ADD_TEST_MACRO(Cuda.IncludePathNoToolkit IncludePathNoToolkit)
-ADD_TEST_MACRO(Cuda.SharedRuntimePlusToolkit SharedRuntimePlusToolkit)
+add_cuda_test_macro(Cuda.ConsumeCompileFeatures CudaConsumeCompileFeatures)
+add_cuda_test_macro(Cuda.CXXStandardSetTwice CXXStandardSetTwice)
+add_cuda_test_macro(Cuda.ObjectLibrary CudaObjectLibrary)
+add_cuda_test_macro(Cuda.MixedStandardLevels1 MixedStandardLevels1)
+add_cuda_test_macro(Cuda.MixedStandardLevels2 MixedStandardLevels2)
+add_cuda_test_macro(Cuda.MixedStandardLevels3 MixedStandardLevels3)
+add_cuda_test_macro(Cuda.MixedStandardLevels4 MixedStandardLevels4)
+add_cuda_test_macro(Cuda.MixedStandardLevels5 MixedStandardLevels5)
+add_cuda_test_macro(Cuda.NotEnabled CudaNotEnabled)
+add_cuda_test_macro(Cuda.SeparableCompCXXOnly SeparableCompCXXOnly)
+add_cuda_test_macro(Cuda.Toolkit Toolkit)
+add_cuda_test_macro(Cuda.IncludePathNoToolkit IncludePathNoToolkit)
+add_cuda_test_macro(Cuda.SharedRuntimePlusToolkit SharedRuntimePlusToolkit)
 
 # Separable compilation is currently only supported on NVCC. Disable tests
 # using it for other compilers.
 if(CMake_TEST_CUDA AND NOT CMake_TEST_CUDA STREQUAL "Clang")
-  ADD_TEST_MACRO(Cuda.Complex CudaComplex)
-  ADD_TEST_MACRO(Cuda.ProperDeviceLibraries ProperDeviceLibraries)
-  ADD_TEST_MACRO(Cuda.ProperLinkFlags ProperLinkFlags)
+  add_cuda_test_macro(Cuda.Complex CudaComplex)
+  add_cuda_test_macro(Cuda.ProperDeviceLibraries ProperDeviceLibraries)
+  add_cuda_test_macro(Cuda.ProperLinkFlags ProperLinkFlags)
 endif()
 
 # The CUDA only ships the shared version of the toolkit libraries
 # on windows
 if(NOT WIN32)
-  ADD_TEST_MACRO(Cuda.StaticRuntimePlusToolkit StaticRuntimePlusToolkit)
+  add_cuda_test_macro(Cuda.StaticRuntimePlusToolkit StaticRuntimePlusToolkit)
 endif()
 
-ADD_TEST_MACRO(Cuda.WithC CudaWithC)
+add_cuda_test_macro(Cuda.WithC CudaWithC)
diff --git a/Tests/Cuda/Toolkit/CMakeLists.txt b/Tests/Cuda/Toolkit/CMakeLists.txt
index 86b4652..00125e3 100644
--- a/Tests/Cuda/Toolkit/CMakeLists.txt
+++ b/Tests/Cuda/Toolkit/CMakeLists.txt
@@ -14,15 +14,29 @@
 message(STATUS "CUDAToolkit_LIBRARY_DIR: ${CUDAToolkit_LIBRARY_DIR}")
 message(STATUS "CUDAToolkit_NVCC_EXECUTABLE ${CUDAToolkit_NVCC_EXECUTABLE}")
 
-# Verify that all the CUDA:: targets exist even when the CUDA language isn't enabled
+set(cuda_libs cudart cuda_driver cublas cufft cufftw curand cusolver cusparse)
+if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 10.1)
+  list(APPEND cuda_libs cublasLt)
+endif()
+if(CUDAToolkit_VERSION_MAJOR VERSION_LESS 11)
+  list(APPEND cuda_libs nvgraph)
+endif()
 
-foreach (cuda_lib cudart cuda_driver cublas cufft cufftw curand cusolver cusparse nvgraph)
+# Verify that all the CUDA:: targets exist even when the CUDA language isn't enabled
+foreach (cuda_lib IN LISTS cuda_libs)
+  if(NOT CUDA_${cuda_lib}_LIBRARY)
+    message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
+  endif()
   if(NOT TARGET CUDA::${cuda_lib})
-    message(FATAL_ERROR "The CUDA::${cuda_lib} target was expected but couldn't be found")
+    message(FATAL_ERROR "expected CUDAToolkit target CUDA::${cuda_lib} not found")
   endif()
 endforeach()
 
-foreach (cuda_lib nppc nppial nppicc nppidei nppif nppig nppim nppist nppitc npps nppicom nppisu)
+set(npp_libs nppc nppial nppicc nppidei nppif nppig nppim nppist nppitc npps nppisu)
+if(CUDAToolkit_VERSION_MAJOR VERSION_LESS 11)
+  list(APPEND npp_libs nppicom)
+endif()
+foreach (cuda_lib IN LISTS npp_libs)
   if(NOT TARGET CUDA::${cuda_lib})
     message(FATAL_ERROR "The CUDA::${cuda_lib} target was expected but couldn't be found")
   endif()
diff --git a/Tests/CudaOnly/Architecture/CMakeLists.txt b/Tests/CudaOnly/Architecture/CMakeLists.txt
index 7270b56..03e972f 100644
--- a/Tests/CudaOnly/Architecture/CMakeLists.txt
+++ b/Tests/CudaOnly/Architecture/CMakeLists.txt
@@ -1,5 +1,15 @@
-cmake_minimum_required(VERSION 3.17)
+cmake_minimum_required(VERSION 3.18)
 project(Architecture CUDA)
 
-set(CMAKE_CUDA_ARCHITECTURES 52)
 add_executable(Architecture main.cu)
+set_property(TARGET Architecture PROPERTY CUDA_ARCHITECTURES 52)
+
+# Make sure CMake doesn't pass architectures if CUDA_ARCHITECTURES is OFF.
+if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+  set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_52")
+elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
+  set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --cuda-gpu-arch=sm_52")
+endif()
+
+add_executable(ArchitectureOff main.cu)
+set_property(TARGET ArchitectureOff PROPERTY CUDA_ARCHITECTURES OFF)
diff --git a/Tests/CudaOnly/CMakeLists.txt b/Tests/CudaOnly/CMakeLists.txt
index 8244b91..7376a73 100644
--- a/Tests/CudaOnly/CMakeLists.txt
+++ b/Tests/CudaOnly/CMakeLists.txt
@@ -1,21 +1,26 @@
+macro (add_cuda_test_macro name)
+  add_test_macro("${name}" ${ARGN})
+  set_property(TEST "${name}" APPEND
+    PROPERTY LABELS "CUDA")
+endmacro ()
 
-ADD_TEST_MACRO(CudaOnly.Architecture Architecture)
-ADD_TEST_MACRO(CudaOnly.CompileFlags CudaOnlyCompileFlags)
-ADD_TEST_MACRO(CudaOnly.EnableStandard CudaOnlyEnableStandard)
-ADD_TEST_MACRO(CudaOnly.ExportPTX CudaOnlyExportPTX)
-ADD_TEST_MACRO(CudaOnly.SharedRuntimePlusToolkit CudaOnlySharedRuntimePlusToolkit)
-ADD_TEST_MACRO(CudaOnly.Standard98 CudaOnlyStandard98)
-ADD_TEST_MACRO(CudaOnly.Toolkit CudaOnlyToolkit)
-ADD_TEST_MACRO(CudaOnly.WithDefs CudaOnlyWithDefs)
+add_cuda_test_macro(CudaOnly.Architecture Architecture)
+add_cuda_test_macro(CudaOnly.CompileFlags CudaOnlyCompileFlags)
+add_cuda_test_macro(CudaOnly.EnableStandard CudaOnlyEnableStandard)
+add_cuda_test_macro(CudaOnly.ExportPTX CudaOnlyExportPTX)
+add_cuda_test_macro(CudaOnly.SharedRuntimePlusToolkit CudaOnlySharedRuntimePlusToolkit)
+add_cuda_test_macro(CudaOnly.Standard98 CudaOnlyStandard98)
+add_cuda_test_macro(CudaOnly.Toolkit CudaOnlyToolkit)
+add_cuda_test_macro(CudaOnly.WithDefs CudaOnlyWithDefs)
 
 if(CMake_TEST_CUDA AND NOT CMake_TEST_CUDA STREQUAL "Clang")
-  ADD_TEST_MACRO(CudaOnly.SharedRuntimeViaCUDAFlags CudaOnlySharedRuntimeViaCUDAFlags)
+  add_cuda_test_macro(CudaOnly.SharedRuntimeViaCUDAFlags CudaOnlySharedRuntimeViaCUDAFlags)
 
   # Separable compilation is currently only supported on NVCC. Disable tests
   # using it for other compilers.
-  ADD_TEST_MACRO(CudaOnly.CircularLinkLine CudaOnlyCircularLinkLine)
-  ADD_TEST_MACRO(CudaOnly.ResolveDeviceSymbols CudaOnlyResolveDeviceSymbols)
-  ADD_TEST_MACRO(CudaOnly.SeparateCompilation CudaOnlySeparateCompilation)
+  add_cuda_test_macro(CudaOnly.CircularLinkLine CudaOnlyCircularLinkLine)
+  add_cuda_test_macro(CudaOnly.ResolveDeviceSymbols CudaOnlyResolveDeviceSymbols)
+  add_cuda_test_macro(CudaOnly.SeparateCompilation CudaOnlySeparateCompilation)
 
   add_test(NAME CudaOnly.DontResolveDeviceSymbols COMMAND
     ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
@@ -27,19 +32,21 @@
     --build-options ${build_options}
     --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
   )
+  set_property(TEST "CudaOnly.DontResolveDeviceSymbols" APPEND
+    PROPERTY LABELS "CUDA")
 
   # Only NVCC defines __CUDACC_DEBUG__ when compiling in debug mode.
-  ADD_TEST_MACRO(CudaOnly.GPUDebugFlag CudaOnlyGPUDebugFlag)
+  add_cuda_test_macro(CudaOnly.GPUDebugFlag CudaOnlyGPUDebugFlag)
 endif()
 
 # The CUDA only ships the shared version of the toolkit libraries
 # on windows
 if(NOT WIN32)
-  ADD_TEST_MACRO(Cuda.StaticRuntimePlusToolkit StaticRuntimePlusToolkit)
+  add_cuda_test_macro(CudaOnly.StaticRuntimePlusToolkit CudaOnlyStaticRuntimePlusToolkit)
 endif()
 
 if(MSVC)
-  ADD_TEST_MACRO(CudaOnly.PDB CudaOnlyPDB)
+  add_cuda_test_macro(CudaOnly.PDB CudaOnlyPDB)
 endif()
 
 add_test(NAME CudaOnly.RuntimeControls COMMAND
@@ -53,3 +60,5 @@
   --build-options ${build_options}
   --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
   )
+set_property(TEST "CudaOnly.RuntimeControls" APPEND
+  PROPERTY LABELS "CUDA")
diff --git a/Tests/CudaOnly/StaticRuntimePlusToolkit/CMakeLists.txt b/Tests/CudaOnly/StaticRuntimePlusToolkit/CMakeLists.txt
index 97ac229..708a352 100644
--- a/Tests/CudaOnly/StaticRuntimePlusToolkit/CMakeLists.txt
+++ b/Tests/CudaOnly/StaticRuntimePlusToolkit/CMakeLists.txt
@@ -27,3 +27,9 @@
 
 add_executable(CudaOnlyStaticRuntimePlusToolkit main.cu)
 target_link_libraries(CudaOnlyStaticRuntimePlusToolkit PRIVATE SharedToolkit StaticToolkit MixedToolkit)
+
+if(UNIX)
+  # Help the shared cuda runtime find libcurand and libnppif when they are not located
+  # in a default system searched location
+  set_property(TARGET CudaOnlyStaticRuntimePlusToolkit PROPERTY BUILD_RPATH ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
+endif()
diff --git a/Tests/CudaOnly/Toolkit/CMakeLists.txt b/Tests/CudaOnly/Toolkit/CMakeLists.txt
index 0d5d574..bb06ba8 100644
--- a/Tests/CudaOnly/Toolkit/CMakeLists.txt
+++ b/Tests/CudaOnly/Toolkit/CMakeLists.txt
@@ -11,8 +11,17 @@
 message(STATUS "CUDAToolkit_LIBRARY_DIR: ${CUDAToolkit_LIBRARY_DIR}")
 message(STATUS "CUDAToolkit_NVCC_EXECUTABLE ${CUDAToolkit_NVCC_EXECUTABLE}")
 
+
+set(cuda_libs cudart cuda_driver cublas cufft cufftw curand cusolver cusparse)
+if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 10.1)
+  list(APPEND cuda_libs cublasLt)
+endif()
+if(CUDAToolkit_VERSION_MAJOR VERSION_LESS 11)
+  list(APPEND cuda_libs nvgraph)
+endif()
+
 # Verify that all the CUDA:: targets and variables exist
-foreach (cuda_lib cudart cuda_driver cublas cufft cufftw curand cusolver cusparse nvgraph)
+foreach (cuda_lib IN LISTS cuda_libs)
   if(NOT CUDA_${cuda_lib}_LIBRARY)
     message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
   endif()
@@ -21,7 +30,11 @@
   endif()
 endforeach()
 
-foreach (cuda_lib nppc nppial nppicc nppidei nppif nppig nppim nppist nppitc npps nppicom nppisu)
+set(npp_libs nppc nppial nppicc nppidei nppif nppig nppim nppist nppitc npps nppisu)
+if(CUDAToolkit_VERSION_MAJOR VERSION_LESS 11)
+  list(APPEND npp_libs nppicom)
+endif()
+foreach (cuda_lib )
   if(NOT CUDA_${cuda_lib}_LIBRARY)
     message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
   endif()
diff --git a/Tests/CxxOnly/CMakeLists.txt b/Tests/CxxOnly/CMakeLists.txt
index e62f3c7..8207dd1 100644
--- a/Tests/CxxOnly/CMakeLists.txt
+++ b/Tests/CxxOnly/CMakeLists.txt
@@ -5,7 +5,7 @@
 if(WIN32)
   set(EXTRA_SRCS test.CPP)
 endif()
-add_library(testcxx1.my STATIC libcxx1.cxx ${EXTRA_SRCS})
+add_library(testcxx1.my STATIC libcxx1.cxx test.C ${EXTRA_SRCS})
 add_library(testcxx2 SHARED libcxx2.cxx)
 add_executable (CxxOnly cxxonly.cxx)
 target_link_libraries(CxxOnly testcxx1.my testcxx2)
diff --git a/Tests/CxxOnly/cxxonly.cxx b/Tests/CxxOnly/cxxonly.cxx
index 0911a07..8bd1637 100644
--- a/Tests/CxxOnly/cxxonly.cxx
+++ b/Tests/CxxOnly/cxxonly.cxx
@@ -1,5 +1,6 @@
 #include "libcxx1.h"
 #include "libcxx2.h"
+extern int testC;
 #ifdef _MSC_VER
 extern int testCPP;
 #endif
@@ -8,6 +9,7 @@
 
 int main()
 {
+  testC = 1;
 #ifdef _MSC_VER
   testCPP = 1;
 #endif
diff --git a/Tests/CxxOnly/test.C b/Tests/CxxOnly/test.C
new file mode 100644
index 0000000..e87e6c0
--- /dev/null
+++ b/Tests/CxxOnly/test.C
@@ -0,0 +1 @@
+int testC;
diff --git a/Tests/FindModulesExecuteAll/CMakeLists.txt b/Tests/FindModulesExecuteAll/CMakeLists.txt
deleted file mode 100644
index 4893bb3..0000000
--- a/Tests/FindModulesExecuteAll/CMakeLists.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-# This file includes all FindXXX.cmake modules, so they are all executed.
-# As it is it doesn't test a lot.
-# It makes sure that the modules don't contain basic syntax errors.
-# It also makes sure that modules don't fail with an error if something
-# wasn't found but REQUIRED was not given.
-#
-# I guess more things could be added, like checking whether variables are
-# defined after running the modules (e.g. FOO_FOUND etc.).
-cmake_minimum_required(VERSION 2.8.4) # new enough for CMP0017
-project(FindModulesExecuteAll)
-
-file(GLOB all_modules "${CMAKE_CURRENT_SOURCE_DIR}/../../Modules/Find*cmake")
-
-foreach(module ${all_modules})
-  message(STATUS "module: ${module}")
-  include("${module}")
-
-  # get the "basename" of the package, so the existence of variables like
-  # FOO_FOUND could be tested later on, Alex
-  string(REGEX REPLACE ".+Find([^\\.]+)\\.cmake" "\\1" packageName "${module}")
-  string(TOUPPER "${packageName}" packageNameUpper)
-
-# disabled for now, since too many modules break:
-#  if(NOT DEFINED ${packageNameUpper}_FOUND)
-#    message(SEND_ERROR "${packageNameUpper}_FOUND not defined !")
-#  endif()
-
-endforeach()
-
-add_executable(FindModulesExecuteAll main.c)
diff --git a/Tests/FindModulesExecuteAll/main.c b/Tests/FindModulesExecuteAll/main.c
deleted file mode 100644
index f8b643a..0000000
--- a/Tests/FindModulesExecuteAll/main.c
+++ /dev/null
@@ -1,4 +0,0 @@
-int main()
-{
-  return 0;
-}
diff --git a/Tests/RunCMake/CMP0104/CMP0104-OFF.cmake b/Tests/RunCMake/CMP0104/CMP0104-OFF.cmake
new file mode 100644
index 0000000..f3b6682
--- /dev/null
+++ b/Tests/RunCMake/CMP0104/CMP0104-OFF.cmake
@@ -0,0 +1,3 @@
+include(CMP0104-Common.cmake)
+
+set_property(TARGET cuda PROPERTY CUDA_ARCHITECTURES OFF)
diff --git a/Tests/RunCMake/CMP0104/RunCMakeTest.cmake b/Tests/RunCMake/CMP0104/RunCMakeTest.cmake
index bc8e1b1..b26f72a 100644
--- a/Tests/RunCMake/CMP0104/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMP0104/RunCMakeTest.cmake
@@ -2,4 +2,5 @@
 
 run_cmake(CMP0104-OLD)
 run_cmake(CMP0104-NEW)
+run_cmake(CMP0104-OFF)
 run_cmake(CMP0104-WARN)
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 65d5e44..6c634b5 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -81,7 +81,9 @@
 # Test MSVC for older host CMake versions, and test
 # WIN32/CMAKE_C_COMPILER_ID to fix check on Intel for Windows.
 if(MSVC OR (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "MSVC|Intel"))
-  set(GeneratorExpression_ARGS -DLINKER_SUPPORTS_PDB=1)
+  set(LINKER_SUPPORTS_PDB 1)
+else()
+  set(LINKER_SUPPORTS_PDB 0)
 endif()
 
 add_RunCMake_test(CMP0019)
@@ -118,6 +120,8 @@
 add_RunCMake_test(CMP0102)
 if(CMake_TEST_CUDA)
   add_RunCMake_test(CMP0104)
+  set_property(TEST RunCMake.CMP0104 APPEND
+    PROPERTY LABELS "CUDA")
 endif()
 add_RunCMake_test(CMP0106)
 
@@ -149,6 +153,8 @@
     list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
   endif()
   add_RunCMake_test(NinjaMultiConfig)
+  set_property(TEST RunCMake.NinjaMultiConfig APPEND
+    PROPERTY LABELS "CUDA")
 endif()
 add_RunCMake_test(CTest)
 
@@ -215,6 +221,14 @@
 if(NOT CMAKE_C_COMPILER_ID MATCHES "Watcom")
   add_RunCMake_test(GenerateExportHeader)
 endif()
+add_RunCMake_test(GenEx-COMPILE_LANGUAGE)
+add_RunCMake_test(GenEx-COMPILE_LANG_AND_ID)
+add_RunCMake_test(GenEx-LINK_LANGUAGE)
+add_RunCMake_test(GenEx-LINK_LANG_AND_ID)
+add_RunCMake_test(GenEx-HOST_LINK)
+add_RunCMake_test(GenEx-DEVICE_LINK)
+add_RunCMake_test(GenEx-TARGET_FILE -DLINKER_SUPPORTS_PDB=${LINKER_SUPPORTS_PDB})
+add_RunCMake_test(GenEx-GENEX_EVAL)
 add_RunCMake_test(GeneratorExpression)
 add_RunCMake_test(GeneratorInstance)
 add_RunCMake_test(GeneratorPlatform)
@@ -365,6 +379,8 @@
     endif()
   endforeach()
   add_RunCMake_test(try_compile)
+  set_property(TEST RunCMake.try_compile APPEND
+    PROPERTY LABELS "CUDA")
 endfunction()
 add_RunCMake_test_try_compile()
 
@@ -478,9 +494,14 @@
 add_RunCMake_test(ExportWithoutLanguage)
 add_RunCMake_test(target_link_directories)
 add_RunCMake_test(target_link_libraries)
+add_RunCMake_test(target_link_libraries-ALIAS)
+add_RunCMake_test(target_link_libraries-LINK_LANGUAGE)
+add_RunCMake_test(target_link_libraries-LINK_LANG_AND_ID)
 add_RunCMake_test(add_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
 add_RunCMake_test(target_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
                                       -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
+set_property(TEST RunCMake.target_link_options APPEND
+  PROPERTY LABELS "CUDA")
 
 add_RunCMake_test(target_compile_definitions)
 add_RunCMake_test(target_compile_features)
@@ -504,11 +525,15 @@
   set(NO_NAMELINK 0)
 endif()
 
-add_RunCMake_test(install -DNO_NAMELINK=${NO_NAMELINK} -DCYGWIN=${CYGWIN} -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
+add_RunCMake_test(install -DNO_NAMELINK=${NO_NAMELINK} -DCYGWIN=${CYGWIN}
   -DCMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN=${CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN}
   -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
   -DCMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG=${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG}
   -DCMAKE_EXECUTABLE_FORMAT=${CMAKE_EXECUTABLE_FORMAT}
+  )
+
+add_RunCMake_test(file-GET_RUNTIME_DEPENDENCIES
+  -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
   -DCMake_INSTALL_NAME_TOOL_BUG=${CMake_INSTALL_NAME_TOOL_BUG}
   )
 
@@ -590,6 +615,8 @@
     list(APPEND CompilerLauncher_ARGS -DCMake_TEST_OBJC=1)
   endif()
   add_RunCMake_test(CompilerLauncher)
+  set_property(TEST RunCMake.CompilerLauncher APPEND
+    PROPERTY LABELS "CUDA")
   add_RunCMake_test(ctest_labels_for_subprojects)
 endif()
 
diff --git a/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/CMakeLists.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/CMakeLists.txt
new file mode 100644
index 0000000..74b3ff8
--- /dev/null
+++ b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.3)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_command-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_command-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_command-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_command-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_command-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_command-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_command-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_command-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_command.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_command.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_command.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_command.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_target-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_target-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_target-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_target-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_target.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_custom_target.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_custom_target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_executable-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_executable-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_executable-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_executable-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_executable-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_executable-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_executable-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_executable-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_executable.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_executable.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_executable.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_executable.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_library-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_library-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_library-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_library-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_library-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_library-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_library-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_library-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_library.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_library.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_library.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_library.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_test-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_test-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_test-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_test-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_test-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_test-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_test-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_test-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_test.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_test.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-add_test.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-add_test.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-install-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-install-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-install-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-install-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-install-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-install-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-install-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-install-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-install.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-install.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-install.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-install.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-target_sources-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-target_sources-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-target_sources-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-target_sources-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-target_sources-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-target_sources-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-target_sources-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-target_sources-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-target_sources.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-target_sources.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-target_sources.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-target_sources.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-unknown-lang.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-unknown-lang.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANGUAGE-unknown-lang.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANGUAGE/COMPILE_LANGUAGE-unknown-lang.cmake
diff --git a/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/RunCMakeTest.cmake
new file mode 100644
index 0000000..6691fdf
--- /dev/null
+++ b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/RunCMakeTest.cmake
@@ -0,0 +1,10 @@
+include(RunCMake)
+
+run_cmake(COMPILE_LANGUAGE-add_custom_target)
+run_cmake(COMPILE_LANGUAGE-add_custom_command)
+run_cmake(COMPILE_LANGUAGE-install)
+run_cmake(COMPILE_LANGUAGE-target_sources)
+run_cmake(COMPILE_LANGUAGE-add_executable)
+run_cmake(COMPILE_LANGUAGE-add_library)
+run_cmake(COMPILE_LANGUAGE-add_test)
+run_cmake(COMPILE_LANGUAGE-unknown-lang)
diff --git a/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/empty.c b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-COMPILE_LANGUAGE/empty.c
diff --git a/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/CMakeLists.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/CMakeLists.txt
new file mode 100644
index 0000000..77030d6
--- /dev/null
+++ b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.15)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_command-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_command-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_command-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_command-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_command-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_command-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_command-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_command-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_command.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_command.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_command.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_command.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_target-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_target-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_target-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_target-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_target.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_custom_target.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_custom_target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_executable-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_executable-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_executable-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_executable-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_executable-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_executable-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_executable-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_executable-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_executable.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_executable.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_executable.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_executable.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_library-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_library-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_library-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_library-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_library-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_library-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_library-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_library-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_library.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_library.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_library.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_library.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_test-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_test-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_test-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_test-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_test-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_test-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_test-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_test-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_test.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_test.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-add_test.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-add_test.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-install-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-install-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-install-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-install-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-install-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-install-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-install-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-install-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-install.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-install.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-install.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-install.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-target_sources-result.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-target_sources-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-target_sources-result.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-target_sources-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-target_sources-stderr.txt b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-target_sources-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-target_sources-stderr.txt
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-target_sources-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-target_sources.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-target_sources.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-target_sources.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-target_sources.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-unknown-lang.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-unknown-lang.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/COMPILE_LANG_AND_ID-unknown-lang.cmake
rename to Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/COMPILE_LANG_AND_ID-unknown-lang.cmake
diff --git a/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/RunCMakeTest.cmake
new file mode 100644
index 0000000..a0a7bb9
--- /dev/null
+++ b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/RunCMakeTest.cmake
@@ -0,0 +1,10 @@
+include(RunCMake)
+
+run_cmake(COMPILE_LANG_AND_ID-add_custom_target)
+run_cmake(COMPILE_LANG_AND_ID-add_custom_command)
+run_cmake(COMPILE_LANG_AND_ID-install)
+run_cmake(COMPILE_LANG_AND_ID-target_sources)
+run_cmake(COMPILE_LANG_AND_ID-add_executable)
+run_cmake(COMPILE_LANG_AND_ID-add_library)
+run_cmake(COMPILE_LANG_AND_ID-add_test)
+run_cmake(COMPILE_LANG_AND_ID-unknown-lang)
diff --git a/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/empty.c b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-COMPILE_LANG_AND_ID/empty.c
diff --git a/Tests/RunCMake/GenEx-DEVICE_LINK/CMakeLists.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/CMakeLists.txt
new file mode 100644
index 0000000..b646c4a
--- /dev/null
+++ b/Tests/RunCMake/GenEx-DEVICE_LINK/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.18)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_command-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_command-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_command-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_command-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_command-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_command-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_command-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_command-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_command.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_command.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_command.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_command.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_target-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_target-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_target-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_target-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_target.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_custom_target.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_custom_target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_executable-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_executable-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_executable-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_executable-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_executable-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_executable-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_executable-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_executable-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_executable.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_executable.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_executable.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_executable.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_library-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_library-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_library-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_library-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_library-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_library-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_library-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_library-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_library.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_library.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_library.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_library.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_test-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_test-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_test-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_test-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_test-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_test-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_test-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_test-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_test.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_test.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-add_test.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-add_test.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-install-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-install-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-install-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-install-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-install-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-install-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-install-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-install-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-install.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-install.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-install.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-install.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-link_depends-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-link_depends-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-link_depends-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-link_depends-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-link_depends-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-link_depends-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-link_depends-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-link_depends-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-link_depends.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-link_depends.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-link_depends.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-link_depends.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_definitions-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_definitions-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_definitions-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_definitions-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_definitions-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_definitions-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_definitions-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_definitions-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_definitions.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_definitions.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_definitions.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_definitions.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_options-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_options-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_options-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_options-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_options-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_options-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_options-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_options-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_options.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_options.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_compile_options.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_compile_options.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_include_directories-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_include_directories-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_include_directories-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_include_directories-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_include_directories-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_include_directories-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_include_directories-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_include_directories-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_include_directories.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_include_directories.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_include_directories.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_include_directories.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_directories-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_directories-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_directories-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_directories-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_directories-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_directories-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_directories-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_directories-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_directories.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_directories.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_directories.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_directories.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_libraries-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_libraries-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_libraries-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_libraries-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_libraries-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_libraries-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_libraries-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_libraries-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_libraries.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_libraries.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_link_libraries.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_link_libraries.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_sources-result.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_sources-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_sources-result.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_sources-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_sources-stderr.txt b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_sources-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_sources-stderr.txt
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_sources-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_sources.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_sources.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/DEVICE_LINK-target_sources.cmake
rename to Tests/RunCMake/GenEx-DEVICE_LINK/DEVICE_LINK-target_sources.cmake
diff --git a/Tests/RunCMake/GenEx-DEVICE_LINK/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-DEVICE_LINK/RunCMakeTest.cmake
new file mode 100644
index 0000000..1e44601
--- /dev/null
+++ b/Tests/RunCMake/GenEx-DEVICE_LINK/RunCMakeTest.cmake
@@ -0,0 +1,17 @@
+include(RunCMake)
+
+run_cmake(DEVICE_LINK-add_custom_target)
+run_cmake(DEVICE_LINK-add_custom_command)
+run_cmake(DEVICE_LINK-install)
+run_cmake(DEVICE_LINK-add_executable)
+run_cmake(DEVICE_LINK-add_library)
+run_cmake(DEVICE_LINK-add_test)
+run_cmake(DEVICE_LINK-target_sources)
+run_cmake(DEVICE_LINK-target_compile_definitions)
+run_cmake(DEVICE_LINK-target_compile_options)
+run_cmake(DEVICE_LINK-target_include_directories)
+run_cmake(DEVICE_LINK-target_link_libraries)
+run_cmake(DEVICE_LINK-target_link_directories)
+if(RunCMake_GENERATOR MATCHES "(Ninja|Makefile)")
+  run_cmake(DEVICE_LINK-link_depends)
+endif()
diff --git a/Tests/RunCMake/GenEx-DEVICE_LINK/empty.c b/Tests/RunCMake/GenEx-DEVICE_LINK/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-DEVICE_LINK/empty.c
diff --git a/Tests/RunCMake/GenEx-GENEX_EVAL/CMakeLists.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/CMakeLists.txt
new file mode 100644
index 0000000..44025d3
--- /dev/null
+++ b/Tests/RunCMake/GenEx-GENEX_EVAL/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.12)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL-check.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL-check.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion1-result.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion1-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion1-result.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion1-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion1-stderr.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion1-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion1-stderr.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion1-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion1.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion1.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion1.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion1.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion2-result.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion2-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion2-result.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion2-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion2-stderr.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion2-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion2-stderr.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion2-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion2.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion2.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL-recursion2.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL-recursion2.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/GENEX_EVAL.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/GENEX_EVAL.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/GENEX_EVAL.cmake
diff --git a/Tests/RunCMake/GenEx-GENEX_EVAL/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/RunCMakeTest.cmake
new file mode 100644
index 0000000..d804a56
--- /dev/null
+++ b/Tests/RunCMake/GenEx-GENEX_EVAL/RunCMakeTest.cmake
@@ -0,0 +1,11 @@
+include(RunCMake)
+
+run_cmake(TARGET_GENEX_EVAL-no-arg)
+run_cmake(TARGET_GENEX_EVAL-no-target)
+run_cmake(TARGET_GENEX_EVAL-non-valid-target)
+run_cmake(TARGET_GENEX_EVAL-recursion1)
+run_cmake(TARGET_GENEX_EVAL-recursion2)
+run_cmake(TARGET_GENEX_EVAL)
+run_cmake(GENEX_EVAL-recursion1)
+run_cmake(GENEX_EVAL-recursion2)
+run_cmake(GENEX_EVAL)
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-check.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-check.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-arg-result.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-arg-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-arg-result.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-arg-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-arg-stderr.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-arg-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-arg-stderr.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-arg-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-arg.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-arg.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-arg.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-arg.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-target-result.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-target-result.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-target-stderr.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-target-stderr.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-target.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-no-target.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-no-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-non-valid-target-result.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-non-valid-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-non-valid-target-result.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-non-valid-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-non-valid-target-stderr.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-non-valid-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-non-valid-target-stderr.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-non-valid-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-non-valid-target.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-non-valid-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-non-valid-target.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-non-valid-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion1-result.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion1-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion1-result.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion1-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion1-stderr.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion1-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion1-stderr.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion1-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion1.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion1.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion1.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion1.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion2-result.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion2-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion2-result.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion2-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion2-stderr.txt b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion2-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion2-stderr.txt
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion2-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion2.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion2.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL-recursion2.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL-recursion2.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL.cmake b/Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_GENEX_EVAL.cmake
rename to Tests/RunCMake/GenEx-GENEX_EVAL/TARGET_GENEX_EVAL.cmake
diff --git a/Tests/RunCMake/GenEx-GENEX_EVAL/empty.c b/Tests/RunCMake/GenEx-GENEX_EVAL/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-GENEX_EVAL/empty.c
diff --git a/Tests/RunCMake/GenEx-HOST_LINK/CMakeLists.txt b/Tests/RunCMake/GenEx-HOST_LINK/CMakeLists.txt
new file mode 100644
index 0000000..b646c4a
--- /dev/null
+++ b/Tests/RunCMake/GenEx-HOST_LINK/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.18)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_command-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_command-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_command-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_command-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_command-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_command-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_command-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_command-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_command.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_command.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_command.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_command.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_target-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_target-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_target-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_target-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_target.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_custom_target.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_custom_target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_executable-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_executable-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_executable-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_executable-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_executable-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_executable-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_executable-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_executable-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_executable.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_executable.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_executable.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_executable.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_library-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_library-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_library-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_library-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_library-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_library-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_library-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_library-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_library.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_library.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_library.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_library.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_test-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_test-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_test-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_test-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_test-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_test-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_test-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_test-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-add_test.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_test.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-add_test.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-add_test.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-install-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-install-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-install-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-install-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-install-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-install-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-install.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-install.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-install.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-install.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-link_depends-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-link_depends-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-link_depends-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-link_depends-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-link_depends-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-link_depends-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-link_depends-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-link_depends-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-link_depends.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-link_depends.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-link_depends.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-link_depends.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_definitions-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_definitions-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_definitions-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_definitions-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_definitions-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_definitions-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_definitions-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_definitions-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_definitions.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_definitions.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_definitions.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_definitions.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_options-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_options-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_options-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_options-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_options-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_options-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_options-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_options-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_options.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_options.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_compile_options.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_compile_options.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_include_directories-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_include_directories-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_include_directories-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_include_directories-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_include_directories-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_include_directories-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_include_directories-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_include_directories-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_include_directories.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_include_directories.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_include_directories.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_include_directories.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_directories-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_directories-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_directories-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_directories-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_directories-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_directories-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_directories-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_directories-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_directories.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_directories.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_directories.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_directories.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_libraries-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_libraries-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_libraries-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_libraries-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_libraries-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_libraries-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_libraries-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_libraries-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_libraries.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_libraries.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_link_libraries.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_link_libraries.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_sources-result.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_sources-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_sources-result.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_sources-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_sources-stderr.txt b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_sources-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_sources-stderr.txt
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_sources-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-target_sources.cmake b/Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_sources.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/HOST_LINK-target_sources.cmake
rename to Tests/RunCMake/GenEx-HOST_LINK/HOST_LINK-target_sources.cmake
diff --git a/Tests/RunCMake/GenEx-HOST_LINK/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-HOST_LINK/RunCMakeTest.cmake
new file mode 100644
index 0000000..329a7c6
--- /dev/null
+++ b/Tests/RunCMake/GenEx-HOST_LINK/RunCMakeTest.cmake
@@ -0,0 +1,17 @@
+include(RunCMake)
+
+run_cmake(HOST_LINK-add_custom_target)
+run_cmake(HOST_LINK-add_custom_command)
+run_cmake(HOST_LINK-install)
+run_cmake(HOST_LINK-add_executable)
+run_cmake(HOST_LINK-add_library)
+run_cmake(HOST_LINK-add_test)
+run_cmake(HOST_LINK-target_sources)
+run_cmake(HOST_LINK-target_compile_definitions)
+run_cmake(HOST_LINK-target_compile_options)
+run_cmake(HOST_LINK-target_include_directories)
+run_cmake(HOST_LINK-target_link_libraries)
+run_cmake(HOST_LINK-target_link_directories)
+if(RunCMake_GENERATOR MATCHES "(Ninja|Makefile)")
+  run_cmake(HOST_LINK-link_depends)
+endif()
diff --git a/Tests/RunCMake/GenEx-HOST_LINK/empty.c b/Tests/RunCMake/GenEx-HOST_LINK/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-HOST_LINK/empty.c
diff --git a/Tests/RunCMake/GenEx-LINK_LANGUAGE/CMakeLists.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/CMakeLists.txt
new file mode 100644
index 0000000..b646c4a
--- /dev/null
+++ b/Tests/RunCMake/GenEx-LINK_LANGUAGE/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.18)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_command-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_command-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_command-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_command-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_command-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_command-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_command-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_command-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_command.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_command.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_command.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_command.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_target-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_target-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_target-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_target-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_target.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_custom_target.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_custom_target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_executable-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_executable-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_executable-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_executable-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_executable-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_executable-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_executable-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_executable-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_executable.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_executable.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_executable.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_executable.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_library-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_library-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_library-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_library-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_library-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_library-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_library-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_library-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_library.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_library.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_library.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_library.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_test-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_test-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_test-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_test-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_test-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_test-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_test-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_test-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_test.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_test.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-add_test.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-add_test.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-file_generate-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-file_generate-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-file_generate-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-file_generate-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-file_generate-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-file_generate-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-file_generate-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-file_generate-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-file_generate.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-file_generate.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-file_generate.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-file_generate.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-install-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-install-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-install-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-install-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-install-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-install-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-install-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-install-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-install.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-install.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-install.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-install.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-target_sources-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-target_sources-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-target_sources-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-target_sources-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-target_sources-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-target_sources-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-target_sources-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-target_sources-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-target_sources.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-target_sources.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-target_sources.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-target_sources.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-unknown-lang.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-unknown-lang.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-unknown-lang.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-unknown-lang.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage1-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage1-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage1-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage1-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage1-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage1-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage1-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage1-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage1.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage1.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage1.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage1.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage2-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage2-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage2-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage2-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage2-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage2-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage2-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage2-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage2.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage2.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage2.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage2.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage3-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage3-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage3-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage3-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage3-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage3-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage3-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage3-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage3.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage3.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage3.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage3.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage4-result.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage4-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage4-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage4-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage4-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage4-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage4-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage4-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage4.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage4.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANGUAGE-wrong-usage4.cmake
rename to Tests/RunCMake/GenEx-LINK_LANGUAGE/LINK_LANGUAGE-wrong-usage4.cmake
diff --git a/Tests/RunCMake/GenEx-LINK_LANGUAGE/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-LINK_LANGUAGE/RunCMakeTest.cmake
new file mode 100644
index 0000000..4cf0c04
--- /dev/null
+++ b/Tests/RunCMake/GenEx-LINK_LANGUAGE/RunCMakeTest.cmake
@@ -0,0 +1,15 @@
+include(RunCMake)
+
+run_cmake(LINK_LANGUAGE-add_custom_target)
+run_cmake(LINK_LANGUAGE-add_custom_command)
+run_cmake(LINK_LANGUAGE-install)
+run_cmake(LINK_LANGUAGE-target_sources)
+run_cmake(LINK_LANGUAGE-add_executable)
+run_cmake(LINK_LANGUAGE-add_library)
+run_cmake(LINK_LANGUAGE-add_test)
+run_cmake(LINK_LANGUAGE-unknown-lang)
+run_cmake(LINK_LANGUAGE-wrong-usage1)
+run_cmake(LINK_LANGUAGE-wrong-usage2)
+run_cmake(LINK_LANGUAGE-wrong-usage3)
+run_cmake(LINK_LANGUAGE-wrong-usage4)
+run_cmake(LINK_LANGUAGE-file_generate)
diff --git a/Tests/RunCMake/GenEx-LINK_LANGUAGE/empty.c b/Tests/RunCMake/GenEx-LINK_LANGUAGE/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-LINK_LANGUAGE/empty.c
diff --git a/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/CMakeLists.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/CMakeLists.txt
new file mode 100644
index 0000000..b646c4a
--- /dev/null
+++ b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.18)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_command-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_command-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_command-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_command-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_command-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_command-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_command-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_command-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_command.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_command.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_command.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_command.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_target-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_target-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_target-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_target-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_target.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_custom_target.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_custom_target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_executable-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_executable-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_executable-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_executable-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_executable-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_executable-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_executable-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_executable-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_executable.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_executable.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_executable.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_executable.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_library-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_library-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_library-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_library-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_library-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_library-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_library-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_library-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_library.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_library.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_library.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_library.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_test-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_test-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_test-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_test-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_test-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_test-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_test-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_test-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_test.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_test.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-add_test.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-add_test.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-file_generate-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-file_generate-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-file_generate-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-file_generate-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-file_generate-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-file_generate-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-file_generate-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-file_generate-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-file_generate.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-file_generate.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-file_generate.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-file_generate.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-install-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-install-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-install-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-install-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-install-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-install-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-install-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-install-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-install.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-install.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-install.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-install.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-target_sources-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-target_sources-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-target_sources-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-target_sources-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-target_sources-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-target_sources-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-target_sources-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-target_sources-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-target_sources.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-target_sources.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-target_sources.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-target_sources.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-unknown-lang.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-unknown-lang.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-unknown-lang.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-unknown-lang.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage1-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage1-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage1-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage1-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage1-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage1-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage1-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage1-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage1.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage1.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage1.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage1.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage2-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage2-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage2-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage2-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage2-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage2-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage2-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage2-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage2.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage2.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage2.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage2.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage3-result.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage3-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage3-result.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage3-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage3-stderr.txt b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage3-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage3-stderr.txt
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage3-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage3.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage3.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/LINK_LANG_AND_ID-wrong-usage3.cmake
rename to Tests/RunCMake/GenEx-LINK_LANG_AND_ID/LINK_LANG_AND_ID-wrong-usage3.cmake
diff --git a/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/RunCMakeTest.cmake
new file mode 100644
index 0000000..5bb6590
--- /dev/null
+++ b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/RunCMakeTest.cmake
@@ -0,0 +1,14 @@
+include(RunCMake)
+
+run_cmake(LINK_LANG_AND_ID-add_custom_target)
+run_cmake(LINK_LANG_AND_ID-add_custom_command)
+run_cmake(LINK_LANG_AND_ID-install)
+run_cmake(LINK_LANG_AND_ID-target_sources)
+run_cmake(LINK_LANG_AND_ID-add_executable)
+run_cmake(LINK_LANG_AND_ID-add_library)
+run_cmake(LINK_LANG_AND_ID-add_test)
+run_cmake(LINK_LANG_AND_ID-unknown-lang)
+run_cmake(LINK_LANG_AND_ID-wrong-usage1)
+run_cmake(LINK_LANG_AND_ID-wrong-usage2)
+run_cmake(LINK_LANG_AND_ID-wrong-usage3)
+run_cmake(LINK_LANG_AND_ID-file_generate)
diff --git a/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/empty.c b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-LINK_LANG_AND_ID/empty.c
diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/CMakeLists.txt b/Tests/RunCMake/GenEx-TARGET_FILE/CMakeLists.txt
new file mode 100644
index 0000000..4b3de84
--- /dev/null
+++ b/Tests/RunCMake/GenEx-TARGET_FILE/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8.12)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_CONTENT_DIR.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_DIR-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_DIR-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_DIR-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_DIR-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_DIR-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_DIR-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_DIR-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_DIR-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_DIR.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_DIR.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_BUNDLE_DIR.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_BUNDLE_DIR.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE_BASE_NAME.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE_BASE_NAME.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ImportedTarget-TARGET_PDB_FILE_BASE_NAME.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ImportedTarget-TARGET_PDB_FILE_BASE_NAME.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidCompiler-TARGET_PDB_FILE_BASE_NAME.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_CONTENT_DIR.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_DIR-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_DIR-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_DIR-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_DIR-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_DIR-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_DIR-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_DIR-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_DIR-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_DIR.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_DIR.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_BUNDLE_DIR.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_BUNDLE_DIR.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE_BASE_NAME-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/NonValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/NonValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/OUTPUT_NAME-recursion-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/OUTPUT_NAME-recursion-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/OUTPUT_NAME-recursion-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/OUTPUT_NAME-recursion-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/OUTPUT_NAME-recursion-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/OUTPUT_NAME-recursion-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/OUTPUT_NAME-recursion-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/OUTPUT_NAME-recursion-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/OUTPUT_NAME-recursion.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/OUTPUT_NAME-recursion.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/OUTPUT_NAME-recursion.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/OUTPUT_NAME-recursion.cmake
diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake
new file mode 100644
index 0000000..ccec633
--- /dev/null
+++ b/Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake
@@ -0,0 +1,31 @@
+include(RunCMake)
+
+run_cmake(TARGET_FILE-recursion)
+run_cmake(OUTPUT_NAME-recursion)
+run_cmake(TARGET_FILE_PREFIX)
+run_cmake(TARGET_FILE_PREFIX-imported-target)
+run_cmake(TARGET_FILE_PREFIX-non-valid-target)
+run_cmake(TARGET_LINKER_FILE_PREFIX-non-valid-target)
+run_cmake(TARGET_FILE_SUFFIX)
+run_cmake(TARGET_FILE_SUFFIX-imported-target)
+run_cmake(TARGET_FILE_SUFFIX-non-valid-target)
+run_cmake(TARGET_LINKER_FILE_SUFFIX-non-valid-target)
+run_cmake_with_options(TARGET_FILE_BASE_NAME -DCMAKE_BUILD_TYPE:STRING=Debug)
+run_cmake_with_options(TARGET_FILE_BASE_NAME-imported-target -DCMAKE_BUILD_TYPE:STRING=Debug)
+run_cmake(TARGET_FILE_BASE_NAME-non-valid-target)
+run_cmake(TARGET_LINKER_FILE_BASE_NAME-non-valid-target)
+run_cmake(NonValidTarget-TARGET_BUNDLE_DIR)
+run_cmake(NonValidTarget-TARGET_BUNDLE_CONTENT_DIR)
+run_cmake(ImportedTarget-TARGET_BUNDLE_DIR)
+run_cmake(ImportedTarget-TARGET_BUNDLE_CONTENT_DIR)
+run_cmake(ImportedTarget-TARGET_PDB_FILE)
+run_cmake(ImportedTarget-TARGET_PDB_FILE_BASE_NAME)
+if(LINKER_SUPPORTS_PDB)
+  run_cmake(NonValidTarget-TARGET_PDB_FILE)
+  run_cmake(ValidTarget-TARGET_PDB_FILE)
+  run_cmake(NonValidTarget-TARGET_PDB_FILE_BASE_NAME)
+  run_cmake(ValidTarget-TARGET_PDB_FILE_BASE_NAME)
+else()
+  run_cmake(NonValidCompiler-TARGET_PDB_FILE)
+  run_cmake(NonValidCompiler-TARGET_PDB_FILE_BASE_NAME)
+endif()
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE-recursion-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE-recursion-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE-recursion-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE-recursion-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE-recursion-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE-recursion-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE-recursion-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE-recursion-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE-recursion.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE-recursion.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE-recursion.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE-recursion.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-imported-target-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-imported-target-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-imported-target-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-imported-target-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-imported-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-imported-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-imported-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-imported-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-non-valid-target-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-non-valid-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-non-valid-target-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-non-valid-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-non-valid-target-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-non-valid-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-non-valid-target-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-non-valid-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-non-valid-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-non-valid-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME-non-valid-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME-non-valid-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_BASE_NAME.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_BASE_NAME.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-imported-target-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-imported-target-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-imported-target-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-imported-target-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-imported-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-imported-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-imported-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-imported-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-non-valid-target-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-non-valid-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-non-valid-target-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-non-valid-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-non-valid-target-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-non-valid-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-non-valid-target-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-non-valid-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-non-valid-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-non-valid-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX-non-valid-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX-non-valid-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_PREFIX.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_PREFIX.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-imported-target-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-imported-target-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-imported-target-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-imported-target-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-imported-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-imported-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-imported-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-imported-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-non-valid-target-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-non-valid-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-non-valid-target-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-non-valid-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-non-valid-target-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-non-valid-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-non-valid-target-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-non-valid-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-non-valid-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-non-valid-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX-non-valid-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX-non-valid-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_FILE_SUFFIX.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_FILE_SUFFIX.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_BASE_NAME-non-valid-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_BASE_NAME-non-valid-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_BASE_NAME-non-valid-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_BASE_NAME-non-valid-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_BASE_NAME-non-valid-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_PREFIX-non-valid-target-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_PREFIX-non-valid-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_PREFIX-non-valid-target-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_PREFIX-non-valid-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_PREFIX-non-valid-target-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_PREFIX-non-valid-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_PREFIX-non-valid-target-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_PREFIX-non-valid-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_PREFIX-non-valid-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_PREFIX-non-valid-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_PREFIX-non-valid-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_PREFIX-non-valid-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_SUFFIX-non-valid-target-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_SUFFIX-non-valid-target-result.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_SUFFIX-non-valid-target-result.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_SUFFIX-non-valid-target-result.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_SUFFIX-non-valid-target-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_SUFFIX-non-valid-target-stderr.txt
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_SUFFIX-non-valid-target-stderr.txt
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_SUFFIX-non-valid-target-stderr.txt
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_SUFFIX-non-valid-target.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_SUFFIX-non-valid-target.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/TARGET_LINKER_FILE_SUFFIX-non-valid-target.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/TARGET_LINKER_FILE_SUFFIX-non-valid-target.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE_BASE_NAME-check.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE_BASE_NAME-check.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE_BASE_NAME-check.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE_BASE_NAME-check.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake
similarity index 100%
rename from Tests/RunCMake/GeneratorExpression/ValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake
rename to Tests/RunCMake/GenEx-TARGET_FILE/ValidTarget-TARGET_PDB_FILE_BASE_NAME.cmake
diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/empty.c b/Tests/RunCMake/GenEx-TARGET_FILE/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/GenEx-TARGET_FILE/empty.c
diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
index 7d3c22b..0278cf6 100644
--- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
@@ -19,95 +19,8 @@
 run_cmake(NonValidTarget-C_COMPILER_VERSION)
 run_cmake(NonValidTarget-CXX_COMPILER_VERSION)
 run_cmake(NonValidTarget-Fortran_COMPILER_VERSION)
-run_cmake(NonValidTarget-TARGET_BUNDLE_DIR)
-run_cmake(NonValidTarget-TARGET_BUNDLE_CONTENT_DIR)
 run_cmake(NonValidTarget-TARGET_PROPERTY)
 run_cmake(NonValidTarget-TARGET_POLICY)
-run_cmake(COMPILE_LANGUAGE-add_custom_target)
-run_cmake(COMPILE_LANGUAGE-add_custom_command)
-run_cmake(COMPILE_LANGUAGE-install)
-run_cmake(COMPILE_LANGUAGE-target_sources)
-run_cmake(COMPILE_LANGUAGE-add_executable)
-run_cmake(COMPILE_LANGUAGE-add_library)
-run_cmake(COMPILE_LANGUAGE-add_test)
-run_cmake(COMPILE_LANGUAGE-unknown-lang)
-run_cmake(COMPILE_LANG_AND_ID-add_custom_target)
-run_cmake(COMPILE_LANG_AND_ID-add_custom_command)
-run_cmake(COMPILE_LANG_AND_ID-install)
-run_cmake(COMPILE_LANG_AND_ID-target_sources)
-run_cmake(COMPILE_LANG_AND_ID-add_executable)
-run_cmake(COMPILE_LANG_AND_ID-add_library)
-run_cmake(COMPILE_LANG_AND_ID-add_test)
-run_cmake(COMPILE_LANG_AND_ID-unknown-lang)
-run_cmake(LINK_LANGUAGE-add_custom_target)
-run_cmake(LINK_LANGUAGE-add_custom_command)
-run_cmake(LINK_LANGUAGE-install)
-run_cmake(LINK_LANGUAGE-target_sources)
-run_cmake(LINK_LANGUAGE-add_executable)
-run_cmake(LINK_LANGUAGE-add_library)
-run_cmake(LINK_LANGUAGE-add_test)
-run_cmake(LINK_LANGUAGE-unknown-lang)
-run_cmake(LINK_LANGUAGE-wrong-usage1)
-run_cmake(LINK_LANGUAGE-wrong-usage2)
-run_cmake(LINK_LANGUAGE-wrong-usage3)
-run_cmake(LINK_LANGUAGE-wrong-usage4)
-run_cmake(LINK_LANGUAGE-file_generate)
-run_cmake(LINK_LANG_AND_ID-add_custom_target)
-run_cmake(LINK_LANG_AND_ID-add_custom_command)
-run_cmake(LINK_LANG_AND_ID-install)
-run_cmake(LINK_LANG_AND_ID-target_sources)
-run_cmake(LINK_LANG_AND_ID-add_executable)
-run_cmake(LINK_LANG_AND_ID-add_library)
-run_cmake(LINK_LANG_AND_ID-add_test)
-run_cmake(LINK_LANG_AND_ID-unknown-lang)
-run_cmake(LINK_LANG_AND_ID-wrong-usage1)
-run_cmake(LINK_LANG_AND_ID-wrong-usage2)
-run_cmake(LINK_LANG_AND_ID-wrong-usage3)
-run_cmake(LINK_LANG_AND_ID-file_generate)
-run_cmake(HOST_LINK-add_custom_target)
-run_cmake(HOST_LINK-add_custom_command)
-run_cmake(HOST_LINK-install)
-run_cmake(HOST_LINK-add_executable)
-run_cmake(HOST_LINK-add_library)
-run_cmake(HOST_LINK-add_test)
-run_cmake(HOST_LINK-target_sources)
-run_cmake(HOST_LINK-target_compile_definitions)
-run_cmake(HOST_LINK-target_compile_options)
-run_cmake(HOST_LINK-target_include_directories)
-run_cmake(HOST_LINK-target_link_libraries)
-run_cmake(HOST_LINK-target_link_directories)
-if(RunCMake_GENERATOR MATCHES "(Ninja|Makefile)")
-  run_cmake(HOST_LINK-link_depends)
-endif()
-run_cmake(DEVICE_LINK-add_custom_target)
-run_cmake(DEVICE_LINK-add_custom_command)
-run_cmake(DEVICE_LINK-install)
-run_cmake(DEVICE_LINK-add_executable)
-run_cmake(DEVICE_LINK-add_library)
-run_cmake(DEVICE_LINK-add_test)
-run_cmake(DEVICE_LINK-target_sources)
-run_cmake(DEVICE_LINK-target_compile_definitions)
-run_cmake(DEVICE_LINK-target_compile_options)
-run_cmake(DEVICE_LINK-target_include_directories)
-run_cmake(DEVICE_LINK-target_link_libraries)
-run_cmake(DEVICE_LINK-target_link_directories)
-if(RunCMake_GENERATOR MATCHES "(Ninja|Makefile)")
-  run_cmake(DEVICE_LINK-link_depends)
-endif()
-run_cmake(TARGET_FILE-recursion)
-run_cmake(OUTPUT_NAME-recursion)
-run_cmake(TARGET_FILE_PREFIX)
-run_cmake(TARGET_FILE_PREFIX-imported-target)
-run_cmake(TARGET_FILE_PREFIX-non-valid-target)
-run_cmake(TARGET_LINKER_FILE_PREFIX-non-valid-target)
-run_cmake(TARGET_FILE_SUFFIX)
-run_cmake(TARGET_FILE_SUFFIX-imported-target)
-run_cmake(TARGET_FILE_SUFFIX-non-valid-target)
-run_cmake(TARGET_LINKER_FILE_SUFFIX-non-valid-target)
-run_cmake_with_options(TARGET_FILE_BASE_NAME -DCMAKE_BUILD_TYPE:STRING=Debug)
-run_cmake_with_options(TARGET_FILE_BASE_NAME-imported-target -DCMAKE_BUILD_TYPE:STRING=Debug)
-run_cmake(TARGET_FILE_BASE_NAME-non-valid-target)
-run_cmake(TARGET_LINKER_FILE_BASE_NAME-non-valid-target)
 run_cmake(TARGET_PROPERTY-INCLUDE_DIRECTORIES)
 run_cmake(TARGET_PROPERTY-LOCATION)
 run_cmake(TARGET_PROPERTY-SOURCES)
@@ -121,15 +34,6 @@
 run_cmake(TARGET_NAME_IF_EXISTS-empty-arg)
 run_cmake(TARGET_NAME_IF_EXISTS)
 run_cmake(TARGET_NAME_IF_EXISTS-not-a-target)
-run_cmake(TARGET_GENEX_EVAL-no-arg)
-run_cmake(TARGET_GENEX_EVAL-no-target)
-run_cmake(TARGET_GENEX_EVAL-non-valid-target)
-run_cmake(TARGET_GENEX_EVAL-recursion1)
-run_cmake(TARGET_GENEX_EVAL-recursion2)
-run_cmake(TARGET_GENEX_EVAL)
-run_cmake(GENEX_EVAL-recursion1)
-run_cmake(GENEX_EVAL-recursion2)
-run_cmake(GENEX_EVAL)
 run_cmake(REMOVE_DUPLICATES-empty)
 run_cmake(REMOVE_DUPLICATES-1)
 run_cmake(REMOVE_DUPLICATES-2)
@@ -140,20 +44,6 @@
 run_cmake(FILTER-Exclude)
 run_cmake(FILTER-Include)
 
-run_cmake(ImportedTarget-TARGET_BUNDLE_DIR)
-run_cmake(ImportedTarget-TARGET_BUNDLE_CONTENT_DIR)
-run_cmake(ImportedTarget-TARGET_PDB_FILE)
-run_cmake(ImportedTarget-TARGET_PDB_FILE_BASE_NAME)
-if(LINKER_SUPPORTS_PDB)
-  run_cmake(NonValidTarget-TARGET_PDB_FILE)
-  run_cmake(ValidTarget-TARGET_PDB_FILE)
-  run_cmake(NonValidTarget-TARGET_PDB_FILE_BASE_NAME)
-  run_cmake(ValidTarget-TARGET_PDB_FILE_BASE_NAME)
-else()
-  run_cmake(NonValidCompiler-TARGET_PDB_FILE)
-  run_cmake(NonValidCompiler-TARGET_PDB_FILE_BASE_NAME)
-endif()
-
 set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0085:STRING=OLD)
 run_cmake(CMP0085-OLD)
 unset(RunCMake_TEST_OPTIONS)
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/CMakeLists.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/CMakeLists.txt
new file mode 100644
index 0000000..2632ffa
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.16)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake
new file mode 100644
index 0000000..763d57c
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake
@@ -0,0 +1,55 @@
+cmake_minimum_required(VERSION 3.16)
+include(RunCMake)
+
+# Function to build and install a project.
+function(run_install_test case)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+  file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+  run_cmake(${case})
+  run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --config Debug)
+  # Check "all" components.
+  set(CMAKE_INSTALL_PREFIX ${RunCMake_TEST_BINARY_DIR}/root-all)
+  run_cmake_command(${case}-all ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DBUILD_TYPE=Debug -P cmake_install.cmake)
+endfunction()
+
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+  if(NOT CMake_INSTALL_NAME_TOOL_BUG)
+    run_install_test(macos)
+    run_install_test(macos-unresolved)
+    run_install_test(macos-conflict)
+    run_install_test(macos-notfile)
+  endif()
+  run_cmake(project)
+  run_cmake(badargs1)
+  run_cmake(badargs2)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+  run_install_test(windows)
+  run_install_test(windows-unresolved)
+  run_install_test(windows-conflict)
+  run_install_test(windows-notfile)
+  run_cmake(project)
+  run_cmake(badargs1)
+  run_cmake(badargs2)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+  if(DEFINED ENV{LDFLAGS})
+    # Some setups prebake disable-new-dtags into LDFLAGS
+    string(REPLACE "-Wl,--disable-new-dtags" "" new_ldflags "$ENV{LDFLAGS}")
+    set(ENV{LDFLAGS} "${new_ldflags}")
+  endif()
+
+  if(NOT CMAKE_C_COMPILER_ID MATCHES "^XL")
+    run_install_test(linux)
+  endif()
+  run_install_test(linux-unresolved)
+  run_install_test(linux-conflict)
+  run_install_test(linux-notfile)
+  run_cmake(project)
+  run_cmake(badargs1)
+  run_cmake(badargs2)
+else()
+  run_cmake(unsupported)
+endif()
+
+run_install_test(variable-propagation)
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs1-result.txt
similarity index 100%
copy from Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt
copy to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs1-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs1-stderr.txt
similarity index 77%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs1-stderr.txt
index b66d1fe..0874473 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1-stderr.txt
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs1-stderr.txt
@@ -1,4 +1,4 @@
-^CMake Warning \(dev\) at file-GET_RUNTIME_DEPENDENCIES-badargs1\.cmake:[0-9]+ \(file\):
+^CMake Warning \(dev\) at badargs1\.cmake:[0-9]+ \(file\):
   You have used file\(GET_RUNTIME_DEPENDENCIES\) in project mode\.  This is
   probably not what you intended to do\.  Instead, please consider using it in
   an install\(CODE\) or install\(SCRIPT\) command\.  For example:
@@ -12,7 +12,7 @@
   CMakeLists\.txt:[0-9]+ \(include\)
 This warning is for project developers\.  Use -Wno-dev to suppress it\.
 
-CMake Error at file-GET_RUNTIME_DEPENDENCIES-badargs1\.cmake:[0-9]+ \(file\):
+CMake Error at badargs1\.cmake:[0-9]+ \(file\):
   file Unrecognized argument: "invalid"
 Call Stack \(most recent call first\):
   CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs1.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs1.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs2-result.txt
similarity index 100%
copy from Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt
copy to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs2-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs2-stderr.txt
similarity index 80%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs2-stderr.txt
index 50fa81f..c6ad3d0 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2-stderr.txt
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs2-stderr.txt
@@ -1,4 +1,4 @@
-^CMake Warning \(dev\) at file-GET_RUNTIME_DEPENDENCIES-badargs2\.cmake:[0-9]+ \(file\):
+^CMake Warning \(dev\) at badargs2\.cmake:[0-9]+ \(file\):
   You have used file\(GET_RUNTIME_DEPENDENCIES\) in project mode\.  This is
   probably not what you intended to do\.  Instead, please consider using it in
   an install\(CODE\) or install\(SCRIPT\) command\.  For example:
@@ -12,7 +12,7 @@
   CMakeLists\.txt:[0-9]+ \(include\)
 This warning is for project developers\.  Use -Wno-dev to suppress it\.
 
-CMake Error at file-GET_RUNTIME_DEPENDENCIES-badargs2\.cmake:[0-9]+ \(file\):
+CMake Error at badargs2\.cmake:[0-9]+ \(file\):
   file Keywords missing values:
 
     RESOLVED_DEPENDENCIES_VAR
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs2.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/badargs2.cmake
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-all-check.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-all-check.cmake
new file mode 100644
index 0000000..381b602
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-all-check.cmake
@@ -0,0 +1,44 @@
+function(check_contents filename contents_regex)
+  if(EXISTS "${CMAKE_INSTALL_PREFIX}/${filename}")
+    file(READ "${CMAKE_INSTALL_PREFIX}/${filename}" contents)
+    if(NOT contents MATCHES "${contents_regex}")
+      string(APPEND RunCMake_TEST_FAILED "File contents:
+  ${contents}
+do not match what we expected:
+  ${contents_regex}
+in file:
+  ${CMAKE_INSTALL_PREFIX}/${filename}\n")
+      set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+    endif()
+  else()
+    string(APPEND RunCMake_TEST_FAILED "File ${CMAKE_INSTALL_PREFIX}/${filename} does not exist")
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+set(_check
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/libtest_rpath\.so]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/libtest_runpath\.so]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath/librpath\.so]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_parent/librpath_parent\.so]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_search/librpath_search\.so]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath/librunpath\.so]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath_search/librunpath_search\.so]]
+  )
+check_contents(deps/deps1.txt "^${_check}$")
+check_contents(deps/deps2.txt "^${_check}$")
+check_contents(deps/deps3.txt "^${_check}$")
+set(_check
+  [[librpath_unresolved\.so]]
+  [[librunpath_parent_unresolved\.so]]
+  [[librunpath_unresolved\.so]]
+  )
+check_contents(deps/udeps1.txt "^${_check}$")
+check_contents(deps/udeps2.txt "^${_check}$")
+check_contents(deps/udeps3.txt "^${_check}$")
+set(_check
+  "^libconflict\\.so:[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/conflict/libconflict\\.so;[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/conflict2/libconflict\\.so\n$"
+  )
+check_contents(deps/cdeps1.txt "${_check}")
+check_contents(deps/cdeps2.txt "${_check}")
+check_contents(deps/cdeps3.txt "${_check}")
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-all-stderr.txt
similarity index 75%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-all-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-all-stderr.txt
index 123ae48..aeb5736 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-all-stderr.txt
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-all-stderr.txt
@@ -2,7 +2,7 @@
   Dependency librpath_search_postexcluded\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_search_postexcluded
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_search_postexcluded
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -12,7 +12,7 @@
   Dependency librpath_search\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_search
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_search
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -22,7 +22,7 @@
   Dependency librunpath_search_postexcluded\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath_search_postexcluded
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath_search_postexcluded
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -32,7 +32,7 @@
   Dependency librunpath_search\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath_search
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath_search
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -42,7 +42,7 @@
   Dependency librpath_search_postexcluded\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_search_postexcluded
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_search_postexcluded
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -52,7 +52,7 @@
   Dependency librpath_search\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_search
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_search
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -62,7 +62,7 @@
   Dependency librunpath_search_postexcluded\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath_search_postexcluded
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath_search_postexcluded
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -72,7 +72,7 @@
   Dependency librunpath_search\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath_search
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath_search
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -82,7 +82,7 @@
   Dependency librpath_search_postexcluded\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_search_postexcluded
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_search_postexcluded
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -92,7 +92,7 @@
   Dependency librpath_search\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_search
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/rpath_search
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -102,7 +102,7 @@
   Dependency librunpath_search_postexcluded\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath_search_postexcluded
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath_search_postexcluded
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
@@ -112,7 +112,7 @@
   Dependency librunpath_search\.so found in search directory:
 
     [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath_search
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-build/root-all/lib/runpath_search
 
   See file\(GET_RUNTIME_DEPENDENCIES\) documentation for more information\.
 Call Stack \(most recent call first\):
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict-all-result.txt
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict-all-stderr.txt
new file mode 100644
index 0000000..a6b65df
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict-all-stderr.txt
@@ -0,0 +1,7 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+  file Multiple conflicting paths found for librpath\.so:
+
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict-build/root-all/lib/rpath1/librpath\.so
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict-build/root-all/lib/rpath2/librpath\.so$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-conflict.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile-all-result.txt
similarity index 100%
copy from Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt
copy to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile-all-result.txt
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile-all-stderr.txt
new file mode 100644
index 0000000..d9758c5
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile-all-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+  file Failed to run objdump on:
+
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile-build/root-all/bin/\.\./lib/libtest\.so$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-notfile.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-unresolved-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-unresolved-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-unresolved-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-unresolved-all-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-unresolved-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-unresolved-all-stderr.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-unresolved-all-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-unresolved-all-stderr.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-unresolved.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-unresolved.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-unresolved.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-unresolved.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux.cmake
similarity index 96%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux.cmake
index bd0f9f1..d82d8fb 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux.cmake
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux.cmake
@@ -98,9 +98,9 @@
 set_property(TARGET test_rpath ${test_rpath_names} test_runpath ${test_runpath_names} PROPERTY LIBRARY_OUTPUT_DIRECTORY lib)
 install(TARGETS test_rpath test_runpath DESTINATION lib)
 
-add_executable(topexe file-GET_RUNTIME_DEPENDENCIES-linux/topexe.c)
-add_library(toplib SHARED file-GET_RUNTIME_DEPENDENCIES-linux/toplib.c)
-add_library(topmod MODULE file-GET_RUNTIME_DEPENDENCIES-linux/toplib.c)
+add_executable(topexe linux/topexe.c)
+add_library(toplib SHARED linux/toplib.c)
+add_library(topmod MODULE linux/toplib.c)
 target_link_libraries(topexe PRIVATE test_rpath test_runpath)
 target_link_libraries(toplib PRIVATE test_rpath test_runpath)
 target_link_libraries(topmod PRIVATE test_rpath test_runpath)
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux/topexe.c b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux/topexe.c
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux/topexe.c
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux/topexe.c
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux/toplib.c b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux/toplib.c
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux/toplib.c
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux/toplib.c
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-all-check.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-all-check.cmake
new file mode 100644
index 0000000..7f68398
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-all-check.cmake
@@ -0,0 +1,157 @@
+function(check_contents filename contents_regex)
+  if(EXISTS "${CMAKE_INSTALL_PREFIX}/${filename}")
+    file(READ "${CMAKE_INSTALL_PREFIX}/${filename}" contents)
+    if(NOT contents MATCHES "${contents_regex}")
+      string(APPEND RunCMake_TEST_FAILED "File contents:
+  ${contents}
+do not match what we expected:
+  ${contents_regex}
+in file:
+  ${CMAKE_INSTALL_PREFIX}/${filename}\n")
+      set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+    endif()
+  else()
+    string(APPEND RunCMake_TEST_FAILED "File ${CMAKE_INSTALL_PREFIX}/${filename} does not exist")
+    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+set(_check
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/bin/../lib/executable_path/libexecutable_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/bin/../lib/rpath_executable_path/librpath_executable_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/libtestlib\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
+  [[/usr/lib/libSystem\.B\.dylib]]
+  )
+check_contents(deps/deps1.txt "^${_check}$")
+
+set(_check
+  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
+  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
+  [[@rpath/librpath_executable_path_bundle\.dylib]]
+  [[@rpath/librpath_loader_path_unresolved\.dylib]]
+  [[@rpath/librpath_unresolved\.dylib]]
+  )
+check_contents(deps/udeps1.txt "^${_check}$")
+
+set(_check
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/libtestlib\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
+  [[/usr/lib/libSystem\.B\.dylib]]
+  )
+check_contents(deps/deps2.txt "^${_check}$")
+
+set(_check
+  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
+  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
+  [[@executable_path/../lib/executable_path_postexcluded/libexecutable_path_postexcluded\.dylib]]
+  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
+  [[@rpath/librpath_executable_path\.dylib]]
+  [[@rpath/librpath_executable_path_bundle\.dylib]]
+  [[@rpath/librpath_executable_path_postexcluded\.dylib]]
+  [[@rpath/librpath_loader_path_unresolved\.dylib]]
+  [[@rpath/librpath_unresolved\.dylib]]
+  )
+check_contents(deps/udeps2.txt "^${_check}$")
+
+set(_check
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/libtestlib\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
+  [[/usr/lib/libSystem\.B\.dylib]]
+  )
+check_contents(deps/deps3.txt "^${_check}$")
+
+set(_check
+  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
+  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
+  [[@executable_path/../lib/executable_path_postexcluded/libexecutable_path_postexcluded\.dylib]]
+  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
+  [[@rpath/librpath_executable_path\.dylib]]
+  [[@rpath/librpath_executable_path_bundle\.dylib]]
+  [[@rpath/librpath_executable_path_postexcluded\.dylib]]
+  [[@rpath/librpath_loader_path_unresolved\.dylib]]
+  [[@rpath/librpath_unresolved\.dylib]]
+  )
+check_contents(deps/udeps3.txt "^${_check}$")
+
+set(_check
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/bin/../lib/executable_path/libexecutable_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/bin/../lib/rpath_executable_path/librpath_executable_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/libtestlib\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
+  [[/usr/lib/libSystem\.B\.dylib]]
+  )
+check_contents(deps/deps4.txt "^${_check}$")
+
+set(_check
+  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
+  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
+  [[@rpath/librpath_executable_path_bundle\.dylib]]
+  [[@rpath/librpath_loader_path_unresolved\.dylib]]
+  [[@rpath/librpath_unresolved\.dylib]]
+  )
+check_contents(deps/udeps4.txt "^${_check}$")
+
+set(_check
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/bundle_executable/bin/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/libtestlib\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
+  [[/usr/lib/libSystem\.B\.dylib]]
+  )
+check_contents(deps/deps5.txt "^${_check}$")
+
+set(_check
+  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
+  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
+  [[@rpath/librpath_executable_path\.dylib]]
+  [[@rpath/librpath_executable_path_bundle\.dylib]]
+  [[@rpath/librpath_loader_path_unresolved\.dylib]]
+  [[@rpath/librpath_unresolved\.dylib]]
+  )
+check_contents(deps/udeps5.txt "^${_check}$")
+
+set(_check
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/bundle_executable/bin/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/libtestlib\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
+  [[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
+  [[/usr/lib/libSystem\.B\.dylib]]
+  )
+check_contents(deps/deps6.txt "^${_check}$")
+
+set(_check
+  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
+  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
+  [[@rpath/librpath_executable_path\.dylib]]
+  [[@rpath/librpath_executable_path_bundle\.dylib]]
+  [[@rpath/librpath_loader_path_unresolved\.dylib]]
+  [[@rpath/librpath_unresolved\.dylib]]
+  )
+check_contents(deps/udeps6.txt "^${_check}$")
+
+set(_check
+  "^libconflict\\.dylib:[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/conflict/libconflict\\.dylib;[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-build/root-all/executable/lib/conflict2/libconflict\\.dylib\n$"
+  )
+check_contents(deps/cdeps1.txt "${_check}")
+check_contents(deps/cdeps2.txt "${_check}")
+check_contents(deps/cdeps3.txt "${_check}")
+check_contents(deps/cdeps4.txt "${_check}")
+check_contents(deps/cdeps5.txt "${_check}")
+check_contents(deps/cdeps6.txt "${_check}")
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict-all-result.txt
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict-all-stderr.txt
new file mode 100644
index 0000000..d8323a8
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict-all-stderr.txt
@@ -0,0 +1,7 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+  file Multiple conflicting paths found for librpath\.dylib:
+
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict-build/root-all/lib/rpath1/librpath\.dylib
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict-build/root-all/lib/rpath2/librpath\.dylib$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-conflict.cmake
diff --git a/Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile-all-result.txt
similarity index 100%
copy from Tests/RunCMake/GeneratorExpression/HOST_LINK-install-result.txt
copy to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile-all-result.txt
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile-all-stderr.txt
new file mode 100644
index 0000000..1afc1b1
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile-all-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+  file Failed to run otool on:
+
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile-build/root-all/bin/\.\./lib/libtest\.dylib$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-notfile.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-unresolved-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-unresolved-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-unresolved-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-unresolved-all-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-unresolved-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-unresolved-all-stderr.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-unresolved-all-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-unresolved-all-stderr.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-unresolved.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-unresolved.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-unresolved.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos-unresolved.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos.cmake
similarity index 96%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos.cmake
index 6db05b3..c56a14b 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos.cmake
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos.cmake
@@ -127,9 +127,9 @@
 
 target_link_libraries(testlib PRIVATE ${testlib_names})
 
-add_executable(topexe file-GET_RUNTIME_DEPENDENCIES-macos/topexe.c)
-add_library(toplib SHARED file-GET_RUNTIME_DEPENDENCIES-macos/toplib.c)
-add_library(topmod MODULE file-GET_RUNTIME_DEPENDENCIES-macos/toplib.c)
+add_executable(topexe macos/topexe.c)
+add_library(toplib SHARED macos/toplib.c)
+add_library(topmod MODULE macos/toplib.c)
 target_link_libraries(topexe PRIVATE testlib)
 target_link_libraries(toplib PRIVATE testlib)
 target_link_libraries(topmod PRIVATE testlib)
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos/topexe.c b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos/topexe.c
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos/topexe.c
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos/topexe.c
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos/toplib.c b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos/toplib.c
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos/toplib.c
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/macos/toplib.c
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-project-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/project-stderr.txt
similarity index 83%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-project-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/project-stderr.txt
index d506645..f14a10d 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-project-stderr.txt
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/project-stderr.txt
@@ -1,4 +1,4 @@
-^CMake Warning \(dev\) at file-GET_RUNTIME_DEPENDENCIES-project\.cmake:[0-9]+ \(file\):
+^CMake Warning \(dev\) at project\.cmake:[0-9]+ \(file\):
   You have used file\(GET_RUNTIME_DEPENDENCIES\) in project mode\.  This is
   probably not what you intended to do\.  Instead, please consider using it in
   an install\(CODE\) or install\(SCRIPT\) command\.  For example:
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-project.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/project.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-project.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/project.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-unsupported-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/unsupported-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-unsupported-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/unsupported-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-unsupported-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/unsupported-stderr.txt
similarity index 63%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-unsupported-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/unsupported-stderr.txt
index 3db835c..000159f 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-unsupported-stderr.txt
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/unsupported-stderr.txt
@@ -1,4 +1,4 @@
-^CMake Error at file-GET_RUNTIME_DEPENDENCIES-unsupported\.cmake:[0-9]+ \(file\):
+^CMake Error at unsupported\.cmake:[0-9]+ \(file\):
   file GET_RUNTIME_DEPENDENCIES is not supported on system "[^
  ]+"
 Call Stack \(most recent call first\):
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-unsupported.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/unsupported.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-unsupported.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/unsupported.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-all-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-all-stderr.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-all-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-all-stderr.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-dev-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-dev-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-dev-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-dev-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-dev-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-dev-stderr.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation-dev-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation-dev-stderr.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-variable-propagation.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/variable-propagation.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-all-check.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake
similarity index 64%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-all-check.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake
index c120ce4..f1d70a1 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-all-check.cmake
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake
@@ -17,9 +17,9 @@
 endfunction()
 
 set(_check
-  [=[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-build/root-all/bin/\.conflict/\.\./(lib)?libdir\.dll]=]
-  [=[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-build/root-all/bin/\.search/(lib)?search\.dll]=]
-  [=[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-build/root-all/bin/(lib)?testlib\.dll]=]
+  [=[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/\.conflict/\.\./(lib)?libdir\.dll]=]
+  [=[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/\.search/(lib)?search\.dll]=]
+  [=[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/(lib)?testlib\.dll]=]
   )
 check_contents(deps/deps1.txt "^${_check}$")
 check_contents(deps/deps2.txt "^${_check}$")
@@ -31,7 +31,7 @@
 check_contents(deps/udeps2.txt "^${_check}$")
 check_contents(deps/udeps3.txt "^${_check}$")
 set(_check
-  "^(lib)?conflict\\.dll:[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-build/root-all/bin/\\.conflict/(lib)?conflict\\.dll;[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-build/root-all/bin/(lib)?conflict\\.dll\n$"
+  "^(lib)?conflict\\.dll:[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/\\.conflict/(lib)?conflict\\.dll;[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/(lib)?conflict\\.dll\n$"
   )
 check_contents(deps/cdeps1.txt "${_check}")
 check_contents(deps/cdeps2.txt "${_check}")
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-result.txt
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-stderr.txt
new file mode 100644
index 0000000..c48c55d
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-stderr.txt
@@ -0,0 +1,7 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+  file Multiple conflicting paths found for (lib)?path\.dll:
+
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-build/root-all/lib/test1/(lib)?path\.dll
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-build/root-all/lib/test2/(lib)?path\.dll$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile-all-result.txt
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile-all-stderr.txt
new file mode 100644
index 0000000..33c0390
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile-all-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+  file Failed to run (dumpbin|objdump) on:
+
+    [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile-build/root-all/bin/(lib)?test\.dll$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-notfile.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-unresolved-all-result.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-result.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-unresolved-all-result.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-result.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-unresolved-all-stderr.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-stderr.txt
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-unresolved-all-stderr.txt
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-stderr.txt
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-unresolved.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved.cmake
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-unresolved.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved.cmake
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake
similarity index 94%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows.cmake
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake
index 19288d8..9160ce5 100644
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows.cmake
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake
@@ -38,9 +38,9 @@
 install(TARGETS libdir search_postexcluded search DESTINATION bin/.search) # Prefixing with "." ensures it is the first item after list(SORT)
 install(TARGETS testlib_conflict conflict DESTINATION bin/.conflict)
 
-add_executable(topexe file-GET_RUNTIME_DEPENDENCIES-windows/topexe.c)
-add_library(toplib SHARED file-GET_RUNTIME_DEPENDENCIES-windows/toplib.c)
-add_library(topmod MODULE file-GET_RUNTIME_DEPENDENCIES-windows/toplib.c)
+add_executable(topexe windows/topexe.c)
+add_library(toplib SHARED windows/toplib.c)
+add_library(topmod MODULE windows/toplib.c)
 target_link_libraries(topexe PRIVATE testlib)
 target_link_libraries(toplib PRIVATE testlib)
 target_link_libraries(topmod PRIVATE testlib)
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows/topexe.c b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows/topexe.c
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows/topexe.c
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows/topexe.c
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows/toplib.c b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows/toplib.c
similarity index 100%
rename from Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows/toplib.c
rename to Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows/toplib.c
diff --git a/Tests/RunCMake/find_program/ExeNoRead-stdout.txt b/Tests/RunCMake/find_program/ExeNoRead-stdout.txt
index 35a83f2..f231178 100644
--- a/Tests/RunCMake/find_program/ExeNoRead-stdout.txt
+++ b/Tests/RunCMake/find_program/ExeNoRead-stdout.txt
@@ -1 +1 @@
--- ExeNoRead_EXECUTABLE='.*/Tests/RunCMake/find_program/ExeNoRead-build/ExeNoRead'
+-- ExeNoRead_EXECUTABLE='ExeNoRead_EXECUTABLE-NOTFOUND'
diff --git a/Tests/RunCMake/find_program/RunCMakeTest.cmake b/Tests/RunCMake/find_program/RunCMakeTest.cmake
index 95ffd84..2bb777b 100644
--- a/Tests/RunCMake/find_program/RunCMakeTest.cmake
+++ b/Tests/RunCMake/find_program/RunCMakeTest.cmake
@@ -9,8 +9,14 @@
 if(CMAKE_SYSTEM_NAME MATCHES "^(Windows|CYGWIN)$")
   run_cmake(WindowsCom)
   run_cmake(WindowsExe)
-endif()
+else()
+  # test non readable file only if not root
+  execute_process(
+    COMMAND id -u $ENV{USER}
+    OUTPUT_VARIABLE uid
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-if(UNIX)
-  run_cmake(ExeNoRead)
+  if(NOT "${uid}" STREQUAL "0")
+    run_cmake(ExeNoRead)
+  endif()
 endif()
diff --git a/Tests/RunCMake/install/CMakeLists.txt b/Tests/RunCMake/install/CMakeLists.txt
index c7e99ad..6dd8cdf 100644
--- a/Tests/RunCMake/install/CMakeLists.txt
+++ b/Tests/RunCMake/install/CMakeLists.txt
@@ -1,6 +1,3 @@
 cmake_minimum_required(VERSION 3.4)
-if(RunCMake_TEST MATCHES "^file-GET_RUNTIME_DEPENDENCIES")
-  cmake_policy(SET CMP0087 NEW)
-endif()
 project(${RunCMake_TEST} NONE)
 include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/install/RunCMakeTest.cmake b/Tests/RunCMake/install/RunCMakeTest.cmake
index c50e552..d83a07c 100644
--- a/Tests/RunCMake/install/RunCMakeTest.cmake
+++ b/Tests/RunCMake/install/RunCMakeTest.cmake
@@ -155,46 +155,7 @@
 run_install_test(TARGETS-RPATH)
 run_install_test(InstallRequiredSystemLibraries)
 
-if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
-  if(NOT CMake_INSTALL_NAME_TOOL_BUG)
-    run_install_test(file-GET_RUNTIME_DEPENDENCIES-macos)
-    run_install_test(file-GET_RUNTIME_DEPENDENCIES-macos-unresolved)
-    run_install_test(file-GET_RUNTIME_DEPENDENCIES-macos-conflict)
-    run_install_test(file-GET_RUNTIME_DEPENDENCIES-macos-notfile)
-  endif()
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-project)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-badargs1)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-badargs2)
-elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
-  run_install_test(file-GET_RUNTIME_DEPENDENCIES-windows)
-  run_install_test(file-GET_RUNTIME_DEPENDENCIES-windows-unresolved)
-  run_install_test(file-GET_RUNTIME_DEPENDENCIES-windows-conflict)
-  run_install_test(file-GET_RUNTIME_DEPENDENCIES-windows-notfile)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-project)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-badargs1)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-badargs2)
-elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
-  if(DEFINED ENV{LDFLAGS})
-    # Some setups prebake disable-new-dtags into LDFLAGS
-    string(REPLACE "-Wl,--disable-new-dtags" "" new_ldflags "$ENV{LDFLAGS}")
-    set(ENV{LDFLAGS} "${new_ldflags}")
-  endif()
-
-  if(NOT CMAKE_C_COMPILER_ID MATCHES "^XL")
-    run_install_test(file-GET_RUNTIME_DEPENDENCIES-linux)
-  endif()
-  run_install_test(file-GET_RUNTIME_DEPENDENCIES-linux-unresolved)
-  run_install_test(file-GET_RUNTIME_DEPENDENCIES-linux-conflict)
-  run_install_test(file-GET_RUNTIME_DEPENDENCIES-linux-notfile)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-project)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-badargs1)
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-badargs2)
-else()
-  run_cmake(file-GET_RUNTIME_DEPENDENCIES-unsupported)
-endif()
-
 set(run_install_test_components 1)
-run_install_test(file-GET_RUNTIME_DEPENDENCIES-variable-propagation)
 run_install_test(FILES-EXCLUDE_FROM_ALL)
 run_install_test(TARGETS-EXCLUDE_FROM_ALL)
 run_install_test(TARGETS-NAMELINK_COMPONENT)
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1-result.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs1-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2-result.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-badargs2-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-all-check.cmake b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-all-check.cmake
deleted file mode 100644
index ab630f0..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-all-check.cmake
+++ /dev/null
@@ -1,44 +0,0 @@
-function(check_contents filename contents_regex)
-  if(EXISTS "${CMAKE_INSTALL_PREFIX}/${filename}")
-    file(READ "${CMAKE_INSTALL_PREFIX}/${filename}" contents)
-    if(NOT contents MATCHES "${contents_regex}")
-      string(APPEND RunCMake_TEST_FAILED "File contents:
-  ${contents}
-do not match what we expected:
-  ${contents_regex}
-in file:
-  ${CMAKE_INSTALL_PREFIX}/${filename}\n")
-      set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
-    endif()
-  else()
-    string(APPEND RunCMake_TEST_FAILED "File ${CMAKE_INSTALL_PREFIX}/${filename} does not exist")
-    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-set(_check
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/libtest_rpath\.so]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/libtest_runpath\.so]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath/librpath\.so]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_parent/librpath_parent\.so]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/rpath_search/librpath_search\.so]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath/librunpath\.so]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/runpath_search/librunpath_search\.so]]
-  )
-check_contents(deps/deps1.txt "^${_check}$")
-check_contents(deps/deps2.txt "^${_check}$")
-check_contents(deps/deps3.txt "^${_check}$")
-set(_check
-  [[librpath_unresolved\.so]]
-  [[librunpath_parent_unresolved\.so]]
-  [[librunpath_unresolved\.so]]
-  )
-check_contents(deps/udeps1.txt "^${_check}$")
-check_contents(deps/udeps2.txt "^${_check}$")
-check_contents(deps/udeps3.txt "^${_check}$")
-set(_check
-  "^libconflict\\.so:[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/conflict/libconflict\\.so;[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-build/root-all/lib/conflict2/libconflict\\.so\n$"
-  )
-check_contents(deps/cdeps1.txt "${_check}")
-check_contents(deps/cdeps2.txt "${_check}")
-check_contents(deps/cdeps3.txt "${_check}")
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict-all-stderr.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict-all-stderr.txt
deleted file mode 100644
index 1692348..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict-all-stderr.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
-  file Multiple conflicting paths found for librpath\.so:
-
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict-build/root-all/lib/rpath1/librpath\.so
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-conflict-build/root-all/lib/rpath2/librpath\.so$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile-all-result.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile-all-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile-all-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile-all-stderr.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile-all-stderr.txt
deleted file mode 100644
index 83a87c9..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile-all-stderr.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
-  file Failed to run objdump on:
-
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-linux-notfile-build/root-all/bin/\.\./lib/libtest\.so$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-all-check.cmake b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-all-check.cmake
deleted file mode 100644
index 4d6dde1..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-all-check.cmake
+++ /dev/null
@@ -1,157 +0,0 @@
-function(check_contents filename contents_regex)
-  if(EXISTS "${CMAKE_INSTALL_PREFIX}/${filename}")
-    file(READ "${CMAKE_INSTALL_PREFIX}/${filename}" contents)
-    if(NOT contents MATCHES "${contents_regex}")
-      string(APPEND RunCMake_TEST_FAILED "File contents:
-  ${contents}
-do not match what we expected:
-  ${contents_regex}
-in file:
-  ${CMAKE_INSTALL_PREFIX}/${filename}\n")
-      set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
-    endif()
-  else()
-    string(APPEND RunCMake_TEST_FAILED "File ${CMAKE_INSTALL_PREFIX}/${filename} does not exist")
-    set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-set(_check
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/bin/../lib/executable_path/libexecutable_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/bin/../lib/rpath_executable_path/librpath_executable_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/libtestlib\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
-  [[/usr/lib/libSystem\.B\.dylib]]
-  )
-check_contents(deps/deps1.txt "^${_check}$")
-
-set(_check
-  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
-  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
-  [[@rpath/librpath_executable_path_bundle\.dylib]]
-  [[@rpath/librpath_loader_path_unresolved\.dylib]]
-  [[@rpath/librpath_unresolved\.dylib]]
-  )
-check_contents(deps/udeps1.txt "^${_check}$")
-
-set(_check
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/libtestlib\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
-  [[/usr/lib/libSystem\.B\.dylib]]
-  )
-check_contents(deps/deps2.txt "^${_check}$")
-
-set(_check
-  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
-  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
-  [[@executable_path/../lib/executable_path_postexcluded/libexecutable_path_postexcluded\.dylib]]
-  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
-  [[@rpath/librpath_executable_path\.dylib]]
-  [[@rpath/librpath_executable_path_bundle\.dylib]]
-  [[@rpath/librpath_executable_path_postexcluded\.dylib]]
-  [[@rpath/librpath_loader_path_unresolved\.dylib]]
-  [[@rpath/librpath_unresolved\.dylib]]
-  )
-check_contents(deps/udeps2.txt "^${_check}$")
-
-set(_check
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/libtestlib\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
-  [[/usr/lib/libSystem\.B\.dylib]]
-  )
-check_contents(deps/deps3.txt "^${_check}$")
-
-set(_check
-  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
-  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
-  [[@executable_path/../lib/executable_path_postexcluded/libexecutable_path_postexcluded\.dylib]]
-  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
-  [[@rpath/librpath_executable_path\.dylib]]
-  [[@rpath/librpath_executable_path_bundle\.dylib]]
-  [[@rpath/librpath_executable_path_postexcluded\.dylib]]
-  [[@rpath/librpath_loader_path_unresolved\.dylib]]
-  [[@rpath/librpath_unresolved\.dylib]]
-  )
-check_contents(deps/udeps3.txt "^${_check}$")
-
-set(_check
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/bin/../lib/executable_path/libexecutable_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/bin/../lib/rpath_executable_path/librpath_executable_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/libtestlib\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
-  [[/usr/lib/libSystem\.B\.dylib]]
-  )
-check_contents(deps/deps4.txt "^${_check}$")
-
-set(_check
-  [[@executable_path/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
-  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
-  [[@rpath/librpath_executable_path_bundle\.dylib]]
-  [[@rpath/librpath_loader_path_unresolved\.dylib]]
-  [[@rpath/librpath_unresolved\.dylib]]
-  )
-check_contents(deps/udeps4.txt "^${_check}$")
-
-set(_check
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/bundle_executable/bin/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/libtestlib\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
-  [[/usr/lib/libSystem\.B\.dylib]]
-  )
-check_contents(deps/deps5.txt "^${_check}$")
-
-set(_check
-  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
-  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
-  [[@rpath/librpath_executable_path\.dylib]]
-  [[@rpath/librpath_executable_path_bundle\.dylib]]
-  [[@rpath/librpath_loader_path_unresolved\.dylib]]
-  [[@rpath/librpath_unresolved\.dylib]]
-  )
-check_contents(deps/udeps5.txt "^${_check}$")
-
-set(_check
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/bundle_executable/bin/../lib/executable_path_bundle/libexecutable_path_bundle\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/libtestlib\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/loader_path/libloader_path\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/../rpath/librpath\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/normal/libnormal\.dylib]]
-  [[[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/rpath_loader_path/librpath_loader_path\.dylib]]
-  [[/usr/lib/libSystem\.B\.dylib]]
-  )
-check_contents(deps/deps6.txt "^${_check}$")
-
-set(_check
-  [[@executable_path/../lib/executable_path/libexecutable_path\.dylib]]
-  [[@loader_path/loader_path_unresolved/libloader_path_unresolved\.dylib]]
-  [[@rpath/librpath_executable_path\.dylib]]
-  [[@rpath/librpath_executable_path_bundle\.dylib]]
-  [[@rpath/librpath_loader_path_unresolved\.dylib]]
-  [[@rpath/librpath_unresolved\.dylib]]
-  )
-check_contents(deps/udeps6.txt "^${_check}$")
-
-set(_check
-  "^libconflict\\.dylib:[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/conflict/libconflict\\.dylib;[^;]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-build/root-all/executable/lib/conflict2/libconflict\\.dylib\n$"
-  )
-check_contents(deps/cdeps1.txt "${_check}")
-check_contents(deps/cdeps2.txt "${_check}")
-check_contents(deps/cdeps3.txt "${_check}")
-check_contents(deps/cdeps4.txt "${_check}")
-check_contents(deps/cdeps5.txt "${_check}")
-check_contents(deps/cdeps6.txt "${_check}")
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict-all-stderr.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict-all-stderr.txt
deleted file mode 100644
index bc9e97a..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict-all-stderr.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
-  file Multiple conflicting paths found for librpath\.dylib:
-
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict-build/root-all/lib/rpath1/librpath\.dylib
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-conflict-build/root-all/lib/rpath2/librpath\.dylib$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile-all-result.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile-all-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile-all-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile-all-stderr.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile-all-stderr.txt
deleted file mode 100644
index 73ab9f1..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile-all-stderr.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
-  file Failed to run otool on:
-
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-macos-notfile-build/root-all/bin/\.\./lib/libtest\.dylib$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict-all-stderr.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict-all-stderr.txt
deleted file mode 100644
index 66ecb93..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict-all-stderr.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
-  file Multiple conflicting paths found for (lib)?path\.dll:
-
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict-build/root-all/lib/test1/(lib)?path\.dll
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-conflict-build/root-all/lib/test2/(lib)?path\.dll$
diff --git a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile-all-stderr.txt b/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile-all-stderr.txt
deleted file mode 100644
index f921409..0000000
--- a/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile-all-stderr.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
-  file Failed to run (dumpbin|objdump) on:
-
-    [^
-]*/Tests/RunCMake/install/file-GET_RUNTIME_DEPENDENCIES-windows-notfile-build/root-all/bin/(lib)?test\.dll$
diff --git a/Tests/RunCMake/target_link_libraries/AliasTargets.cmake b/Tests/RunCMake/target_link_libraries-ALIAS/AliasTargets.cmake
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/AliasTargets.cmake
rename to Tests/RunCMake/target_link_libraries-ALIAS/AliasTargets.cmake
diff --git a/Tests/RunCMake/target_link_libraries-ALIAS/CMakeLists.txt b/Tests/RunCMake/target_link_libraries-ALIAS/CMakeLists.txt
new file mode 100644
index 0000000..9cf020f
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-ALIAS/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.1)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE)
diff --git a/Tests/RunCMake/target_link_libraries-ALIAS/RunCMakeTest.cmake b/Tests/RunCMake/target_link_libraries-ALIAS/RunCMakeTest.cmake
new file mode 100644
index 0000000..4d24a6e
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-ALIAS/RunCMakeTest.cmake
@@ -0,0 +1,23 @@
+include(RunCMake)
+
+macro(run_cmake_target test subtest target)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  run_cmake_command(${test}-${subtest} ${CMAKE_COMMAND} --build . --target ${target} ${ARGN})
+
+  unset(RunCMake_TEST_BINARY_DIR)
+  unset(RunCMake_TEST_NO_CLEAN)
+endmacro()
+
+set(RunCMake_TEST_OUTPUT_MERGE TRUE)
+if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
+  set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
+endif()
+run_cmake(AliasTargets)
+run_cmake_target(AliasTargets func func --config Release)
+run_cmake_target(AliasTargets lib-local lib-local --config Release)
+run_cmake_target(AliasTargets main-local main-local --config Release)
+run_cmake_target(AliasTargets lib-global lib-global --config Release)
+run_cmake_target(AliasTargets main-global main-global --config Release)
+unset(RunCMake_TEST_OPTIONS)
+unset(RunCMake_TEST_OUTPUT_MERGE)
diff --git a/Tests/RunCMake/target_link_libraries/func.c b/Tests/RunCMake/target_link_libraries-ALIAS/func.c
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/func.c
rename to Tests/RunCMake/target_link_libraries-ALIAS/func.c
diff --git a/Tests/RunCMake/target_link_libraries-ALIAS/lib.c b/Tests/RunCMake/target_link_libraries-ALIAS/lib.c
new file mode 100644
index 0000000..b2d1b66
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-ALIAS/lib.c
@@ -0,0 +1,10 @@
+
+#if defined(_WIN32)
+__declspec(dllimport)
+#endif
+  void func_c();
+
+void lib()
+{
+  func_c();
+}
diff --git a/Tests/RunCMake/target_link_libraries/main.c b/Tests/RunCMake/target_link_libraries-ALIAS/main.c
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/main.c
rename to Tests/RunCMake/target_link_libraries-ALIAS/main.c
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/CMakeLists.txt b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/CMakeLists.txt
new file mode 100644
index 0000000..9cf020f
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.1)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE)
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/RunCMakeTest.cmake b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/RunCMakeTest.cmake
new file mode 100644
index 0000000..0f0e5d8
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/RunCMakeTest.cmake
@@ -0,0 +1,41 @@
+include(RunCMake)
+
+macro(run_cmake_target test subtest target)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  run_cmake_command(${test}-${subtest} ${CMAKE_COMMAND} --build . --target ${target} ${ARGN})
+
+  unset(RunCMake_TEST_BINARY_DIR)
+  unset(RunCMake_TEST_NO_CLEAN)
+endmacro()
+
+run_cmake(bad-usage)
+
+if (RunCMake_GENERATOR MATCHES "Makefiles|Ninja|Visual Studio|Xcode|Watcom WMake")
+
+  run_cmake(bad-mix-lang)
+
+  set(RunCMake_TEST_OUTPUT_MERGE TRUE)
+  if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
+    set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
+  endif()
+
+  run_cmake(genex)
+
+  run_cmake_target(genex lib LinkLibraries_lib --config Release)
+  run_cmake_target(genex lib2 LinkLibraries_lib2 --config Release)
+  run_cmake_target(genex lib3 LinkLibraries_lib3 --config Release)
+  run_cmake_target(genex exe LinkLibraries_exe --config Release)
+  run_cmake_target(genex C_import LinkLibraries_C_import --config Release)
+  run_cmake_target(genex CXX_import LinkLibraries_CXX_import --config Release)
+  run_cmake_target(genex C_interface LinkLibraries_C_interface --config Release)
+  run_cmake_target(genex CXX_interface LinkLibraries_CXX_interface --config Release)
+  run_cmake_target(genex C_interface2 LinkLibraries_C_interface2 --config Release)
+  run_cmake_target(genex CXX_interface2 LinkLibraries_CXX_interface2 --config Release)
+  run_cmake_target(genex C_static LinkLibraries_C_static --config Release)
+  run_cmake_target(genex CXX_static LinkLibraries_CXX_static --config Release)
+
+  unset(RunCMake_TEST_OPTIONS)
+  unset(RunCMake_TEST_OUTPUT_MERGE)
+
+endif()
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-mix-lang-result.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-result.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-mix-lang-result.txt
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-stderr.txt b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-mix-lang-stderr.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-stderr.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-mix-lang-stderr.txt
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang.cmake b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-mix-lang.cmake
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang.cmake
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-mix-lang.cmake
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-usage-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-usage-result.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-usage-result.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-usage-result.txt
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-usage-stderr.txt b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-usage-stderr.txt
similarity index 71%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-usage-stderr.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-usage-stderr.txt
index 469f1fe..d61f789 100644
--- a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-usage-stderr.txt
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-usage-stderr.txt
@@ -1,4 +1,4 @@
-CMake Error at genex_LINK_LANGUAGE-bad-usage.cmake:4 \(target_link_libraries\):
+CMake Error at bad-usage.cmake:4 \(target_link_libraries\):
   Error evaluating generator expression:
 
     \$<LINK_LANGUAGE>
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-usage.cmake b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-usage.cmake
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-usage.cmake
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/bad-usage.cmake
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/empty.c b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/empty.c
diff --git a/Tests/RunCMake/target_link_libraries/func.c b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/func.c
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/func.c
copy to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/func.c
diff --git a/Tests/RunCMake/target_link_libraries/func.cxx b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/func.cxx
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/func.cxx
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/func.cxx
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE.cmake b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/genex.cmake
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE.cmake
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/genex.cmake
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/lib.c b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/lib.c
new file mode 100644
index 0000000..b2d1b66
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/lib.c
@@ -0,0 +1,10 @@
+
+#if defined(_WIN32)
+__declspec(dllimport)
+#endif
+  void func_c();
+
+void lib()
+{
+  func_c();
+}
diff --git a/Tests/RunCMake/target_link_libraries/main.c b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/main.c
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/main.c
copy to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/main.c
diff --git a/Tests/RunCMake/target_link_libraries/main.cxx b/Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/main.cxx
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/main.cxx
rename to Tests/RunCMake/target_link_libraries-LINK_LANGUAGE/main.cxx
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/CMakeLists.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/CMakeLists.txt
new file mode 100644
index 0000000..9cf020f
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.1)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE)
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/RunCMakeTest.cmake b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/RunCMakeTest.cmake
new file mode 100644
index 0000000..3b16f9e
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/RunCMakeTest.cmake
@@ -0,0 +1,38 @@
+include(RunCMake)
+
+macro(run_cmake_target test subtest target)
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  run_cmake_command(${test}-${subtest} ${CMAKE_COMMAND} --build . --target ${target} ${ARGN})
+
+  unset(RunCMake_TEST_BINARY_DIR)
+  unset(RunCMake_TEST_NO_CLEAN)
+endmacro()
+
+if (RunCMake_GENERATOR MATCHES "Makefiles|Ninja|Visual Studio|Xcode|Watcom WMake")
+
+  run_cmake(bad-mix-lang)
+
+  set(RunCMake_TEST_OUTPUT_MERGE TRUE)
+  if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
+    set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
+  endif()
+
+  run_cmake(genex)
+
+  run_cmake_target(genex lib LinkLibraries_lib --config Release)
+  run_cmake_target(genex lib2 LinkLibraries_lib2 --config Release)
+  run_cmake_target(genex lib3 LinkLibraries_lib3 --config Release)
+  run_cmake_target(genex exe LinkLibraries_exe --config Release)
+  run_cmake_target(genex C_import LinkLibraries_C_import --config Release)
+  run_cmake_target(genex CXX_import LinkLibraries_CXX_import --config Release)
+  run_cmake_target(genex C_interface LinkLibraries_C_interface --config Release)
+  run_cmake_target(genex CXX_interface LinkLibraries_CXX_interface --config Release)
+  run_cmake_target(genex C_interface2 LinkLibraries_C_interface2 --config Release)
+  run_cmake_target(genex CXX_interface2 LinkLibraries_CXX_interface2 --config Release)
+  run_cmake_target(genex CXX_static LinkLibraries_CXX_static --config Release)
+
+  unset(RunCMake_TEST_OPTIONS)
+  unset(RunCMake_TEST_OUTPUT_MERGE)
+
+endif()
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/bad-mix-lang-result.txt
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-result.txt
copy to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/bad-mix-lang-result.txt
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-stderr.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/bad-mix-lang-stderr.txt
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/genex_LINK_LANGUAGE-bad-mix-lang-stderr.txt
copy to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/bad-mix-lang-stderr.txt
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang.cmake b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/bad-mix-lang.cmake
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang.cmake
rename to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/bad-mix-lang.cmake
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-basic-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/basic-result.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-basic-result.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/basic-result.txt
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/empty.c b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/empty.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/empty.c
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-exe_c-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/exe_c-result.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-exe_c-result.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/exe_c-result.txt
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-exe_cxx-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/exe_cxx-result.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-exe_cxx-result.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/exe_cxx-result.txt
diff --git a/Tests/RunCMake/target_link_libraries/func.c b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/func.c
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/func.c
copy to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/func.c
diff --git a/Tests/RunCMake/target_link_libraries/func.cxx b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/func.cxx
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/func.cxx
copy to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/func.cxx
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID.cmake b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/genex.cmake
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID.cmake
rename to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/genex.cmake
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-interface-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/interface-result.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-interface-result.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/interface-result.txt
diff --git a/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/lib.c b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/lib.c
new file mode 100644
index 0000000..b2d1b66
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/lib.c
@@ -0,0 +1,10 @@
+
+#if defined(_WIN32)
+__declspec(dllimport)
+#endif
+  void func_c();
+
+void lib()
+{
+  func_c();
+}
diff --git a/Tests/RunCMake/target_link_libraries/main.c b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/main.c
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/main.c
copy to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/main.c
diff --git a/Tests/RunCMake/target_link_libraries/main.cxx b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/main.cxx
similarity index 100%
copy from Tests/RunCMake/target_link_libraries/main.cxx
copy to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/main.cxx
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-no_language-result.txt b/Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/no_language-result.txt
similarity index 100%
rename from Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-no_language-result.txt
rename to Tests/RunCMake/target_link_libraries-LINK_LANG_AND_ID/no_language-result.txt
diff --git a/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake b/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake
index 1f4077c..189592d 100644
--- a/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake
+++ b/Tests/RunCMake/target_link_libraries/RunCMakeTest.cmake
@@ -30,71 +30,3 @@
 run_cmake(StaticPrivateDepNotTarget)
 run_cmake(UNKNOWN-IMPORTED-GLOBAL)
 run_cmake(empty_keyword_args)
-
-macro(run_cmake_target test subtest target)
-  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
-  set(RunCMake_TEST_NO_CLEAN 1)
-  run_cmake_command(${test}-${subtest} ${CMAKE_COMMAND} --build . --target ${target} ${ARGN})
-
-  unset(RunCMake_TEST_BINARY_DIR)
-  unset(RunCMake_TEST_NO_CLEAN)
-endmacro()
-
-set(RunCMake_TEST_OUTPUT_MERGE TRUE)
-if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
-  set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
-endif()
-run_cmake(AliasTargets)
-run_cmake_target(AliasTargets func func --config Release)
-run_cmake_target(AliasTargets lib-local lib-local --config Release)
-run_cmake_target(AliasTargets main-local main-local --config Release)
-run_cmake_target(AliasTargets lib-global lib-global --config Release)
-run_cmake_target(AliasTargets main-global main-global --config Release)
-unset(RunCMake_TEST_OPTIONS)
-unset(RunCMake_TEST_OUTPUT_MERGE)
-
-run_cmake(genex_LINK_LANGUAGE-bad-usage)
-
-if (RunCMake_GENERATOR MATCHES "Makefiles|Ninja|Visual Studio|Xcode|Watcom WMake")
-
-  run_cmake(genex_LINK_LANGUAGE-bad-mix-lang)
-  run_cmake(genex_LINK_LANG_AND_ID-bad-mix-lang)
-
-  set(RunCMake_TEST_OUTPUT_MERGE TRUE)
-  if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
-    set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
-  endif()
-
-  run_cmake(genex_LINK_LANGUAGE)
-
-  run_cmake_target(genex_LINK_LANGUAGE lib LinkLibraries_lib --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE lib2 LinkLibraries_lib2 --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE lib3 LinkLibraries_lib3 --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE exe LinkLibraries_exe --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE C_import LinkLibraries_C_import --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE CXX_import LinkLibraries_CXX_import --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE C_interface LinkLibraries_C_interface --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE CXX_interface LinkLibraries_CXX_interface --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE C_interface2 LinkLibraries_C_interface2 --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE CXX_interface2 LinkLibraries_CXX_interface2 --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE C_static LinkLibraries_C_static --config Release)
-  run_cmake_target(genex_LINK_LANGUAGE CXX_static LinkLibraries_CXX_static --config Release)
-
-  run_cmake(genex_LINK_LANG_AND_ID)
-
-  run_cmake_target(genex_LINK_LANG_AND_ID lib LinkLibraries_lib --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID lib2 LinkLibraries_lib2 --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID lib3 LinkLibraries_lib3 --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID exe LinkLibraries_exe --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID C_import LinkLibraries_C_import --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID CXX_import LinkLibraries_CXX_import --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID C_interface LinkLibraries_C_interface --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID CXX_interface LinkLibraries_CXX_interface --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID C_interface2 LinkLibraries_C_interface2 --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID CXX_interface2 LinkLibraries_CXX_interface2 --config Release)
-  run_cmake_target(genex_LINK_LANG_AND_ID CXX_static LinkLibraries_CXX_static --config Release)
-
-  unset(RunCMake_TEST_OPTIONS)
-  unset(RunCMake_TEST_OUTPUT_MERGE)
-
-endif()
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang-result.txt b/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang-stderr.txt b/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang-stderr.txt
deleted file mode 100644
index 2ecdc0c..0000000
--- a/Tests/RunCMake/target_link_libraries/genex_LINK_LANG_AND_ID-bad-mix-lang-stderr.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-CMake Error: Evaluation of \$<LINK_LANGUAGE:...> or \$<LINK_LAND_AND_ID:...> changes
-the linker language for target "LinkLibraries_bad_mix_languages" \(from 'C' to 'CXX'\) which is invalid.