summaryrefslogtreecommitdiffstats
path: root/Tests/RunCMake
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/RunCMake')
-rw-r--r--Tests/RunCMake/Autogen/RunCMakeTest.cmake487
-rw-r--r--Tests/RunCMake/Autogen_1/AutogenSkipLinting-build-stderr.txt (renamed from Tests/RunCMake/Autogen/AutogenSkipLinting-build-stderr.txt)0
-rw-r--r--Tests/RunCMake/Autogen_1/AutogenSkipLinting.cmake (renamed from Tests/RunCMake/Autogen/AutogenSkipLinting.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeCommon.cmake (renamed from Tests/RunCMake/Autogen/AutogenUseSystemIncludeCommon.cmake)2
-rw-r--r--Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOff.cmake (renamed from Tests/RunCMake/Autogen/AutogenUseSystemIncludeOff.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOn.cmake (renamed from Tests/RunCMake/Autogen/AutogenUseSystemIncludeOn.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMP0111-imported-target-full.cmake (renamed from Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMP0111-imported-target-implib-only.cmake (renamed from Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMP0111-imported-target-libname.cmake (renamed from Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMP0111-imported-target-prelude.cmake (renamed from Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMP0151-common.cmake (renamed from Tests/RunCMake/Autogen/CMP0151-common.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMP0151-new.cmake (renamed from Tests/RunCMake/Autogen/CMP0151-new.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMP0151-old.cmake (renamed from Tests/RunCMake/Autogen/CMP0151-old.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/CMakeLists.txt (renamed from Tests/RunCMake/Autogen/CMakeLists.txt)0
-rw-r--r--Tests/RunCMake/Autogen_1/Inspect.cmake (renamed from Tests/RunCMake/Autogen/Inspect.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/MocGeneratedFile.cmake (renamed from Tests/RunCMake/Autogen/MocGeneratedFile.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/MocPredefs-build-stderr.txt (renamed from Tests/RunCMake/Autogen/MocPredefs-build-stderr.txt)0
-rw-r--r--Tests/RunCMake/Autogen_1/MocPredefs-check.cxx (renamed from Tests/RunCMake/Autogen/MocPredefs-check.cxx)0
-rw-r--r--Tests/RunCMake/Autogen_1/MocPredefs-prefix.cmake (renamed from Tests/RunCMake/Autogen/MocPredefs-prefix.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/MocPredefs.cmake (renamed from Tests/RunCMake/Autogen/MocPredefs.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/MocPredefs.cxx (renamed from Tests/RunCMake/Autogen/MocPredefs.cxx)0
-rw-r--r--Tests/RunCMake/Autogen_1/NoQt-stderr.txt (renamed from Tests/RunCMake/Autogen/NoQt-stderr.txt)0
-rw-r--r--Tests/RunCMake/Autogen_1/NoQt.cmake (renamed from Tests/RunCMake/Autogen/NoQt.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/QtInFunction.cmake (renamed from Tests/RunCMake/Autogen/QtInFunction.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/QtInFunctionNested-stderr.txt (renamed from Tests/RunCMake/Autogen/QtInFunctionNested-stderr.txt)0
-rw-r--r--Tests/RunCMake/Autogen_1/QtInFunctionNested.cmake (renamed from Tests/RunCMake/Autogen/QtInFunctionNested.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/QtInFunctionProperty.cmake (renamed from Tests/RunCMake/Autogen/QtInFunctionProperty.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_1/RunCMakeTest.cmake134
-rw-r--r--Tests/RunCMake/Autogen_1/SkipLinting.cxx (renamed from Tests/RunCMake/Autogen/SkipLinting.cxx)0
-rw-r--r--Tests/RunCMake/Autogen_1/SkipLinting.h (renamed from Tests/RunCMake/Autogen/SkipLinting.h)0
-rw-r--r--Tests/RunCMake/Autogen_1/empty.cpp (renamed from Tests/RunCMake/Autogen/empty.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_2/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/Autogen_2/MyWindow.cpp (renamed from Tests/RunCMake/Autogen/MyWindow.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_2/MyWindow.h (renamed from Tests/RunCMake/Autogen/MyWindow.h)0
-rw-r--r--Tests/RunCMake/Autogen_2/MyWindow.ui (renamed from Tests/RunCMake/Autogen/MyWindow.ui)0
-rw-r--r--Tests/RunCMake/Autogen_2/QtAutoMocDeps-stderr.txt (renamed from Tests/RunCMake/Autogen/QtAutoMocDeps-stderr.txt)0
-rw-r--r--Tests/RunCMake/Autogen_2/QtAutoMocDeps.cmake (renamed from Tests/RunCMake/Autogen/QtAutoMocDeps.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_2/QtSubDir1/CMakeLists.txt (renamed from Tests/RunCMake/Autogen/QtSubDir1/CMakeLists.txt)0
-rw-r--r--Tests/RunCMake/Autogen_2/QtSubDir2/CMakeLists.txt (renamed from Tests/RunCMake/Autogen/QtSubDir2/CMakeLists.txt)0
-rw-r--r--Tests/RunCMake/Autogen_2/QtSubDir3/CMakeLists.txt (renamed from Tests/RunCMake/Autogen/QtSubDir3/CMakeLists.txt)0
-rw-r--r--Tests/RunCMake/Autogen_2/RunCMakeTest.cmake87
-rw-r--r--Tests/RunCMake/Autogen_2/app.cpp (renamed from Tests/RunCMake/Autogen/app.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_2/app_qt.cpp (renamed from Tests/RunCMake/Autogen/app_qt.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_2/simple_lib.cpp (renamed from Tests/RunCMake/Autogen/simple_lib.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_3/AutoMocExecutableConfig.cmake (renamed from Tests/RunCMake/Autogen/AutoMocExecutableConfig.cmake)6
-rw-r--r--Tests/RunCMake/Autogen_3/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/Autogen_3/MocExample.cmake (renamed from Tests/RunCMake/Autogen/MocExample.cmake)2
-rw-r--r--Tests/RunCMake/Autogen_3/RunCMakeTest.cmake11
-rw-r--r--Tests/RunCMake/Autogen_4/AutoUicExecutableConfig.cmake (renamed from Tests/RunCMake/Autogen/AutoUicExecutableConfig.cmake)6
-rw-r--r--Tests/RunCMake/Autogen_4/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/Autogen_4/RunCMakeTest.cmake11
-rw-r--r--Tests/RunCMake/Autogen_4/UicExample.cmake (renamed from Tests/RunCMake/Autogen/UicExample.cmake)0
-rw-r--r--Tests/RunCMake/Autogen_4/example_ui.cpp (renamed from Tests/RunCMake/Autogen/example_ui.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_4/example_ui.h (renamed from Tests/RunCMake/Autogen/example_ui.h)0
-rw-r--r--Tests/RunCMake/Autogen_4/uiA.ui (renamed from Tests/RunCMake/Autogen/uiA.ui)0
-rw-r--r--Tests/RunCMake/Autogen_5/AutoRccExecutableConfig.cmake (renamed from Tests/RunCMake/Autogen/AutoRccExecutableConfig.cmake)6
-rw-r--r--Tests/RunCMake/Autogen_5/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/Autogen_5/RccExample.cmake (renamed from Tests/RunCMake/Autogen/RccExample.cmake)2
-rw-r--r--Tests/RunCMake/Autogen_5/RunCMakeTest.cmake31
-rw-r--r--Tests/RunCMake/Autogen_5/data.qrc (renamed from Tests/RunCMake/Autogen/data.qrc)0
-rw-r--r--Tests/RunCMake/Autogen_6/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/Autogen_6/RunCMakeTest.cmake70
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/CMakeLists.txt25
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/main.cpp11
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.cpp25
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.h22
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.ui33
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.cpp22
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.h23
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.ui52
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.cpp22
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.h24
-rw-r--r--Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.ui45
-rw-r--r--Tests/RunCMake/Autogen_common/example.cpp (renamed from Tests/RunCMake/Autogen/example.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_common/example.h (renamed from Tests/RunCMake/Autogen/example.h)0
-rw-r--r--Tests/RunCMake/Autogen_common/exe_common.h (renamed from Tests/RunCMake/Autogen/exe_common.h)0
-rw-r--r--Tests/RunCMake/Autogen_common/exe_debug.cpp (renamed from Tests/RunCMake/Autogen/exe_debug.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_common/exe_release.cpp (renamed from Tests/RunCMake/Autogen/exe_release.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_common/exe_relwithdebinfo.cpp (renamed from Tests/RunCMake/Autogen/exe_relwithdebinfo.cpp)0
-rw-r--r--Tests/RunCMake/Autogen_common/utils.cmake257
-rw-r--r--Tests/RunCMake/BuildDepends/RunCMakeTest.cmake5
-rw-r--r--Tests/RunCMake/CMP0129/C-NEW.cmake2
-rw-r--r--Tests/RunCMake/CMP0129/C-OLD-stderr.txt10
-rw-r--r--Tests/RunCMake/CMP0129/C-OLD.cmake2
-rw-r--r--Tests/RunCMake/CMP0129/C-WARN.cmake1
-rw-r--r--Tests/RunCMake/CMP0129/C-common.cmake (renamed from Tests/RunCMake/CMP0129/C.cmake)4
-rw-r--r--Tests/RunCMake/CMP0129/CMakeLists.txt2
-rw-r--r--Tests/RunCMake/CMP0129/CXX-NEW.cmake2
-rw-r--r--Tests/RunCMake/CMP0129/CXX-OLD-stderr.txt10
-rw-r--r--Tests/RunCMake/CMP0129/CXX-OLD.cmake2
-rw-r--r--Tests/RunCMake/CMP0129/CXX-WARN.cmake1
-rw-r--r--Tests/RunCMake/CMP0129/CXX-common.cmake (renamed from Tests/RunCMake/CMP0129/CXX.cmake)4
-rw-r--r--Tests/RunCMake/CMP0129/Fortran-NEW.cmake2
-rw-r--r--Tests/RunCMake/CMP0129/Fortran-OLD-stderr.txt10
-rw-r--r--Tests/RunCMake/CMP0129/Fortran-OLD.cmake2
-rw-r--r--Tests/RunCMake/CMP0129/Fortran-WARN.cmake1
-rw-r--r--Tests/RunCMake/CMP0129/Fortran-common.cmake4
-rw-r--r--Tests/RunCMake/CMP0129/Fortran.cmake15
-rw-r--r--Tests/RunCMake/CMP0129/RunCMakeTest.cmake16
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-NEW-result.txt (renamed from Tests/RunCMake/file/MAKE_DIRECTORY-fail-result.txt)0
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-NEW-stderr.txt4
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-NEW.cmake6
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-OLD-result.txt1
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-OLD-stderr.txt4
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-OLD.cmake9
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-WARN-stderr.txt9
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-WARN.cmake6
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-codegen-build-result.txt1
-rw-r--r--Tests/RunCMake/CMP0171/CMP0171-codegen.cmake (renamed from Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-result.txt)0
-rw-r--r--Tests/RunCMake/CMP0171/CMakeLists.txt6
-rw-r--r--Tests/RunCMake/CMP0171/RunCMakeTest.cmake18
-rw-r--r--Tests/RunCMake/CMakeLists.txt73
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValid-result.txt1
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValid.cmake0
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValid.json.in14
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValidFull-result.txt1
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValidFull.cmake0
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValidFull.json.in179
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValidOldSchema-result.txt1
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt2
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValidOldSchema.cmake0
-rw-r--r--Tests/RunCMake/CMakePresets/CommentValidOldSchema.json.in14
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValid-result.txt1
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValid-stdout.txt2
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValid.cmake0
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValid.json.in11
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-result.txt1
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-stderr.txt2
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.cmake0
-rw-r--r--Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.json.in11
-rw-r--r--Tests/RunCMake/CMakePresets/NoCommentValid-result.txt1
-rw-r--r--Tests/RunCMake/CMakePresets/NoCommentValid.cmake0
-rw-r--r--Tests/RunCMake/CMakePresets/NoCommentValid.json.in10
-rw-r--r--Tests/RunCMake/CMakePresets/NoGraphvizValid-result.txt1
-rw-r--r--Tests/RunCMake/CMakePresets/NoGraphvizValid.cmake0
-rw-r--r--Tests/RunCMake/CMakePresets/NoGraphvizValid.json.in10
-rw-r--r--Tests/RunCMake/CMakePresets/RunCMakeTest.cmake11
-rw-r--r--Tests/RunCMake/CPack/README.txt8
-rw-r--r--Tests/RunCMake/CPack/RunCMakeTest.cmake1
-rw-r--r--Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt1
-rw-r--r--Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake5
-rw-r--r--Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake4
-rw-r--r--Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake7
-rw-r--r--Tests/RunCMake/CPackConfig/CMP0172-NEW-check.cmake2
-rw-r--r--Tests/RunCMake/CPackConfig/CMP0172-NEW.cmake1
-rw-r--r--Tests/RunCMake/CPackConfig/CMP0172-OLD-check.cmake2
-rw-r--r--Tests/RunCMake/CPackConfig/CMP0172-OLD.cmake2
-rw-r--r--Tests/RunCMake/CPackConfig/CMP0172-WARN-check.cmake2
-rw-r--r--Tests/RunCMake/CPackConfig/CMP0172-WARN-stderr.txt12
-rw-r--r--Tests/RunCMake/CPackConfig/CMP0172-WARN.cmake1
-rw-r--r--Tests/RunCMake/CPackConfig/RunCMakeTest.cmake3
-rw-r--r--Tests/RunCMake/CTestCommandLine/FailureLabels-result.txt1
-rw-r--r--Tests/RunCMake/CTestCommandLine/FailureLabels-stderr.txt1
-rw-r--r--Tests/RunCMake/CTestCommandLine/FailureLabels-stdout.txt4
-rw-r--r--Tests/RunCMake/CTestCommandLine/PrintLabels-stdout.txt6
-rw-r--r--Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake30
-rw-r--r--Tests/RunCMake/Codegen/CMakeLists.txt7
-rw-r--r--Tests/RunCMake/Codegen/RunCMakeTest.cmake33
-rw-r--r--Tests/RunCMake/Codegen/add-custom-command-depends-build-check.cmake5
-rw-r--r--Tests/RunCMake/Codegen/add-custom-command-depends.cmake16
-rw-r--r--Tests/RunCMake/Codegen/add-dependencies-build-check.cmake5
-rw-r--r--Tests/RunCMake/Codegen/add-dependencies.cmake18
-rw-r--r--Tests/RunCMake/Codegen/append-implicit-depends-result.txt1
-rw-r--r--Tests/RunCMake/Codegen/append-implicit-depends-stderr.txt2
-rw-r--r--Tests/RunCMake/Codegen/append-implicit-depends.cmake19
-rw-r--r--Tests/RunCMake/Codegen/byproducts-build-check.cmake5
-rw-r--r--Tests/RunCMake/Codegen/byproducts.cmake19
-rw-r--r--Tests/RunCMake/Codegen/error.c1
-rw-r--r--Tests/RunCMake/Codegen/exclude-from-all.cmake11
-rw-r--r--Tests/RunCMake/Codegen/generated.h.in1
-rw-r--r--Tests/RunCMake/Codegen/implicit-depends-append-codegen-result.txt1
-rw-r--r--Tests/RunCMake/Codegen/implicit-depends-append-codegen-stderr.txt4
-rw-r--r--Tests/RunCMake/Codegen/implicit-depends-append-codegen.cmake18
-rw-r--r--Tests/RunCMake/Codegen/implicit-depends-result.txt1
-rw-r--r--Tests/RunCMake/Codegen/implicit-depends-stderr.txt4
-rw-r--r--Tests/RunCMake/Codegen/implicit-depends.cmake11
-rw-r--r--Tests/RunCMake/Codegen/main.c (renamed from Tests/RunCMake/Autogen/exe.cpp)2
-rw-r--r--Tests/RunCMake/Codegen/min-graph-1-build-check.cmake13
-rw-r--r--Tests/RunCMake/Codegen/min-graph-1.cmake26
-rw-r--r--Tests/RunCMake/Codegen/min-graph-2-build-check.cmake5
-rw-r--r--Tests/RunCMake/Codegen/min-graph-2.cmake18
-rw-r--r--Tests/RunCMake/Codegen/min-graph-3-build-check.cmake5
-rw-r--r--Tests/RunCMake/Codegen/min-graph-3.cmake12
-rw-r--r--Tests/RunCMake/Codegen/no-codegen-check.cmake5
-rw-r--r--Tests/RunCMake/Codegen/no-codegen.cmake6
-rw-r--r--Tests/RunCMake/Codegen/no-output-result.txt1
-rw-r--r--Tests/RunCMake/Codegen/no-output-stderr.txt4
-rw-r--r--Tests/RunCMake/Codegen/no-output.cmake11
-rw-r--r--Tests/RunCMake/CommandLine/RunCMakeTest.cmake24
-rw-r--r--Tests/RunCMake/CommandLine/list-cache-LR-stdout.txt3
-rw-r--r--Tests/RunCMake/CommandLine/list-cache-LRA-stdout.txt4
-rw-r--r--Tests/RunCMake/CommandLine/list-cache-LRAH-stdout.txt9
-rw-r--r--Tests/RunCMake/CommandLine/list-cache-LRH-stdout.txt6
-rw-r--r--Tests/RunCMake/CommandLine/list-cache.cmake6
-rw-r--r--Tests/RunCMake/CommandLine/print-config-dir-apple-stdout.txt1
-rw-r--r--Tests/RunCMake/CommandLine/print-config-dir-env-stdout.txt1
-rw-r--r--Tests/RunCMake/CommandLine/print-config-dir-stdout.txt1
-rw-r--r--Tests/RunCMake/CommandLine/print-config-dir-win-stdout.txt1
-rw-r--r--Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake2
-rw-r--r--Tests/RunCMake/DependencyGraph/mylib.f901
-rw-r--r--Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake24
-rw-r--r--Tests/RunCMake/Framework/FrameworkLayout.cmake4
-rw-r--r--Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake20
-rw-r--r--Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake32
-rw-r--r--Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake32
-rw-r--r--Tests/RunCMake/InstallParallel/RunCMakeTest.cmake56
-rw-r--r--Tests/RunCMake/InstallParallel/check-manifest.cmake10
-rw-r--r--Tests/RunCMake/InstallParallel/check-num-installs.cmake7
-rw-r--r--Tests/RunCMake/InstallParallel/check-parallel.cmake15
-rw-r--r--Tests/RunCMake/InstallParallel/check-single.cmake5
-rw-r--r--Tests/RunCMake/InstallParallel/install.cmake2
-rw-r--r--Tests/RunCMake/InstallParallel/ninja-no-parallel-install-stdout.txt12
-rw-r--r--Tests/RunCMake/InstallParallel/ninja-parallel-install-stdout.txt25
-rw-r--r--Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt5
-rw-r--r--Tests/RunCMake/InstallParallel/no-parallel-install-stdout.txt12
-rw-r--r--Tests/RunCMake/InstallParallel/out-of-date-json-install-stdout.txt12
-rw-r--r--Tests/RunCMake/InstallParallel/parallel-install-stdout.txt45
-rw-r--r--Tests/RunCMake/InstallParallel/read-ninja-install.cmake4
-rw-r--r--Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt2
-rw-r--r--Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt2
-rw-r--r--Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt2
-rw-r--r--Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt2
-rw-r--r--Tests/RunCMake/Ninja/RunCMakeTest.cmake5
-rw-r--r--Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake2
-rw-r--r--Tests/RunCMake/ParseImplicitData/linux-Fortran-GNU-13.3.0-static-libquadmath.input80
-rw-r--r--Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake1
-rw-r--r--Tests/RunCMake/ParseImplicitIncludeInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output1
-rw-r--r--Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake1
-rw-r--r--Tests/RunCMake/ParseImplicitLinkInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output4
-rw-r--r--Tests/RunCMake/README.rst4
-rw-r--r--Tests/RunCMake/VS10Project/RunCMakeTest.cmake1
-rw-r--r--Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake24
-rw-r--r--Tests/RunCMake/VS10Project/VsFrameworkReference.cmake8
-rw-r--r--Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake14
-rw-r--r--Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-build-stdout.txt1
-rw-r--r--Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-stderr.txt7
-rw-r--r--Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/RunCMakeTest.cmake43
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-framework-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-framework-link-phase-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-library-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-library-link-phase-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-target-framework-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-target-framework-link-phase-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-target-library-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-executable-target-library-link-phase-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-framework-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/create-library-ios-catalyst.cmake2
-rw-r--r--Tests/RunCMake/XcFramework/export-common.cmake1
-rw-r--r--Tests/RunCMake/XcFramework/export-ios-catalyst.cmake4
-rw-r--r--Tests/RunCMake/cmake_pkg_config/CMakeLists.txt5
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/a.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/one.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/onedot.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/pseudo-empty.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/tilde.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/zeroone.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/all-extract-fields.pc15
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/bar.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/baz.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-bothcase-f.pc6
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-lowercase-f.pc5
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-uppercase-f.pc5
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/empty-key.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/foo.pc3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/invalid.pc4
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/no-description.pc2
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/no-name.pc2
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/no-version.pc2
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/qux-uninstalled.pc5
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/qux.pc5
-rw-r--r--Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc6
-rw-r--r--Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake18
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestEnv-stderr.txt15
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestEnv.cmake75
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestExtract-stderr.txt21
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestExtract.cmake29
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestMangle-stderr.txt8
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestMangle.cmake22
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestQuiet.cmake29
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestRequired-result.txt1
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestRequired-stderr.txt4
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestRequired.cmake9
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestReroot-stderr.txt4
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestReroot.cmake10
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestStrictness-BEST_EFFORT-stderr.txt3
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestStrictness-PERMISSIVE-stderr.txt31
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestStrictness-STRICT-stderr.txt38
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestStrictness.cmake51
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestUninstalled-stderr.txt2
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestUninstalled.cmake10
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestVersion-stderr.txt103
-rw-r--r--Tests/RunCMake/cmake_pkg_config/TestVersion.cmake65
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-stdout.txt3
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL.cmake9
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS-stdout.txt1
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS.cmake7
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-stdout.txt3
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL.cmake3
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS-stdout.txt1
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS.cmake2
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-result.txt1
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-stderr.txt9
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL.cmake (renamed from Tests/RunCMake/file/MAKE_DIRECTORY-fail.cmake)0
-rw-r--r--Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake7
-rw-r--r--Tests/RunCMake/file-RPATH/Common.cmake19
-rw-r--r--Tests/RunCMake/file-RPATH/ELF.cmake5
-rwxr-xr-xTests/RunCMake/file-RPATH/ELF/elf64lsb-static.binbin0 -> 4320 bytes
-rw-r--r--Tests/RunCMake/file-RPATH/XCOFF.cmake2
-rw-r--r--Tests/RunCMake/file/MAKE_DIRECTORY-fail-stderr.txt9
-rw-r--r--Tests/RunCMake/file/RunCMakeTest.cmake2
312 files changed, 2982 insertions, 675 deletions
diff --git a/Tests/RunCMake/Autogen/RunCMakeTest.cmake b/Tests/RunCMake/Autogen/RunCMakeTest.cmake
deleted file mode 100644
index 0036551..0000000
--- a/Tests/RunCMake/Autogen/RunCMakeTest.cmake
+++ /dev/null
@@ -1,487 +0,0 @@
-include(RunCMake)
-
-run_cmake(NoQt)
-if (DEFINED with_qt_version)
- set(RunCMake_TEST_OPTIONS
- -Dwith_qt_version=${with_qt_version}
- "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
- "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
- )
-
- run_cmake(QtInFunction)
- run_cmake(QtInFunctionNested)
- run_cmake(QtInFunctionProperty)
-
- run_cmake(CMP0111-imported-target-full)
- run_cmake(CMP0111-imported-target-libname)
- run_cmake(CMP0111-imported-target-implib-only)
-
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocPredefs-build)
- run_cmake(MocPredefs)
- set(RunCMake_TEST_NO_CLEAN 1)
- run_cmake_command(MocPredefs-build ${CMAKE_COMMAND} --build . --config Debug)
- endblock()
-
- # Detect information from the toolchain:
- # - CMAKE_INCLUDE_FLAG_CXX
- # - CMAKE_INCLUDE_SYSTEM_FLAG_CXX
- run_cmake(Inspect)
- include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
-
- if(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
- if(RunCMake_GENERATOR MATCHES "Visual Studio")
- string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
- else()
- set(test_expect_stdout "-*${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
- endif()
- string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
- if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
- string(APPEND test_expect_stdout "_Debug")
- endif()
-
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-new-build)
- run_cmake_with_options(CMP0151-new ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
- message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")
- run_cmake_command(CMP0151-new-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
- endblock()
-
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOn-build)
- run_cmake_with_options(AutogenUseSystemIncludeOn ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
- message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")
- run_cmake_command(AutogenUseSystemIncludeOn ${CMAKE_COMMAND} --build . --config Debug --verbose)
- endblock()
- endif()
-
- if(CMAKE_INCLUDE_FLAG_CXX)
- if(RunCMake_GENERATOR MATCHES "Visual Studio")
- string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_FLAG_CXX}")
- else()
- set(test_expect_stdout "-*${CMAKE_INCLUDE_FLAG_CXX}")
- endif()
- string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
- if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
- string(APPEND test_expect_stdout "_Debug")
- endif()
-
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-old-build)
- run_cmake_with_options(CMP0151-old ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=OLD)
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
- message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")
- run_cmake_command(CMP0151-old-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
- endblock()
-
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOff-build)
- run_cmake_with_options(AutogenUseSystemIncludeOff ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
- message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}")
- run_cmake_command(AutogenUseSystemIncludeOff ${CMAKE_COMMAND} --build . --config Debug --verbose)
- endblock()
-
- if(RunCMake_GENERATOR MATCHES "Make|Ninja")
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenSkipLinting-build)
- list(APPEND RunCMake_TEST_OPTIONS
- "-DPSEUDO_CPPCHECK=${PSEUDO_CPPCHECK}"
- "-DPSEUDO_CPPLINT=${PSEUDO_CPPLINT}"
- "-DPSEUDO_IWYU=${PSEUDO_IWYU}"
- "-DPSEUDO_TIDY=${PSEUDO_TIDY}")
-
- run_cmake(AutogenSkipLinting)
- set(RunCMake_TEST_NO_CLEAN 1)
- run_cmake_command(AutogenSkipLinting-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
- endblock()
- endif()
- endif()
-
- if(RunCMake_GENERATOR_IS_MULTI_CONFIG AND NOT RunCMake_GENERATOR MATCHES "Xcode")
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-build)
- run_cmake(MocGeneratedFile)
- set(RunCMake_TEST_NO_CLEAN 1)
- run_cmake_command(MocGeneratedFile-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
- endblock()
- if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config")
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-cross-config-build)
- list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_CROSS_CONFIGS=all)
- run_cmake(MocGeneratedFile)
- set(RunCMake_TEST_NO_CLEAN 1)
- run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Release --target libgen:Debug)
- run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Debug --target libgen:Release)
- endblock()
- endif()
- endif()
-
- if(RunCMake_GENERATOR MATCHES "Make|Ninja")
- block()
- if(QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0)
- if (RunCMake_GENERATOR MATCHES "Ninja Multi-Config")
- set(config_list Debug Release RelWithDebInfo)
- set(use_better_graph_list ON OFF)
- else()
- set(config_list single-config)
- set(use_better_graph_list OFF)
- endif()
-
- foreach(use_better_graph IN ITEMS ${use_better_graph_list})
- foreach(config IN ITEMS ${config_list})
- block()
- if (config STREQUAL "single-config")
- set(config_suffix "")
- else()
- set(config_path "_${config}")
- if (use_better_graph)
- set(config_suffix "_${config}")
- endif()
- endif()
-
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtAutoMocDeps${config_path}-build)
- run_cmake_with_options(QtAutoMocDeps ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=${use_better_graph})
- set(RunCMake_TEST_NO_CLEAN 1)
- # Build the project.
- if (config STREQUAL "single-config")
- set(config_param "")
- else()
- set(config_param "--config ${config}")
- endif()
- run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param})
- # Touch just the library source file, which shouldn't cause a rerun of AUTOMOC
- # for app_with_qt target.
- file(TOUCH "${RunCMake_SOURCE_DIR}/simple_lib.cpp")
- set(RunCMake_TEST_NOT_EXPECT_stdout "Automatic MOC for target app_with_qt|\
-Automatic MOC for target sub_exe_1|\
-Automatic MOC for target sub_exe_2")
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't execute AUTOMOC for 'app_with_qt', 'sub_exe_1' and 'sub_exe_2'")
- # Build and assert that AUTOMOC was not run for app_with_qt, sub_exe_1 and sub_exe_2.
- run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param})
- unset(RunCMake_TEST_VARIANT_DESCRIPTION)
- unset(RunCMake_TEST_NOT_EXPECT_stdout)
-
- macro(check_file_exists file)
- if (EXISTS "${file}")
- set(check_result "PASSED")
- set(message_type "STATUS")
- else()
- set(check_result "FAILED")
- set(message_type "FATAL_ERROR")
- endif()
-
- message(${message_type} "QtAutoMocDeps-build-\"${file}\" was generated - ${check_result}")
- endmacro()
-
- check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/deps${config_suffix}")
- check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/deps${config_suffix}")
- check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/deps${config_suffix}")
-
- check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/timestamp${config_suffix}")
- check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/timestamp${config_suffix}")
- check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/timestamp${config_suffix}")
-
- # Touch a header file to make sure an automoc dependency cycle is not introduced.
- file(TOUCH "${RunCMake_SOURCE_DIR}/MyWindow.h")
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-First build after touch to detect dependency cycle")
- run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose)
- # Need to run a second time to hit the dependency cycle.
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't hit dependency cycle")
- run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose)
- endblock()
- endforeach()
- endforeach()
- endif()
- endblock()
- endif()
-
- function(run_make_program dir)
- execute_process(
- COMMAND "${RunCMake_MAKE_PROGRAM}" ${ARGN}
- WORKING_DIRECTORY "${dir}"
- OUTPUT_VARIABLE make_program_stdout
- ERROR_VARIABLE make_program_stderr
- RESULT_VARIABLE make_program_result
- )
- if (NOT DEFINED RunMakeProgram_expected_result)
- set(RunMakeProgram_expected_result 0)
- endif()
- if(NOT "${make_program_result}" MATCHES "${RunMakeProgram_expected_result}")
- message(STATUS "
-============ beginning of ${RunCMake_MAKE_PROGRAM}'s stdout ============
-${make_program_stdout}
-=============== end of ${RunCMake_MAKE_PROGRAM}'s stdout ===============
-")
- message(STATUS "
-============ beginning of ${RunCMake_MAKE_PROGRAM}'s stderr ============
-${make_program_stderr}
-=============== end of ${RunCMake_MAKE_PROGRAM}'s stderr ===============
-")
- message(FATAL_ERROR
- "top ${RunCMake_MAKE_PROGRAM} build failed exited with status ${make_program_result}")
- endif()
- set(make_program_stdout "${make_program_stdout}" PARENT_SCOPE)
- endfunction(run_make_program)
-
- function(count_substring STRING SUBSTRING COUNT_VAR)
- string(LENGTH "${STRING}" STRING_LENGTH)
- string(LENGTH "${SUBSTRING}" SUBSTRING_LENGTH)
- if (SUBSTRING_LENGTH EQUAL 0)
- message(FATAL_ERROR "SUBSTRING_LENGTH is 0")
- endif()
-
- if (STRING_LENGTH EQUAL 0)
- message(FATAL_ERROR "STRING_LENGTH is 0")
- endif()
-
- if (STRING_LENGTH LESS SUBSTRING_LENGTH)
- message(FATAL_ERROR "STRING_LENGTH is less than SUBSTRING_LENGTH")
- endif()
-
- set(COUNT 0)
- string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START)
- while(SUBSTRING_START GREATER_EQUAL 0)
- math(EXPR COUNT "${COUNT} + 1")
- math(EXPR SUBSTRING_START "${SUBSTRING_START} + ${SUBSTRING_LENGTH}")
- string(SUBSTRING "${STRING}" ${SUBSTRING_START} -1 STRING)
- string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START)
- endwhile()
-
- set(${COUNT_VAR} ${COUNT} PARENT_SCOPE)
- endfunction()
-
- function(expect_only_once make_program_stdout expected_output test_name)
- count_substring("${make_program_stdout}" "${expected_output}" count)
- if(NOT count EQUAL 1)
- message(STATUS "${test_name}-expect_only_once - FAILED")
- message(FATAL_ERROR "Expected to find ${expected_output} exactly once in ${make_program_stdout} but found ${count} occurrences of ${expected_output}")
- else()
- message(STATUS "${test_name}-expect_only_once - PASSED")
- endif()
- endfunction()
-
- function(expect_n_times string_to_check expected_output expected_count test_name)
- count_substring("${string_to_check}" "${expected_output}" count)
- if(NOT count EQUAL ${expected_count})
- message(STATUS "${test_name}-expect_${expected_count}_times - FAILED")
- message(FATAL_ERROR "Expected to find ${expected_output} exactly ${expected_count} times in ${string_to_check} but found ${count} occurrences of ${expected_output}")
- else()
- message(STATUS "${test_name}-expect_${expected_count}_times - PASSED")
- endif()
- endfunction()
-
- function(not_expect make_program_stdout unexpected_output test_name)
- count_substring("${make_program_stdout}" "${unexpected_output}" count)
- if(NOT count EQUAL 0)
- message(STATUS "${test_name}-not_expect - FAILED")
- message(FATAL_ERROR "Expected to find ${unexpected_output} exactly 0 times in ${make_program_stdout} but found ${count} occurrences of ${unexpected_output}")
- else()
- message(STATUS "${test_name}-not_expect - PASSED")
- endif()
- endfunction()
-
- if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0)
- foreach(exe IN ITEMS Moc Uic Rcc)
- if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config")
- block()
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure")
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-multi-config-build)
- run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
- unset(RunCMake_TEST_VARIANT_DESCRIPTION)
- set(RunCMake_TEST_NO_CLEAN 1)
- foreach(config IN ITEMS Debug Release RelWithDebInfo)
- block()
- set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*")
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_running_exe_${config}")
- run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config})
- endblock()
- endforeach()
- set(RunCMake_TEST_EXPECT_stdout "ninja: no work to do")
- foreach(config IN ITEMS Debug Release RelWithDebInfo)
- block()
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_no_work_to_do")
- run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config})
- endblock()
- endforeach()
- endblock()
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build)
- run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
- foreach(config IN ITEMS Debug Release RelWithDebInfo)
- block()
- run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${config}.ninja)
-
- set(expected_output "running_exe_${config}")
- expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}")
-
- foreach(sub_config IN ITEMS Debug Release RelWithDebInfo)
- if(NOT sub_config STREQUAL config)
- set(unexpected_output "running_exe_${sub_config}")
- not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig-${config}-${unexpected_output}")
- endif()
- endforeach()
-
- if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
- set(expected_output "cmake_autogen")
- else()
- set(expected_output "cmake_autorcc")
- endif()
- expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}")
- endblock()
- endforeach()
- endblock()
- block()
- foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo)
- foreach(target_config IN ITEMS Debug Release RelWithDebInfo)
- block()
- set(TEST_SUFFIX "-CrossConfig-${ninja_config}-${target_config}")
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build)
- set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX})
- run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=${ninja_config} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
- unset(RunCMake_TEST_VARIANT_DESCRIPTION)
-
- run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja dummy:${target_config})
-
- set(expected_output "running_exe_${ninja_config}")
- expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}")
-
- foreach(sub_config IN ITEMS Debug Release RelWithDebInfo)
- if(NOT sub_config STREQUAL ninja_config)
- set(unexpected_output "running_exe_${sub_config}")
- not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${unexpected_output}")
- endif()
- endforeach()
-
- if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
- set(expected_output "cmake_autogen")
- else()
- set(expected_output "cmake_autorcc")
- endif()
- expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}")
- endblock()
- endforeach()
- endforeach()
- endblock()
- block()
- foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo)
- set(TEST_SUFFIX "-CrossConfig-${ninja_config}-all-all")
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build)
- set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX})
- run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
- unset(RunCMake_TEST_VARIANT_DESCRIPTION)
- run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja all:all)
- endforeach()
- endblock()
- elseif (RunCMake_GENERATOR MATCHES "Ninja|Make")
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build)
- foreach(config IN ITEMS Debug Release RelWithDebInfo)
- block()
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}")
- run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_BUILD_TYPE=${config} -DCMAKE_AUTOGEN_VERBOSE=ON)
- unset(RunCMake_TEST_VARIANT_DESCRIPTION)
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*")
- run_cmake_command(Auto${exe}ExecutableConfig-${config}-build ${CMAKE_COMMAND} --build .)
- endblock()
- endforeach()
- endblock()
- endif()
- endforeach()
- endif()
-
- # Visual Studio specific dependency tests
- if (RunCMake_GENERATOR MATCHES "Visual Studio")
- foreach(exe IN ITEMS Moc Uic Rcc)
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build)
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure")
- run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON)
- unset(RunCMake_TEST_VARIANT_DESCRIPTION)
- set(RunCMake_TEST_NO_CLEAN 1)
- foreach(config IN ITEMS Debug Release RelWithDebInfo)
- block()
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-first-build")
- run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config})
- endblock()
- endforeach()
- foreach(config IN ITEMS Debug Release RelWithDebInfo)
- block()
- if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
- set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}")
- set(not_expect_descripton "Auto${exe}")
- else ()
- set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}")
- set(not_expect_descripton "Auto${exe}")
- endif()
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-second-build-${config}_expect_no_${not_expect_descripton}")
- run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config})
- endblock()
- endforeach()
- endblock()
- endforeach()
- endif()
-
- if (RunCMake_GENERATOR MATCHES "Xcode")
- foreach(exe IN ITEMS Moc Uic Rcc)
- block()
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build)
- set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure")
- set(RunCMake_TEST_EXPECT_stderr ".*")
- run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON)
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_MAKE_PROGRAM ${CMAKE_COMMAND})
- run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config Debug)
- if (exe STREQUAL "Moc")
- set(expected_count 16)
- elseif (exe STREQUAL "Uic")
- set(expected_count 4)
- else()
- set(expected_count 12)
- endif()
- expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}")
- expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}")
-
- if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
- expect_n_times("${make_program_stdout}" "AutoGen:" 20 "${exe}Example-build-AutoGen:")
- endif()
-
- foreach(config IN ITEMS Debug Release RelWithDebInfo)
- block()
- run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config ${config})
- not_expect("${make_program_stdout}" "Auto${exe}" "${exe}Example-${config}_Auto${exe}")
- not_expect("${make_program_stdout}" "AutoGen:" "${exe}Example-${config}_AutoGen")
- endblock()
- endforeach()
- endblock()
- endforeach()
- endif()
-
- if (QtCore_VERSION VERSION_GREATER_EQUAL 6)
- if (RunCMake_GENERATOR MATCHES "Make|Ninja")
- foreach(value IN ITEMS ON OFF)
- block()
- set(RunCMake_TEST_BINARY_DIR
- ${RunCMake_BINARY_DIR}/RccNoZTSD-${value}-build)
- run_cmake_with_options(RccExample ${RunCMake_TEST_OPTIONS}
- -DCMAKE_AUTOGEN_VERBOSE=ON -DZSTD_VALUE=${value})
- if (value STREQUAL "OFF")
- set(RunCMake_TEST_EXPECT_stdout "--no-zstd")
- else()
- set(RunCMake_TEST_NOT_EXPECT_stdout "--no-zstd")
- endif()
- set(RunCMake_TEST_NO_CLEAN 1)
- run_cmake_command(RccNoZTSD-${value}-build ${CMAKE_COMMAND}
- --build . --config Debug)
- endblock()
- endforeach()
- endif()
- endif()
-endif ()
diff --git a/Tests/RunCMake/Autogen/AutogenSkipLinting-build-stderr.txt b/Tests/RunCMake/Autogen_1/AutogenSkipLinting-build-stderr.txt
index 8d98f9d..8d98f9d 100644
--- a/Tests/RunCMake/Autogen/AutogenSkipLinting-build-stderr.txt
+++ b/Tests/RunCMake/Autogen_1/AutogenSkipLinting-build-stderr.txt
diff --git a/Tests/RunCMake/Autogen/AutogenSkipLinting.cmake b/Tests/RunCMake/Autogen_1/AutogenSkipLinting.cmake
index 3ce2092..3ce2092 100644
--- a/Tests/RunCMake/Autogen/AutogenSkipLinting.cmake
+++ b/Tests/RunCMake/Autogen_1/AutogenSkipLinting.cmake
diff --git a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeCommon.cmake b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeCommon.cmake
index bbefd5f..e0f3ce8 100644
--- a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeCommon.cmake
+++ b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeCommon.cmake
@@ -2,8 +2,6 @@ enable_language(CXX)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui)
-set(CMAKE_AUTOMOC ON)
-
add_library(dummy SHARED empty.cpp)
target_link_libraries(dummy Qt${with_qt_version}::Core
Qt${with_qt_version}::Widgets
diff --git a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOff.cmake b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOff.cmake
index dfdbb98..dfdbb98 100644
--- a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOff.cmake
+++ b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOff.cmake
diff --git a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOn.cmake b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOn.cmake
index f556ed4..f556ed4 100644
--- a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOn.cmake
+++ b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOn.cmake
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-full.cmake
index 331da64..331da64 100644
--- a/Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake
+++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-full.cmake
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-implib-only.cmake
index 8640fdc..8640fdc 100644
--- a/Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake
+++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-implib-only.cmake
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-libname.cmake
index e1318c2..e1318c2 100644
--- a/Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake
+++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-libname.cmake
diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-prelude.cmake
index 6d26f99..6d26f99 100644
--- a/Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake
+++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-prelude.cmake
diff --git a/Tests/RunCMake/Autogen/CMP0151-common.cmake b/Tests/RunCMake/Autogen_1/CMP0151-common.cmake
index bbefd5f..bbefd5f 100644
--- a/Tests/RunCMake/Autogen/CMP0151-common.cmake
+++ b/Tests/RunCMake/Autogen_1/CMP0151-common.cmake
diff --git a/Tests/RunCMake/Autogen/CMP0151-new.cmake b/Tests/RunCMake/Autogen_1/CMP0151-new.cmake
index 9c77e58..9c77e58 100644
--- a/Tests/RunCMake/Autogen/CMP0151-new.cmake
+++ b/Tests/RunCMake/Autogen_1/CMP0151-new.cmake
diff --git a/Tests/RunCMake/Autogen/CMP0151-old.cmake b/Tests/RunCMake/Autogen_1/CMP0151-old.cmake
index 9c77e58..9c77e58 100644
--- a/Tests/RunCMake/Autogen/CMP0151-old.cmake
+++ b/Tests/RunCMake/Autogen_1/CMP0151-old.cmake
diff --git a/Tests/RunCMake/Autogen/CMakeLists.txt b/Tests/RunCMake/Autogen_1/CMakeLists.txt
index 2632ffa..2632ffa 100644
--- a/Tests/RunCMake/Autogen/CMakeLists.txt
+++ b/Tests/RunCMake/Autogen_1/CMakeLists.txt
diff --git a/Tests/RunCMake/Autogen/Inspect.cmake b/Tests/RunCMake/Autogen_1/Inspect.cmake
index d5dc4b4..d5dc4b4 100644
--- a/Tests/RunCMake/Autogen/Inspect.cmake
+++ b/Tests/RunCMake/Autogen_1/Inspect.cmake
diff --git a/Tests/RunCMake/Autogen/MocGeneratedFile.cmake b/Tests/RunCMake/Autogen_1/MocGeneratedFile.cmake
index 7bb55e9..7bb55e9 100644
--- a/Tests/RunCMake/Autogen/MocGeneratedFile.cmake
+++ b/Tests/RunCMake/Autogen_1/MocGeneratedFile.cmake
diff --git a/Tests/RunCMake/Autogen/MocPredefs-build-stderr.txt b/Tests/RunCMake/Autogen_1/MocPredefs-build-stderr.txt
index 8d98f9d..8d98f9d 100644
--- a/Tests/RunCMake/Autogen/MocPredefs-build-stderr.txt
+++ b/Tests/RunCMake/Autogen_1/MocPredefs-build-stderr.txt
diff --git a/Tests/RunCMake/Autogen/MocPredefs-check.cxx b/Tests/RunCMake/Autogen_1/MocPredefs-check.cxx
index 2b4791f..2b4791f 100644
--- a/Tests/RunCMake/Autogen/MocPredefs-check.cxx
+++ b/Tests/RunCMake/Autogen_1/MocPredefs-check.cxx
diff --git a/Tests/RunCMake/Autogen/MocPredefs-prefix.cmake b/Tests/RunCMake/Autogen_1/MocPredefs-prefix.cmake
index 460a05d..460a05d 100644
--- a/Tests/RunCMake/Autogen/MocPredefs-prefix.cmake
+++ b/Tests/RunCMake/Autogen_1/MocPredefs-prefix.cmake
diff --git a/Tests/RunCMake/Autogen/MocPredefs.cmake b/Tests/RunCMake/Autogen_1/MocPredefs.cmake
index 8307e04..8307e04 100644
--- a/Tests/RunCMake/Autogen/MocPredefs.cmake
+++ b/Tests/RunCMake/Autogen_1/MocPredefs.cmake
diff --git a/Tests/RunCMake/Autogen/MocPredefs.cxx b/Tests/RunCMake/Autogen_1/MocPredefs.cxx
index b27cec5..b27cec5 100644
--- a/Tests/RunCMake/Autogen/MocPredefs.cxx
+++ b/Tests/RunCMake/Autogen_1/MocPredefs.cxx
diff --git a/Tests/RunCMake/Autogen/NoQt-stderr.txt b/Tests/RunCMake/Autogen_1/NoQt-stderr.txt
index 1c6660a..1c6660a 100644
--- a/Tests/RunCMake/Autogen/NoQt-stderr.txt
+++ b/Tests/RunCMake/Autogen_1/NoQt-stderr.txt
diff --git a/Tests/RunCMake/Autogen/NoQt.cmake b/Tests/RunCMake/Autogen_1/NoQt.cmake
index b2d375a..b2d375a 100644
--- a/Tests/RunCMake/Autogen/NoQt.cmake
+++ b/Tests/RunCMake/Autogen_1/NoQt.cmake
diff --git a/Tests/RunCMake/Autogen/QtInFunction.cmake b/Tests/RunCMake/Autogen_1/QtInFunction.cmake
index 6c42cc2..6c42cc2 100644
--- a/Tests/RunCMake/Autogen/QtInFunction.cmake
+++ b/Tests/RunCMake/Autogen_1/QtInFunction.cmake
diff --git a/Tests/RunCMake/Autogen/QtInFunctionNested-stderr.txt b/Tests/RunCMake/Autogen_1/QtInFunctionNested-stderr.txt
index 1c6660a..1c6660a 100644
--- a/Tests/RunCMake/Autogen/QtInFunctionNested-stderr.txt
+++ b/Tests/RunCMake/Autogen_1/QtInFunctionNested-stderr.txt
diff --git a/Tests/RunCMake/Autogen/QtInFunctionNested.cmake b/Tests/RunCMake/Autogen_1/QtInFunctionNested.cmake
index 2e7b8ad..2e7b8ad 100644
--- a/Tests/RunCMake/Autogen/QtInFunctionNested.cmake
+++ b/Tests/RunCMake/Autogen_1/QtInFunctionNested.cmake
diff --git a/Tests/RunCMake/Autogen/QtInFunctionProperty.cmake b/Tests/RunCMake/Autogen_1/QtInFunctionProperty.cmake
index d9296c4..d9296c4 100644
--- a/Tests/RunCMake/Autogen/QtInFunctionProperty.cmake
+++ b/Tests/RunCMake/Autogen_1/QtInFunctionProperty.cmake
diff --git a/Tests/RunCMake/Autogen_1/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_1/RunCMakeTest.cmake
new file mode 100644
index 0000000..2cf60e4
--- /dev/null
+++ b/Tests/RunCMake/Autogen_1/RunCMakeTest.cmake
@@ -0,0 +1,134 @@
+include(RunCMake)
+
+run_cmake(NoQt)
+if (DEFINED with_qt_version)
+ set(RunCMake_TEST_OPTIONS
+ -Dwith_qt_version=${with_qt_version}
+ "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
+ "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
+ )
+
+ run_cmake(QtInFunction)
+ run_cmake(QtInFunctionNested)
+ run_cmake(QtInFunctionProperty)
+
+ run_cmake(CMP0111-imported-target-full)
+ run_cmake(CMP0111-imported-target-libname)
+ run_cmake(CMP0111-imported-target-implib-only)
+
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocPredefs-build)
+ run_cmake(MocPredefs)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command(MocPredefs-build ${CMAKE_COMMAND} --build . --config Debug)
+ endblock()
+
+ # Detect information from the toolchain:
+ # - CMAKE_INCLUDE_FLAG_CXX
+ # - CMAKE_INCLUDE_SYSTEM_FLAG_CXX
+ run_cmake(Inspect)
+ include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
+ foreach(autogen_type IN ITEMS MOC UIC)
+ block()
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-AUTO${autogen_type}=ON")
+ if(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
+ if(RunCMake_GENERATOR MATCHES "Visual Studio")
+ string(REGEX REPLACE "^-" "/" test_expect_stdout_common "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
+ else()
+ set(test_expect_stdout_common "-*${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
+ endif()
+ set(test_expect_stdout_1 "${test_expect_stdout_common}")
+ set(test_expect_stdout_2 "${test_expect_stdout_common}")
+ string(APPEND test_expect_stdout_1 " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
+ if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
+ string(APPEND test_expect_stdout_1 "_Debug")
+ endif()
+ string(APPEND test_expect_stdout_2 " *(\"[^\"]*|([^ ]|\\ )*)[\\/]QtCore")
+ set(test_expect_stdout "${test_expect_stdout_1}.*${test_expect_stdout_2}")
+
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-new-build)
+ run_cmake_with_options(CMP0151-new ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
+ run_cmake_command(CMP0151-new-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
+ endblock()
+
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOn-build)
+ run_cmake_with_options(AutogenUseSystemIncludeOn ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
+ run_cmake_command(AutogenUseSystemIncludeOn-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
+ endblock()
+ endif()
+
+ if(CMAKE_INCLUDE_FLAG_CXX)
+ if(RunCMake_GENERATOR MATCHES "Visual Studio")
+ string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_FLAG_CXX}")
+ else()
+ set(test_expect_stdout "-*${CMAKE_INCLUDE_FLAG_CXX}")
+ endif()
+ string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include")
+ if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
+ string(APPEND test_expect_stdout "_Debug")
+ endif()
+
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-old-build)
+ run_cmake_with_options(CMP0151-old ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=OLD)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
+ run_cmake_command(CMP0151-old-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
+ endblock()
+
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOff-build)
+ run_cmake_with_options(AutogenUseSystemIncludeOff ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}")
+ run_cmake_command(AutogenUseSystemIncludeOff-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
+ endblock()
+ endif()
+ endblock()
+ endforeach()
+ if(CMAKE_INCLUDE_FLAG_CXX)
+ if(RunCMake_GENERATOR MATCHES "Make|Ninja")
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenSkipLinting-build)
+ list(APPEND RunCMake_TEST_OPTIONS
+ "-DPSEUDO_CPPCHECK=${PSEUDO_CPPCHECK}"
+ "-DPSEUDO_CPPLINT=${PSEUDO_CPPLINT}"
+ "-DPSEUDO_IWYU=${PSEUDO_IWYU}"
+ "-DPSEUDO_TIDY=${PSEUDO_TIDY}")
+
+ run_cmake(AutogenSkipLinting)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command(AutogenSkipLinting-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
+ endblock()
+ endif()
+ endif()
+
+ if(RunCMake_GENERATOR_IS_MULTI_CONFIG AND NOT RunCMake_GENERATOR MATCHES "Xcode")
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-build)
+ run_cmake(MocGeneratedFile)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command(MocGeneratedFile-build ${CMAKE_COMMAND} --build . --config Debug --verbose)
+ endblock()
+ if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config")
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-cross-config-build)
+ list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_CROSS_CONFIGS=all)
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMAKE_CROSS_CONFIGS-all")
+ run_cmake(MocGeneratedFile)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-Release")
+ run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Release --target libgen:Debug)
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-Debug")
+ run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Debug --target libgen:Release)
+ unset(RunCMake_TEST_VARIANT_DESCRIPTION)
+ endblock()
+ endif()
+ endif()
+endif ()
diff --git a/Tests/RunCMake/Autogen/SkipLinting.cxx b/Tests/RunCMake/Autogen_1/SkipLinting.cxx
index 9e09b27..9e09b27 100644
--- a/Tests/RunCMake/Autogen/SkipLinting.cxx
+++ b/Tests/RunCMake/Autogen_1/SkipLinting.cxx
diff --git a/Tests/RunCMake/Autogen/SkipLinting.h b/Tests/RunCMake/Autogen_1/SkipLinting.h
index def56a0..def56a0 100644
--- a/Tests/RunCMake/Autogen/SkipLinting.h
+++ b/Tests/RunCMake/Autogen_1/SkipLinting.h
diff --git a/Tests/RunCMake/Autogen/empty.cpp b/Tests/RunCMake/Autogen_1/empty.cpp
index e69de29..e69de29 100644
--- a/Tests/RunCMake/Autogen/empty.cpp
+++ b/Tests/RunCMake/Autogen_1/empty.cpp
diff --git a/Tests/RunCMake/Autogen_2/CMakeLists.txt b/Tests/RunCMake/Autogen_2/CMakeLists.txt
new file mode 100644
index 0000000..2632ffa
--- /dev/null
+++ b/Tests/RunCMake/Autogen_2/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/Autogen/MyWindow.cpp b/Tests/RunCMake/Autogen_2/MyWindow.cpp
index d87c2e9..d87c2e9 100644
--- a/Tests/RunCMake/Autogen/MyWindow.cpp
+++ b/Tests/RunCMake/Autogen_2/MyWindow.cpp
diff --git a/Tests/RunCMake/Autogen/MyWindow.h b/Tests/RunCMake/Autogen_2/MyWindow.h
index c267610..c267610 100644
--- a/Tests/RunCMake/Autogen/MyWindow.h
+++ b/Tests/RunCMake/Autogen_2/MyWindow.h
diff --git a/Tests/RunCMake/Autogen/MyWindow.ui b/Tests/RunCMake/Autogen_2/MyWindow.ui
index fbf294c..fbf294c 100644
--- a/Tests/RunCMake/Autogen/MyWindow.ui
+++ b/Tests/RunCMake/Autogen_2/MyWindow.ui
diff --git a/Tests/RunCMake/Autogen/QtAutoMocDeps-stderr.txt b/Tests/RunCMake/Autogen_2/QtAutoMocDeps-stderr.txt
index 6024984..6024984 100644
--- a/Tests/RunCMake/Autogen/QtAutoMocDeps-stderr.txt
+++ b/Tests/RunCMake/Autogen_2/QtAutoMocDeps-stderr.txt
diff --git a/Tests/RunCMake/Autogen/QtAutoMocDeps.cmake b/Tests/RunCMake/Autogen_2/QtAutoMocDeps.cmake
index fc3b2f2..fc3b2f2 100644
--- a/Tests/RunCMake/Autogen/QtAutoMocDeps.cmake
+++ b/Tests/RunCMake/Autogen_2/QtAutoMocDeps.cmake
diff --git a/Tests/RunCMake/Autogen/QtSubDir1/CMakeLists.txt b/Tests/RunCMake/Autogen_2/QtSubDir1/CMakeLists.txt
index f215b9e..f215b9e 100644
--- a/Tests/RunCMake/Autogen/QtSubDir1/CMakeLists.txt
+++ b/Tests/RunCMake/Autogen_2/QtSubDir1/CMakeLists.txt
diff --git a/Tests/RunCMake/Autogen/QtSubDir2/CMakeLists.txt b/Tests/RunCMake/Autogen_2/QtSubDir2/CMakeLists.txt
index cccb1e0..cccb1e0 100644
--- a/Tests/RunCMake/Autogen/QtSubDir2/CMakeLists.txt
+++ b/Tests/RunCMake/Autogen_2/QtSubDir2/CMakeLists.txt
diff --git a/Tests/RunCMake/Autogen/QtSubDir3/CMakeLists.txt b/Tests/RunCMake/Autogen_2/QtSubDir3/CMakeLists.txt
index d268bfe..d268bfe 100644
--- a/Tests/RunCMake/Autogen/QtSubDir3/CMakeLists.txt
+++ b/Tests/RunCMake/Autogen_2/QtSubDir3/CMakeLists.txt
diff --git a/Tests/RunCMake/Autogen_2/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_2/RunCMakeTest.cmake
new file mode 100644
index 0000000..e97e896
--- /dev/null
+++ b/Tests/RunCMake/Autogen_2/RunCMakeTest.cmake
@@ -0,0 +1,87 @@
+include(RunCMake)
+
+if (DEFINED with_qt_version)
+ set(RunCMake_TEST_OPTIONS
+ -Dwith_qt_version=${with_qt_version}
+ "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
+ "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
+ )
+ if(RunCMake_GENERATOR MATCHES "Make|Ninja")
+ block()
+ if(QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0)
+ if (RunCMake_GENERATOR MATCHES "Ninja Multi-Config")
+ set(config_list Debug Release RelWithDebInfo)
+ set(use_better_graph_list ON OFF)
+ else()
+ set(config_list single-config)
+ set(use_better_graph_list OFF)
+ endif()
+
+ foreach(use_better_graph IN ITEMS ${use_better_graph_list})
+ foreach(config IN ITEMS ${config_list})
+ block()
+ if (config STREQUAL "single-config")
+ set(config_suffix "")
+ else()
+ set(config_path "_${config}")
+ if (use_better_graph)
+ set(config_suffix "_${config}")
+ endif()
+ endif()
+
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtAutoMocDeps${config_path}-build)
+ run_cmake_with_options(QtAutoMocDeps ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=${use_better_graph})
+ set(RunCMake_TEST_NO_CLEAN 1)
+ # Build the project.
+ if (config STREQUAL "single-config")
+ set(config_param "")
+ else()
+ set(config_param "--config ${config}")
+ endif()
+ run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param})
+ # Touch just the library source file, which shouldn't cause a rerun of AUTOMOC
+ # for app_with_qt target.
+ file(TOUCH "${RunCMake_SOURCE_DIR}/simple_lib.cpp")
+ set(RunCMake_TEST_NOT_EXPECT_stdout "Automatic MOC for target app_with_qt|\
+Automatic MOC for target sub_exe_1|\
+Automatic MOC for target sub_exe_2")
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't execute AUTOMOC for 'app_with_qt', 'sub_exe_1' and 'sub_exe_2'")
+ # Build and assert that AUTOMOC was not run for app_with_qt, sub_exe_1 and sub_exe_2.
+ run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param})
+ unset(RunCMake_TEST_VARIANT_DESCRIPTION)
+ unset(RunCMake_TEST_NOT_EXPECT_stdout)
+
+ macro(check_file_exists file)
+ if (EXISTS "${file}")
+ set(check_result "PASSED")
+ set(message_type "STATUS")
+ else()
+ set(check_result "FAILED")
+ set(message_type "FATAL_ERROR")
+ endif()
+
+ message(${message_type} "QtAutoMocDeps-build-\"${file}\" was generated - ${check_result}")
+ endmacro()
+
+ check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/deps${config_suffix}")
+ check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/deps${config_suffix}")
+ check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/deps${config_suffix}")
+
+ check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/timestamp${config_suffix}")
+ check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/timestamp${config_suffix}")
+ check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/timestamp${config_suffix}")
+
+ # Touch a header file to make sure an automoc dependency cycle is not introduced.
+ file(TOUCH "${RunCMake_SOURCE_DIR}/MyWindow.h")
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-First build after touch to detect dependency cycle")
+ run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose)
+ # Need to run a second time to hit the dependency cycle.
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't hit dependency cycle")
+ run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose)
+ endblock()
+ endforeach()
+ endforeach()
+ endif()
+ endblock()
+ endif()
+endif ()
diff --git a/Tests/RunCMake/Autogen/app.cpp b/Tests/RunCMake/Autogen_2/app.cpp
index 57380e4..57380e4 100644
--- a/Tests/RunCMake/Autogen/app.cpp
+++ b/Tests/RunCMake/Autogen_2/app.cpp
diff --git a/Tests/RunCMake/Autogen/app_qt.cpp b/Tests/RunCMake/Autogen_2/app_qt.cpp
index 302c672..302c672 100644
--- a/Tests/RunCMake/Autogen/app_qt.cpp
+++ b/Tests/RunCMake/Autogen_2/app_qt.cpp
diff --git a/Tests/RunCMake/Autogen/simple_lib.cpp b/Tests/RunCMake/Autogen_2/simple_lib.cpp
index cf8d689..cf8d689 100644
--- a/Tests/RunCMake/Autogen/simple_lib.cpp
+++ b/Tests/RunCMake/Autogen_2/simple_lib.cpp
diff --git a/Tests/RunCMake/Autogen/AutoMocExecutableConfig.cmake b/Tests/RunCMake/Autogen_3/AutoMocExecutableConfig.cmake
index 3ee9be9..fc6ed7f 100644
--- a/Tests/RunCMake/Autogen/AutoMocExecutableConfig.cmake
+++ b/Tests/RunCMake/Autogen_3/AutoMocExecutableConfig.cmake
@@ -7,9 +7,9 @@ endif()
get_target_property(moc_location Qt${with_qt_version}::moc IMPORTED_LOCATION)
set_target_properties(dummy PROPERTIES AUTOMOC_MOC_OPTIONS "EXE_PATH=${moc_location}")
-add_executable(mymoc $<$<CONFIG:Debug>:exe_debug.cpp>
- $<$<CONFIG:Release>:exe_release.cpp>
- $<$<CONFIG:RelWithDebInfo>:exe_relwithdebinfo.cpp>
+add_executable(mymoc $<$<CONFIG:Debug>:../Autogen_common/exe_debug.cpp>
+ $<$<CONFIG:Release>:../Autogen_common/exe_release.cpp>
+ $<$<CONFIG:RelWithDebInfo>:../Autogen_common/exe_relwithdebinfo.cpp>
)
set_target_properties(dummy PROPERTIES AUTOMOC_EXECUTABLE $<TARGET_FILE:mymoc>)
diff --git a/Tests/RunCMake/Autogen_3/CMakeLists.txt b/Tests/RunCMake/Autogen_3/CMakeLists.txt
new file mode 100644
index 0000000..2632ffa
--- /dev/null
+++ b/Tests/RunCMake/Autogen_3/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/Autogen/MocExample.cmake b/Tests/RunCMake/Autogen_3/MocExample.cmake
index f06f8f6..b4f4729 100644
--- a/Tests/RunCMake/Autogen/MocExample.cmake
+++ b/Tests/RunCMake/Autogen_3/MocExample.cmake
@@ -3,7 +3,7 @@ enable_language(CXX)
set(CMAKE_CXX_STANDARD 11)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui)
-add_library(dummy STATIC example.cpp)
+add_library(dummy STATIC ../Autogen_common/example.cpp)
target_link_libraries(dummy Qt${with_qt_version}::Core
Qt${with_qt_version}::Widgets
Qt${with_qt_version}::Gui)
diff --git a/Tests/RunCMake/Autogen_3/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_3/RunCMakeTest.cmake
new file mode 100644
index 0000000..a2fb3df
--- /dev/null
+++ b/Tests/RunCMake/Autogen_3/RunCMakeTest.cmake
@@ -0,0 +1,11 @@
+include(RunCMake)
+include(Autogen_common/utils)
+
+if (DEFINED with_qt_version)
+ set(RunCMake_TEST_OPTIONS
+ -Dwith_qt_version=${with_qt_version}
+ "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
+ "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
+ )
+ autogen_executable_test(Moc)
+endif ()
diff --git a/Tests/RunCMake/Autogen/AutoUicExecutableConfig.cmake b/Tests/RunCMake/Autogen_4/AutoUicExecutableConfig.cmake
index 55b88b8..72a0d9f 100644
--- a/Tests/RunCMake/Autogen/AutoUicExecutableConfig.cmake
+++ b/Tests/RunCMake/Autogen_4/AutoUicExecutableConfig.cmake
@@ -7,9 +7,9 @@ endif()
get_target_property(uic_location Qt${with_qt_version}::uic IMPORTED_LOCATION)
set_target_properties(dummy PROPERTIES AUTOUIC_OPTIONS "EXE_PATH=${uic_location}")
-add_executable(myuic $<$<CONFIG:Debug>:exe_debug.cpp>
- $<$<CONFIG:Release>:exe_release.cpp>
- $<$<CONFIG:RelWithDebInfo>:exe_relwithdebinfo.cpp>
+add_executable(myuic $<$<CONFIG:Debug>:../Autogen_common/exe_debug.cpp>
+ $<$<CONFIG:Release>:../Autogen_common/exe_release.cpp>
+ $<$<CONFIG:RelWithDebInfo>:../Autogen_common/exe_relwithdebinfo.cpp>
)
set_target_properties(dummy PROPERTIES AUTOUIC_EXECUTABLE $<TARGET_FILE:myuic>)
diff --git a/Tests/RunCMake/Autogen_4/CMakeLists.txt b/Tests/RunCMake/Autogen_4/CMakeLists.txt
new file mode 100644
index 0000000..2632ffa
--- /dev/null
+++ b/Tests/RunCMake/Autogen_4/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/Autogen_4/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_4/RunCMakeTest.cmake
new file mode 100644
index 0000000..ac8c5d4
--- /dev/null
+++ b/Tests/RunCMake/Autogen_4/RunCMakeTest.cmake
@@ -0,0 +1,11 @@
+include(RunCMake)
+include(Autogen_common/utils)
+
+if (DEFINED with_qt_version)
+ set(RunCMake_TEST_OPTIONS
+ -Dwith_qt_version=${with_qt_version}
+ "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
+ "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
+ )
+ autogen_executable_test(Uic)
+endif ()
diff --git a/Tests/RunCMake/Autogen/UicExample.cmake b/Tests/RunCMake/Autogen_4/UicExample.cmake
index 4b1f8c1..4b1f8c1 100644
--- a/Tests/RunCMake/Autogen/UicExample.cmake
+++ b/Tests/RunCMake/Autogen_4/UicExample.cmake
diff --git a/Tests/RunCMake/Autogen/example_ui.cpp b/Tests/RunCMake/Autogen_4/example_ui.cpp
index fb97c32..fb97c32 100644
--- a/Tests/RunCMake/Autogen/example_ui.cpp
+++ b/Tests/RunCMake/Autogen_4/example_ui.cpp
diff --git a/Tests/RunCMake/Autogen/example_ui.h b/Tests/RunCMake/Autogen_4/example_ui.h
index d691133..d691133 100644
--- a/Tests/RunCMake/Autogen/example_ui.h
+++ b/Tests/RunCMake/Autogen_4/example_ui.h
diff --git a/Tests/RunCMake/Autogen/uiA.ui b/Tests/RunCMake/Autogen_4/uiA.ui
index 4c5762e..4c5762e 100644
--- a/Tests/RunCMake/Autogen/uiA.ui
+++ b/Tests/RunCMake/Autogen_4/uiA.ui
diff --git a/Tests/RunCMake/Autogen/AutoRccExecutableConfig.cmake b/Tests/RunCMake/Autogen_5/AutoRccExecutableConfig.cmake
index 0e46420..b15dd72 100644
--- a/Tests/RunCMake/Autogen/AutoRccExecutableConfig.cmake
+++ b/Tests/RunCMake/Autogen_5/AutoRccExecutableConfig.cmake
@@ -7,9 +7,9 @@ endif()
get_target_property(rcc_location Qt${with_qt_version}::rcc IMPORTED_LOCATION)
set_target_properties(dummy PROPERTIES AUTORCC_OPTIONS "EXE_PATH=${rcc_location}")
-add_executable(myrcc $<$<CONFIG:Debug>:exe_debug.cpp>
- $<$<CONFIG:Release>:exe_release.cpp>
- $<$<CONFIG:RelWithDebInfo>:exe_relwithdebinfo.cpp>
+add_executable(myrcc $<$<CONFIG:Debug>:../Autogen_common/exe_debug.cpp>
+ $<$<CONFIG:Release>:../Autogen_common/exe_release.cpp>
+ $<$<CONFIG:RelWithDebInfo>:../Autogen_common/exe_relwithdebinfo.cpp>
)
set_target_properties(dummy PROPERTIES AUTORCC_EXECUTABLE $<TARGET_FILE:myrcc>)
diff --git a/Tests/RunCMake/Autogen_5/CMakeLists.txt b/Tests/RunCMake/Autogen_5/CMakeLists.txt
new file mode 100644
index 0000000..2632ffa
--- /dev/null
+++ b/Tests/RunCMake/Autogen_5/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/Autogen/RccExample.cmake b/Tests/RunCMake/Autogen_5/RccExample.cmake
index ade0fef..9f8dc59 100644
--- a/Tests/RunCMake/Autogen/RccExample.cmake
+++ b/Tests/RunCMake/Autogen_5/RccExample.cmake
@@ -3,7 +3,7 @@ enable_language(CXX)
set(CMAKE_CXX_STANDARD 11)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui)
-add_library(dummy STATIC example.cpp data.qrc)
+add_library(dummy STATIC ../Autogen_common/example.cpp data.qrc)
target_link_libraries(dummy Qt${with_qt_version}::Core
Qt${with_qt_version}::Widgets
Qt${with_qt_version}::Gui)
diff --git a/Tests/RunCMake/Autogen_5/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_5/RunCMakeTest.cmake
new file mode 100644
index 0000000..8060ec4
--- /dev/null
+++ b/Tests/RunCMake/Autogen_5/RunCMakeTest.cmake
@@ -0,0 +1,31 @@
+include(RunCMake)
+include(Autogen_common/utils)
+
+if (DEFINED with_qt_version)
+ set(RunCMake_TEST_OPTIONS
+ -Dwith_qt_version=${with_qt_version}
+ "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
+ "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
+ )
+ autogen_executable_test(Rcc)
+ if (QtCore_VERSION VERSION_GREATER_EQUAL 6)
+ if (RunCMake_GENERATOR MATCHES "Make|Ninja")
+ foreach(value IN ITEMS ON OFF)
+ block()
+ set(RunCMake_TEST_BINARY_DIR
+ ${RunCMake_BINARY_DIR}/RccNoZTSD-${value}-build)
+ run_cmake_with_options(RccExample ${RunCMake_TEST_OPTIONS}
+ -DCMAKE_AUTOGEN_VERBOSE=ON -DZSTD_VALUE=${value})
+ if (value STREQUAL "OFF")
+ set(RunCMake_TEST_EXPECT_stdout "--no-zstd")
+ else()
+ set(RunCMake_TEST_NOT_EXPECT_stdout "--no-zstd")
+ endif()
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command(RccNoZTSD-${value}-build ${CMAKE_COMMAND}
+ --build . --config Debug)
+ endblock()
+ endforeach()
+ endif()
+ endif()
+endif ()
diff --git a/Tests/RunCMake/Autogen/data.qrc b/Tests/RunCMake/Autogen_5/data.qrc
index 9bd068c..9bd068c 100644
--- a/Tests/RunCMake/Autogen/data.qrc
+++ b/Tests/RunCMake/Autogen_5/data.qrc
diff --git a/Tests/RunCMake/Autogen_6/CMakeLists.txt b/Tests/RunCMake/Autogen_6/CMakeLists.txt
new file mode 100644
index 0000000..2632ffa
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/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/Autogen_6/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_6/RunCMakeTest.cmake
new file mode 100644
index 0000000..b629a5c
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/RunCMakeTest.cmake
@@ -0,0 +1,70 @@
+include(RunCMake)
+include(Autogen_common/utils)
+
+if (DEFINED with_qt_version)
+ set(RunCMake_TEST_OPTIONS
+ -Dwith_qt_version=${with_qt_version}
+ "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
+ "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
+ )
+ if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0)
+ macro(set_test_variables_for_unwanted_builds)
+ if (RunCMake_GENERATOR MATCHES "Ninja")
+ set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp.o.d|mainwindow.cpp.o.d")
+ elseif (RunCMake_GENERATOR MATCHES "Make")
+ set(RunCMake_TEST_NOT_EXPECT_stdout "Building CXX object multi_ui_files/CMakeFiles/example.dir/src/widget2.cpp.o|\
+ Building CXX object multi_ui_files/CMakeFiles/example.dir/src/mainwindow.cpp.o")
+ elseif (RunCMake_GENERATOR MATCHES "Visual Studio")
+ set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp|mainwindow.cpp")
+ elseif (RunCMake_GENERATOR MATCHES "Xcode")
+ set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp|mainwindow.cpp")
+ endif()
+ endmacro()
+
+ function(uic_build_test test_name binary_dir source_dir file_to_touch test_config)
+ set(RunCMake_TEST_BINARY_DIR ${binary_dir})
+ set(RunCMake_TEST_SOURCE_DIR ${source_dir})
+
+ if (NOT RunCMake_GENERATOR MATCHES "Visual Studio")
+ set(test_verbose_arg "--verbose")
+ endif()
+ if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
+ set(config_desc "-${test_config}")
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "${config_desc}")
+ set(multiconfig_config_arg "--config ${test_config}")
+ else()
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "")
+ set(config_arg "-DCMAKE_BUILD_TYPE=Debug")
+ endif()
+ run_cmake_with_options(${test_name} ${RunCMake_TEST_OPTIONS} ${config_arg})
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg})
+
+ file(TOUCH ${file_to_touch})
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "${config_desc}-first_build_after_touching")
+ set_test_variables_for_unwanted_builds()
+ run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg})
+ message(STATUS "${test_name}-build${config_desc}-Only build files that were touched were built - PASSED")
+ endfunction()
+
+ if(RunCMake_GENERATOR MATCHES "Make|Ninja|Visual Studio|Xcode")
+ if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
+ set(configs "Debug" "Release")
+ else()
+ set(configs "single_config")
+ endif()
+
+ foreach(config IN ITEMS ${configs})
+ if (NOT ${config} STREQUAL "single_config")
+ set(config_desc "-${config}")
+ endif()
+
+ uic_build_test(multi_ui_files_touch_ui ${RunCMake_BINARY_DIR}/multi_ui_files_touch_ui${config_desc}-build
+ ${RunCMake_SOURCE_DIR}/multi_ui_files ${RunCMake_SOURCE_DIR}/multi_ui_files/src/widget1.ui ${config})
+
+ uic_build_test(multi_ui_files_touch_cpp ${RunCMake_BINARY_DIR}/multi_ui_files_touch_cpp${config_desc}-build
+ ${RunCMake_SOURCE_DIR}/multi_ui_files ${RunCMake_SOURCE_DIR}/multi_ui_files/src/widget1.cpp ${config})
+ endforeach()
+ endif()
+ endif()
+endif ()
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/CMakeLists.txt b/Tests/RunCMake/Autogen_6/multi_ui_files/CMakeLists.txt
new file mode 100644
index 0000000..f472337
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/CMakeLists.txt
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(UicIncrementalBuild LANGUAGES CXX)
+
+find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+
+add_executable(example
+ src/mainwindow.ui
+ src/widget1.ui
+ src/widget2.ui
+ src/mainwindow.h
+ src/widget1.h
+ src/widget2.h
+ src/main.cpp
+ src/mainwindow.cpp
+ src/widget1.cpp
+ src/widget2.cpp
+)
+
+target_link_libraries(example PRIVATE Qt${with_qt_version}::Widgets
+ Qt${with_qt_version}::Core
+ Qt${with_qt_version}::Gui)
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/main.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/main.cpp
new file mode 100644
index 0000000..8d76ad9
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/main.cpp
@@ -0,0 +1,11 @@
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char* argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+ return a.exec();
+}
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.cpp
new file mode 100644
index 0000000..eb3d366
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.cpp
@@ -0,0 +1,25 @@
+#include "mainwindow.h"
+
+#include <QVBoxLayout>
+
+#include "src/ui_mainwindow.h"
+#include "widget1.h"
+
+MainWindow::MainWindow(QWidget* parent)
+ : QMainWindow(parent)
+ , ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+ auto layout = new QVBoxLayout;
+ layout->addWidget(new Widget1);
+
+ QWidget* w = new QWidget(this);
+ w->setLayout(layout);
+
+ setCentralWidget(w);
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.h b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.h
new file mode 100644
index 0000000..3e64459
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.h
@@ -0,0 +1,22 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+namespace Ui {
+class MainWindow;
+}
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+public:
+ MainWindow(QWidget* parent = nullptr);
+ ~MainWindow();
+
+private:
+ Ui::MainWindow* ui;
+};
+#endif // MAINWINDOW_H
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.ui b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.ui
new file mode 100644
index 0000000..828d7c1
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.ui
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QGridLayout" name="gridLayout"/>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>22</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.cpp
new file mode 100644
index 0000000..05657ce
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.cpp
@@ -0,0 +1,22 @@
+#include "widget1.h"
+
+#include "src/ui_widget1.h"
+
+Widget1::Widget1(QWidget* parent)
+ : QWidget(parent)
+ , ui(new Ui::Widget1)
+{
+ ui->setupUi(this);
+ connect(ui->lineEdit, SIGNAL(textChanged(const QString&)), this,
+ SLOT(onTextChanged(const QString&)));
+}
+
+Widget1::~Widget1()
+{
+ delete ui;
+}
+
+void Widget1::onTextChanged(const QString& text)
+{
+ ui->OnTextChanged->setText(text);
+}
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.h b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.h
new file mode 100644
index 0000000..8c28d6d
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.h
@@ -0,0 +1,23 @@
+#ifndef WIDGET1_H
+#define WIDGET1_H
+
+#include <QWidget>
+
+namespace Ui {
+class Widget1;
+}
+
+class Widget1 : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit Widget1(QWidget* parent = nullptr);
+ ~Widget1();
+public slots:
+ void onTextChanged(const QString& text);
+
+private:
+ Ui::Widget1* ui;
+};
+
+#endif // WIDGET1_H
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.ui b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.ui
new file mode 100644
index 0000000..db0c58d
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.ui
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Widget1</class>
+ <widget class="QWidget" name="Widget1">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Input:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="lineEdit"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>OnTextChanged:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="OnTextChanged">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.cpp
new file mode 100644
index 0000000..7f4bbaf
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.cpp
@@ -0,0 +1,22 @@
+#include "widget2.h"
+
+#include "src/ui_widget2.h"
+
+Widget2::Widget2(QWidget* parent)
+ : QWidget(parent)
+ , ui(new Ui::Widget2)
+{
+ ui->setupUi(this);
+ connect(ui->lineEdit, SIGNAL(textChanged(const QString&)), this,
+ SLOT(onTextChanged(const QString&)));
+}
+
+Widget2::~Widget2()
+{
+ delete ui;
+}
+
+void Widget2::onTextChanged(const QString& text)
+{
+ ui->OnTextChanged->setText(text);
+}
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.h b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.h
new file mode 100644
index 0000000..41d7e1f
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.h
@@ -0,0 +1,24 @@
+#ifndef WIDGET2_H
+#define WIDGET2_H
+
+#include <QWidget>
+
+namespace Ui {
+class Widget2;
+}
+
+class Widget2 : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Widget2(QWidget* parent = nullptr);
+ ~Widget2();
+public slots:
+ void onTextChanged(const QString& text);
+
+private:
+ Ui::Widget2* ui;
+};
+
+#endif // WIDGET2_H
diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.ui b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.ui
new file mode 100644
index 0000000..facf467
--- /dev/null
+++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.ui
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Widget2</class>
+ <widget class="QWidget" name="Widget2">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Input:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="lineEdit"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>OnTextChanged:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="OnTextChanged">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/Tests/RunCMake/Autogen/example.cpp b/Tests/RunCMake/Autogen_common/example.cpp
index 7f1a781..7f1a781 100644
--- a/Tests/RunCMake/Autogen/example.cpp
+++ b/Tests/RunCMake/Autogen_common/example.cpp
diff --git a/Tests/RunCMake/Autogen/example.h b/Tests/RunCMake/Autogen_common/example.h
index e8bfa42..e8bfa42 100644
--- a/Tests/RunCMake/Autogen/example.h
+++ b/Tests/RunCMake/Autogen_common/example.h
diff --git a/Tests/RunCMake/Autogen/exe_common.h b/Tests/RunCMake/Autogen_common/exe_common.h
index 15311c6..15311c6 100644
--- a/Tests/RunCMake/Autogen/exe_common.h
+++ b/Tests/RunCMake/Autogen_common/exe_common.h
diff --git a/Tests/RunCMake/Autogen/exe_debug.cpp b/Tests/RunCMake/Autogen_common/exe_debug.cpp
index ae5185b..ae5185b 100644
--- a/Tests/RunCMake/Autogen/exe_debug.cpp
+++ b/Tests/RunCMake/Autogen_common/exe_debug.cpp
diff --git a/Tests/RunCMake/Autogen/exe_release.cpp b/Tests/RunCMake/Autogen_common/exe_release.cpp
index 384c992..384c992 100644
--- a/Tests/RunCMake/Autogen/exe_release.cpp
+++ b/Tests/RunCMake/Autogen_common/exe_release.cpp
diff --git a/Tests/RunCMake/Autogen/exe_relwithdebinfo.cpp b/Tests/RunCMake/Autogen_common/exe_relwithdebinfo.cpp
index aa6c558..aa6c558 100644
--- a/Tests/RunCMake/Autogen/exe_relwithdebinfo.cpp
+++ b/Tests/RunCMake/Autogen_common/exe_relwithdebinfo.cpp
diff --git a/Tests/RunCMake/Autogen_common/utils.cmake b/Tests/RunCMake/Autogen_common/utils.cmake
new file mode 100644
index 0000000..1208807
--- /dev/null
+++ b/Tests/RunCMake/Autogen_common/utils.cmake
@@ -0,0 +1,257 @@
+function(run_make_program dir)
+ execute_process(
+ COMMAND "${RunCMake_MAKE_PROGRAM}" ${ARGN}
+ WORKING_DIRECTORY "${dir}"
+ OUTPUT_VARIABLE make_program_stdout
+ ERROR_VARIABLE make_program_stderr
+ RESULT_VARIABLE make_program_result
+ )
+ if (NOT DEFINED RunMakeProgram_expected_result)
+ set(RunMakeProgram_expected_result 0)
+ endif()
+ if(NOT "${make_program_result}" MATCHES "${RunMakeProgram_expected_result}")
+ message(STATUS "
+============ beginning of ${RunCMake_MAKE_PROGRAM}'s stdout ============
+${make_program_stdout}
+=============== end of ${RunCMake_MAKE_PROGRAM}'s stdout ===============
+")
+ message(STATUS "
+============ beginning of ${RunCMake_MAKE_PROGRAM}'s stderr ============
+${make_program_stderr}
+=============== end of ${RunCMake_MAKE_PROGRAM}'s stderr ===============
+")
+ message(FATAL_ERROR
+ "top ${RunCMake_MAKE_PROGRAM} build failed exited with status ${make_program_result}")
+ endif()
+ set(make_program_stdout "${make_program_stdout}" PARENT_SCOPE)
+endfunction(run_make_program)
+
+function(count_substring STRING SUBSTRING COUNT_VAR)
+ string(LENGTH "${STRING}" STRING_LENGTH)
+ string(LENGTH "${SUBSTRING}" SUBSTRING_LENGTH)
+ if (SUBSTRING_LENGTH EQUAL 0)
+ message(FATAL_ERROR "SUBSTRING_LENGTH is 0")
+ endif()
+
+ if (STRING_LENGTH EQUAL 0)
+ message(FATAL_ERROR "STRING_LENGTH is 0")
+ endif()
+
+ if (STRING_LENGTH LESS SUBSTRING_LENGTH)
+ message(FATAL_ERROR "STRING_LENGTH is less than SUBSTRING_LENGTH")
+ endif()
+
+ set(COUNT 0)
+ string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START)
+ while(SUBSTRING_START GREATER_EQUAL 0)
+ math(EXPR COUNT "${COUNT} + 1")
+ math(EXPR SUBSTRING_START "${SUBSTRING_START} + ${SUBSTRING_LENGTH}")
+ string(SUBSTRING "${STRING}" ${SUBSTRING_START} -1 STRING)
+ string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START)
+ endwhile()
+
+ set(${COUNT_VAR} ${COUNT} PARENT_SCOPE)
+endfunction()
+
+function(not_expect make_program_stdout unexpected_output test_name)
+ count_substring("${make_program_stdout}" "${unexpected_output}" count)
+ if(NOT count EQUAL 0)
+ message(STATUS "${test_name}-not_expect - FAILED")
+ message(FATAL_ERROR "Expected to find ${unexpected_output} exactly 0 times in ${make_program_stdout} but found ${count} occurrences of ${unexpected_output}")
+ else()
+ message(STATUS "${test_name}-not_expect - PASSED")
+ endif()
+endfunction()
+
+function(expect_only_once make_program_stdout expected_output test_name)
+ count_substring("${make_program_stdout}" "${expected_output}" count)
+ if(NOT count EQUAL 1)
+ message(STATUS "${test_name}-expect_only_once - FAILED")
+ message(FATAL_ERROR "Expected to find ${expected_output} exactly once in ${make_program_stdout} but found ${count} occurrences of ${expected_output}")
+ else()
+ message(STATUS "${test_name}-expect_only_once - PASSED")
+ endif()
+endfunction()
+
+function(expect_n_times string_to_check expected_output expected_count test_name)
+ count_substring("${string_to_check}" "${expected_output}" count)
+ if(NOT count EQUAL ${expected_count})
+ message(STATUS "${test_name}-expect_${expected_count}_times - FAILED")
+ message(FATAL_ERROR "Expected to find ${expected_output} exactly ${expected_count} times in ${string_to_check} but found ${count} occurrences of ${expected_output}")
+ else()
+ message(STATUS "${test_name}-expect_${expected_count}_times - PASSED")
+ endif()
+endfunction()
+
+function(autogen_executable_test exe)
+ if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0)
+ if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config")
+ block()
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure")
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-multi-config-build)
+ run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
+ unset(RunCMake_TEST_VARIANT_DESCRIPTION)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ foreach(config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*")
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_running_exe_${config}")
+ run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config})
+ endblock()
+ endforeach()
+ set(RunCMake_TEST_EXPECT_stdout "ninja: no work to do")
+ foreach(config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_no_work_to_do")
+ run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config})
+ endblock()
+ endforeach()
+ endblock()
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build)
+ run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
+ foreach(config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${config}.ninja)
+
+ set(expected_output "running_exe_${config}")
+ expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}")
+
+ foreach(sub_config IN ITEMS Debug Release RelWithDebInfo)
+ if(NOT sub_config STREQUAL config)
+ set(unexpected_output "running_exe_${sub_config}")
+ not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig-${config}-${unexpected_output}")
+ endif()
+ endforeach()
+
+ if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
+ set(expected_output "cmake_autogen")
+ else()
+ set(expected_output "cmake_autorcc")
+ endif()
+ expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}")
+ endblock()
+ endforeach()
+ endblock()
+ block()
+ foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo)
+ foreach(target_config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ set(TEST_SUFFIX "-CrossConfig-${ninja_config}-${target_config}")
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build)
+ set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX})
+ run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=${ninja_config} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
+ unset(RunCMake_TEST_VARIANT_DESCRIPTION)
+
+ run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja dummy:${target_config})
+
+ set(expected_output "running_exe_${ninja_config}")
+ expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}")
+
+ foreach(sub_config IN ITEMS Debug Release RelWithDebInfo)
+ if(NOT sub_config STREQUAL ninja_config)
+ set(unexpected_output "running_exe_${sub_config}")
+ not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${unexpected_output}")
+ endif()
+ endforeach()
+
+ if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
+ set(expected_output "cmake_autogen")
+ else()
+ set(expected_output "cmake_autorcc")
+ endif()
+ expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}")
+ endblock()
+ endforeach()
+ endforeach()
+ endblock()
+ block()
+ foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo)
+ set(TEST_SUFFIX "-CrossConfig-${ninja_config}-all-all")
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build)
+ set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX})
+ run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON)
+ unset(RunCMake_TEST_VARIANT_DESCRIPTION)
+ run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja all:all)
+ endforeach()
+ endblock()
+ elseif (RunCMake_GENERATOR MATCHES "Ninja|Make")
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build)
+ foreach(config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}")
+ run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_BUILD_TYPE=${config} -DCMAKE_AUTOGEN_VERBOSE=ON)
+ unset(RunCMake_TEST_VARIANT_DESCRIPTION)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*")
+ run_cmake_command(Auto${exe}ExecutableConfig-${config}-build ${CMAKE_COMMAND} --build .)
+ endblock()
+ endforeach()
+ endblock()
+ endif()
+ endif()
+
+ # Visual Studio specific dependency tests
+ if (RunCMake_GENERATOR MATCHES "Visual Studio")
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build)
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure")
+ run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON)
+ unset(RunCMake_TEST_VARIANT_DESCRIPTION)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ foreach(config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-first-build")
+ run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config})
+ endblock()
+ endforeach()
+ foreach(config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
+ set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}")
+ set(not_expect_descripton "Auto${exe}")
+ else ()
+ set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}")
+ set(not_expect_descripton "Auto${exe}")
+ endif()
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-second-build-${config}_expect_no_${not_expect_descripton}")
+ run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config})
+ endblock()
+ endforeach()
+ endblock()
+ endif()
+
+ if (RunCMake_GENERATOR MATCHES "Xcode")
+ block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build)
+ set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure")
+ set(RunCMake_TEST_EXPECT_stderr ".*")
+ run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_MAKE_PROGRAM ${CMAKE_COMMAND})
+ run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config Debug)
+ if (exe STREQUAL "Moc")
+ set(expected_count 16)
+ elseif (exe STREQUAL "Uic")
+ set(expected_count 4)
+ else()
+ set(expected_count 12)
+ endif()
+ expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}")
+ expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}")
+
+ if (exe STREQUAL "Moc" OR exe STREQUAL "Uic")
+ expect_n_times("${make_program_stdout}" "AutoGen:" 20 "${exe}Example-build-AutoGen:")
+ endif()
+
+ foreach(config IN ITEMS Debug Release RelWithDebInfo)
+ block()
+ run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config ${config})
+ not_expect("${make_program_stdout}" "Auto${exe}" "${exe}Example-${config}_Auto${exe}")
+ not_expect("${make_program_stdout}" "AutoGen:" "${exe}Example-${config}_AutoGen")
+ endblock()
+ endforeach()
+ endblock()
+ endif()
+endfunction()
diff --git a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake
index a5f9622..d5be807 100644
--- a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake
+++ b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake
@@ -68,7 +68,10 @@ if(NOT RunCMake_GENERATOR STREQUAL "Xcode")
unset(run_BuildDepends_skip_step_2)
endif()
-if(CMake_TEST_Fortran)
+if(CMake_TEST_Fortran
+ # FIXME(lfortran): The compiler fails on the test's includes.
+ AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran"
+ )
run_BuildDepends(FortranInclude)
endif()
diff --git a/Tests/RunCMake/CMP0129/C-NEW.cmake b/Tests/RunCMake/CMP0129/C-NEW.cmake
new file mode 100644
index 0000000..1c8f4c0
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/C-NEW.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0129 NEW)
+include(C-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/C-OLD-stderr.txt b/Tests/RunCMake/CMP0129/C-OLD-stderr.txt
new file mode 100644
index 0000000..5c622d2
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/C-OLD-stderr.txt
@@ -0,0 +1,10 @@
+^CMake Deprecation Warning at C-OLD\.cmake:[0-9]+ \(cmake_policy\):
+ The OLD behavior for policy CMP0129 will be removed from a future version
+ of CMake\.
+
+ The cmake-policies\(7\) manual explains that the OLD behaviors of all
+ policies are deprecated and that a policy should be set to OLD only under
+ specific short-term circumstances\. Projects should be ported to the NEW
+ behavior and not rely on setting a policy to OLD\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/CMP0129/C-OLD.cmake b/Tests/RunCMake/CMP0129/C-OLD.cmake
new file mode 100644
index 0000000..789bf64
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/C-OLD.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0129 OLD)
+include(C-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/C-WARN.cmake b/Tests/RunCMake/CMP0129/C-WARN.cmake
new file mode 100644
index 0000000..09b5167
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/C-WARN.cmake
@@ -0,0 +1 @@
+include(C-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/C.cmake b/Tests/RunCMake/CMP0129/C-common.cmake
index e9ebe90..1e91327 100644
--- a/Tests/RunCMake/CMP0129/C.cmake
+++ b/Tests/RunCMake/CMP0129/C-common.cmake
@@ -1,7 +1,3 @@
-if(SET_CMP0129)
- cmake_policy(SET CMP0129 ${SET_CMP0129})
-endif()
-
enable_language(C)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
include(CompareCompilerVersion.cmake)
diff --git a/Tests/RunCMake/CMP0129/CMakeLists.txt b/Tests/RunCMake/CMP0129/CMakeLists.txt
index d8200fc..f5cf5b7 100644
--- a/Tests/RunCMake/CMP0129/CMakeLists.txt
+++ b/Tests/RunCMake/CMP0129/CMakeLists.txt
@@ -1,3 +1,3 @@
cmake_minimum_required(VERSION 3.22)
project(${RunCMake_TEST} NONE)
-include(${RunCMake_TEST}.cmake)
+include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE)
diff --git a/Tests/RunCMake/CMP0129/CXX-NEW.cmake b/Tests/RunCMake/CMP0129/CXX-NEW.cmake
new file mode 100644
index 0000000..00cd7c5
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/CXX-NEW.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0129 NEW)
+include(CXX-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/CXX-OLD-stderr.txt b/Tests/RunCMake/CMP0129/CXX-OLD-stderr.txt
new file mode 100644
index 0000000..71a1ecf
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/CXX-OLD-stderr.txt
@@ -0,0 +1,10 @@
+^CMake Deprecation Warning at CXX-OLD\.cmake:[0-9]+ \(cmake_policy\):
+ The OLD behavior for policy CMP0129 will be removed from a future version
+ of CMake\.
+
+ The cmake-policies\(7\) manual explains that the OLD behaviors of all
+ policies are deprecated and that a policy should be set to OLD only under
+ specific short-term circumstances\. Projects should be ported to the NEW
+ behavior and not rely on setting a policy to OLD\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/CMP0129/CXX-OLD.cmake b/Tests/RunCMake/CMP0129/CXX-OLD.cmake
new file mode 100644
index 0000000..b7d8641
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/CXX-OLD.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0129 OLD)
+include(CXX-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/CXX-WARN.cmake b/Tests/RunCMake/CMP0129/CXX-WARN.cmake
new file mode 100644
index 0000000..db36956
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/CXX-WARN.cmake
@@ -0,0 +1 @@
+include(CXX-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/CXX.cmake b/Tests/RunCMake/CMP0129/CXX-common.cmake
index ffb81b8..016e8ff 100644
--- a/Tests/RunCMake/CMP0129/CXX.cmake
+++ b/Tests/RunCMake/CMP0129/CXX-common.cmake
@@ -1,7 +1,3 @@
-if(SET_CMP0129)
- cmake_policy(SET CMP0129 ${SET_CMP0129})
-endif()
-
enable_language(CXX)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
include(CompareCompilerVersion.cmake)
diff --git a/Tests/RunCMake/CMP0129/Fortran-NEW.cmake b/Tests/RunCMake/CMP0129/Fortran-NEW.cmake
new file mode 100644
index 0000000..6ac9cb9
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/Fortran-NEW.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0129 NEW)
+include(Fortran-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/Fortran-OLD-stderr.txt b/Tests/RunCMake/CMP0129/Fortran-OLD-stderr.txt
new file mode 100644
index 0000000..01260c0
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/Fortran-OLD-stderr.txt
@@ -0,0 +1,10 @@
+^CMake Deprecation Warning at Fortran-OLD\.cmake:[0-9]+ \(cmake_policy\):
+ The OLD behavior for policy CMP0129 will be removed from a future version
+ of CMake\.
+
+ The cmake-policies\(7\) manual explains that the OLD behaviors of all
+ policies are deprecated and that a policy should be set to OLD only under
+ specific short-term circumstances\. Projects should be ported to the NEW
+ behavior and not rely on setting a policy to OLD\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/CMP0129/Fortran-OLD.cmake b/Tests/RunCMake/CMP0129/Fortran-OLD.cmake
new file mode 100644
index 0000000..df6ca83
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/Fortran-OLD.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0129 OLD)
+include(Fortran-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/Fortran-WARN.cmake b/Tests/RunCMake/CMP0129/Fortran-WARN.cmake
new file mode 100644
index 0000000..3dc27c3
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/Fortran-WARN.cmake
@@ -0,0 +1 @@
+include(Fortran-common.cmake)
diff --git a/Tests/RunCMake/CMP0129/Fortran-common.cmake b/Tests/RunCMake/CMP0129/Fortran-common.cmake
new file mode 100644
index 0000000..7b6ecc7
--- /dev/null
+++ b/Tests/RunCMake/CMP0129/Fortran-common.cmake
@@ -0,0 +1,4 @@
+enable_language(Fortran)
+set(CMAKE_VERBOSE_MAKEFILE TRUE)
+include(CompareCompilerVersion.cmake)
+compare_compiler_version(Fortran)
diff --git a/Tests/RunCMake/CMP0129/Fortran.cmake b/Tests/RunCMake/CMP0129/Fortran.cmake
deleted file mode 100644
index abaca7e..0000000
--- a/Tests/RunCMake/CMP0129/Fortran.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-include(CheckLanguage)
-check_language(Fortran)
-if(NOT CMAKE_Fortran_COMPILER)
- # No Fortran compiler, skipping Fortran test
- return()
-endif()
-
-if(SET_CMP0129)
- cmake_policy(SET CMP0129 ${SET_CMP0129})
-endif()
-
-enable_language(Fortran)
-set(CMAKE_VERBOSE_MAKEFILE TRUE)
-include(CompareCompilerVersion.cmake)
-compare_compiler_version(Fortran)
diff --git a/Tests/RunCMake/CMP0129/RunCMakeTest.cmake b/Tests/RunCMake/CMP0129/RunCMakeTest.cmake
index 1b0e11b..c147352 100644
--- a/Tests/RunCMake/CMP0129/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMP0129/RunCMakeTest.cmake
@@ -1,8 +1,14 @@
set(RunCMake_TEST_NO_CMP0129 ON)
include(RunCMake)
-foreach(lang C CXX Fortran)
- run_cmake(${lang})
- run_cmake_with_options(${lang} "-DSET_CMP0129=NEW")
- run_cmake_with_options(${lang} "-DSET_CMP0129=OLD")
-endforeach()
+run_cmake(C-WARN)
+run_cmake(C-OLD)
+run_cmake(C-NEW)
+run_cmake(CXX-WARN)
+run_cmake(CXX-OLD)
+run_cmake(CXX-NEW)
+if(CMake_TEST_Fortran)
+ run_cmake(Fortran-WARN)
+ run_cmake(Fortran-OLD)
+ run_cmake(Fortran-NEW)
+endif()
diff --git a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-result.txt b/Tests/RunCMake/CMP0171/CMP0171-NEW-result.txt
index d00491f..d00491f 100644
--- a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-result.txt
+++ b/Tests/RunCMake/CMP0171/CMP0171-NEW-result.txt
diff --git a/Tests/RunCMake/CMP0171/CMP0171-NEW-stderr.txt b/Tests/RunCMake/CMP0171/CMP0171-NEW-stderr.txt
new file mode 100644
index 0000000..155ddd2
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-NEW-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at CMP0171-NEW\.cmake:[0-9]+ \(add_custom_target\):
+ The target name "codegen" is reserved\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/CMP0171/CMP0171-NEW.cmake b/Tests/RunCMake/CMP0171/CMP0171-NEW.cmake
new file mode 100644
index 0000000..547f6c0
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-NEW.cmake
@@ -0,0 +1,6 @@
+# codegen is now a reserved name and this will cause an error since the policy is new.
+add_custom_target(codegen
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+)
diff --git a/Tests/RunCMake/CMP0171/CMP0171-OLD-result.txt b/Tests/RunCMake/CMP0171/CMP0171-OLD-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-OLD-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMP0171/CMP0171-OLD-stderr.txt b/Tests/RunCMake/CMP0171/CMP0171-OLD-stderr.txt
new file mode 100644
index 0000000..1ae3318
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-OLD-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at CMP0171-OLD\.cmake:[0-9]+ \(add_custom_command\):
+ add_custom_command CODEGEN option requires policy CMP0171 be set to NEW\!
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/CMP0171/CMP0171-OLD.cmake b/Tests/RunCMake/CMP0171/CMP0171-OLD.cmake
new file mode 100644
index 0000000..c34b3fb
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-OLD.cmake
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+ # This will cause an error since the CODEGEN option
+ # requires that CMP0171 is set to NEW
+ CODEGEN
+)
diff --git a/Tests/RunCMake/CMP0171/CMP0171-WARN-stderr.txt b/Tests/RunCMake/CMP0171/CMP0171-WARN-stderr.txt
new file mode 100644
index 0000000..ee79553
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-WARN-stderr.txt
@@ -0,0 +1,9 @@
+CMake Warning \(dev\) at CMP0171-WARN\.cmake:[0-9]+ \(add_custom_target\):
+ Policy CMP0171 is not set: 'codegen' is a reserved target name\. Run "cmake
+ --help-policy CMP0171" for policy details. Use the cmake_policy command to
+ set the policy and suppress this warning\.
+
+ The target name "codegen" is reserved\.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+This warning is for project developers\. Use -Wno-dev to suppress it\.
diff --git a/Tests/RunCMake/CMP0171/CMP0171-WARN.cmake b/Tests/RunCMake/CMP0171/CMP0171-WARN.cmake
new file mode 100644
index 0000000..6d61723
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-WARN.cmake
@@ -0,0 +1,6 @@
+# CMake should warn the user if they have a target named codegen.
+add_custom_target(codegen
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+)
diff --git a/Tests/RunCMake/CMP0171/CMP0171-codegen-build-result.txt b/Tests/RunCMake/CMP0171/CMP0171-codegen-build-result.txt
new file mode 100644
index 0000000..d197c91
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMP0171-codegen-build-result.txt
@@ -0,0 +1 @@
+[^0]
diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-result.txt b/Tests/RunCMake/CMP0171/CMP0171-codegen.cmake
index e69de29..e69de29 100644
--- a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-result.txt
+++ b/Tests/RunCMake/CMP0171/CMP0171-codegen.cmake
diff --git a/Tests/RunCMake/CMP0171/CMakeLists.txt b/Tests/RunCMake/CMP0171/CMakeLists.txt
new file mode 100644
index 0000000..1a5755c
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/CMakeLists.txt
@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.29)
+project(${RunCMake_TEST} LANGUAGES C)
+
+include(${RunCMake_TEST}.cmake)
+
+enable_testing()
diff --git a/Tests/RunCMake/CMP0171/RunCMakeTest.cmake b/Tests/RunCMake/CMP0171/RunCMakeTest.cmake
new file mode 100644
index 0000000..75941d7
--- /dev/null
+++ b/Tests/RunCMake/CMP0171/RunCMakeTest.cmake
@@ -0,0 +1,18 @@
+include(RunCMake)
+
+run_cmake("CMP0171-WARN")
+
+run_cmake_with_options(CMP0171-OLD "-DCMAKE_POLICY_DEFAULT_CMP0171=OLD")
+
+run_cmake_with_options(CMP0171-NEW "-DCMAKE_POLICY_DEFAULT_CMP0171=NEW")
+
+# The entire point of this test is to ensure the codegen target is not created
+# unintentionally. It can only be created if CMP0171 is NEW.
+block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0171-codegen-build)
+ run_cmake(CMP0171-codegen)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(RunCMake_TEST_OUTPUT_MERGE 1)
+ # This command will fail with either 1 or 2 depending.
+ run_cmake_command(CMP0171-codegen-build ${CMAKE_COMMAND} --build . --config Debug --target codegen)
+endblock()
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index e205d9f..2f4554f 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -35,10 +35,6 @@ macro(add_RunCMake_test test)
${TEST_ARGS}
-P "${CMAKE_CURRENT_SOURCE_DIR}/${Test_Dir}/RunCMakeTest.cmake"
)
- set_tests_properties("RunCMake.${test}" PROPERTIES LABELS "CMake;run")
- if(${test} MATCHES ^CMP)
- set_property(TEST "RunCMake.${test}" APPEND PROPERTY LABELS "policy")
- endif()
endmacro()
function(add_RunCMake_test_group test types)
@@ -153,6 +149,9 @@ add_RunCMake_test(CMP0126)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "LCC" OR
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "LCC" OR
"${CMAKE_Fortran_COMPILER_ID}" STREQUAL "LCC")
+ if(CMAKE_Fortran_COMPILER)
+ list(APPEND CMP0129_ARGS -DCMake_TEST_Fortran=1)
+ endif()
add_RunCMake_test("CMP0129")
set_property(TEST RunCMake.CMP0129 APPEND PROPERTY LABELS "Fortran")
endif()
@@ -177,6 +176,7 @@ add_RunCMake_test(CMP0163)
add_RunCMake_test(CMP0165)
add_RunCMake_test(CMP0169)
add_RunCMake_test(CMP0170)
+add_RunCMake_test(CMP0171)
# The test for Policy 65 requires the use of the
# CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS variable, which both the VS and Xcode
@@ -213,7 +213,10 @@ if(CMAKE_GENERATOR MATCHES "Ninja")
-DCMAKE_SHARED_LIBRARY_PREFIX=${CMAKE_SHARED_LIBRARY_PREFIX}
-DCMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX})
if(CMAKE_Fortran_COMPILER)
- list(APPEND Ninja_ARGS -DTEST_Fortran=1)
+ list(APPEND Ninja_ARGS
+ -DCMake_TEST_Fortran=1
+ -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
+ )
endif()
if(ninja_test_with_qt_version)
list(APPEND Ninja_ARGS
@@ -254,8 +257,8 @@ if(CMAKE_GENERATOR MATCHES "Ninja")
add_RunCMake_test(NinjaPrivateDeps
-DCMAKE_C_OUTPUT_EXTENSION=${CMAKE_C_OUTPUT_EXTENSION}
-DRunCMake_GENERATOR_IS_MULTI_CONFIG=${_isMultiConfig})
- add_RunCMake_test(InstallParallel)
endif()
+add_RunCMake_test(InstallParallel)
add_RunCMake_test(CTest)
if(NOT CMake_TEST_EXTERNAL_CMAKE)
@@ -280,33 +283,40 @@ if(CMake_TEST_APPLE_SILICON)
add_RunCMake_test(AppleSilicon)
endif()
set(want_NoQt_test TRUE)
+set(autogen_test_number 1 2 3 4 5 6)
if(CMake_TEST_Qt6 AND Qt6Widgets_FOUND)
# Work around Qt6 not finding sibling dependencies without CMAKE_PREFIX_PATH
cmake_path(GET Qt6_DIR PARENT_PATH base_dir) # <base>/lib/cmake
cmake_path(GET base_dir PARENT_PATH base_dir) # <base>/lib
cmake_path(GET base_dir PARENT_PATH base_dir) # <base>
- add_RunCMake_test(AutogenQt6 TEST_DIR Autogen
- -Dwith_qt_version=6
- -DQtCore_VERSION=${Qt6Core_VERSION}
- "-DQt6_DIR:PATH=${Qt6_DIR}"
- "-DCMAKE_PREFIX_PATH:STRING=${base_dir}"
- -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>
- -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>
- -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>
- -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>
- )
+ # Note: Since RunCMake.Autogen tests cause time out on some CI,
+ # we split the tests.
+ foreach(val IN ITEMS ${autogen_test_number})
+ add_RunCMake_test("Autogen_Qt6_${val}" TEST_DIR "Autogen_${val}"
+ -Dwith_qt_version=6
+ -DQtCore_VERSION=${Qt6Core_VERSION}
+ "-DQt6_DIR:PATH=${Qt6_DIR}"
+ "-DCMAKE_PREFIX_PATH:STRING=${base_dir}"
+ -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>
+ -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>
+ -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>
+ -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>
+ )
+ endforeach()
set(want_NoQt_test FALSE)
endif ()
if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
- add_RunCMake_test(AutogenQt5 TEST_DIR Autogen
- -Dwith_qt_version=5
- -DQtCore_VERSION=${Qt5Core_VERSION}
- "-DQt5_DIR:PATH=${Qt5_DIR}"
- )
+ foreach(val IN ITEMS ${autogen_test_number})
+ add_RunCMake_test("Autogen_Qt5_${val}" TEST_DIR "Autogen_${val}"
+ -Dwith_qt_version=5
+ -DQtCore_VERSION=${Qt5Core_VERSION}
+ "-DQt5_DIR:PATH=${Qt5_DIR}"
+ )
+ endforeach()
set(want_NoQt_test FALSE)
endif ()
if(want_NoQt_test)
- add_RunCMake_test(AutogenNoQt TEST_DIR Autogen)
+ add_RunCMake_test(AutogenNoQt TEST_DIR Autogen_1)
endif()
if(NOT DEFINED CMake_TEST_BuildDepends_GNU_AS
@@ -322,7 +332,10 @@ if(NOT DEFINED CMake_TEST_BuildDepends_GNU_AS
endif()
if(CMAKE_Fortran_COMPILER)
- list(APPEND BuildDepends_ARGS -DCMake_TEST_Fortran=1)
+ list(APPEND BuildDepends_ARGS
+ -DCMake_TEST_Fortran=1
+ -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
+ )
endif()
add_RunCMake_test(BuildDepends
@@ -547,6 +560,7 @@ add_RunCMake_test(cmake_language)
add_RunCMake_test(cmake_minimum_required)
add_RunCMake_test(cmake_parse_arguments)
add_RunCMake_test(cmake_path -DMSYS=${MSYS})
+add_RunCMake_test(cmake_pkg_config)
add_RunCMake_test(continue)
add_executable(color_warning color_warning.c)
add_executable(fake_build_command fake_build_command.c)
@@ -585,6 +599,7 @@ foreach(var
endif()
endforeach()
add_RunCMake_test(file-DOWNLOAD)
+add_RunCMake_test(file-MAKE_DIRECTORY)
add_RunCMake_test(file-RPATH
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
-DCMake_TEST_ELF_LARGE=${CMake_TEST_ELF_LARGE}
@@ -672,7 +687,13 @@ if(CMake_TEST_CUDA)
set_property(TEST RunCMake.CUDA_architectures APPEND PROPERTY LABELS "CUDA")
endif()
-add_RunCMake_test(DependencyGraph -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER})
+if(CMAKE_Fortran_COMPILER)
+ list(APPEND DependencyGraph_ARGS
+ -DCMake_TEST_Fortran=1
+ -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
+ )
+ endif()
+add_RunCMake_test(DependencyGraph)
set_property(TEST RunCMake.DependencyGraph APPEND PROPERTY LABELS "Fortran")
# Add C++ Module tests.
@@ -1056,6 +1077,7 @@ set(cpack_tests
DEB.DEB_DESCRIPTION
DEB.PROJECT_META
DEB.COMPONENT_WITH_SPECIAL_CHARS
+ DEB.MULTIARCH
RPM.AUTO_SUFFIXES
RPM.CUSTOM_BINARY_SPEC_FILE
@@ -1216,7 +1238,8 @@ add_RunCMake_test(CMakePresetsWorkflow
add_RunCMake_test(VerifyHeaderSets)
add_RunCMake_test(set_tests_properties)
-if(${CMAKE_GENERATOR} MATCHES "Make|Ninja")
+if(CMAKE_GENERATOR MATCHES "Make|Ninja")
+ add_RunCMake_test(Codegen)
add_RunCMake_test(TransformDepfile)
endif()
diff --git a/Tests/RunCMake/CMakePresets/CommentValid-result.txt b/Tests/RunCMake/CMakePresets/CommentValid-result.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValid-result.txt
@@ -0,0 +1 @@
+0
diff --git a/Tests/RunCMake/CMakePresets/CommentValid.cmake b/Tests/RunCMake/CMakePresets/CommentValid.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValid.cmake
diff --git a/Tests/RunCMake/CMakePresets/CommentValid.json.in b/Tests/RunCMake/CMakePresets/CommentValid.json.in
new file mode 100644
index 0000000..1206ded
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValid.json.in
@@ -0,0 +1,14 @@
+{
+ "$comment": [
+ "example comment",
+ "with an array of strings"
+ ],
+ "version": 10,
+ "configurePresets": [
+ {
+ "name": "CommentValid",
+ "generator": "@RunCMake_GENERATOR@",
+ "binaryDir": "${sourceDir}/build"
+ }
+ ]
+}
diff --git a/Tests/RunCMake/CMakePresets/CommentValidFull-result.txt b/Tests/RunCMake/CMakePresets/CommentValidFull-result.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValidFull-result.txt
@@ -0,0 +1 @@
+0
diff --git a/Tests/RunCMake/CMakePresets/CommentValidFull.cmake b/Tests/RunCMake/CMakePresets/CommentValidFull.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValidFull.cmake
diff --git a/Tests/RunCMake/CMakePresets/CommentValidFull.json.in b/Tests/RunCMake/CMakePresets/CommentValidFull.json.in
new file mode 100644
index 0000000..40bab97
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValidFull.json.in
@@ -0,0 +1,179 @@
+{
+ "$comment": [
+ "example comment",
+ "with an array of strings"
+ ],
+ "version": 10,
+ "cmakeMinimumRequired": {
+ "$comment": "We can add comments in version"
+ },
+ "configurePresets": [
+ {
+ "name": "CommentValidFull",
+ "$comment": "example comment",
+ "generator": "@RunCMake_GENERATOR@",
+ "binaryDir": "${sourceDir}/build",
+ "architecture": {
+ "$comment": "We can add comments in architecture",
+ "value": "v143",
+ "strategy": "external"
+ },
+ "toolset": {
+ "$comment": "We can add comments in toolset",
+ "value": "x64",
+ "strategy": "external"
+ },
+ "cacheVariables": {
+ "SOME_VARIABLE": {
+ "$comment": "We can add comments in every cacheVariable, that we created",
+ "value": "SOME_VALUE"
+ }
+ },
+ "warnings": {
+ "$comment": "We can add comments in warnings",
+ "dev": false
+ },
+ "errors": {
+ "$comment": "We can add comments in errors",
+ "dev": false
+ },
+ "debug": {
+ "$comment": "We can add comments in debug",
+ "find": false
+ },
+ "trace": {
+ "$comment": "We can add comments in trace",
+ "mode": "off"
+ }
+ }
+ ],
+ "buildPresets": [
+ {
+ "$comment": "example comment",
+ "name": "default",
+ "condition": {
+ "$comment": "We can add comments in condition",
+ "type": "const",
+ "value": false
+ },
+ "configurePreset": "CommentValidFull"
+ }
+ ],
+ "testPresets": [
+ {
+ "name": "default",
+ "configurePreset": "CommentValidFull",
+ "filter": {
+ "$comment": "We can add comments in filter",
+ "include": {
+ "$comment": ["example comment", "with an array of strings", "inside include"],
+ "index": {
+ "$comment": ["example comment", "with an array of strings"],
+ "start": 0
+ }
+ },
+ "exclude": {
+ "$comment": ["example comment", "with an array of strings", "inside exclude"],
+ "fixtures": {
+ "$comment": ["example comment", "with an array of strings"],
+ "any": ".*full.*"
+ }
+ }
+ },
+ "execution": {
+ "$comment": ["example comment", "with an array of strings"],
+ "repeat": {
+ "$comment": "Some comments here",
+ "mode": "until-fail",
+ "count": 1
+ }
+ },
+ "condition": {
+ "$comment": "We can add comments in equal & non-equal conditions",
+ "type": "equals",
+ "lhs": "test1",
+ "rhs": "test2"
+ },
+ "$comment": ["example comment", "with an array of strings"]
+ }
+ ],
+ "packagePresets": [
+ {
+ "name": "CommentValidFull",
+ "$comment": ["example comment", "with an array of strings"],
+ "configurePreset": "CommentValidFull",
+ "condition": {
+ "$comment": "We can add comments in list check conditions",
+ "type": "notInList",
+ "list": [
+ "test1",
+ "test2"
+ ],
+ "string": "test1"
+ },
+ "output": {
+ "$comment": "Hello, World!",
+ "debug": false
+ }
+ },
+ {
+ "name": "CommentValidFull1",
+ "configurePreset": "CommentValidFull",
+ "condition": {
+ "$comment": "We can add comments in aggregation conditions",
+ "type": "allOf",
+ "conditions": [
+ {
+ "$comment": "We can add comments in regex match conditions",
+ "type": "matches",
+ "regex": ".*tests.*",
+ "string": "test1"
+ },
+ {
+ "type": "matches",
+ "regex": ".*tests.*",
+ "string": "test2"
+ },
+ {
+ "type": "not",
+ "$comment": "We can add comments in not conditions",
+ "condition": {
+ "type": "matches",
+ "regex": ".*tests.*",
+ "string": "test3"
+ }
+ }
+ ]
+ },
+ "output": {
+ "$comment": "Hello, World 123!",
+ "verbose": false
+ }
+ }
+ ],
+ "workflowPresets": [
+ {
+ "name": "CommentValidFull",
+ "$comment": ["example comment", "with an array of strings"],
+ "steps": [
+ {
+ "type": "configure",
+ "name": "CommentValidFull"
+ },
+ {
+ "type": "build",
+ "name": "default"
+ },
+ {
+ "$comment": "We must test it before we can package it",
+ "type": "test",
+ "name": "default"
+ },
+ {
+ "type": "package",
+ "name": "CommentValidFull"
+ }
+ ]
+ }
+ ]
+}
diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema-result.txt b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt
new file mode 100644
index 0000000..b102f5b
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt
@@ -0,0 +1,2 @@
+^CMake Error: Could not read presets from .*
+Error: @2,15: Invalid extra field \"\$comment\" in root object
diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema.cmake b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.cmake
diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema.json.in b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.json.in
new file mode 100644
index 0000000..d92ee1d
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.json.in
@@ -0,0 +1,14 @@
+{
+ "$comment": [
+ "invalid comment",
+ "version less than 10"
+ ],
+ "version": 9,
+ "configurePresets": [
+ {
+ "name": "CommentValidOldSchema",
+ "generator": "@RunCMake_GENERATOR@",
+ "binaryDir": "${sourceDir}/build"
+ }
+ ]
+}
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid-result.txt b/Tests/RunCMake/CMakePresets/GraphvizValid-result.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValid-result.txt
@@ -0,0 +1 @@
+0
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid-stdout.txt b/Tests/RunCMake/CMakePresets/GraphvizValid-stdout.txt
new file mode 100644
index 0000000..43d0958
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValid-stdout.txt
@@ -0,0 +1,2 @@
+
+Generate graphviz: .+[\\/]my_graphviz\.dot
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid.cmake b/Tests/RunCMake/CMakePresets/GraphvizValid.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValid.cmake
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid.json.in b/Tests/RunCMake/CMakePresets/GraphvizValid.json.in
new file mode 100644
index 0000000..0a4ab6a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValid.json.in
@@ -0,0 +1,11 @@
+{
+ "version": 10,
+ "configurePresets": [
+ {
+ "name": "GraphvizValid",
+ "generator": "@RunCMake_GENERATOR@",
+ "graphviz": "${sourceDir}/my_graphviz.dot",
+ "binaryDir": "${sourceDir}/build"
+ }
+ ]
+}
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-result.txt b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-stderr.txt b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-stderr.txt
new file mode 100644
index 0000000..0b7b4d6
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-stderr.txt
@@ -0,0 +1,2 @@
+^CMake Error: Could not read presets from .*
+File version must be 10 or higher for graphviz preset support
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.cmake b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.cmake
diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.json.in b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.json.in
new file mode 100644
index 0000000..85d0b1b
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.json.in
@@ -0,0 +1,11 @@
+{
+ "version": 9,
+ "configurePresets": [
+ {
+ "name": "GraphvizValid",
+ "generator": "@RunCMake_GENERATOR@",
+ "graphviz": "${sourceDir}/my_graphviz.dot",
+ "binaryDir": "${sourceDir}/build"
+ }
+ ]
+}
diff --git a/Tests/RunCMake/CMakePresets/NoCommentValid-result.txt b/Tests/RunCMake/CMakePresets/NoCommentValid-result.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoCommentValid-result.txt
@@ -0,0 +1 @@
+0
diff --git a/Tests/RunCMake/CMakePresets/NoCommentValid.cmake b/Tests/RunCMake/CMakePresets/NoCommentValid.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoCommentValid.cmake
diff --git a/Tests/RunCMake/CMakePresets/NoCommentValid.json.in b/Tests/RunCMake/CMakePresets/NoCommentValid.json.in
new file mode 100644
index 0000000..cf10ee2
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoCommentValid.json.in
@@ -0,0 +1,10 @@
+{
+ "version": 10,
+ "configurePresets": [
+ {
+ "name": "NoCommentValid",
+ "generator": "@RunCMake_GENERATOR@",
+ "binaryDir": "${sourceDir}/build"
+ }
+ ]
+}
diff --git a/Tests/RunCMake/CMakePresets/NoGraphvizValid-result.txt b/Tests/RunCMake/CMakePresets/NoGraphvizValid-result.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoGraphvizValid-result.txt
@@ -0,0 +1 @@
+0
diff --git a/Tests/RunCMake/CMakePresets/NoGraphvizValid.cmake b/Tests/RunCMake/CMakePresets/NoGraphvizValid.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoGraphvizValid.cmake
diff --git a/Tests/RunCMake/CMakePresets/NoGraphvizValid.json.in b/Tests/RunCMake/CMakePresets/NoGraphvizValid.json.in
new file mode 100644
index 0000000..b689833
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoGraphvizValid.json.in
@@ -0,0 +1,10 @@
+{
+ "version": 10,
+ "configurePresets": [
+ {
+ "name": "NoGraphvizValid",
+ "generator": "@RunCMake_GENERATOR@",
+ "binaryDir": "${sourceDir}/build"
+ }
+ ]
+}
diff --git a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
index 2ec0a43..a92a4c4 100644
--- a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
@@ -92,6 +92,17 @@ endfunction()
set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
run_cmake_presets(NoCMakePresets)
run_cmake_presets(Comment)
+set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
+run_cmake_presets(NoCommentValid)
+run_cmake_presets(CommentValid)
+run_cmake_presets(CommentValidFull)
+set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
+run_cmake_presets(CommentValidOldSchema)
+set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
+run_cmake_presets(NoGraphvizValid)
+run_cmake_presets(GraphvizValid)
+set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
+run_cmake_presets(GraphvizValidOldSchema)
run_cmake_presets(JSONParseError)
run_cmake_presets(InvalidRoot)
run_cmake_presets(NoVersion)
diff --git a/Tests/RunCMake/CPack/README.txt b/Tests/RunCMake/CPack/README.txt
index 2165125..d403db0 100644
--- a/Tests/RunCMake/CPack/README.txt
+++ b/Tests/RunCMake/CPack/README.txt
@@ -10,8 +10,8 @@ CPack test root directory: 'Tests/RunCMake/CPack/tests'.
All phases are executed separately for each generator that is bound to a test.
Tests for each generator are subtests of test 'RunCMake.CPack_<generator_name>'.
-Each test must also be added to 'RunCMakeTest.cmake' script located in CPack
-test root directory.
+Each test must be added to list "cpack_tests" in 'Tests/RunCMake/CMakeLists.txt'
+and also to 'RunCMakeTest.cmake' script located in 'Tests/RunCMake/CPack/'.
Line that adds a test is:
run_cpack_test(<test_name> "<generator_name_list>" <compile_stage>
@@ -53,7 +53,7 @@ Test consists of
- verification of generated files
The phases are executed once per specified generator, packaging type and subtest
-combinatiion.
+combination.
test prerequirements phase (optional):
--------------------------------------
@@ -136,7 +136,7 @@ this step and must contain
- EXPECTED_FILES_COUNT variable that contains the number of expected files that
will be generated (0 or more)
-- EXPECTED_FILE_<file_number_starting_with_1> that contains globing expression
+- EXPECTED_FILE_<file_number_starting_with_1> that contains globbing expression
that uniquely defines expected file name (will be used to find expected file)
and should be present once for each expected file.
NOTE: This variable should be used only as last resort as it sets generator
diff --git a/Tests/RunCMake/CPack/RunCMakeTest.cmake b/Tests/RunCMake/CPack/RunCMakeTest.cmake
index 5d32404..54671aa 100644
--- a/Tests/RunCMake/CPack/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake
@@ -73,3 +73,4 @@ run_cpack_test_package_target(PRE_POST_SCRIPTS "ZIP" false "MONOLITHIC;COMPONENT
run_cpack_test_subtests(DUPLICATE_FILE "success;conflict_file;conflict_symlink" "TGZ" false "COMPONENT;GROUP")
run_cpack_test(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP")
run_cpack_test_package_target(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP")
+run_cpack_test_subtests(MULTIARCH "same;foreign;allowed;fail" "DEB.MULTIARCH" false "MONOLITHIC;COMPONENT")
diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt b/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt
new file mode 100644
index 0000000..8164e83
--- /dev/null
+++ b/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt
@@ -0,0 +1 @@
+Error: invalid value for Multi-Arch: fail\. Valid values are: same, foreign, allowed
diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake
new file mode 100644
index 0000000..14b898f
--- /dev/null
+++ b/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake
@@ -0,0 +1,5 @@
+set(EXPECTED_FILES_COUNT "0")
+if(NOT ${RunCMake_SUBTEST_SUFFIX} STREQUAL "fail")
+ set(EXPECTED_FILES_COUNT "1")
+ set(EXPECTED_FILE_CONTENT_1_LIST "/foo;/foo/CMakeLists.txt")
+endif ()
diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake
new file mode 100644
index 0000000..f4e8050
--- /dev/null
+++ b/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake
@@ -0,0 +1,4 @@
+if(NOT ${RunCMake_SUBTEST_SUFFIX} STREQUAL "fail")
+ set(MULTIARCH_control "Multi-Arch: ${RunCMake_SUBTEST_SUFFIX}")
+ verifyDebControl("${FOUND_FILE_1}" "MULTIARCH" "control")
+endif ()
diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake
new file mode 100644
index 0000000..9784342
--- /dev/null
+++ b/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake
@@ -0,0 +1,7 @@
+install(FILES CMakeLists.txt DESTINATION foo COMPONENT test)
+
+set(CPACK_DEBIAN_PACKAGE_MULTIARCH ${RunCMake_SUBTEST_SUFFIX})
+
+if(PACKAGING_TYPE STREQUAL "COMPONENT")
+ set(CPACK_COMPONENTS_ALL test)
+endif()
diff --git a/Tests/RunCMake/CPackConfig/CMP0172-NEW-check.cmake b/Tests/RunCMake/CPackConfig/CMP0172-NEW-check.cmake
new file mode 100644
index 0000000..3e26e53
--- /dev/null
+++ b/Tests/RunCMake/CPackConfig/CMP0172-NEW-check.cmake
@@ -0,0 +1,2 @@
+include(${RunCMake_SOURCE_DIR}/check.cmake)
+test_variable(CPACK_WIX_INSTALL_SCOPE "perMachine")
diff --git a/Tests/RunCMake/CPackConfig/CMP0172-NEW.cmake b/Tests/RunCMake/CPackConfig/CMP0172-NEW.cmake
new file mode 100644
index 0000000..ddab227
--- /dev/null
+++ b/Tests/RunCMake/CPackConfig/CMP0172-NEW.cmake
@@ -0,0 +1 @@
+cmake_policy(SET CMP0172 NEW)
diff --git a/Tests/RunCMake/CPackConfig/CMP0172-OLD-check.cmake b/Tests/RunCMake/CPackConfig/CMP0172-OLD-check.cmake
new file mode 100644
index 0000000..63889b4
--- /dev/null
+++ b/Tests/RunCMake/CPackConfig/CMP0172-OLD-check.cmake
@@ -0,0 +1,2 @@
+include(${RunCMake_SOURCE_DIR}/check.cmake)
+test_variable(CPACK_WIX_INSTALL_SCOPE "")
diff --git a/Tests/RunCMake/CPackConfig/CMP0172-OLD.cmake b/Tests/RunCMake/CPackConfig/CMP0172-OLD.cmake
new file mode 100644
index 0000000..856c9e7
--- /dev/null
+++ b/Tests/RunCMake/CPackConfig/CMP0172-OLD.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_POLICY_WARNING_CMP0172 1)
+cmake_policy(SET CMP0172 OLD)
diff --git a/Tests/RunCMake/CPackConfig/CMP0172-WARN-check.cmake b/Tests/RunCMake/CPackConfig/CMP0172-WARN-check.cmake
new file mode 100644
index 0000000..63889b4
--- /dev/null
+++ b/Tests/RunCMake/CPackConfig/CMP0172-WARN-check.cmake
@@ -0,0 +1,2 @@
+include(${RunCMake_SOURCE_DIR}/check.cmake)
+test_variable(CPACK_WIX_INSTALL_SCOPE "")
diff --git a/Tests/RunCMake/CPackConfig/CMP0172-WARN-stderr.txt b/Tests/RunCMake/CPackConfig/CMP0172-WARN-stderr.txt
new file mode 100644
index 0000000..4596686
--- /dev/null
+++ b/Tests/RunCMake/CPackConfig/CMP0172-WARN-stderr.txt
@@ -0,0 +1,12 @@
+^CMake Warning \(dev\) at [^
+]*/Modules/CPack\.cmake:[0-9]+ \(message\):
+ Policy CMP0172 is not set: The CPack module enables per-machine
+ installation by default in the CPack WIX Generator\. Run "cmake
+ --help-policy CMP0172" for policy details\. Use the cmake_policy command to
+ set the policy and suppress this warning.
+
+ For compatibility, CMake will not enable per-machine installation by
+ default in the CPack WIX Generator\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
+This warning is for project developers\. Use -Wno-dev to suppress it\.$
diff --git a/Tests/RunCMake/CPackConfig/CMP0172-WARN.cmake b/Tests/RunCMake/CPackConfig/CMP0172-WARN.cmake
new file mode 100644
index 0000000..d9c4f0a
--- /dev/null
+++ b/Tests/RunCMake/CPackConfig/CMP0172-WARN.cmake
@@ -0,0 +1 @@
+set(CMAKE_POLICY_WARNING_CMP0172 1)
diff --git a/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake b/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake
index 1de640b..4d61073 100644
--- a/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake
@@ -5,6 +5,9 @@ run_cmake(CMP0133-WARN)
run_cmake(CMP0161-NEW)
run_cmake(CMP0161-OLD)
run_cmake(CMP0161-WARN)
+run_cmake(CMP0172-NEW)
+run_cmake(CMP0172-OLD)
+run_cmake(CMP0172-WARN)
run_cmake(Simple)
run_cmake(Default)
run_cmake(Special)
diff --git a/Tests/RunCMake/CTestCommandLine/FailureLabels-result.txt b/Tests/RunCMake/CTestCommandLine/FailureLabels-result.txt
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/Tests/RunCMake/CTestCommandLine/FailureLabels-result.txt
@@ -0,0 +1 @@
+8
diff --git a/Tests/RunCMake/CTestCommandLine/FailureLabels-stderr.txt b/Tests/RunCMake/CTestCommandLine/FailureLabels-stderr.txt
new file mode 100644
index 0000000..ba4235d
--- /dev/null
+++ b/Tests/RunCMake/CTestCommandLine/FailureLabels-stderr.txt
@@ -0,0 +1 @@
+Errors while running CTest
diff --git a/Tests/RunCMake/CTestCommandLine/FailureLabels-stdout.txt b/Tests/RunCMake/CTestCommandLine/FailureLabels-stdout.txt
new file mode 100644
index 0000000..3fa9fb8
--- /dev/null
+++ b/Tests/RunCMake/CTestCommandLine/FailureLabels-stdout.txt
@@ -0,0 +1,4 @@
+The following tests FAILED:
+[ ]+1 - ShortName \(Failed\) Label1 Label2
+[ ]+2 - LongerName \(Failed\) Label3
+[ ]+3 - Long_Test_Name_That_Is_Over_Fifty_Characters_In_Length \(Failed\) Label4
diff --git a/Tests/RunCMake/CTestCommandLine/PrintLabels-stdout.txt b/Tests/RunCMake/CTestCommandLine/PrintLabels-stdout.txt
new file mode 100644
index 0000000..21791aa
--- /dev/null
+++ b/Tests/RunCMake/CTestCommandLine/PrintLabels-stdout.txt
@@ -0,0 +1,6 @@
+^Test project [^
+]*/Tests/RunCMake/CTestCommandLine/PrintLabels
+All Labels:
+ Label1
+ Label2
+ Label3$
diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake
index 190c6c1..b2374ca 100644
--- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake
@@ -7,6 +7,36 @@ set(ENV{no_proxy} "$ENV{no_proxy},badhostname.invalid")
set(RunCMake_TEST_TIMEOUT 60)
+block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/FailureLabels)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+ file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+ file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
+add_test(ShortName \"${CMAKE_COMMAND}\" -E false)
+set_tests_properties(ShortName PROPERTIES LABELS \"Label1;Label2\")
+add_test(LongerName \"${CMAKE_COMMAND}\" -E false)
+set_tests_properties(LongerName PROPERTIES LABELS \"Label3\")
+add_test(Long_Test_Name_That_Is_Over_Fifty_Characters_In_Length \"${CMAKE_COMMAND}\" -E false)
+set_tests_properties(Long_Test_Name_That_Is_Over_Fifty_Characters_In_Length PROPERTIES LABELS \"Label4\")
+")
+ run_cmake_command(FailureLabels ${CMAKE_CTEST_COMMAND})
+endblock()
+
+block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/PrintLabels)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+ file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+ file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
+add_test(A \"${CMAKE_COMMAND}\" -E true)
+set_tests_properties(A PROPERTIES LABELS \"Label1;Label2\")
+add_test(B \"${CMAKE_COMMAND}\" -E true)
+set_tests_properties(B PROPERTIES LABELS \"Label3\")
+")
+ run_cmake_command(PrintLabels ${CMAKE_CTEST_COMMAND} --print-labels)
+endblock()
+
run_cmake_command(repeat-opt-bad1
${CMAKE_CTEST_COMMAND} --repeat until-pass
)
diff --git a/Tests/RunCMake/Codegen/CMakeLists.txt b/Tests/RunCMake/Codegen/CMakeLists.txt
new file mode 100644
index 0000000..f65150d
--- /dev/null
+++ b/Tests/RunCMake/Codegen/CMakeLists.txt
@@ -0,0 +1,7 @@
+cmake_minimum_required(VERSION 3.29)
+project(${RunCMake_TEST} LANGUAGES C)
+
+# This value is read from the top level CMakeLists.txt
+cmake_policy(SET CMP0171 NEW)
+
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/Codegen/RunCMakeTest.cmake b/Tests/RunCMake/Codegen/RunCMakeTest.cmake
new file mode 100644
index 0000000..bbd70b0
--- /dev/null
+++ b/Tests/RunCMake/Codegen/RunCMakeTest.cmake
@@ -0,0 +1,33 @@
+include(RunCMake)
+
+function(run_codegen case)
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
+
+ run_cmake(${case})
+
+ set(RunCMake_TEST_NO_CLEAN 1)
+
+ run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --target codegen --config Debug)
+endfunction()
+
+# Builds codegen target when there are no custom commands marked codegen
+run_codegen("no-codegen")
+
+# We don't want codegen to drive parts of the project that are EXCLUDE_FROM_ALL
+run_codegen("exclude-from-all")
+
+# Ensures codegen builds minimal build graphs
+run_codegen("min-graph-1")
+run_codegen("min-graph-2")
+run_codegen("min-graph-3")
+
+# Handle specific cases that can affect codegen
+run_codegen("add-dependencies")
+run_codegen("add-custom-command-depends")
+run_codegen("byproducts")
+
+# Error handling
+run_cmake("implicit-depends")
+run_cmake("implicit-depends-append-codegen")
+run_cmake("append-implicit-depends")
+run_cmake("no-output")
diff --git a/Tests/RunCMake/Codegen/add-custom-command-depends-build-check.cmake b/Tests/RunCMake/Codegen/add-custom-command-depends-build-check.cmake
new file mode 100644
index 0000000..d371d73
--- /dev/null
+++ b/Tests/RunCMake/Codegen/add-custom-command-depends-build-check.cmake
@@ -0,0 +1,5 @@
+set(filename "${RunCMake_TEST_BINARY_DIR}/generated.hpp")
+if (NOT EXISTS "${filename}")
+ set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}")
+ return()
+endif()
diff --git a/Tests/RunCMake/Codegen/add-custom-command-depends.cmake b/Tests/RunCMake/Codegen/add-custom-command-depends.cmake
new file mode 100644
index 0000000..793ab5f
--- /dev/null
+++ b/Tests/RunCMake/Codegen/add-custom-command-depends.cmake
@@ -0,0 +1,16 @@
+add_custom_target(foobar
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+)
+
+add_custom_command(
+ OUTPUT generated.hpp
+ # This test will fail if DEPENDS isn't accounted for in the codegen build graph
+ DEPENDS foobar
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+ CODEGEN
+)
+
+add_custom_target(hpp_creator ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp)
diff --git a/Tests/RunCMake/Codegen/add-dependencies-build-check.cmake b/Tests/RunCMake/Codegen/add-dependencies-build-check.cmake
new file mode 100644
index 0000000..d371d73
--- /dev/null
+++ b/Tests/RunCMake/Codegen/add-dependencies-build-check.cmake
@@ -0,0 +1,5 @@
+set(filename "${RunCMake_TEST_BINARY_DIR}/generated.hpp")
+if (NOT EXISTS "${filename}")
+ set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}")
+ return()
+endif()
diff --git a/Tests/RunCMake/Codegen/add-dependencies.cmake b/Tests/RunCMake/Codegen/add-dependencies.cmake
new file mode 100644
index 0000000..fbb7e99
--- /dev/null
+++ b/Tests/RunCMake/Codegen/add-dependencies.cmake
@@ -0,0 +1,18 @@
+add_custom_target(foobar
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+)
+
+add_custom_command(
+ OUTPUT generated.hpp
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+ CODEGEN
+)
+
+add_custom_target(hpp_creator ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp)
+
+# This test will fail if add_dependencies isn't account for in the
+# codegen build graph
+add_dependencies(hpp_creator foobar)
diff --git a/Tests/RunCMake/Codegen/append-implicit-depends-result.txt b/Tests/RunCMake/Codegen/append-implicit-depends-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/Codegen/append-implicit-depends-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/Codegen/append-implicit-depends-stderr.txt b/Tests/RunCMake/Codegen/append-implicit-depends-stderr.txt
new file mode 100644
index 0000000..c8ef03e
--- /dev/null
+++ b/Tests/RunCMake/Codegen/append-implicit-depends-stderr.txt
@@ -0,0 +1,2 @@
+CMake Error:
+ Cannot append IMPLICIT_DEPENDS to existing CODEGEN custom command\.
diff --git a/Tests/RunCMake/Codegen/append-implicit-depends.cmake b/Tests/RunCMake/Codegen/append-implicit-depends.cmake
new file mode 100644
index 0000000..d212fe5
--- /dev/null
+++ b/Tests/RunCMake/Codegen/append-implicit-depends.cmake
@@ -0,0 +1,19 @@
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+ COMMAND
+ ${CMAKE_COMMAND} -E
+ copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+ CODEGEN
+)
+
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+
+ # ERROR out if IMPLICIT_DEPENDS is used with CODEGEN
+ IMPLICIT_DEPENDS C main.c
+
+ APPEND
+)
diff --git a/Tests/RunCMake/Codegen/byproducts-build-check.cmake b/Tests/RunCMake/Codegen/byproducts-build-check.cmake
new file mode 100644
index 0000000..d371d73
--- /dev/null
+++ b/Tests/RunCMake/Codegen/byproducts-build-check.cmake
@@ -0,0 +1,5 @@
+set(filename "${RunCMake_TEST_BINARY_DIR}/generated.hpp")
+if (NOT EXISTS "${filename}")
+ set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}")
+ return()
+endif()
diff --git a/Tests/RunCMake/Codegen/byproducts.cmake b/Tests/RunCMake/Codegen/byproducts.cmake
new file mode 100644
index 0000000..ea0b6c7
--- /dev/null
+++ b/Tests/RunCMake/Codegen/byproducts.cmake
@@ -0,0 +1,19 @@
+add_custom_target(foobar
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ BYPRODUCTS
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+)
+
+# This codegen step relies on the BYPRODUCTS of the previous command.
+# If foobar isn't properly accounted for as a dependency it will fail.
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+ CODEGEN
+)
+
+add_custom_target(hpp_creator ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp)
diff --git a/Tests/RunCMake/Codegen/error.c b/Tests/RunCMake/Codegen/error.c
new file mode 100644
index 0000000..34cb350
--- /dev/null
+++ b/Tests/RunCMake/Codegen/error.c
@@ -0,0 +1 @@
+#error "This file should not be compiled"
diff --git a/Tests/RunCMake/Codegen/exclude-from-all.cmake b/Tests/RunCMake/Codegen/exclude-from-all.cmake
new file mode 100644
index 0000000..bcd4ac0
--- /dev/null
+++ b/Tests/RunCMake/Codegen/exclude-from-all.cmake
@@ -0,0 +1,11 @@
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ COMMAND
+ ${CMAKE_COMMAND} -E false
+ CODEGEN
+)
+
+# We don't want codegen to drive parts of the project that are EXCLUDE_FROM_ALL.
+# This tests that foobar is properly excluded from the codegen build.
+add_executable(foobar EXCLUDE_FROM_ALL error.c ${CMAKE_CURRENT_BINARY_DIR}/generated.h)
diff --git a/Tests/RunCMake/Codegen/generated.h.in b/Tests/RunCMake/Codegen/generated.h.in
new file mode 100644
index 0000000..82ccf67
--- /dev/null
+++ b/Tests/RunCMake/Codegen/generated.h.in
@@ -0,0 +1 @@
+// hello
diff --git a/Tests/RunCMake/Codegen/implicit-depends-append-codegen-result.txt b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/Codegen/implicit-depends-append-codegen-stderr.txt b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-stderr.txt
new file mode 100644
index 0000000..570cf62
--- /dev/null
+++ b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-stderr.txt
@@ -0,0 +1,4 @@
+^CMake Error at implicit-depends-append-codegen\.cmake:[0-9]+ \(add_custom_command\):
+ add_custom_command CODEGEN may not be used with APPEND\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/Codegen/implicit-depends-append-codegen.cmake b/Tests/RunCMake/Codegen/implicit-depends-append-codegen.cmake
new file mode 100644
index 0000000..76151cc
--- /dev/null
+++ b/Tests/RunCMake/Codegen/implicit-depends-append-codegen.cmake
@@ -0,0 +1,18 @@
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+
+ # ERROR out if IMPLICIT_DEPENDS is used with CODEGEN
+ IMPLICIT_DEPENDS C main.c
+)
+
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+ COMMAND
+ ${CMAKE_COMMAND} -E
+ copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+ CODEGEN
+ APPEND
+)
diff --git a/Tests/RunCMake/Codegen/implicit-depends-result.txt b/Tests/RunCMake/Codegen/implicit-depends-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/Codegen/implicit-depends-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/Codegen/implicit-depends-stderr.txt b/Tests/RunCMake/Codegen/implicit-depends-stderr.txt
new file mode 100644
index 0000000..b9ea8f4
--- /dev/null
+++ b/Tests/RunCMake/Codegen/implicit-depends-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at implicit-depends\.cmake:[0-9]+ \(add_custom_command\):
+ add_custom_command CODEGEN is not compatible with IMPLICIT_DEPENDS\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/Codegen/implicit-depends.cmake b/Tests/RunCMake/Codegen/implicit-depends.cmake
new file mode 100644
index 0000000..011d4b3
--- /dev/null
+++ b/Tests/RunCMake/Codegen/implicit-depends.cmake
@@ -0,0 +1,11 @@
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+ COMMAND
+ ${CMAKE_COMMAND} -E
+ copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c
+ ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
+ CODEGEN
+ # ERROR out if IMPLICIT_DEPENDS is used with CODEGEN
+ IMPLICIT_DEPENDS C main.c
+)
diff --git a/Tests/RunCMake/Autogen/exe.cpp b/Tests/RunCMake/Codegen/main.c
index f8b643a..8488f4e 100644
--- a/Tests/RunCMake/Autogen/exe.cpp
+++ b/Tests/RunCMake/Codegen/main.c
@@ -1,4 +1,4 @@
-int main()
+int main(void)
{
return 0;
}
diff --git a/Tests/RunCMake/Codegen/min-graph-1-build-check.cmake b/Tests/RunCMake/Codegen/min-graph-1-build-check.cmake
new file mode 100644
index 0000000..32e1557
--- /dev/null
+++ b/Tests/RunCMake/Codegen/min-graph-1-build-check.cmake
@@ -0,0 +1,13 @@
+set(filename "${RunCMake_TEST_BINARY_DIR}/generated.h")
+if (NOT EXISTS "${filename}")
+ set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}")
+ return()
+endif()
+
+# foobar should be built since it was needed
+# by the code generation
+set(filename "${RunCMake_TEST_BINARY_DIR}/foobar.txt")
+if (NOT EXISTS "${filename}")
+ set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}")
+ return()
+endif()
diff --git a/Tests/RunCMake/Codegen/min-graph-1.cmake b/Tests/RunCMake/Codegen/min-graph-1.cmake
new file mode 100644
index 0000000..ea47b8f
--- /dev/null
+++ b/Tests/RunCMake/Codegen/min-graph-1.cmake
@@ -0,0 +1,26 @@
+add_executable(foobar main.c)
+add_custom_command(
+ TARGET foobar POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E
+ copy ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/foobar.txt
+)
+
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ COMMAND
+ ${CMAKE_COMMAND} -E
+ copy ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ COMMAND
+ # Generate a header file that requires foobar
+ foobar
+ CODEGEN
+)
+
+add_library(errorlib
+ # If this library is built error.c will cause the build to fail
+ error.c
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+)
diff --git a/Tests/RunCMake/Codegen/min-graph-2-build-check.cmake b/Tests/RunCMake/Codegen/min-graph-2-build-check.cmake
new file mode 100644
index 0000000..fab168b
--- /dev/null
+++ b/Tests/RunCMake/Codegen/min-graph-2-build-check.cmake
@@ -0,0 +1,5 @@
+set(filename "${RunCMake_TEST_BINARY_DIR}/generated.h")
+if (NOT EXISTS "${filename}")
+ set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}")
+ return()
+endif()
diff --git a/Tests/RunCMake/Codegen/min-graph-2.cmake b/Tests/RunCMake/Codegen/min-graph-2.cmake
new file mode 100644
index 0000000..277a901
--- /dev/null
+++ b/Tests/RunCMake/Codegen/min-graph-2.cmake
@@ -0,0 +1,18 @@
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ COMMAND
+ ${CMAKE_COMMAND} -E
+ copy ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+ CODEGEN
+)
+
+# This target should not be built. It has no reason
+# to be part of the codegen build graph
+add_custom_target(error_custom_target ALL
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+
+ # Cause the build to fail
+ COMMAND ${CMAKE_COMMAND} -E false
+)
diff --git a/Tests/RunCMake/Codegen/min-graph-3-build-check.cmake b/Tests/RunCMake/Codegen/min-graph-3-build-check.cmake
new file mode 100644
index 0000000..734777b
--- /dev/null
+++ b/Tests/RunCMake/Codegen/min-graph-3-build-check.cmake
@@ -0,0 +1,5 @@
+set(filename "${RunCMake_TEST_BINARY_DIR}/error_lib.c")
+if (NOT EXISTS "${filename}")
+ set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}")
+ return()
+endif()
diff --git a/Tests/RunCMake/Codegen/min-graph-3.cmake b/Tests/RunCMake/Codegen/min-graph-3.cmake
new file mode 100644
index 0000000..c7d61dc
--- /dev/null
+++ b/Tests/RunCMake/Codegen/min-graph-3.cmake
@@ -0,0 +1,12 @@
+add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/error_lib.c
+ COMMAND
+ ${CMAKE_COMMAND} -E
+ copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c
+ ${CMAKE_CURRENT_BINARY_DIR}/error_lib.c
+ CODEGEN
+)
+
+# This test will fail if error_lib.c is actually compiled
+add_executable(foobar ${CMAKE_CURRENT_BINARY_DIR}/error_lib.c)
diff --git a/Tests/RunCMake/Codegen/no-codegen-check.cmake b/Tests/RunCMake/Codegen/no-codegen-check.cmake
new file mode 100644
index 0000000..97fc46b
--- /dev/null
+++ b/Tests/RunCMake/Codegen/no-codegen-check.cmake
@@ -0,0 +1,5 @@
+# Verify generated.hpp was NOT created
+set(unexpected "${RunCMake_TEST_BINARY_DIR}/generated.hpp")
+if(EXISTS "${unexpected}")
+ set(RunCMake_TEST_FAILED "unexpected file created:\n ${unexpected}")
+endif()
diff --git a/Tests/RunCMake/Codegen/no-codegen.cmake b/Tests/RunCMake/Codegen/no-codegen.cmake
new file mode 100644
index 0000000..00ddd03
--- /dev/null
+++ b/Tests/RunCMake/Codegen/no-codegen.cmake
@@ -0,0 +1,6 @@
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp
+)
diff --git a/Tests/RunCMake/Codegen/no-output-result.txt b/Tests/RunCMake/Codegen/no-output-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/Codegen/no-output-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/Codegen/no-output-stderr.txt b/Tests/RunCMake/Codegen/no-output-stderr.txt
new file mode 100644
index 0000000..7aad679
--- /dev/null
+++ b/Tests/RunCMake/Codegen/no-output-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at no-output\.cmake:[0-9]+ \(add_custom_command\):
+ add_custom_command CODEGEN requires at least 1 OUTPUT\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/Codegen/no-output.cmake b/Tests/RunCMake/Codegen/no-output.cmake
new file mode 100644
index 0000000..61eb83c
--- /dev/null
+++ b/Tests/RunCMake/Codegen/no-output.cmake
@@ -0,0 +1,11 @@
+add_custom_target(foobar
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/generated.h
+)
+
+add_custom_command(TARGET foobar POST_BUILD
+ COMMAND
+ ${CMAKE_COMMAND} -E true
+ CODEGEN
+)
diff --git a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake
index 7a5a334..8e5bffe 100644
--- a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake
@@ -49,6 +49,16 @@ run_cmake_command(E___run_co_compile-no--- ${CMAKE_COMMAND} -E __run_co_compile
run_cmake_command(E___run_co_compile-no-cc ${CMAKE_COMMAND} -E __run_co_compile --iwyu=iwyu-does-not-exist --)
run_cmake_command(E___run_co_compile-tidy-remove-fixes ${CMAKE_COMMAND} -E __run_co_compile "--tidy=${CMAKE_COMMAND}\\;-E\\;true\\;--export-fixes=${RunCMake_BINARY_DIR}/tidy-fixes.yaml" -- ${CMAKE_COMMAND} -E true)
+block()
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/list-cache-build)
+ run_cmake(list-cache)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ run_cmake_command(list-cache-LR ${CMAKE_COMMAND} . -LR MIDDLE)
+ run_cmake_command(list-cache-LRA ${CMAKE_COMMAND} . -LRA MIDDLE)
+ run_cmake_command(list-cache-LRH ${CMAKE_COMMAND} . -LRH MIDDLE)
+ run_cmake_command(list-cache-LRAH ${CMAKE_COMMAND} . -LRAH MIDDLE)
+endblock()
+
run_cmake_command(G_no-arg ${CMAKE_COMMAND} -B DummyBuildDir -G)
run_cmake_command(G_bad-arg ${CMAKE_COMMAND} -B DummyBuildDir -G NoSuchGenerator)
run_cmake_command(P_no-arg ${CMAKE_COMMAND} -P)
@@ -1128,3 +1138,17 @@ if(RunCMake_GENERATOR MATCHES "^Visual Studio 12 2013")
endif()
run_cmake_with_options(help-arbitrary "--help" "CMAKE_CXX_IGNORE_EXTENSIONS")
+
+if (WIN32 OR DEFINED ENV{HOME})
+ set(config_dir_test print-config-dir)
+ if (WIN32)
+ set(config_dir_test print-config-dir-win)
+ elseif(APPLE)
+ set(config_dir_test print-config-dir-apple)
+ endif()
+ unset(ENV{CMAKE_CONFIG_DIR})
+ unset(ENV{XDG_CONFIG_HOME})
+ run_cmake_command(${config_dir_test} ${CMAKE_COMMAND} "--print-config-dir")
+endif()
+set(ENV{CMAKE_CONFIG_DIR} cmake_config_dir)
+run_cmake_command(print-config-dir-env ${CMAKE_COMMAND} "--print-config-dir")
diff --git a/Tests/RunCMake/CommandLine/list-cache-LR-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LR-stdout.txt
new file mode 100644
index 0000000..9a4e0db
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/list-cache-LR-stdout.txt
@@ -0,0 +1,3 @@
+-- Cache values
+MIDDLE_ENTRY_1:STRING=1
+MIDDLE_ENTRY_2:STRING=2$
diff --git a/Tests/RunCMake/CommandLine/list-cache-LRA-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LRA-stdout.txt
new file mode 100644
index 0000000..a452355
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/list-cache-LRA-stdout.txt
@@ -0,0 +1,4 @@
+-- Cache values
+MIDDLE_ENTRY_1:STRING=1
+MIDDLE_ENTRY_2:STRING=2
+MIDDLE_ENTRY_3:STRING=3$
diff --git a/Tests/RunCMake/CommandLine/list-cache-LRAH-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LRAH-stdout.txt
new file mode 100644
index 0000000..cf502c1
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/list-cache-LRAH-stdout.txt
@@ -0,0 +1,9 @@
+-- Cache values
+// mid 1
+MIDDLE_ENTRY_1:STRING=1
+
+// mid 2
+MIDDLE_ENTRY_2:STRING=2
+
+// mid 3
+MIDDLE_ENTRY_3:STRING=3$
diff --git a/Tests/RunCMake/CommandLine/list-cache-LRH-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LRH-stdout.txt
new file mode 100644
index 0000000..0f6b3a0d
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/list-cache-LRH-stdout.txt
@@ -0,0 +1,6 @@
+-- Cache values
+// mid 1
+MIDDLE_ENTRY_1:STRING=1
+
+// mid 2
+MIDDLE_ENTRY_2:STRING=2$
diff --git a/Tests/RunCMake/CommandLine/list-cache.cmake b/Tests/RunCMake/CommandLine/list-cache.cmake
new file mode 100644
index 0000000..5617054
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/list-cache.cmake
@@ -0,0 +1,6 @@
+set(EARLY_ENTRY_1 "1" CACHE STRING "early")
+set(MIDDLE_ENTRY_1 "1" CACHE STRING "mid 1")
+set(MIDDLE_ENTRY_2 "2" CACHE STRING "mid 2")
+set(MIDDLE_ENTRY_3 "3" CACHE STRING "mid 3")
+mark_as_advanced(MIDDLE_ENTRY_3)
+set(LATER_ENTRY_1 "1" CACHE STRING "later")
diff --git a/Tests/RunCMake/CommandLine/print-config-dir-apple-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-apple-stdout.txt
new file mode 100644
index 0000000..59db482
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/print-config-dir-apple-stdout.txt
@@ -0,0 +1 @@
+.*Library/Application\\ Support/CMake$
diff --git a/Tests/RunCMake/CommandLine/print-config-dir-env-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-env-stdout.txt
new file mode 100644
index 0000000..49f1d7b
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/print-config-dir-env-stdout.txt
@@ -0,0 +1 @@
+cmake_config_dir
diff --git a/Tests/RunCMake/CommandLine/print-config-dir-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-stdout.txt
new file mode 100644
index 0000000..53f6c8b
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/print-config-dir-stdout.txt
@@ -0,0 +1 @@
+.*config/cmake$
diff --git a/Tests/RunCMake/CommandLine/print-config-dir-win-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-win-stdout.txt
new file mode 100644
index 0000000..9df0671
--- /dev/null
+++ b/Tests/RunCMake/CommandLine/print-config-dir-win-stdout.txt
@@ -0,0 +1 @@
+.*AppData\\Local\\CMake$
diff --git a/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake b/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake
index f7959dc..1981fce 100644
--- a/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake
+++ b/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake
@@ -60,7 +60,7 @@ run_cmake(Property)
run_optimize_test(OptimizeShared SharedTop)
run_optimize_test(OptimizeStatic StaticTop)
-if(CMAKE_Fortran_COMPILER)
+if(CMake_TEST_Fortran)
run_optimize_test(OptimizeFortran FortranTop)
endif()
diff --git a/Tests/RunCMake/DependencyGraph/mylib.f90 b/Tests/RunCMake/DependencyGraph/mylib.f90
index 104768f..d3fac72 100644
--- a/Tests/RunCMake/DependencyGraph/mylib.f90
+++ b/Tests/RunCMake/DependencyGraph/mylib.f90
@@ -1,3 +1,4 @@
function mylib_fortran()
+ integer :: mylib_fortran
mylib_fortran = 42
end function mylib_fortran
diff --git a/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake b/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake
new file mode 100644
index 0000000..13a91df
--- /dev/null
+++ b/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake
@@ -0,0 +1,24 @@
+macro(check_plist key expect)
+ execute_process(
+ COMMAND plutil -extract "${key}" xml1 "${plist-file}" -o -
+ RESULT_VARIABLE result
+ OUTPUT_VARIABLE actual
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(actual MATCHES "<string>([^<>]*)</string>")
+ set(actual "${CMAKE_MATCH_1}")
+ endif()
+ if(NOT "${actual}" STREQUAL "${expect}")
+ string(CONCAT RunCMake_TEST_FAILED
+ "Framework Info.plist key \"${key}\" has value:\n"
+ " \"${actual}\"\n"
+ "but we expected:\n"
+ " \"${expect}\""
+ )
+ endif()
+endmacro()
+
+check_plist(CFBundleIdentifier MyFrameworkId)
+check_plist(CFBundleName MyFrameworkBundleName)
+check_plist(CFBundleVersion 3.2.1)
+check_plist(CFBundleShortVersionString 3)
diff --git a/Tests/RunCMake/Framework/FrameworkLayout.cmake b/Tests/RunCMake/Framework/FrameworkLayout.cmake
index d09e8a0..e230e07 100644
--- a/Tests/RunCMake/Framework/FrameworkLayout.cmake
+++ b/Tests/RunCMake/Framework/FrameworkLayout.cmake
@@ -15,6 +15,10 @@ if("${CMAKE_FRAMEWORK}" STREQUAL "")
FRAMEWORK TRUE)
endif()
set_target_properties(Framework PROPERTIES
+ MACOSX_FRAMEWORK_BUNDLE_NAME MyFrameworkBundleName
+ MACOSX_FRAMEWORK_BUNDLE_VERSION 3.2.1
+ MACOSX_FRAMEWORK_SHORT_VERSION_STRING 3
+ MACOSX_FRAMEWORK_IDENTIFIER MyFrameworkId
PUBLIC_HEADER foo.h
RESOURCE "res.txt")
set_source_files_properties(flatresource.txt PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
diff --git a/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake b/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake
index 76fe6b8..7a1d70e 100644
--- a/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake
+++ b/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake
@@ -20,26 +20,32 @@ else()
endif()
if(NOT IS_DIRECTORY ${framework_dir})
- message(SEND_ERROR "Framework dir not found at ${framework_dir}")
+ set(RunCMake_TEST_FAILED "Framework dir not found at \n ${framework_dir}")
+ return()
endif()
if(IS_DIRECTORY ${non_existent_debug_framework_dir})
- message(SEND_ERROR
- "A framework dir with a debug suffix should not exist at ${non_existent_debug_framework_dir}")
+ set(RunCMake_TEST_FAILED
+ "A framework dir with a debug suffix should not exist at \n ${non_existent_debug_framework_dir}")
+ return()
endif()
if(NOT IS_SYMLINK "${symlink_release_path}")
- message(SEND_ERROR "Release framework symlink not found at ${symlink_release_path}")
+ set(RunCMake_TEST_FAILED "Release framework symlink not found at \n ${symlink_release_path}")
+ return()
endif()
if(NOT IS_SYMLINK "${symlink_debug_path}")
- message(SEND_ERROR "Debug framework symlink not found at ${symlink_debug_path}")
+ set(RunCMake_TEST_FAILED "Debug framework symlink not found at \n ${symlink_debug_path}")
+ return()
endif()
if(NOT EXISTS "${framework_release_path}")
- message(SEND_ERROR "Release framework not found at ${framework_release_path}")
+ set(RunCMake_TEST_FAILED "Release framework not found at \n ${framework_release_path}")
+ return()
endif()
if(NOT EXISTS "${framework_debug_path}")
- message(SEND_ERROR "Debug framework not found at ${framework_debug_path}")
+ set(RunCMake_TEST_FAILED "Debug framework not found at \n ${framework_debug_path}")
+ return()
endif()
diff --git a/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake b/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake
index eb71394..b436128 100644
--- a/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake
+++ b/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake
@@ -10,41 +10,53 @@ set(plist-file "${framework-resources}/Info.plist")
set(framework-header "${framework-dir}/Headers/foo.h")
if(NOT IS_DIRECTORY ${framework-dir})
- message(SEND_ERROR "Framework not found at ${framework-dir}")
+ set(RunCMake_TEST_FAILED "Framework not found at \n ${framework-dir}")
+ return()
endif()
if(NOT EXISTS ${plist-file})
- message(SEND_ERROR "plist file not found at ${plist-file}")
+ set(RunCMake_TEST_FAILED "plist file not found at \n ${plist-file}")
+ return()
endif()
if(NOT EXISTS ${framework-library})
- message(SEND_ERROR "Framework library not found at ${framework-library}")
+ set(RunCMake_TEST_FAILED "Framework library not found at \n ${framework-library}")
+ return()
endif()
if(NOT EXISTS ${framework-resource-file})
- message(SEND_ERROR "Framework resource file not found at ${framework-resource-file}")
+ set(RunCMake_TEST_FAILED "Framework resource file not found at \n ${framework-resource-file}")
+ return()
endif()
if(NOT EXISTS ${framework-flat-resource-file})
- message(SEND_ERROR "Framework flat resource file not found at ${framework-flat-resource-file}")
+ set(RunCMake_TEST_FAILED "Framework flat resource file not found at \n ${framework-flat-resource-file}")
+ return()
endif()
if(NOT EXISTS ${framework-deep-resource-file})
- message(SEND_ERROR "Framework deep resource file not found at ${framework-deep-resource-file}")
+ set(RunCMake_TEST_FAILED "Framework deep resource file not found at \n ${framework-deep-resource-file}")
+ return()
endif()
if(NOT EXISTS ${framework-some-file})
- message(SEND_ERROR "Framework some file not found at ${framework-some-file}")
+ set(RunCMake_TEST_FAILED "Framework some file not found at \n ${framework-some-file}")
+ return()
endif()
if(NOT EXISTS ${framework-versions})
- message(SEND_ERROR "Framework versions not found at ${framework-versions}")
+ set(RunCMake_TEST_FAILED "Framework versions not found at \n ${framework-versions}")
+ return()
endif()
if(NOT EXISTS ${framework-resources})
- message(SEND_ERROR "Framework Resources not found at ${framework-resources}")
+ set(RunCMake_TEST_FAILED "Framework Resources not found at \n ${framework-resources}")
+ return()
endif()
if(NOT EXISTS ${framework-header})
- message(SEND_ERROR "Framework header file not found at ${framework-header}")
+ set(RunCMake_TEST_FAILED "Framework header file not found at \n ${framework-header}")
+ return()
endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FrameworkLayout-check-common.cmake)
diff --git a/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake b/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake
index 2da60d2..be9a5fe 100644
--- a/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake
+++ b/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake
@@ -10,41 +10,53 @@ set(plist-file "${framework-dir}/Info.plist")
set(framework-header "${framework-dir}/Headers/foo.h")
if(NOT IS_DIRECTORY ${framework-dir})
- message(SEND_ERROR "Framework not found at ${framework-dir}")
+ set(RunCMake_TEST_FAILED "Framework not found at\n ${framework-dir}")
+ return()
endif()
if(NOT EXISTS ${plist-file})
- message(SEND_ERROR "plist file not found at ${plist-file}")
+ set(RunCMake_TEST_FAILED "plist file not found at\n ${plist-file}")
+ return()
endif()
if(NOT EXISTS ${framework-library})
- message(SEND_ERROR "Framework library not found at ${framework-library}")
+ set(RunCMake_TEST_FAILED "Framework library not found at\n ${framework-library}")
+ return()
endif()
if(NOT EXISTS ${framework-resource-file})
- message(SEND_ERROR "Framework resource file not found at ${framework-resource-file}")
+ set(RunCMake_TEST_FAILED "Framework resource file not found at\n ${framework-resource-file}")
+ return()
endif()
if(NOT EXISTS ${framework-flat-resource-file})
- message(SEND_ERROR "Framework flat resource file not found at ${framework-flat-resource-file}")
+ set(RunCMake_TEST_FAILED "Framework flat resource file not found at\n ${framework-flat-resource-file}")
+ return()
endif()
if(NOT EXISTS ${framework-deep-resource-file})
- message(SEND_ERROR "Framework deep resource file not found at ${framework-deep-resource-file}")
+ set(RunCMake_TEST_FAILED "Framework deep resource file not found at\n ${framework-deep-resource-file}")
+ return()
endif()
if(NOT EXISTS ${framework-some-file})
- message(SEND_ERROR "Framework some file not found at ${framework-some-file}")
+ set(RunCMake_TEST_FAILED "Framework some file not found at\n ${framework-some-file}")
+ return()
endif()
if(EXISTS ${framework-versions})
- message(SEND_ERROR "Framework versions found at ${framework-versions}")
+ set(RunCMake_TEST_FAILED "Framework versions found at\n ${framework-versions}")
+ return()
endif()
if(EXISTS ${framework-resources})
- message(SEND_ERROR "Framework Resources found at ${framework-resources}")
+ set(RunCMake_TEST_FAILED "Framework Resources found at\n ${framework-resources}")
+ return()
endif()
if(NOT EXISTS ${framework-header})
- message(SEND_ERROR "Framework headers not found at ${framework-header}")
+ set(RunCMake_TEST_FAILED "Framework headers not found at\n ${framework-header}")
+ return()
endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FrameworkLayout-check-common.cmake)
diff --git a/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake b/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake
index ae3f112..b64ff38 100644
--- a/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake
+++ b/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake
@@ -1,17 +1,59 @@
include(RunCMake)
-function(install_test test parallel install_target check_script)
+function(install_test test)
+ cmake_parse_arguments(ARGS "PARALLEL;NINJA;TOUCH_CACHE" "ARGS;COMPONENT" "" ${ARGN})
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-install)
- set(RunCMake_TEST_OPTIONS -DINSTALL_PARALLEL=${parallel})
+ set(RunCMake_TEST_OPTIONS -DINSTALL_PARALLEL=${ARGS_PARALLEL} -DCMAKE_INSTALL_PREFIX=install)
+ set(RunCMake_TEST_OUTPUT_MERGE 1)
if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug)
endif()
+ if (ARGS_COMPONENT)
+ list(APPEND ARGS_ARGS "--component ${ARGS_COMPONENT}")
+ endif()
run_cmake(install)
set(RunCMake_TEST_NO_CLEAN 1)
- run_cmake_command(${test}-install ${CMAKE_COMMAND} --build . --config Debug -t ${install_target})
- set(RunCMake_TEST_COMMAND_WORKING_DIRECTORY ${RunCMake_SOURCE_DIR})
- run_cmake_command(verify-parallel ${CMAKE_COMMAND} -P ${check_script} ${RunCMake_TEST_BINARY_DIR}/.ninja_log)
+ if (ARGS_TOUCH_CACHE)
+ run_cmake_command(${test}-sleep ${CMAKE_COMMAND} -E sleep 2)
+ run_cmake_command(${test}-touch
+ ${CMAKE_COMMAND} -E touch ${RunCMake_TEST_BINARY_DIR}/CMakeFiles/cmake.check_cache)
+ endif()
+ if (ARGS_NINJA)
+ if (ARGS_PARALLEL)
+ set(INSTALL_COUNT 5)
+ else()
+ set(INSTALL_COUNT 1)
+ endif()
+ set(RunCMake-check-file check-num-installs.cmake)
+ run_cmake_command(${test}-install ${CMAKE_COMMAND} --build . --config Debug ${ARGS_ARGS})
+ unset(RunCMake-check-file)
+ else()
+ if (ARGS_COMPONENT)
+ if(ARGS_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$")
+ set(INSTALL_MANIFEST "install_manifest_${ARGS_COMPONENT}.txt")
+ else()
+ string(MD5 COMPONENT_HASH "${ARGS_COMPONENT}")
+ set(INSTALL_MANIFEST "install_manifest_${COMPONENT_HASH}.txt")
+ endif()
+ set(INSTALL_COUNT 0)
+ else()
+ set(INSTALL_MANIFEST "install_manifest.txt")
+ set(INSTALL_COUNT 5)
+ endif()
+ set(INSTALL_MANIFEST ${RunCMake_TEST_BINARY_DIR}/${INSTALL_MANIFEST})
+ set(RunCMake-check-file check-manifest.cmake)
+ run_cmake_command(${test}-install ${CMAKE_COMMAND} --install . ${ARGS_ARGS})
+ unset(RunCMake-check-file)
+ endif()
endfunction()
-install_test(parallel 1 install/parallel check-parallel.cmake)
-install_test(no-parallel 0 install check-single.cmake)
+install_test(parallel PARALLEL ARGS "-j 4")
+install_test(no-parallel ARGS "-j 4")
+install_test(out-of-date-json TOUCH_CACHE PARALLEL ARGS "-j 4")
+install_test(component PARALLEL ARGS "-j 4" COMPONENT "ALPHANUMERIC123")
+install_test(component-hash PARALLEL ARGS "-j 4" COMPONENT "@#$")
+
+if(RunCMake_GENERATOR MATCHES "Ninja")
+ install_test(ninja-parallel ARGS "-t install/parallel" NINJA PARALLEL)
+ install_test(ninja-no-parallel ARGS "-t install" NINJA)
+endif()
diff --git a/Tests/RunCMake/InstallParallel/check-manifest.cmake b/Tests/RunCMake/InstallParallel/check-manifest.cmake
new file mode 100644
index 0000000..4253e60
--- /dev/null
+++ b/Tests/RunCMake/InstallParallel/check-manifest.cmake
@@ -0,0 +1,10 @@
+if (NOT EXISTS ${INSTALL_MANIFEST})
+ set(RunCMake_TEST_FAILED "Install manifest not generated: ${INSTALL_MANIFEST}")
+endif()
+
+file(STRINGS ${INSTALL_MANIFEST} lines ENCODING UTF-8)
+list(LENGTH lines len)
+
+if (NOT len EQUAL ${INSTALL_COUNT})
+ set(RunCMake_TEST_FAILED "Install manifest missing content: ${len}/${INSTALL_COUNT}")
+endif()
diff --git a/Tests/RunCMake/InstallParallel/check-num-installs.cmake b/Tests/RunCMake/InstallParallel/check-num-installs.cmake
new file mode 100644
index 0000000..9137997
--- /dev/null
+++ b/Tests/RunCMake/InstallParallel/check-num-installs.cmake
@@ -0,0 +1,7 @@
+file(STRINGS ${RunCMake_TEST_BINARY_DIR}/.ninja_log lines ENCODING UTF-8)
+list(FILTER lines INCLUDE REGEX ".*install.*util")
+list(LENGTH lines len)
+
+if (NOT ${len} STREQUAL ${INSTALL_COUNT})
+ set(RunCMake_TEST_FAILED "Wrong number of cmake -P calls to install: ${len}/${INSTALL_COUNT}")
+endif()
diff --git a/Tests/RunCMake/InstallParallel/check-parallel.cmake b/Tests/RunCMake/InstallParallel/check-parallel.cmake
deleted file mode 100644
index 4e4cf52..0000000
--- a/Tests/RunCMake/InstallParallel/check-parallel.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-include(read-ninja-install.cmake)
-
-foreach(line ${lines})
- string(REPLACE "\t" ";" line ${line})
- list(GET line 0 start)
- list(GET line 1 end)
- list(APPEND start_times ${start})
- list(APPEND end_times ${end})
-endforeach()
-list(GET start_times 1 start_2)
-list(GET end_times 0 end_1)
-
-if (NOT start_2 LESS end_1)
- message(FATAL_ERROR "Install is not parallel")
-endif()
diff --git a/Tests/RunCMake/InstallParallel/check-single.cmake b/Tests/RunCMake/InstallParallel/check-single.cmake
deleted file mode 100644
index 79c4d5c..0000000
--- a/Tests/RunCMake/InstallParallel/check-single.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-include(read-ninja-install.cmake)
-list(LENGTH lines len)
-if (NOT ${len} STREQUAL "1")
- message(FATAL_ERROR "Expected single installation call")
-endif()
diff --git a/Tests/RunCMake/InstallParallel/install.cmake b/Tests/RunCMake/InstallParallel/install.cmake
index 54b5078..a64b5d7 100644
--- a/Tests/RunCMake/InstallParallel/install.cmake
+++ b/Tests/RunCMake/InstallParallel/install.cmake
@@ -1,4 +1,4 @@
-install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME root.txt)
if (INSTALL_PARALLEL)
set_property(GLOBAL PROPERTY INSTALL_PARALLEL ON)
endif()
diff --git a/Tests/RunCMake/InstallParallel/ninja-no-parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/ninja-no-parallel-install-stdout.txt
new file mode 100644
index 0000000..aa0a9d3
--- /dev/null
+++ b/Tests/RunCMake/InstallParallel/ninja-no-parallel-install-stdout.txt
@@ -0,0 +1,12 @@
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
diff --git a/Tests/RunCMake/InstallParallel/ninja-parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/ninja-parallel-install-stdout.txt
new file mode 100644
index 0000000..f49acf1
--- /dev/null
+++ b/Tests/RunCMake/InstallParallel/ninja-parallel-install-stdout.txt
@@ -0,0 +1,25 @@
+\[1\/5\] Installing only the local directory...
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[2\/5\] Installing only the local directory...
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[3\/5\] Installing only the local directory...
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[4\/5\] Installing only the local directory...
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[5\/5\] Installing only the local directory...
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
diff --git a/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt b/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt
deleted file mode 100644
index 8f69a04..0000000
--- a/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-installing:.*
-installing:.*
-installing:.*
-installing:.*
-installing:.*
diff --git a/Tests/RunCMake/InstallParallel/no-parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/no-parallel-install-stdout.txt
new file mode 100644
index 0000000..aa0a9d3
--- /dev/null
+++ b/Tests/RunCMake/InstallParallel/no-parallel-install-stdout.txt
@@ -0,0 +1,12 @@
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
diff --git a/Tests/RunCMake/InstallParallel/out-of-date-json-install-stdout.txt b/Tests/RunCMake/InstallParallel/out-of-date-json-install-stdout.txt
new file mode 100644
index 0000000..aa0a9d3
--- /dev/null
+++ b/Tests/RunCMake/InstallParallel/out-of-date-json-install-stdout.txt
@@ -0,0 +1,12 @@
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
+\-\- Installing:[^
+]*
diff --git a/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt
index e0d2a56..61a52b0 100644
--- a/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt
+++ b/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt
@@ -1,15 +1,30 @@
-\[1\/5\] Installing only the local directory...
-\-\- Install configuration: \"Debug\"
-installing:.*
-\[2\/5\] Installing only the local directory...
-\-\- Install configuration: \"Debug\"
-installing:.*
-\[3\/5\] Installing only the local directory...
-\-\- Install configuration: \"Debug\"
-installing:.*
-\[4\/5\] Installing only the local directory...
-\-\- Install configuration: \"Debug\"
-installing:.*
-\[5\/5\] Installing only the local directory...
-\-\- Install configuration: \"Debug\"
-installing:.*
+\[1\/5\] [^
+]*
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[2\/5\] [^
+]*
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[3\/5\] [^
+]*
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[4\/5\] [^
+]*
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
+\[5\/5\] [^
+]*
+\-\- Install configuration:[^
+]*
+\-\- Installing:[^
+]*
diff --git a/Tests/RunCMake/InstallParallel/read-ninja-install.cmake b/Tests/RunCMake/InstallParallel/read-ninja-install.cmake
deleted file mode 100644
index 731c5eb..0000000
--- a/Tests/RunCMake/InstallParallel/read-ninja-install.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-set(ninja_log ${CMAKE_ARGV3})
-file(STRINGS ${ninja_log} lines)
-list(POP_FRONT lines)
-list(FILTER lines INCLUDE REGEX ".*install.*util")
diff --git a/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt
index 6b235c4..139724d 100644
--- a/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt
+++ b/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt
@@ -1,3 +1,3 @@
-install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 1.txt)
add_subdirectory(subdir-3)
add_subdirectory(subdir-4)
diff --git a/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt
index dd7eac3..71dea43 100644
--- a/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt
+++ b/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt
@@ -1 +1 @@
-install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 3.txt)
diff --git a/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt
index dd7eac3..bfda21e 100644
--- a/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt
+++ b/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt
@@ -1 +1 @@
-install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 4.txt)
diff --git a/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt
index dd7eac3..e6efc54 100644
--- a/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt
+++ b/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt
@@ -1 +1 @@
-install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})")
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 2.txt)
diff --git a/Tests/RunCMake/Ninja/RunCMakeTest.cmake b/Tests/RunCMake/Ninja/RunCMakeTest.cmake
index 8b24c16..d1f99b2 100644
--- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake
+++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake
@@ -108,7 +108,10 @@ run_cmake(JobPoolUsesTerminal)
run_cmake(RspFileC)
run_cmake(RspFileCXX)
-if(TEST_Fortran)
+if(CMake_TEST_Fortran
+ # FIXME(lfortran): The compiler does not support response files.
+ AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran"
+ )
run_cmake(RspFileFortran)
endif()
diff --git a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake
index 88fd1e8..f1e8b30 100644
--- a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake
+++ b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake
@@ -17,7 +17,7 @@ function(check_files dir)
list(SORT expected)
file(GLOB_RECURSE actual "${dir}/*")
- list(FILTER actual EXCLUDE REGEX "/CMakeFiles/|\\.ninja$|/CMakeCache\\.txt$|/target_files[^/]*\\.cmake$|/\\.ninja_[^/]*$|/cmake_install\\.cmake$|\\.ilk$|\\.manifest$|\\.odx$|\\.pdb$|\\.exp$|/install_manifest\\.txt$|/\\.qt/QtDeploySupport[^/]*\\.cmake$")
+ list(FILTER actual EXCLUDE REGEX "/CMakeFiles/|\\.ninja$|/CMakeCache\\.txt$|/target_files[^/]*\\.cmake$|/\\.ninja_[^/]*$|/cmake_install\\.cmake$|\\.ilk$|\\.manifest$|\\.odx$|\\.pdb$|\\.exp$|/install_manifest\\.txt$|/\\.qt/(QtDeploySupport|QtDeployTargets)[^/]*\\.cmake$")
foreach(f IN LISTS _check_files_INCLUDE _check_files_EXCLUDE)
if(EXISTS ${f})
list(APPEND actual ${f})
diff --git a/Tests/RunCMake/ParseImplicitData/linux-Fortran-GNU-13.3.0-static-libquadmath.input b/Tests/RunCMake/ParseImplicitData/linux-Fortran-GNU-13.3.0-static-libquadmath.input
new file mode 100644
index 0000000..b1ab2f0
--- /dev/null
+++ b/Tests/RunCMake/ParseImplicitData/linux-Fortran-GNU-13.3.0-static-libquadmath.input
@@ -0,0 +1,80 @@
+CMAKE_LANG=Fortran
+CMAKE_LINKER=/usr/bin/ld
+CMAKE_Fortran_COMPILER_ABI=
+CMAKE_Fortran_COMPILER_AR=/usr/bin/gcc-ar-13
+CMAKE_Fortran_COMPILER_ARCHITECTURE_ID=
+CMAKE_Fortran_COMPILER_EXTERNAL_TOOLCHAIN=
+CMAKE_Fortran_COMPILER_ID=GNU
+CMAKE_Fortran_COMPILER_LAUNCHER=
+CMAKE_Fortran_COMPILER_LOADED=1
+CMAKE_Fortran_COMPILER_RANLIB=/usr/bin/gcc-ranlib-13
+CMAKE_Fortran_COMPILER_TARGET=
+CMAKE_Fortran_COMPILER_VERSION=13.3.0
+CMAKE_Fortran_COMPILER_VERSION_INTERAL=
+CMAKE_Fortran_IMPLICIT_LINK_LIBRARY_quadmath=/usr/lib/gcc/x86_64-linux-gnu/13/libquadmath.a
+Change Dir: '/tmp/ii/CMakeFiles/CMakeTmp'
+
+Run Build Command(s): /tmp/CMake/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_9b1c8/fast
+/usr/bin/gmake -f CMakeFiles/cmTC_9b1c8.dir/build.make CMakeFiles/cmTC_9b1c8.dir/build
+gmake[1]: Entering directory '/tmp/ii/CMakeFiles/CMakeTmp'
+Building Fortran object CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o
+/usr/bin/gfortran -static-libquadmath -v -c /tmp/CMake/Modules/CMakeFortranCompilerABI.F -o CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o
+Using built-in specs.
+COLLECT_GCC=/usr/bin/gfortran
+OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
+OFFLOAD_TARGET_DEFAULT=1
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 13.3.0-1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=3
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 13.3.0 (Debian 13.3.0-1)
+COLLECT_GCC_OPTIONS='-static-libquadmath' '-v' '-c' '-o' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_9b1c8.dir/'
+ /usr/libexec/gcc/x86_64-linux-gnu/13/f951 /tmp/CMake/Modules/CMakeFortranCompilerABI.F -ffixed-form -cpp=/tmp/ccPxd9HW.f90 -quiet -v -imultiarch x86_64-linux-gnu /tmp/CMake/Modules/CMakeFortranCompilerABI.F -quiet -dumpdir CMakeFiles/cmTC_9b1c8.dir/ -dumpbase CMakeFortranCompilerABI.F.F -dumpbase-ext .F -mtune=generic -march=x86-64 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-linux-gnu/13/finclude -fpre-include=/usr/include/finclude/x86_64-linux-gnu/math-vector-fortran.h -o /tmp/ccWH03h1.s
+GNU Fortran (Debian 13.3.0-1) version 13.3.0 (x86_64-linux-gnu)
+ compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP
+
+GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
+ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
+ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
+ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
+#include "..." search starts here:
+#include <...> search starts here:
+ /usr/lib/gcc/x86_64-linux-gnu/13/finclude
+ /usr/lib/gcc/x86_64-linux-gnu/13/include
+ /usr/local/include
+ /usr/include/x86_64-linux-gnu
+ /usr/include
+End of search list.
+COLLECT_GCC_OPTIONS='-static-libquadmath' '-v' '-c' '-o' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_9b1c8.dir/'
+ as -v --64 -o CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o /tmp/ccWH03h1.s
+GNU assembler version 2.42.50 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.42.50.20240625
+COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/
+LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/
+COLLECT_GCC_OPTIONS='-static-libquadmath' '-v' '-c' '-o' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.'
+Linking Fortran executable cmTC_9b1c8
+/tmp/CMake/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9b1c8.dir/link.txt --verbose=1
+/usr/bin/gfortran -v -Wl,-v -static-libquadmath CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -o cmTC_9b1c8
+Driving: /usr/bin/gfortran -v -Wl,-v -static-libquadmath CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -o cmTC_9b1c8 -l gfortran -l m -shared-libgcc
+Using built-in specs.
+COLLECT_GCC=/usr/bin/gfortran
+COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper
+OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
+OFFLOAD_TARGET_DEFAULT=1
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 13.3.0-1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=3
+Thread model: posix
+Supported LTO compression algorithms: zlib zstd
+gcc version 13.3.0 (Debian 13.3.0-1)
+Reading specs from /usr/lib/gcc/x86_64-linux-gnu/13/libgfortran.spec
+rename spec lib to liborig
+COLLECT_GCC_OPTIONS='-v' '-static-libquadmath' '-o' 'cmTC_9b1c8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_9b1c8-'
+COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/
+LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/
+COLLECT_GCC_OPTIONS='-v' '-static-libquadmath' '-o' 'cmTC_9b1c8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_9b1c8.'
+ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccBedNT7.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lquadmath -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_9b1c8 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -lgfortran -lm -lgcc_s -lgcc --as-needed -Bstatic -lquadmath -Bdynamic --no-as-needed -lm -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o
+collect2 version 13.3.0
+/usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccBedNT7.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lquadmath -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_9b1c8 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -lgfortran -lm -lgcc_s -lgcc --as-needed -Bstatic -lquadmath -Bdynamic --no-as-needed -lm -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o
+GNU ld (GNU Binutils for Debian) 2.42.50.20240625
+COLLECT_GCC_OPTIONS='-v' '-static-libquadmath' '-o' 'cmTC_9b1c8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_9b1c8.'
+gmake[1]: Leaving directory '/tmp/ii/CMakeFiles/CMakeTmp'
diff --git a/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake b/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake
index c5bb5d7..c58722d 100644
--- a/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake
+++ b/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake
@@ -24,6 +24,7 @@ set(targets
linux-C-GNU-10.2.1-static-libgcc
linux-CXX-GNU-10.2.1-static-libstdc++
linux-Fortran-GNU-10.2.1-static-libgfortran
+ linux-Fortran-GNU-13.3.0-static-libquadmath
linux-C-GNU-12.2.0 linux-CXX-GNU-12.2.0 linux-Fortran-GNU-12.2.0
linux-C-Intel-18.0.0.20170811 linux-CXX-Intel-18.0.0.20170811
linux-C-Intel-2021.10.0.20230609 linux-CXX-Intel-2021.10.0.20230609 linux-Fortran-Intel-2021.10.0.20230609
diff --git a/Tests/RunCMake/ParseImplicitIncludeInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output b/Tests/RunCMake/ParseImplicitIncludeInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output
new file mode 100644
index 0000000..defc375
--- /dev/null
+++ b/Tests/RunCMake/ParseImplicitIncludeInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output
@@ -0,0 +1 @@
+/usr/lib/gcc/x86_64-linux-gnu/13/finclude;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include
diff --git a/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake b/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake
index 8d6c739..c988536 100644
--- a/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake
+++ b/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake
@@ -24,6 +24,7 @@ set(targets
linux-C-GNU-10.2.1-static-libgcc
linux-CXX-GNU-10.2.1-static-libstdc++
linux-Fortran-GNU-10.2.1-static-libgfortran
+ linux-Fortran-GNU-13.3.0-static-libquadmath
linux-C-GNU-12.2.0 linux-CXX-GNU-12.2.0 linux-Fortran-GNU-12.2.0
linux-C-Intel-18.0.0.20170811 linux-CXX-Intel-18.0.0.20170811
linux-C-Intel-2021.10.0.20230609 linux-CXX-Intel-2021.10.0.20230609 linux-Fortran-Intel-2021.10.0.20230609
diff --git a/Tests/RunCMake/ParseImplicitLinkInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output b/Tests/RunCMake/ParseImplicitLinkInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output
new file mode 100644
index 0000000..1595560
--- /dev/null
+++ b/Tests/RunCMake/ParseImplicitLinkInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output
@@ -0,0 +1,4 @@
+libs=gfortran;m;gcc_s;gcc;/usr/lib/gcc/x86_64-linux-gnu/13/libquadmath.a;m;c;gcc_s;gcc
+dirs=/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib
+library_arch=x86_64-linux-gnu
+linker_tool=/usr/bin/ld
diff --git a/Tests/RunCMake/README.rst b/Tests/RunCMake/README.rst
index ea6db54..f4bcc57 100644
--- a/Tests/RunCMake/README.rst
+++ b/Tests/RunCMake/README.rst
@@ -6,9 +6,11 @@ precisely checking their return code and stdout/stderr content.
The RunCMake infrastructure is useful for testing error cases and
diagnostic output.
-See also `../README.rst`_ and the `CMake Source Code Guide`_.
+See also `../README.rst`_, the `CMake Testing Guide`_,
+and the `CMake Source Code Guide`_.
.. _`../README.rst`: ../README.rst
+.. _`CMake Testing Guide`: ../../Help/dev/testing.rst
.. _`CMake Source Code Guide`: ../../Help/dev/source.rst
.. _`CMakeLists.txt`: CMakeLists.txt
diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
index e0d74cf..85fefbf 100644
--- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
+++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake
@@ -98,6 +98,7 @@ run_cmake(DebugInformationFormat)
run_cmake(VsCLREmpty)
run_cmake(VsCLRPure)
run_cmake(VsCLRSafe)
+run_cmake(VsFrameworkReference)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.20)
run_cmake(VsCLRNetcore)
diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake
new file mode 100644
index 0000000..7abe8a0
--- /dev/null
+++ b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake
@@ -0,0 +1,24 @@
+set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
+if(NOT EXISTS "${vcProjectFile}")
+ set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
+ return()
+endif()
+
+set(frameworkReferenceSet FALSE)
+
+file(STRINGS "${vcProjectFile}" lines)
+foreach(line IN LISTS lines)
+ if(line MATCHES "^ *<FrameworkReference Include=\"([^\"]*)\" />$")
+ if("${CMAKE_MATCH_1}" STREQUAL "Microsoft.WindowsDesktop.App.WPF")
+ message(STATUS "foo.vcxproj has FrameworkReference set")
+ set(frameworkReferenceSet TRUE)
+ else()
+ message(STATUS "foo.vcxproj has FrameworkReference incorrectly set to ${CMAKE_MATCH_1}")
+ endif()
+ endif()
+endforeach()
+
+if(NOT frameworkReferenceSet)
+ set(RunCMake_TEST_FAILED "FrameworkReference not found or not set correctly.")
+ return()
+endif()
diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake
new file mode 100644
index 0000000..0e4d6fb
--- /dev/null
+++ b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake
@@ -0,0 +1,8 @@
+enable_language(CXX)
+
+add_executable(foo foo.cpp)
+
+set_target_properties(foo PROPERTIES
+ COMMON_LANGUAGE_RUNTIME "netcore"
+ DOTNET_TARGET_FRAMEWORK "net8.0-windows"
+ VS_FRAMEWORK_REFERENCES "Microsoft.WindowsDesktop.App.WPF")
diff --git a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake
index 34259b7..0be77ae 100644
--- a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake
+++ b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake
@@ -1,7 +1,6 @@
cmake_policy(SET CMP0053 NEW)
include(RunCMake)
-run_cmake(VsDotnetSdkCustomCommandsTarget)
run_cmake(VsDotnetSdkCustomCommandsSource)
run_cmake(VsDotnetSdkStartupObject)
run_cmake(VsDotnetSdkDefines)
@@ -18,3 +17,16 @@ function(run_VsDotnetSdk)
run_cmake_command(VsDotnetSdk-build ${CMAKE_COMMAND} --build . -- ${build_flags})
endfunction()
run_VsDotnetSdk()
+
+function(runCmakeAndBuild 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})
+ set(build_flags /restore)
+ run_cmake_command(${CASE}-build ${CMAKE_COMMAND} --build . -- ${build_flags})
+ run_cmake_command(${CASE}-build ${CMAKE_COMMAND} --build .)
+endfunction()
+
+runCmakeAndBuild(VsDotnetSdkCustomCommandsTarget)
diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-build-stdout.txt b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-build-stdout.txt
new file mode 100644
index 0000000..890a8f1
--- /dev/null
+++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-build-stdout.txt
@@ -0,0 +1 @@
+.*"This should happen!".*
diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-stderr.txt b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-stderr.txt
deleted file mode 100644
index 90af627..0000000
--- a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-stderr.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-CMake Error in CMakeLists.txt:
- The target "foo" does not currently support add_custom_command as the
- Visual Studio generators have not yet learned how to generate custom
- commands in .Net SDK-style projects.
-
-
-CMake Generate step failed. Build files cannot be regenerated correctly.
diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake
index f5cd317..078d7dd 100644
--- a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake
+++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake
@@ -8,5 +8,5 @@ set(CMAKE_DOTNET_SDK "Microsoft.NET.Sdk")
add_library(foo SHARED lib1.cs)
add_custom_command(TARGET foo
PRE_BUILD
- COMMAND echo "This shouldn't happen!"
+ COMMAND echo "This should happen!"
VERBATIM)
diff --git a/Tests/RunCMake/XcFramework/RunCMakeTest.cmake b/Tests/RunCMake/XcFramework/RunCMakeTest.cmake
index 0d181ca..64505ff 100644
--- a/Tests/RunCMake/XcFramework/RunCMakeTest.cmake
+++ b/Tests/RunCMake/XcFramework/RunCMakeTest.cmake
@@ -1,5 +1,11 @@
include(RunCMake)
+if(RunCMake_GENERATOR STREQUAL "Xcode")
+ set(maybe_ios_catalyst "")
+else()
+ set(maybe_ios_catalyst ios-catalyst)
+endif()
+
function(create_library type platform system_name archs sysroot)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/create-${type}-${platform}-build)
run_cmake_with_options(create-${type}-${platform} -DCMAKE_SYSTEM_NAME=${system_name} -DCMAKE_OSX_ARCHITECTURES=${archs} -DCMAKE_OSX_SYSROOT=${sysroot} -DCMAKE_INSTALL_PREFIX=${RunCMake_TEST_BINARY_DIR}/install)
@@ -12,6 +18,9 @@ endfunction()
function(create_libraries type)
create_library(${type} macos Darwin "${macos_archs_2}" macosx)
create_library(${type} ios iOS "arm64" iphoneos)
+ if(maybe_ios_catalyst)
+ create_library(${type} ios-catalyst iOS "${macos_archs_2}" macosx)
+ endif()
create_library(${type} tvos tvOS "arm64" appletvos)
create_library(${type} watchos watchOS "armv7k\\\\;arm64_32" watchos)
if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
@@ -58,6 +67,9 @@ endfunction()
function(create_executables name type)
create_executable(${name}-macos ${type} Darwin "${macos_archs_2}" macosx)
create_executable(${name}-ios ${type} iOS "arm64" iphoneos)
+ if(maybe_ios_catalyst)
+ create_executable(${name}-ios-catalyst ${type} iOS "${macos_archs_2}" macosx)
+ endif()
create_executable(${name}-tvos ${type} tvOS "arm64" appletvos)
create_executable(${name}-watchos ${type} watchOS "armv7k\\\\;arm64_32" watchos)
if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
@@ -71,7 +83,7 @@ function(create_executables name type)
endif()
endfunction()
-set(xcframework_platforms macos ios tvos watchos ios-simulator tvos-simulator watchos-simulator)
+set(xcframework_platforms macos ios ${maybe_ios_catalyst} tvos watchos ios-simulator tvos-simulator watchos-simulator)
if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2)
list(APPEND xcframework_platforms visionos visionos-simulator)
endif()
@@ -141,6 +153,20 @@ run_cmake_command(export-ios-install ${CMAKE_COMMAND} --install . ${_config_arg}
unset(RunCMake_TEST_NO_CLEAN)
unset(RunCMake_TEST_BINARY_DIR)
+if(maybe_ios_catalyst)
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/export-ios-catalyst-build)
+ run_cmake_with_options(export-ios-catalyst -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=macosx "-DCMAKE_OSX_ARCHITECTURES=${macos_archs_1}" -DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/export-install)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ set(_config_arg)
+ if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
+ set(_config_arg --config Release)
+ endif()
+ run_cmake_command(export-ios-catalyst-build ${CMAKE_COMMAND} --build . ${_config_arg})
+ run_cmake_command(export-ios-catalyst-install ${CMAKE_COMMAND} --install . ${_config_arg})
+ unset(RunCMake_TEST_NO_CLEAN)
+ unset(RunCMake_TEST_BINARY_DIR)
+endif()
+
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/export-ios-simulator-build)
run_cmake_with_options(export-ios-simulator -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator "-DCMAKE_OSX_ARCHITECTURES=${macos_archs_1}" -DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/export-install)
set(RunCMake_TEST_NO_CLEAN 1)
@@ -175,6 +201,19 @@ else()
set(src_dir "${RunCMake_SOURCE_DIR}")
set(bld_dir "${RunCMake_BINARY_DIR}")
endif()
+if(maybe_ios_catalyst)
+ set(maybe_ios_catalyst_mylib
+ -library ${bld_dir}/export-install/lib/ios-catalyst/libmylib.a
+ -headers ${src_dir}/mylib/include
+ )
+ set(maybe_ios_catalyst_mylib_genex
+ -library ${bld_dir}/export-install/lib/ios-catalyst/libmylib-genex.a
+ -headers ${src_dir}/mylib/include
+ )
+else()
+ set(maybe_ios_catalyst_mylib "")
+ set(maybe_ios_catalyst_mylib_genex "")
+endif()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/export-install)
run_cmake_command(export-install-xcframework xcodebuild -create-xcframework
-output ${bld_dir}/export-install/lib/mylib.xcframework
@@ -182,6 +221,7 @@ run_cmake_command(export-install-xcframework xcodebuild -create-xcframework
-headers ${src_dir}/mylib/include
-library ${bld_dir}/export-install/lib/ios/libmylib.a
-headers ${src_dir}/mylib/include
+ ${maybe_ios_catalyst_mylib}
-library ${bld_dir}/export-install/lib/ios-simulator/libmylib.a
-headers ${src_dir}/mylib/include
)
@@ -191,6 +231,7 @@ run_cmake_command(export-install-xcframework-genex xcodebuild -create-xcframewor
-headers ${src_dir}/mylib/include
-library ${bld_dir}/export-install/lib/ios/libmylib-genex.a
-headers ${src_dir}/mylib/include
+ ${maybe_ios_catalyst_mylib_genex}
-library ${bld_dir}/export-install/lib/ios-simulator/libmylib-genex.a
-headers ${src_dir}/mylib/include
)
diff --git a/Tests/RunCMake/XcFramework/create-executable-framework-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-framework-ios-catalyst.cmake
new file mode 100644
index 0000000..ce415ef
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-framework-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-executable-framework-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-framework-link-phase-ios-catalyst.cmake
new file mode 100644
index 0000000..9351dd4
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-framework-link-phase-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable-link-phase.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-executable-library-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-library-ios-catalyst.cmake
new file mode 100644
index 0000000..ce415ef
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-library-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-executable-library-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-library-link-phase-ios-catalyst.cmake
new file mode 100644
index 0000000..9351dd4
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-library-link-phase-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable-link-phase.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-executable-target-framework-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-framework-ios-catalyst.cmake
new file mode 100644
index 0000000..1682ed3
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-target-framework-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable-target.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-executable-target-framework-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-framework-link-phase-ios-catalyst.cmake
new file mode 100644
index 0000000..55788f9
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-target-framework-link-phase-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable-target-link-phase.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-executable-target-library-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-library-ios-catalyst.cmake
new file mode 100644
index 0000000..1682ed3
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-target-library-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable-target.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-executable-target-library-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-library-link-phase-ios-catalyst.cmake
new file mode 100644
index 0000000..55788f9
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-executable-target-library-link-phase-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-executable-target-link-phase.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-framework-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-framework-ios-catalyst.cmake
new file mode 100644
index 0000000..e5dcb9f
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-framework-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-framework.cmake)
diff --git a/Tests/RunCMake/XcFramework/create-library-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-library-ios-catalyst.cmake
new file mode 100644
index 0000000..31128c1
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/create-library-ios-catalyst.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(create-library.cmake)
diff --git a/Tests/RunCMake/XcFramework/export-common.cmake b/Tests/RunCMake/XcFramework/export-common.cmake
index 844b7d3..2e2e5ee 100644
--- a/Tests/RunCMake/XcFramework/export-common.cmake
+++ b/Tests/RunCMake/XcFramework/export-common.cmake
@@ -36,6 +36,7 @@ generate_apple_platform_selection_file(mylib-config-top.cmake
INSTALL_DESTINATION lib/cmake/mylib
MACOS_INCLUDE_FILE lib/macos/cmake/mylib/mylib-config.cmake
IOS_INCLUDE_FILE lib/ios/cmake/mylib/mylib-config.cmake
+ IOS_CATALYST_INCLUDE_FILE lib/ios-catalyst/cmake/mylib/mylib-config.cmake
IOS_SIMULATOR_INCLUDE_FILE lib/ios-simulator/cmake/mylib/mylib-config.cmake
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mylib-config-top.cmake DESTINATION lib/cmake/mylib RENAME mylib-config.cmake)
diff --git a/Tests/RunCMake/XcFramework/export-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/export-ios-catalyst.cmake
new file mode 100644
index 0000000..28a7a20
--- /dev/null
+++ b/Tests/RunCMake/XcFramework/export-ios-catalyst.cmake
@@ -0,0 +1,4 @@
+set(platform_name ios-catalyst)
+set(platform_arg IOS_CATALYST_INCLUDE_FILE)
+set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0")
+include(export-common.cmake)
diff --git a/Tests/RunCMake/cmake_pkg_config/CMakeLists.txt b/Tests/RunCMake/cmake_pkg_config/CMakeLists.txt
new file mode 100644
index 0000000..b3f15ed
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/CMakeLists.txt
@@ -0,0 +1,5 @@
+cmake_minimum_required(VERSION 3.30)
+project(${RunCMake_TEST} NONE)
+
+set(CMAKE_PKG_CONFIG_PC_LIB_DIRS ${CMAKE_CURRENT_LIST_DIR}/PackageRoot)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/a.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/a.pc
new file mode 100644
index 0000000..7492f30
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/a.pc
@@ -0,0 +1,3 @@
+Name:
+Version: aa
+Description:
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/one.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/one.pc
new file mode 100644
index 0000000..ec939ff
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/one.pc
@@ -0,0 +1,3 @@
+Name:
+Version: 11
+Description:
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/onedot.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/onedot.pc
new file mode 100644
index 0000000..e7d3cfd
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/onedot.pc
@@ -0,0 +1,3 @@
+Name:
+Version: 1.1.1
+Description:
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/pseudo-empty.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/pseudo-empty.pc
new file mode 100644
index 0000000..66d4163
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/pseudo-empty.pc
@@ -0,0 +1,3 @@
+Name:
+Version: ~0
+Description:
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/tilde.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/tilde.pc
new file mode 100644
index 0000000..8d8b38d
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/tilde.pc
@@ -0,0 +1,3 @@
+Name:
+Version: ~~1
+Description:
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/zeroone.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/zeroone.pc
new file mode 100644
index 0000000..265e8aa
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/zeroone.pc
@@ -0,0 +1,3 @@
+Name:
+Version: 01
+Description:
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/all-extract-fields.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/all-extract-fields.pc
new file mode 100644
index 0000000..bd361fc
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/all-extract-fields.pc
@@ -0,0 +1,15 @@
+Name: Extract All
+Description: All flags example
+Version: 1.0.0
+
+Conflicts: Alpha Beta
+Provides: Gamma Delta
+
+Requires: Epsilon Zea
+Requires.private: Eta Theta
+
+Cflags: Iota -IKappa Lambda -IMu
+Cflags.private: Nu -IXi Omnicron -IPi
+
+Libs: Rho -LSigma -lTau Upsilon -LPhi -lChi
+Libs.private: Psi -LOmega -lMoe Larry -LCurly -lShemp
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/bar.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/bar.pc
new file mode 100644
index 0000000..bf2942c
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/bar.pc
@@ -0,0 +1,3 @@
+Name: Bar
+Description: Bar Description
+Version: 1.0.0
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/baz.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/baz.pc
new file mode 100644
index 0000000..f1152d4
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/baz.pc
@@ -0,0 +1,3 @@
+Name: Baz
+Description: Baz Description
+Version: 1.0.0
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-bothcase-f.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-bothcase-f.pc
new file mode 100644
index 0000000..d242c11
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-bothcase-f.pc
@@ -0,0 +1,6 @@
+Name: Cflags Bothcase
+Description: The f is lowercase and uppercase
+Version: 1.0.0
+
+Cflags: lowercase
+CFlags: uppercase
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-lowercase-f.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-lowercase-f.pc
new file mode 100644
index 0000000..1640d8b
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-lowercase-f.pc
@@ -0,0 +1,5 @@
+Name: Cflags Lowercase
+Description: The f is lowercase
+Version: 1.0.0
+
+Cflags: lowercase
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-uppercase-f.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-uppercase-f.pc
new file mode 100644
index 0000000..0f7c308
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-uppercase-f.pc
@@ -0,0 +1,5 @@
+Name: CFlags Uppercase
+Description: The f is uppercase
+Version: 1.0.0
+
+CFlags: uppercase
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/empty-key.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/empty-key.pc
new file mode 100644
index 0000000..93ec694
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/empty-key.pc
@@ -0,0 +1,3 @@
+Name:
+Description:
+Version:
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/foo.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/foo.pc
new file mode 100644
index 0000000..0a98509
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/foo.pc
@@ -0,0 +1,3 @@
+Name: Foo
+Description: Foo Description
+Version: 1.0.0
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/invalid.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/invalid.pc
new file mode 100644
index 0000000..be1f433
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/invalid.pc
@@ -0,0 +1,4 @@
+Name: Invalid
+Description: Will cause a parse error
+Version: 1.0.0
+BrokenKey
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-description.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-description.pc
new file mode 100644
index 0000000..69007b5
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-description.pc
@@ -0,0 +1,2 @@
+Name: name
+Version: version
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-name.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-name.pc
new file mode 100644
index 0000000..5b878c0
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-name.pc
@@ -0,0 +1,2 @@
+Description: description
+Version: version
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-version.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-version.pc
new file mode 100644
index 0000000..850e26e
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-version.pc
@@ -0,0 +1,2 @@
+Name: name
+Description: description
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux-uninstalled.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux-uninstalled.pc
new file mode 100644
index 0000000..8f9462f
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux-uninstalled.pc
@@ -0,0 +1,5 @@
+Name: Qux
+Description: Qux Description
+Version: 1.0.0
+
+Cflags: QuxUninstalled
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux.pc
new file mode 100644
index 0000000..6cf66b1
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux.pc
@@ -0,0 +1,5 @@
+Name: Qux
+Description: Qux Description
+Version: 1.0.0
+
+Cflags: QuxInstalled
diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc
new file mode 100644
index 0000000..5abce76
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc
@@ -0,0 +1,6 @@
+Name: Relocate
+Description: For testing relocation and flag mangling
+Version: 1.0.0
+
+Cflags: -I/Alpha Beta -I/Gamma
+Libs: -L/Delta Epsilon -L/Zeta
diff --git a/Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake b/Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake
new file mode 100644
index 0000000..4f9200b
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake
@@ -0,0 +1,18 @@
+include(RunCMake)
+
+set(cmd ${CMAKE_COMMAND} ${CMAKE_CURRENT_LIST_DIR} -G ${RunCMake_GENERATOR})
+
+foreach(strictness IN ITEMS STRICT PERMISSIVE BEST_EFFORT)
+ run_cmake_command(TestStrictness-${strictness} ${cmd}
+ -DRunCMake_TEST=TestStrictness -DSTRICTNESS=${strictness}
+ )
+endforeach()
+
+run_cmake(TestEnv)
+run_cmake(TestExtract)
+run_cmake(TestMangle)
+run_cmake(TestQuiet)
+run_cmake(TestRequired)
+run_cmake(TestReroot)
+run_cmake(TestUninstalled)
+run_cmake(TestVersion)
diff --git a/Tests/RunCMake/cmake_pkg_config/TestEnv-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestEnv-stderr.txt
new file mode 100644
index 0000000..67713c9
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestEnv-stderr.txt
@@ -0,0 +1,15 @@
+Includes: -I/Alpha;-I/Gamma
+LibDirs: -L/Delta;-L/Zeta
+Cflags: QuxInstalled
+PC_LIB_DIRS: Alpha;Beta
+PC_PATH: [^
+]*/PackageRoot
+DISABLE_UNINSTALLED: ON
+SYSROOT_DIR: Delta
+TOP_BUILD_DIR: Epsilon
+SYSTEM_INCLUDE_DIRS: Zeta;Eta
+SYSTEM_LIB_DIRS: Theta;Iota
+ALLOW_SYSTEM_INCLUDES: ON
+ALLOW_SYSTEM_LIBRARIES: ON
+PKGCONF_INCLUDES: Mu;Nu;Xi;Omnicron;Pi;Rho;Sigma;Tau
+PKGCONF_LIB_DIRS: Upsilon;Phi
diff --git a/Tests/RunCMake/cmake_pkg_config/TestEnv.cmake b/Tests/RunCMake/cmake_pkg_config/TestEnv.cmake
new file mode 100644
index 0000000..dcbb958
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestEnv.cmake
@@ -0,0 +1,75 @@
+set(CMAKE_PKG_CONFIG_PC_LIB_DIRS)
+
+set(ENV{PKG_CONFIG_PATH} ${CMAKE_CURRENT_LIST_DIR}/PackageRoot)
+
+if(WIN32)
+ set(sep ";")
+else()
+ set(sep ":")
+endif()
+
+set(ENV{PKG_CONFIG_LIBDIR} "Alpha${sep}Beta")
+set(ENV{PKG_CONFIG_DISABLE_UNINSTALLED} Gamma)
+set(ENV{PKG_CONFIG_SYSROOT_DIR} Delta)
+set(ENV{PKG_CONFIG_TOP_BUILD_DIR} Epsilon)
+set(ENV{PKG_CONFIG_SYSTEM_INCLUDE_PATH} "Zeta${sep}Eta")
+set(ENV{PKG_CONFIG_SYSTEM_LIBRARY_PATH} "Theta${sep}Iota")
+set(ENV{PKG_CONFIG_ALLOW_SYSTEM_CFLAGS} Kappa)
+set(ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS} Lambda)
+
+set(ENV{CPATH} "Mu${sep}Nu")
+set(ENV{C_INCLUDE_PATH} "Xi${sep}Omnicron")
+set(ENV{CPLUS_INCLUDE_PATH} "Pi${sep}Rho")
+
+if(WIN32)
+ set(ENV{OBJC_INCLUDE_PATH} Sigma)
+ set(ENV{INCLUDE} Tau)
+else()
+ set(ENV{OBJC_INCLUDE_PATH} Sigma:Tau)
+endif()
+
+set(ENV{LIBRARY_PATH} "Upsilon${sep}Phi")
+
+cmake_pkg_config(
+ EXTRACT relocate
+ ENV_MODE IGNORE
+ PC_PATH ${CMAKE_CURRENT_LIST_DIR}/PackageRoot
+ SYSTEM_INCLUDE_DIRS /Alpha
+ SYSTEM_LIBRARY_DIRS /Beta
+)
+
+# Shouldn't mangle, ALLOW_SYSTEM_* should default to on under ENV IGNORE
+message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}")
+message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}")
+
+cmake_pkg_config(
+ EXTRACT qux
+ ENV_MODE IGNORE
+ PC_PATH ${CMAKE_CURRENT_LIST_DIR}/PackageRoot
+)
+
+# Shouldn't find uninstalled package
+message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}")
+
+cmake_pkg_config(
+ EXTRACT foo
+ ENV_MODE FDO
+)
+
+message("PC_LIB_DIRS: ${CMAKE_PKG_CONFIG_PC_LIB_DIRS}")
+message("PC_PATH: ${CMAKE_PKG_CONFIG_PC_PATH}")
+message("DISABLE_UNINSTALLED: ${CMAKE_PKG_CONFIG_DISABLE_UNINSTALLED}")
+message("SYSROOT_DIR: ${CMAKE_PKG_CONFIG_SYSROOT_DIR}")
+message("TOP_BUILD_DIR: ${CMAKE_PKG_CONFIG_TOP_BUILD_DIR}")
+message("SYSTEM_INCLUDE_DIRS: ${CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS}")
+message("SYSTEM_LIB_DIRS: ${CMAKE_PKG_CONFIG_SYS_LIB_DIRS}")
+message("ALLOW_SYSTEM_INCLUDES: ${CMAKE_PKG_CONFIG_ALLOW_SYS_INCLUDES}")
+message("ALLOW_SYSTEM_LIBRARIES: ${CMAKE_PKG_CONFIG_ALLOW_SYS_LIBS}")
+
+cmake_pkg_config(
+ EXTRACT foo
+ ENV_MODE PKGCONF
+)
+
+message("PKGCONF_INCLUDES: ${CMAKE_PKG_CONFIG_PKGCONF_INCLUDES}")
+message("PKGCONF_LIB_DIRS: ${CMAKE_PKG_CONFIG_PKGCONF_LIB_DIRS}")
diff --git a/Tests/RunCMake/cmake_pkg_config/TestExtract-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestExtract-stderr.txt
new file mode 100644
index 0000000..42e4534
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestExtract-stderr.txt
@@ -0,0 +1,21 @@
+Name: Extract All
+Description: All flags example
+Version: 1.0.0
+Conflicts: Alpha;Beta
+Provides: Gamma;Delta
+Requires: Epsilon;Zea
+Requires.private: Eta;Theta
+Cflags: Iota -IKappa Lambda -IMu
+Includes: -IKappa;-IMu
+CompileOptions: Iota;Lambda
+Cflags.private: Nu -IXi Omnicron -IPi
+Includes.private: -IXi;-IPi
+CompileOptions.private: Nu;Omnicron
+Libs: Rho -LSigma -lTau Upsilon -LPhi -lChi
+LibDirs: -LSigma;-LPhi
+LibNames: -lTau;-lChi
+LinkOptions: Rho;Upsilon
+Libs.private: Psi -LOmega -lMoe Larry -LCurly -lShemp
+LibDirs.private: -LOmega;-LCurly
+LibNames.private: -lMoe;-lShemp
+LinkOptions.private: Psi;Larry
diff --git a/Tests/RunCMake/cmake_pkg_config/TestExtract.cmake b/Tests/RunCMake/cmake_pkg_config/TestExtract.cmake
new file mode 100644
index 0000000..eb05966
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestExtract.cmake
@@ -0,0 +1,29 @@
+cmake_pkg_config(EXTRACT all-extract-fields)
+
+message("Name: ${CMAKE_PKG_CONFIG_NAME}")
+message("Description: ${CMAKE_PKG_CONFIG_DESCRIPTION}")
+message("Version: ${CMAKE_PKG_CONFIG_VERSION}")
+
+message("Conflicts: ${CMAKE_PKG_CONFIG_CONFLICTS}")
+message("Provides: ${CMAKE_PKG_CONFIG_PROVIDES}")
+
+message("Requires: ${CMAKE_PKG_CONFIG_REQUIRES}")
+message("Requires.private: ${CMAKE_PKG_CONFIG_REQUIRES_PRIVATE}")
+
+message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}")
+message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}")
+message("CompileOptions: ${CMAKE_PKG_CONFIG_COMPILE_OPTIONS}")
+
+message("Cflags.private: ${CMAKE_PKG_CONFIG_CFLAGS_PRIVATE}")
+message("Includes.private: ${CMAKE_PKG_CONFIG_INCLUDES_PRIVATE}")
+message("CompileOptions.private: ${CMAKE_PKG_CONFIG_COMPILE_OPTIONS_PRIVATE}")
+
+message("Libs: ${CMAKE_PKG_CONFIG_LIBS}")
+message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}")
+message("LibNames: ${CMAKE_PKG_CONFIG_LIBNAMES}")
+message("LinkOptions: ${CMAKE_PKG_CONFIG_LINK_OPTIONS}")
+
+message("Libs.private: ${CMAKE_PKG_CONFIG_LIBS_PRIVATE}")
+message("LibDirs.private: ${CMAKE_PKG_CONFIG_LIBDIRS_PRIVATE}")
+message("LibNames.private: ${CMAKE_PKG_CONFIG_LIBNAMES_PRIVATE}")
+message("LinkOptions.private: ${CMAKE_PKG_CONFIG_LINK_OPTIONS_PRIVATE}")
diff --git a/Tests/RunCMake/cmake_pkg_config/TestMangle-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestMangle-stderr.txt
new file mode 100644
index 0000000..75557fc
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestMangle-stderr.txt
@@ -0,0 +1,8 @@
+Cflags: Beta -I/Gamma
+Includes: -I/Gamma
+Libs: Epsilon -L/Zeta
+LibDirs: -L/Zeta
+Cflags: -I/Alpha Beta -I/Gamma
+Includes: -I/Alpha;-I/Gamma
+Libs: -L/Delta Epsilon -L/Zeta
+LibDirs: -L/Delta;-L/Zeta
diff --git a/Tests/RunCMake/cmake_pkg_config/TestMangle.cmake b/Tests/RunCMake/cmake_pkg_config/TestMangle.cmake
new file mode 100644
index 0000000..b880d31
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestMangle.cmake
@@ -0,0 +1,22 @@
+set(CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS /Alpha)
+set(CMAKE_PKG_CONFIG_SYS_LIB_DIRS /Delta)
+
+cmake_pkg_config(EXTRACT relocate)
+
+message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}")
+message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}")
+
+message("Libs: ${CMAKE_PKG_CONFIG_LIBS}")
+message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}")
+
+cmake_pkg_config(
+ EXTRACT relocate
+ ALLOW_SYSTEM_INCLUDES ON
+ ALLOW_SYSTEM_LIBS ON
+)
+
+message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}")
+message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}")
+
+message("Libs: ${CMAKE_PKG_CONFIG_LIBS}")
+message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}")
diff --git a/Tests/RunCMake/cmake_pkg_config/TestQuiet.cmake b/Tests/RunCMake/cmake_pkg_config/TestQuiet.cmake
new file mode 100644
index 0000000..ac72ab2
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestQuiet.cmake
@@ -0,0 +1,29 @@
+cmake_pkg_config(
+ EXTRACT foo
+ QUIET
+ STRICTNESS STRICT
+)
+
+cmake_pkg_config(
+ EXTRACT no-name
+ QUIET
+ STRICTNESS STRICT
+)
+
+cmake_pkg_config(
+ EXTRACT empty-key
+ QUIET
+ STRICTNESS STRICT
+)
+
+cmake_pkg_config(
+ EXTRACT cflags-bothcase-f
+ QUIET
+ STRICTNESS STRICT
+)
+
+cmake_pkg_config(
+ EXTRACT does-not-exist
+ QUIET
+ STRICTNESS STRICT
+)
diff --git a/Tests/RunCMake/cmake_pkg_config/TestRequired-result.txt b/Tests/RunCMake/cmake_pkg_config/TestRequired-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestRequired-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/cmake_pkg_config/TestRequired-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestRequired-stderr.txt
new file mode 100644
index 0000000..d7f5158
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestRequired-stderr.txt
@@ -0,0 +1,4 @@
+CMake Error at TestRequired.cmake:[0-9]+ \(cmake_pkg_config\):
+ cmake_pkg_config Could not find 'does-not-exist'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/cmake_pkg_config/TestRequired.cmake b/Tests/RunCMake/cmake_pkg_config/TestRequired.cmake
new file mode 100644
index 0000000..fcc72ce
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestRequired.cmake
@@ -0,0 +1,9 @@
+cmake_pkg_config(
+ EXTRACT foo
+ REQUIRED
+)
+
+cmake_pkg_config(
+ EXTRACT does-not-exist
+ REQUIRED
+)
diff --git a/Tests/RunCMake/cmake_pkg_config/TestReroot-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestReroot-stderr.txt
new file mode 100644
index 0000000..ab524d4
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestReroot-stderr.txt
@@ -0,0 +1,4 @@
+Cflags: -I/NewRoot/Alpha Beta -I/NewRoot/Gamma
+Includes: -I/NewRoot/Alpha;-I/NewRoot/Gamma
+Libs: -L/NewRoot/Delta Epsilon -L/NewRoot/Zeta
+LibDirs: -L/NewRoot/Delta;-L/NewRoot/Zeta
diff --git a/Tests/RunCMake/cmake_pkg_config/TestReroot.cmake b/Tests/RunCMake/cmake_pkg_config/TestReroot.cmake
new file mode 100644
index 0000000..0f55558
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestReroot.cmake
@@ -0,0 +1,10 @@
+cmake_pkg_config(
+ EXTRACT relocate
+ PC_SYSROOT_DIR /NewRoot
+)
+
+message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}")
+message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}")
+
+message("Libs: ${CMAKE_PKG_CONFIG_LIBS}")
+message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}")
diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness-BEST_EFFORT-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestStrictness-BEST_EFFORT-stderr.txt
new file mode 100644
index 0000000..e18e88e
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness-BEST_EFFORT-stderr.txt
@@ -0,0 +1,3 @@
+Cflags: lowercase
+CFlags: uppercase
+Cflags: lowercase uppercase
diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness-PERMISSIVE-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestStrictness-PERMISSIVE-stderr.txt
new file mode 100644
index 0000000..2f4a69c
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness-PERMISSIVE-stderr.txt
@@ -0,0 +1,31 @@
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Resolution failed for file[^
+]*(.)*/PackageRoot/no-name.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Resolution failed for file[^
+]*(.)*/PackageRoot/no-description.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Resolution failed for file[^
+]*(.)*/PackageRoot/no-version.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Parsing failed for file[^
+]*(.)*/PackageRoot/invalid.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+Cflags: lowercase
+CFlags: uppercase
+Cflags: lowercase uppercase
diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness-STRICT-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestStrictness-STRICT-stderr.txt
new file mode 100644
index 0000000..7329e8d
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness-STRICT-stderr.txt
@@ -0,0 +1,38 @@
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Resolution failed for file[^
+]*(.)*/PackageRoot/no-name.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Resolution failed for file[^
+]*(.)*/PackageRoot/no-description.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Resolution failed for file[^
+]*(.)*/PackageRoot/no-version.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Parsing failed for file[^
+]*(.)*/PackageRoot/invalid.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+Cflags: lowercase
+CFlags: uppercase
+CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\):
+ Resolution failed for file[^
+]*(.)*/PackageRoot/cflags-bothcase-f.pc'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+Cflags:
diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness.cmake b/Tests/RunCMake/cmake_pkg_config/TestStrictness.cmake
new file mode 100644
index 0000000..d34f85e
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness.cmake
@@ -0,0 +1,51 @@
+cmake_pkg_config(
+ EXTRACT foo
+ STRICTNESS ${STRICTNESS}
+ REQUIRED
+)
+
+cmake_pkg_config(
+ EXTRACT empty-key
+ STRICTNESS ${STRICTNESS}
+ REQUIRED
+)
+
+cmake_pkg_config(
+ EXTRACT no-name
+ STRICTNESS ${STRICTNESS}
+)
+
+cmake_pkg_config(
+ EXTRACT no-description
+ STRICTNESS ${STRICTNESS}
+)
+
+cmake_pkg_config(
+ EXTRACT no-version
+ STRICTNESS ${STRICTNESS}
+)
+
+cmake_pkg_config(
+ EXTRACT invalid
+ STRICTNESS ${STRICTNESS}
+)
+
+cmake_pkg_config(
+ EXTRACT cflags-lowercase-f
+ STRICTNESS ${STRICTNESS}
+)
+message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}")
+
+set(CMAKE_PKG_CONFIG_CFLAGS)
+cmake_pkg_config(
+ EXTRACT cflags-uppercase-f
+ STRICTNESS ${STRICTNESS}
+)
+message("CFlags: ${CMAKE_PKG_CONFIG_CFLAGS}")
+
+set(CMAKE_PKG_CONFIG_CFLAGS)
+cmake_pkg_config(
+ EXTRACT cflags-bothcase-f
+ STRICTNESS ${STRICTNESS}
+)
+message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}")
diff --git a/Tests/RunCMake/cmake_pkg_config/TestUninstalled-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestUninstalled-stderr.txt
new file mode 100644
index 0000000..25afa68
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestUninstalled-stderr.txt
@@ -0,0 +1,2 @@
+QuxUninstalled
+QuxInstalled
diff --git a/Tests/RunCMake/cmake_pkg_config/TestUninstalled.cmake b/Tests/RunCMake/cmake_pkg_config/TestUninstalled.cmake
new file mode 100644
index 0000000..fafed11
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestUninstalled.cmake
@@ -0,0 +1,10 @@
+cmake_pkg_config(EXTRACT qux)
+
+message(${CMAKE_PKG_CONFIG_CFLAGS})
+
+cmake_pkg_config(
+ EXTRACT qux
+ DISABLE_UNINSTALLED ON
+)
+
+message(${CMAKE_PKG_CONFIG_CFLAGS})
diff --git a/Tests/RunCMake/cmake_pkg_config/TestVersion-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestVersion-stderr.txt
new file mode 100644
index 0000000..4b710d8
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestVersion-stderr.txt
@@ -0,0 +1,103 @@
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'a' version 'aa' does not meet version requirement '<a'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'a' version 'aa' does not meet version requirement '>aaa'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'a' version 'aa' does not meet version requirement '>bb'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'a' version 'aa' does not meet version requirement '>1'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'empty-key' version '' does not meet version requirement '!='
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'empty-key' version '' does not meet version requirement '=0'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'one' version '11' does not meet version requirement '<1'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'one' version '11' does not meet version requirement '>111'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'one' version '11' does not meet version requirement '>22'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'one' version '11' does not meet version requirement '<a'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'onedot' version '1.1.1' does not meet version requirement '>1.2.1'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'onedot' version '1.1.1' does not meet version requirement '>
+ 1.2.1'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'onedot' version '1.1.1' does not meet exact version requirement
+ '01.01.01'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'pseudo-empty' version '~0' does not meet version requirement '=~'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'pseudo-empty' version '~0' does not meet version requirement
+ '!=~0'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'tilde' version '~~1' does not meet version requirement '>~1'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\):
+ Package 'tilde' version '~~1' does not meet version requirement '<~~~1'
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/cmake_pkg_config/TestVersion.cmake b/Tests/RunCMake/cmake_pkg_config/TestVersion.cmake
new file mode 100644
index 0000000..18fa587
--- /dev/null
+++ b/Tests/RunCMake/cmake_pkg_config/TestVersion.cmake
@@ -0,0 +1,65 @@
+set(CMAKE_PKG_CONFIG_PC_PATH ${CMAKE_CURRENT_LIST_DIR}/PackageRoot/VersionPackages)
+
+# Good = Should Succeed
+# Bad = Should Warn
+
+cmake_pkg_config(EXTRACT a =aa) # Good
+cmake_pkg_config(EXTRACT a >a) # Good
+cmake_pkg_config(EXTRACT a <a) # Bad
+cmake_pkg_config(EXTRACT a >aaa) # Bad
+cmake_pkg_config(EXTRACT a <aaa) # Good
+
+cmake_pkg_config(EXTRACT a !=bb) # Good
+cmake_pkg_config(EXTRACT a >bb) # Bad
+cmake_pkg_config(EXTRACT a <bb) # Good
+
+cmake_pkg_config(EXTRACT a >1) # Bad
+cmake_pkg_config(EXTRACT a <1) # Good
+
+cmake_pkg_config(EXTRACT empty-key =) # Good
+cmake_pkg_config(EXTRACT empty-key !=) # Bad
+cmake_pkg_config(EXTRACT empty-key =0) # Bad
+cmake_pkg_config(EXTRACT empty-key !=0) # Good
+
+cmake_pkg_config(EXTRACT empty-key EXACT) # Good
+
+cmake_pkg_config(EXTRACT one =11) # Good
+cmake_pkg_config(EXTRACT one >1) # Good
+cmake_pkg_config(EXTRACT one <1) # Bad
+cmake_pkg_config(EXTRACT one >111) # Bad
+cmake_pkg_config(EXTRACT one <111) # Good
+
+cmake_pkg_config(EXTRACT one !=22) # Good
+cmake_pkg_config(EXTRACT one >22) # Bad
+cmake_pkg_config(EXTRACT one <22) # Good
+
+cmake_pkg_config(EXTRACT one >a) # Good
+cmake_pkg_config(EXTRACT one <a) # Bad
+
+cmake_pkg_config(EXTRACT onedot 1.1.1) # Good
+cmake_pkg_config(EXTRACT onedot 01.01.01) # Good
+cmake_pkg_config(EXTRACT onedot =1.1.1) # Good
+cmake_pkg_config(EXTRACT onedot =01.01.01) # Good
+cmake_pkg_config(EXTRACT onedot <1.2.1) # Good
+cmake_pkg_config(EXTRACT onedot >1.2.1) # Bad
+
+cmake_pkg_config(EXTRACT onedot "< 1.2.1") # Good
+cmake_pkg_config(EXTRACT onedot "> 1.2.1") # Bad
+
+cmake_pkg_config(EXTRACT onedot 1.1.1 EXACT) # Good
+cmake_pkg_config(EXTRACT onedot =1.1.1 EXACT) # Good
+cmake_pkg_config(EXTRACT onedot =01.01.01 EXACT) # Bad
+
+cmake_pkg_config(EXTRACT pseudo-empty =~) # Bad
+cmake_pkg_config(EXTRACT pseudo-empty !=~) # Good
+cmake_pkg_config(EXTRACT pseudo-empty =~0) # Good
+cmake_pkg_config(EXTRACT pseudo-empty !=~0) # Bad
+
+cmake_pkg_config(EXTRACT tilde =~~1) # Good
+cmake_pkg_config(EXTRACT tilde <~1) # Good
+cmake_pkg_config(EXTRACT tilde >~1) # Bad
+cmake_pkg_config(EXTRACT tilde <~~~1) # Bad
+cmake_pkg_config(EXTRACT tilde >~~~1) # Good
+
+cmake_pkg_config(EXTRACT zeroone =1) # Good
+cmake_pkg_config(EXTRACT zeroone =001) # Good
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/CMakeLists.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/CMakeLists.txt
new file mode 100644
index 0000000..93ee9df
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.5)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-stdout.txt
new file mode 100644
index 0000000..63d46fd
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-stdout.txt
@@ -0,0 +1,3 @@
+^-- Result=Failed to create directory: [^
+]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-build/file/directory0 Error: [^
+]*$
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL.cmake
new file mode 100644
index 0000000..0cfccbf
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL.cmake
@@ -0,0 +1,9 @@
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/file" "")
+
+file(MAKE_DIRECTORY
+ "${CMAKE_CURRENT_BINARY_DIR}/file/directory0"
+ "${CMAKE_CURRENT_BINARY_DIR}/file/directory1"
+ "${CMAKE_CURRENT_BINARY_DIR}/file/directory2"
+ RESULT resultVal
+)
+message(STATUS "Result=${resultVal}")
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS-stdout.txt
new file mode 100644
index 0000000..09df4f9
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS-stdout.txt
@@ -0,0 +1 @@
+^-- Result=0
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS.cmake
new file mode 100644
index 0000000..e0781ce
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS.cmake
@@ -0,0 +1,7 @@
+file(MAKE_DIRECTORY
+ "${CMAKE_CURRENT_BINARY_DIR}/file/directory0"
+ "${CMAKE_CURRENT_BINARY_DIR}/file/directory1"
+ "${CMAKE_CURRENT_BINARY_DIR}/file/directory2"
+ RESULT resultVal
+)
+message(STATUS "Result=${resultVal}")
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-stdout.txt
new file mode 100644
index 0000000..5d16178
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-stdout.txt
@@ -0,0 +1,3 @@
+^-- Result=Failed to create directory: [^
+]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-build/file/directory Error: [^
+]*$
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL.cmake
new file mode 100644
index 0000000..0287d67
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL.cmake
@@ -0,0 +1,3 @@
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/file" "")
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/file/directory" RESULT resultVal)
+message(STATUS "Result=${resultVal}")
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS-stdout.txt
new file mode 100644
index 0000000..09df4f9
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS-stdout.txt
@@ -0,0 +1 @@
+^-- Result=0
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS.cmake
new file mode 100644
index 0000000..3005b83
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS.cmake
@@ -0,0 +1,2 @@
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/file/directory" RESULT resultVal)
+message(STATUS "Result=${resultVal}")
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-result.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-stderr.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-stderr.txt
new file mode 100644
index 0000000..2bc275c
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-stderr.txt
@@ -0,0 +1,9 @@
+^CMake Error at [^
+]*/MAKE_DIRECTORY-one-dir-FAIL.cmake:[0-9]+ \(file\):
+ file failed to create directory:
+
+ [^
+]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-build/file/directory
+
+ because: [^
+]+$
diff --git a/Tests/RunCMake/file/MAKE_DIRECTORY-fail.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL.cmake
index 57a68e5..57a68e5 100644
--- a/Tests/RunCMake/file/MAKE_DIRECTORY-fail.cmake
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL.cmake
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake
new file mode 100644
index 0000000..1eacd90
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake
@@ -0,0 +1,7 @@
+include(RunCMake)
+
+run_cmake_script(MAKE_DIRECTORY-one-dir-FAIL)
+run_cmake_script(MAKE_DIRECTORY-Result-one-dir-FAIL)
+run_cmake_script(MAKE_DIRECTORY-Result-one-dir-SUCCESS)
+run_cmake_script(MAKE_DIRECTORY-Result-many-dirs-FAIL)
+run_cmake_script(MAKE_DIRECTORY-Result-many-dirs-SUCCESS)
diff --git a/Tests/RunCMake/file-RPATH/Common.cmake b/Tests/RunCMake/file-RPATH/Common.cmake
index 7034aad..d6d3eeb 100644
--- a/Tests/RunCMake/file-RPATH/Common.cmake
+++ b/Tests/RunCMake/file-RPATH/Common.cmake
@@ -1,12 +1,16 @@
# Prepare binaries on which to operate.
set(in "${CMAKE_CURRENT_LIST_DIR}/${format}")
set(out "${CMAKE_CURRENT_BINARY_DIR}")
-foreach(f ${names})
+foreach(f ${dynamic})
file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS)
- list(APPEND files "${out}/${f}")
+ list(APPEND dynamic_files "${out}/${f}")
+endforeach()
+foreach(f ${static})
+ file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS)
+ list(APPEND static_files "${out}/${f}")
endforeach()
-foreach(f ${files})
+foreach(f ${dynamic_files})
# Check for the initial RPATH.
file(RPATH_CHECK FILE "${f}" RPATH "/sample/rpath")
if(NOT EXISTS "${f}")
@@ -65,11 +69,11 @@ endforeach()
# TODO Implement RPATH_SET in XCOFF.
if(format STREQUAL "ELF")
- foreach(f ${names})
+ foreach(f ${dynamic})
file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS)
endforeach()
- foreach(f ${files})
+ foreach(f ${dynamic_files})
# Set the RPATH.
file(RPATH_SET FILE "${f}"
NEW_RPATH "/new/rpath")
@@ -99,3 +103,8 @@ if(format STREQUAL "ELF")
endif()
endforeach()
endif()
+
+# Verify that modifying rpaths on a static library is a no-op
+foreach(f ${static_files})
+ file(RPATH_CHANGE FILE "${f}" OLD_RPATH "/rpath/foo" NEW_RPATH "/rpath/bar")
+endforeach()
diff --git a/Tests/RunCMake/file-RPATH/ELF.cmake b/Tests/RunCMake/file-RPATH/ELF.cmake
index 558b2e2..b8919ef 100644
--- a/Tests/RunCMake/file-RPATH/ELF.cmake
+++ b/Tests/RunCMake/file-RPATH/ELF.cmake
@@ -1,9 +1,12 @@
-set(names
+set(dynamic
elf32lsb.bin
elf32msb.bin
elf64lsb.bin
elf64msb.bin
)
+set(static
+ elf64lsb-static.bin
+ )
set(format ELF)
include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
diff --git a/Tests/RunCMake/file-RPATH/ELF/elf64lsb-static.bin b/Tests/RunCMake/file-RPATH/ELF/elf64lsb-static.bin
new file mode 100755
index 0000000..b48c4f3
--- /dev/null
+++ b/Tests/RunCMake/file-RPATH/ELF/elf64lsb-static.bin
Binary files differ
diff --git a/Tests/RunCMake/file-RPATH/XCOFF.cmake b/Tests/RunCMake/file-RPATH/XCOFF.cmake
index b570920..f7464c2 100644
--- a/Tests/RunCMake/file-RPATH/XCOFF.cmake
+++ b/Tests/RunCMake/file-RPATH/XCOFF.cmake
@@ -1,4 +1,4 @@
-set(names
+set(dynamic
xcoff32.bin
xcoff64.bin
)
diff --git a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-stderr.txt b/Tests/RunCMake/file/MAKE_DIRECTORY-fail-stderr.txt
deleted file mode 100644
index 95fccdf..0000000
--- a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-stderr.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-^CMake Error at [^
-]*/MAKE_DIRECTORY-fail.cmake:[0-9]+ \(file\):
- file failed to create directory:
-
- [^
-]*/Tests/RunCMake/file/MAKE_DIRECTORY-fail-build/file/directory
-
- because: [^
-]+$
diff --git a/Tests/RunCMake/file/RunCMakeTest.cmake b/Tests/RunCMake/file/RunCMakeTest.cmake
index be8ee7c..524636d 100644
--- a/Tests/RunCMake/file/RunCMakeTest.cmake
+++ b/Tests/RunCMake/file/RunCMakeTest.cmake
@@ -62,8 +62,6 @@ run_cmake_script(COPY_FILE-arg-unknown)
run_cmake_script(COPY_FILE-input-missing)
run_cmake_script(COPY_FILE-output-missing)
-run_cmake_script(MAKE_DIRECTORY-fail)
-
run_cmake_script(RENAME-file-replace)
run_cmake_script(RENAME-file-to-file)
run_cmake_script(RENAME-file-to-dir-capture)