From 2151e5f79d4208713dfcaeeb59637859ba006aca Mon Sep 17 00:00:00 2001 From: Matthew Woehlke Date: Fri, 5 Dec 2025 15:17:46 -0500 Subject: [PATCH] export, install: Improve argument parsing Modify the `export(EXPORT)` and `install(PACKAGE_INFO)` commands to actually enforce that certain arguments must be non-empty. With respect to `export`, this is mainly targeted at CPS export, but ends up affecting all flavors of `export(EXPORT)` because that is the level at which argument parsing is performed. Also, add unit tests to verify that the new rejection of arguments with missing or empty values is working, update the existing tests due to changes in error reporting, and remove no-longer-needed manual validation of an empty `PACKAGE_INFO` argument. --- Help/manual/cmake-policies.7.rst | 1 + Help/policy/CMP0208.rst | 30 ++++++ Help/release/dev/export-empty-args.rst | 5 + Source/cmExportCommand.cxx | 27 +++--- Source/cmInstallCommand.cxx | 13 +-- Source/cmPolicies.h | 2 + .../ExportPackageInfo/BadArgs0-stderr.txt | 6 +- .../ExportPackageInfo/BadArgs5-result.txt | 1 + .../ExportPackageInfo/BadArgs5-stderr.txt | 95 +++++++++++++++++++ .../RunCMake/ExportPackageInfo/BadArgs5.cmake | 15 +++ .../DependsMultipleCommon.cmake | 2 +- .../ExportPackageInfo/RunCMakeTest.cmake | 1 + .../InstallPackageInfo/BadArgs0-stderr.txt | 20 ++-- .../InstallPackageInfo/BadArgs3-result.txt | 1 + .../InstallPackageInfo/BadArgs3-stderr.txt | 95 +++++++++++++++++++ .../InstallPackageInfo/BadArgs3.cmake | 15 +++ .../InstallPackageInfo/RunCMakeTest.cmake | 1 + .../export/EmptyExport-CMP0208-NEW-result.txt | 1 + .../export/EmptyExport-CMP0208-NEW-stderr.txt | 6 ++ .../export/EmptyExport-CMP0208-NEW.cmake | 3 + .../export/EmptyExport-CMP0208-OLD-result.txt | 1 + .../export/EmptyExport-CMP0208-OLD-stderr.txt | 4 + .../export/EmptyExport-CMP0208-OLD.cmake | 3 + .../EmptyExportFile-CMP0208-NEW-result.txt | 1 + .../EmptyExportFile-CMP0208-NEW-stderr.txt | 6 ++ .../export/EmptyExportFile-CMP0208-NEW.cmake | 6 ++ .../export/EmptyExportFile-CMP0208-OLD.cmake | 6 ++ .../EmptyExportFile-CMP0208-WARN-stderr.txt | 15 +++ .../export/EmptyExportFile-CMP0208-WARN.cmake | 4 + Tests/RunCMake/export/EmptyNamespace.cmake | 5 + Tests/RunCMake/export/RunCMakeTest.cmake | 6 ++ 31 files changed, 365 insertions(+), 32 deletions(-) create mode 100644 Help/policy/CMP0208.rst create mode 100644 Help/release/dev/export-empty-args.rst create mode 100644 Tests/RunCMake/ExportPackageInfo/BadArgs5-result.txt create mode 100644 Tests/RunCMake/ExportPackageInfo/BadArgs5-stderr.txt create mode 100644 Tests/RunCMake/ExportPackageInfo/BadArgs5.cmake create mode 100644 Tests/RunCMake/InstallPackageInfo/BadArgs3-result.txt create mode 100644 Tests/RunCMake/InstallPackageInfo/BadArgs3-stderr.txt create mode 100644 Tests/RunCMake/InstallPackageInfo/BadArgs3.cmake create mode 100644 Tests/RunCMake/export/EmptyExport-CMP0208-NEW-result.txt create mode 100644 Tests/RunCMake/export/EmptyExport-CMP0208-NEW-stderr.txt create mode 100644 Tests/RunCMake/export/EmptyExport-CMP0208-NEW.cmake create mode 100644 Tests/RunCMake/export/EmptyExport-CMP0208-OLD-result.txt create mode 100644 Tests/RunCMake/export/EmptyExport-CMP0208-OLD-stderr.txt create mode 100644 Tests/RunCMake/export/EmptyExport-CMP0208-OLD.cmake create mode 100644 Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-result.txt create mode 100644 Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-stderr.txt create mode 100644 Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW.cmake create mode 100644 Tests/RunCMake/export/EmptyExportFile-CMP0208-OLD.cmake create mode 100644 Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN-stderr.txt create mode 100644 Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN.cmake create mode 100644 Tests/RunCMake/export/EmptyNamespace.cmake diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst index 7395adb956..27140e4da5 100644 --- a/Help/manual/cmake-policies.7.rst +++ b/Help/manual/cmake-policies.7.rst @@ -100,6 +100,7 @@ Policies Introduced by CMake 4.3 .. toctree:: :maxdepth: 1 + CMP0208: export(EXPORT) does not allow empty arguments. CMP0207: file(GET_RUNTIME_DEPENDENCIES) normalizes paths before matching. CMP0206: The CPack Archive Generator defaults to UID 0 and GID 0. CMP0205: file(CREATE_LINK) with COPY_ON_ERROR copies directory content. diff --git a/Help/policy/CMP0208.rst b/Help/policy/CMP0208.rst new file mode 100644 index 0000000000..ae91daf7cb --- /dev/null +++ b/Help/policy/CMP0208.rst @@ -0,0 +1,30 @@ +CMP0208 +------- + +.. versionadded:: 4.3 + +:command:`export(EXPORT)` does not allow empty arguments. + +In CMake 4.2 and below, the :command:`export(EXPORT)` command silently +accepted ``NAMESPACE``, ``FILE`` or ``CXX_MODULES_DIRECTORY`` arguments with +empty or missing values. + +CMake 4.3 and above issue a diagnostic if any of these keywords are present +without an associated value, or of the value given to ``FILE`` or +``CXX_MODULES_DIRECTORY`` is empty. (``NAMESPACE`` is allowed to have an empty +value, but an empty value must be quoted.) A diagnostic is also issued +immediately if the value of ``EXPORT`` is missing or empty. (Previously, this +would result in an error at generate-time because no export set whose name is +empty can exist.) + +This policy provides compatibility with projects which may have relied on the +previous lack of enforcement. The ``OLD`` behavior for this policy permits +these keywords to be present without an accompanying value, or to be given an +empty value. The ``NEW`` behavior requires that a value be given, and that +the value (except for ``NAMESPACE``) is non-empty. + +.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.3 +.. |WARNS_OR_DOES_NOT_WARN| replace:: warns +.. include:: include/STANDARD_ADVICE.rst + +.. include:: include/DEPRECATED.rst diff --git a/Help/release/dev/export-empty-args.rst b/Help/release/dev/export-empty-args.rst new file mode 100644 index 0000000000..56c83a8898 --- /dev/null +++ b/Help/release/dev/export-empty-args.rst @@ -0,0 +1,5 @@ +export-empty-args +----------------- + +* The :command:`export(EXPORT)` command no longer allows certain + arguments to be missing or empty. See policy :policy:`CMP0208`. diff --git a/Source/cmExportCommand.cxx b/Source/cmExportCommand.cxx index 736694209d..0e8107a263 100644 --- a/Source/cmExportCommand.cxx +++ b/Source/cmExportCommand.cxx @@ -209,7 +209,7 @@ static bool HandleTargetsMode(std::vector const& args, static bool HandleExportMode(std::vector const& args, cmExecutionStatus& status) { - struct ExportArguments + struct ExportArguments : public ArgumentParser::ParseResult { ArgumentParser::NonEmpty ExportSetName; ArgumentParser::MaybeEmpty Namespace; @@ -248,12 +248,23 @@ static bool HandleExportMode(std::vector const& args, cmMakefile& mf = status.GetMakefile(); cmGlobalGenerator* gg = mf.GetGlobalGenerator(); - if (arguments.PackageInfo) { - if (arguments.PackageInfo->PackageName.empty()) { - // TODO: Fix our use of the parser to enforce this. - status.SetError("PACKAGE_INFO missing required value."); + if (!arguments.Check(args[0], &unknownArgs, status)) { + cmPolicies::PolicyStatus const p = + status.GetMakefile().GetPolicyStatus(cmPolicies::CMP0208); + if (arguments.PackageInfo || !unknownArgs.empty() || + p == cmPolicies::NEW) { return false; } + if (p == cmPolicies::WARN) { + status.GetMakefile().IssueMessage( + MessageType::AUTHOR_WARNING, cmStrCat("export "_s, status.GetError())); + status.GetMakefile().IssueMessage( + MessageType::AUTHOR_WARNING, + cmPolicies::GetPolicyWarning(cmPolicies::CMP0208)); + } + } + + if (arguments.PackageInfo) { if (!arguments.Filename.empty()) { status.SetError("PACKAGE_INFO and FILE are mutually exclusive."); return false; @@ -268,12 +279,6 @@ static bool HandleExportMode(std::vector const& args, } } - if (!unknownArgs.empty()) { - status.SetError("EXPORT given unknown argument: \"" + unknownArgs.front() + - "\"."); - return false; - } - std::string fname; if (arguments.Filename.empty()) { if (arguments.PackageInfo) { diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx index 8ce78c0f65..9244716e2e 100644 --- a/Source/cmInstallCommand.cxx +++ b/Source/cmInstallCommand.cxx @@ -2340,12 +2340,9 @@ bool HandlePackageInfoMode(std::vector const& args, // ica.Bind("CXX_MODULES_DIRECTORY"_s, cxxModulesDirectory); TODO? std::vector unknownArgs; - ica.Parse(args, &unknownArgs); + ArgumentParser::ParseResult result = ica.Parse(args, &unknownArgs); - if (!unknownArgs.empty()) { - // Unknown argument. - status.SetError( - cmStrCat(args[0], " given unknown argument \"", unknownArgs[0], "\".")); + if (!result.Check(args[0], &unknownArgs, status)) { return false; } @@ -2353,12 +2350,6 @@ bool HandlePackageInfoMode(std::vector const& args, return false; } - if (arguments.PackageName.empty()) { - // TODO: Fix our use of the parser to enforce this. - status.SetError(cmStrCat(args[0], " missing package name.")); - return false; - } - if (exportName.empty()) { status.SetError(cmStrCat(args[0], " missing EXPORT.")); return false; diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index b52a3c8827..382abca888 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -621,6 +621,8 @@ class cmMakefile; WARN) \ SELECT(POLICY, CMP0207, \ "file(GET_RUNTIME_DEPENDENCIES) normalizes paths before matching.", \ + 4, 3, 0, WARN) \ + SELECT(POLICY, CMP0208, "export(EXPORT) does not allow empty arguments.", \ 4, 3, 0, WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) diff --git a/Tests/RunCMake/ExportPackageInfo/BadArgs0-stderr.txt b/Tests/RunCMake/ExportPackageInfo/BadArgs0-stderr.txt index d91c7f1d3c..c288df7758 100644 --- a/Tests/RunCMake/ExportPackageInfo/BadArgs0-stderr.txt +++ b/Tests/RunCMake/ExportPackageInfo/BadArgs0-stderr.txt @@ -1,4 +1,6 @@ -CMake Error at BadArgs0\.cmake:3 \(export\): - export PACKAGE_INFO missing required value\. +CMake Error at BadArgs0\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + PACKAGE_INFO: missing required value Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/ExportPackageInfo/BadArgs5-result.txt b/Tests/RunCMake/ExportPackageInfo/BadArgs5-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/ExportPackageInfo/BadArgs5-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/ExportPackageInfo/BadArgs5-stderr.txt b/Tests/RunCMake/ExportPackageInfo/BadArgs5-stderr.txt new file mode 100644 index 0000000000..3ee82543f4 --- /dev/null +++ b/Tests/RunCMake/ExportPackageInfo/BadArgs5-stderr.txt @@ -0,0 +1,95 @@ +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + APPENDIX: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + VERSION: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + COMPAT_VERSION: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + VERSION_SCHEMA: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + LICENSE: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + DEFAULT_LICENSE: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + DESCRIPTION: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + HOMEPAGE_URL: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + DEFAULT_TARGETS: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + DEFAULT_CONFIGURATIONS: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + PROJECT: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs5\.cmake:[0-9]+ \(export\): + export EXPORT given invalid arguments: + + DEFAULT_LICENSE: empty string not allowed + LICENSE: empty string not allowed +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/ExportPackageInfo/BadArgs5.cmake b/Tests/RunCMake/ExportPackageInfo/BadArgs5.cmake new file mode 100644 index 0000000000..485ea5b380 --- /dev/null +++ b/Tests/RunCMake/ExportPackageInfo/BadArgs5.cmake @@ -0,0 +1,15 @@ +add_library(foo INTERFACE) +install(TARGETS foo EXPORT foo DESTINATION .) +set(args EXPORT foo PACKAGE_INFO foo) +export(${args} APPENDIX) +export(${args} VERSION) +export(${args} COMPAT_VERSION) +export(${args} VERSION_SCHEMA) +export(${args} LICENSE) +export(${args} DEFAULT_LICENSE) +export(${args} DESCRIPTION) +export(${args} HOMEPAGE_URL) +export(${args} DEFAULT_TARGETS) +export(${args} DEFAULT_CONFIGURATIONS) +export(${args} PROJECT) +export(${args} LICENSE "" DEFAULT_LICENSE "") diff --git a/Tests/RunCMake/ExportPackageInfo/DependsMultipleCommon.cmake b/Tests/RunCMake/ExportPackageInfo/DependsMultipleCommon.cmake index 1e95085028..b08a201fa0 100644 --- a/Tests/RunCMake/ExportPackageInfo/DependsMultipleCommon.cmake +++ b/Tests/RunCMake/ExportPackageInfo/DependsMultipleCommon.cmake @@ -3,7 +3,7 @@ add_library(bar foo.cxx) target_link_libraries(bar foo) install(TARGETS foo EXPORT foo) -export(EXPORT foo NAMESPACE ${NAMESPACE}) +export(EXPORT foo NAMESPACE "${NAMESPACE}") export(EXPORT foo PACKAGE_INFO foo) install(TARGETS bar EXPORT bar) diff --git a/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake b/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake index 8f11a954d2..aa32a25eee 100644 --- a/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake +++ b/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake @@ -21,6 +21,7 @@ run_cmake(BadArgs1) run_cmake(BadArgs2) run_cmake(BadArgs3) run_cmake(BadArgs4) +run_cmake(BadArgs5) run_cmake(BadName) run_cmake(DuplicateOutput) run_cmake(BadDefaultTarget) diff --git a/Tests/RunCMake/InstallPackageInfo/BadArgs0-stderr.txt b/Tests/RunCMake/InstallPackageInfo/BadArgs0-stderr.txt index 9fd5b2f0e9..c60f6377b0 100644 --- a/Tests/RunCMake/InstallPackageInfo/BadArgs0-stderr.txt +++ b/Tests/RunCMake/InstallPackageInfo/BadArgs0-stderr.txt @@ -1,22 +1,28 @@ -CMake Error at BadArgs0\.cmake:1 \(install\): - install PACKAGE_INFO missing package name\. +CMake Error at BadArgs0\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + PACKAGE_INFO: missing required value Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) -CMake Error at BadArgs0\.cmake:2 \(install\): +CMake Error at BadArgs0\.cmake:[0-9]+ \(install\): install PACKAGE_INFO missing EXPORT\. Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) -CMake Error at BadArgs0\.cmake:3 \(install\): - install PACKAGE_INFO missing EXPORT\. +CMake Error at BadArgs0\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + EXPORT: missing required value Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) -CMake Error at BadArgs0\.cmake:7 \(install\): - install PACKAGE_INFO missing package name\. +CMake Error at BadArgs0\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + PACKAGE_INFO: missing required value Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/InstallPackageInfo/BadArgs3-result.txt b/Tests/RunCMake/InstallPackageInfo/BadArgs3-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/InstallPackageInfo/BadArgs3-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/InstallPackageInfo/BadArgs3-stderr.txt b/Tests/RunCMake/InstallPackageInfo/BadArgs3-stderr.txt new file mode 100644 index 0000000000..0bb8d7a5dd --- /dev/null +++ b/Tests/RunCMake/InstallPackageInfo/BadArgs3-stderr.txt @@ -0,0 +1,95 @@ +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + APPENDIX: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + VERSION: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + COMPAT_VERSION: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + VERSION_SCHEMA: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + LICENSE: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + DEFAULT_LICENSE: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + DESCRIPTION: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + HOMEPAGE_URL: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + DEFAULT_TARGETS: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + DEFAULT_CONFIGURATIONS: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid argument: + + PROJECT: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) + + +CMake Error at BadArgs3\.cmake:[0-9]+ \(install\): + install PACKAGE_INFO given invalid arguments: + + DEFAULT_LICENSE: empty string not allowed + LICENSE: empty string not allowed +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/InstallPackageInfo/BadArgs3.cmake b/Tests/RunCMake/InstallPackageInfo/BadArgs3.cmake new file mode 100644 index 0000000000..6bf3e4de90 --- /dev/null +++ b/Tests/RunCMake/InstallPackageInfo/BadArgs3.cmake @@ -0,0 +1,15 @@ +add_library(foo INTERFACE) +install(TARGETS foo EXPORT foo DESTINATION .) +set(args PACKAGE_INFO test EXPORT foo) +install(${args} APPENDIX) +install(${args} VERSION) +install(${args} COMPAT_VERSION) +install(${args} VERSION_SCHEMA) +install(${args} LICENSE) +install(${args} DEFAULT_LICENSE) +install(${args} DESCRIPTION) +install(${args} HOMEPAGE_URL) +install(${args} DEFAULT_TARGETS) +install(${args} DEFAULT_CONFIGURATIONS) +install(${args} PROJECT) +install(${args} LICENSE "" DEFAULT_LICENSE "") diff --git a/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake b/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake index 91e34b9692..509892fdd7 100644 --- a/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake +++ b/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake @@ -32,6 +32,7 @@ endfunction() run_cmake(BadArgs0) run_cmake(BadArgs1) run_cmake(BadArgs2) +run_cmake(BadArgs3) run_cmake(BadName) run_cmake(BadDefaultTarget) run_cmake(ReferencesNonExportedTarget) diff --git a/Tests/RunCMake/export/EmptyExport-CMP0208-NEW-result.txt b/Tests/RunCMake/export/EmptyExport-CMP0208-NEW-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/export/EmptyExport-CMP0208-NEW-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/export/EmptyExport-CMP0208-NEW-stderr.txt b/Tests/RunCMake/export/EmptyExport-CMP0208-NEW-stderr.txt new file mode 100644 index 0000000000..0d52865ccd --- /dev/null +++ b/Tests/RunCMake/export/EmptyExport-CMP0208-NEW-stderr.txt @@ -0,0 +1,6 @@ +CMake Error at EmptyExport-CMP0208-NEW\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + EXPORT: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/export/EmptyExport-CMP0208-NEW.cmake b/Tests/RunCMake/export/EmptyExport-CMP0208-NEW.cmake new file mode 100644 index 0000000000..7a115b9a90 --- /dev/null +++ b/Tests/RunCMake/export/EmptyExport-CMP0208-NEW.cmake @@ -0,0 +1,3 @@ +cmake_policy(SET CMP0208 NEW) + +export(EXPORT) diff --git a/Tests/RunCMake/export/EmptyExport-CMP0208-OLD-result.txt b/Tests/RunCMake/export/EmptyExport-CMP0208-OLD-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/export/EmptyExport-CMP0208-OLD-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/export/EmptyExport-CMP0208-OLD-stderr.txt b/Tests/RunCMake/export/EmptyExport-CMP0208-OLD-stderr.txt new file mode 100644 index 0000000000..767c85cf01 --- /dev/null +++ b/Tests/RunCMake/export/EmptyExport-CMP0208-OLD-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at EmptyExport-CMP0208-OLD\.cmake:[0-9]+ \(export\): + export Export set "" not found\. +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/export/EmptyExport-CMP0208-OLD.cmake b/Tests/RunCMake/export/EmptyExport-CMP0208-OLD.cmake new file mode 100644 index 0000000000..53fc793917 --- /dev/null +++ b/Tests/RunCMake/export/EmptyExport-CMP0208-OLD.cmake @@ -0,0 +1,3 @@ +cmake_policy(SET CMP0208 OLD) + +export(EXPORT) diff --git a/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-result.txt b/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-stderr.txt b/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-stderr.txt new file mode 100644 index 0000000000..31eb2a800e --- /dev/null +++ b/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW-stderr.txt @@ -0,0 +1,6 @@ +CMake Error at EmptyExportFile-CMP0208-NEW\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + FILE: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW.cmake b/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW.cmake new file mode 100644 index 0000000000..2bd27d2696 --- /dev/null +++ b/Tests/RunCMake/export/EmptyExportFile-CMP0208-NEW.cmake @@ -0,0 +1,6 @@ +cmake_policy(SET CMP0208 NEW) + +add_library(foo INTERFACE) +install(TARGETS foo EXPORT foo) + +export(EXPORT foo FILE) diff --git a/Tests/RunCMake/export/EmptyExportFile-CMP0208-OLD.cmake b/Tests/RunCMake/export/EmptyExportFile-CMP0208-OLD.cmake new file mode 100644 index 0000000000..1c1aa50b7b --- /dev/null +++ b/Tests/RunCMake/export/EmptyExportFile-CMP0208-OLD.cmake @@ -0,0 +1,6 @@ +cmake_policy(SET CMP0208 OLD) + +add_library(foo INTERFACE) +install(TARGETS foo EXPORT foo) + +export(EXPORT foo FILE) diff --git a/Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN-stderr.txt b/Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN-stderr.txt new file mode 100644 index 0000000000..93a10721c7 --- /dev/null +++ b/Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN-stderr.txt @@ -0,0 +1,15 @@ +CMake Warning \(dev\) at EmptyExportFile-CMP0208-WARN\.cmake:[0-9]+ \(export\): + export EXPORT given invalid argument: + + FILE: missing required value +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) +This warning is for project developers\. Use -Wno-dev to suppress it\. + +CMake Warning \(dev\) at EmptyExportFile-CMP0208-WARN\.cmake:[0-9]+ \(export\): + Policy CMP0208 is not set: export\(EXPORT\) does not allow empty arguments\. + Run "cmake --help-policy CMP0208" for policy details\. Use the cmake_policy + command to set the policy and suppress this warning\. +Call Stack \(most recent call first\): + CMakeLists\.txt:3 \(include\) +This warning is for project developers\. Use -Wno-dev to suppress it\. diff --git a/Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN.cmake b/Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN.cmake new file mode 100644 index 0000000000..7131f68f06 --- /dev/null +++ b/Tests/RunCMake/export/EmptyExportFile-CMP0208-WARN.cmake @@ -0,0 +1,4 @@ +add_library(foo INTERFACE) +install(TARGETS foo EXPORT foo) + +export(EXPORT foo FILE) diff --git a/Tests/RunCMake/export/EmptyNamespace.cmake b/Tests/RunCMake/export/EmptyNamespace.cmake new file mode 100644 index 0000000000..e277b5ed7b --- /dev/null +++ b/Tests/RunCMake/export/EmptyNamespace.cmake @@ -0,0 +1,5 @@ +add_library(foo INTERFACE) +install(TARGETS foo EXPORT foo) + +# Ensure we can export with an explicitly-empty namespace. +export(EXPORT foo NAMESPACE "") diff --git a/Tests/RunCMake/export/RunCMakeTest.cmake b/Tests/RunCMake/export/RunCMakeTest.cmake index 62c9a13a69..826b23c833 100644 --- a/Tests/RunCMake/export/RunCMakeTest.cmake +++ b/Tests/RunCMake/export/RunCMakeTest.cmake @@ -1,5 +1,11 @@ include(RunCMake) +run_cmake(EmptyExport-CMP0208-OLD) +run_cmake(EmptyExport-CMP0208-NEW) +run_cmake(EmptyExportFile-CMP0208-WARN) +run_cmake(EmptyExportFile-CMP0208-OLD) +run_cmake(EmptyExportFile-CMP0208-NEW) +run_cmake(EmptyNamespace) run_cmake(CustomTarget) run_cmake(Empty) run_cmake(Repeat-CMP0103-WARN)