CPS, SBOM: Fix default output destination

- Change default CPS install path on Windows from `cps` to `cps/<name>`,
per community recommendation that only paths containing the package name
should be considered as "officially" supported search locations (see
https://github.com/cps-org/cps/issues/79#issuecomment-2831102822).

- Change `export` to write to a subdirectory that allows the build
tree to be used as a search root.

- Change SBOM destinations to be consistent with the preceding.

Issue: #27785
This commit is contained in:
Matthew Woehlke
2026-05-19 13:31:56 -04:00
parent ba78bdd141
commit ed6e9abf98
52 changed files with 101 additions and 78 deletions
+5 -2
View File
@@ -161,7 +161,8 @@ tree. The imported targets are implicitly in the namespace ``<package-name>``.
The default file name is ``<package-name>[-<appendix-name>].cps``. If the
``LOWER_CASE_FILE`` option is given, the file name will use the package name
converted to lower case.
converted to lower case. Files are written to the ``cps/<package-name>``
subdirectory of the current build directory.
See :command:`install(PACKAGE_INFO)` for a description of the other options.
@@ -188,7 +189,9 @@ Exporting Software Bill of Materials (SBOM) Documents
Experimental. Gated by ``CMAKE_EXPERIMENTAL_GENERATE_SBOM``.
Generates a software bill of materials (SBOM) document describing the targets
in the export ``<export-name>`` and their dependencies in the build tree
in the export ``<export-name>`` and their dependencies in the build tree.
Files are written to the ``sbom/<sbom-name>`` subdirectory of the current
build directory.
See :command:`install(SBOM)` for details about the supported SBOM formats and a
description of the other options.
+6
View File
@@ -292,3 +292,9 @@ Changes made since CMake 4.3.0 include the following.
* These versions made no changes to documented features or interfaces.
Some implementation updates were made to support ecosystem changes
and/or fix regressions.
.. 4.3.3
* The :command:`export(PACKAGE_INFO)` command now writes to the
``cps/<package-name>`` subdirectory of the current build directory, rather
than directly to the current build directory.
+2 -1
View File
@@ -375,7 +375,8 @@ static bool HandleSpecialExportMode(std::vector<std::string> const& args,
cmMakefile& mf = status.GetMakefile();
cmGlobalGenerator* gg = mf.GetGlobalGenerator();
std::string const& dir = mf.GetCurrentBinaryDirectory();
std::string const& dir =
arguments.GetDefaultDestination(mf.GetCurrentBinaryDirectory());
std::string const fname = cmStrCat(dir, '/', arguments.GetPackageFileName());
if (gg->GetExportedTargetsFile(fname)) {
+9 -9
View File
@@ -2141,10 +2141,10 @@ bool HandleMappedPackageInfo(
std::string dest = std::string{ directive };
if (dest.empty()) {
if (helper.Makefile->GetSafeDefinition("CMAKE_SYSTEM_NAME") == "Windows") {
dest = std::string{ "cps"_s };
dest = arguments.GetDefaultDestination();
} else {
dest = cmStrCat(helper.GetLibraryDestination(nullptr), "/cps/",
arguments.GetPackageDirName());
dest =
arguments.GetDefaultDestination(helper.GetLibraryDestination(nullptr));
}
}
@@ -2356,10 +2356,10 @@ bool HandlePackageInfoMode(std::vector<std::string> const& args,
std::string dest = ica.GetDestination();
if (dest.empty()) {
if (helper.Makefile->GetSafeDefinition("CMAKE_SYSTEM_NAME") == "Windows") {
dest = std::string{ "cps"_s };
dest = arguments.GetDefaultDestination();
} else {
dest = cmStrCat(helper.GetLibraryDestination(nullptr), "/cps/",
arguments.GetPackageDirName());
dest =
arguments.GetDefaultDestination(helper.GetLibraryDestination(nullptr));
}
}
@@ -2558,10 +2558,10 @@ bool HandleSbomMode(std::vector<std::string> const& args,
std::string dest = ica.GetDestination();
if (dest.empty()) {
if (helper.Makefile->GetSafeDefinition("CMAKE_SYSTEM_NAME") == "Windows") {
dest = std::string{ "/sbom/"_s };
dest = arguments.GetDefaultDestination();
} else {
dest = cmStrCat(helper.GetLibraryDestination(nullptr), "/sbom/",
arguments.GetPackageDirName());
dest =
arguments.GetDefaultDestination(helper.GetLibraryDestination(nullptr));
}
}
+9
View File
@@ -89,3 +89,12 @@ std::string cmPackageInfoArguments::GetPackageFileName() const
}
return cmStrCat(pkgNameOnDisk, ".cps"_s);
}
std::string cmPackageInfoArguments::GetDefaultDestination(
std::string const& root) const
{
if (root.empty()) {
return cmStrCat("cps/"_s, this->GetPackageDirName());
}
return cmStrCat(root, '/', "cps/"_s, this->GetPackageDirName());
}
+1
View File
@@ -43,6 +43,7 @@ public:
std::string GetNamespace() const;
std::string GetPackageDirName() const;
std::string GetPackageFileName() const;
std::string GetDefaultDestination(std::string const& root = {}) const;
bool Check(cmExecutionStatus& status) const override;
+9
View File
@@ -87,6 +87,15 @@ std::string cmSbomArguments::GetPackageDirName() const
return this->PackageName;
}
std::string cmSbomArguments::GetDefaultDestination(
std::string const& root) const
{
if (root.empty()) {
return cmStrCat("sbom/"_s, this->GetPackageDirName());
}
return cmStrCat(root, '/', "sbom/"_s, this->GetPackageDirName());
}
cmSbomArguments::SbomFormat cmSbomArguments::GetFormat() const
{
if (this->Format.empty()) {
+1
View File
@@ -37,6 +37,7 @@ public:
std::string GetNamespace() const;
std::string GetPackageDirName() const;
std::string GetPackageFileName() const;
std::string GetDefaultDestination(std::string const& root = {}) const;
SbomFormat GetFormat() const;
ArgumentParser::NonEmpty<std::string> Format;
@@ -299,7 +299,7 @@ if ("export_bmi" IN_LIST CMake_TEST_MODULE_COMPILATION)
run_cxx_module_test(exp-command-sepdir-build)
run_cxx_module_test(exp-trans-targets-build)
run_cxx_module_test(exp-trans-mods1-build)
run_cxx_module_test(exp-trans-mods-build exp-trans-mods-build "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/exp-trans-mods1-build-build" "-Dexport_transitive_modules1_cps_DIR=${RunCMake_BINARY_DIR}/exp-trans-mods1-build-build")
run_cxx_module_test(exp-trans-mods-build exp-trans-mods-build "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/exp-trans-mods1-build-build")
run_cxx_module_test(exp-with-headers-build)
if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION AND
@@ -54,7 +54,7 @@ add_test(NAME export_bmi_and_interfaces_build
"${CMAKE_COMMAND}"
"-Dexpected_source_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexpected_binary_dir=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_bmi_and_interfaces_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -34,8 +34,7 @@ add_test(NAME export_sepdir_build
COMMAND
"${CMAKE_COMMAND}"
"-Dexpected_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexport_sepdir_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_sepdir_cps_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -56,8 +56,7 @@ add_test(NAME export_interfaces_build
"${CMAKE_COMMAND}"
"-Dexpected_source_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexpected_binary_dir=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_interfaces_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_interfaces_cps_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -51,7 +51,7 @@ add_test(NAME export_interfaces_build
COMMAND
"${CMAKE_COMMAND}"
"-Dexpected_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexport_interfaces_no_properties_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -62,8 +62,7 @@ add_test(NAME export_include_directories_build
"${CMAKE_COMMAND}"
"-Dexpected_source_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexpected_binary_dir=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_include_directories_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_include_directories_cps_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -42,7 +42,7 @@ add_test(NAME export_include_directories_old_cmake_build
"${CMAKE_COMMAND}"
"-Dexpected_source_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexpected_binary_dir=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_include_directories_old_cmake_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -68,9 +68,7 @@ add_test(NAME export_transitive_modules_build
"${CMAKE_COMMAND}"
"-Dexpected_source_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexpected_binary_dir=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_transitive_modules_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_transitive_modules1_cps_DIR=${CMAKE_PREFIX_PATH}"
"-Dexport_transitive_modules_cps_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR};${CMAKE_PREFIX_PATH}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -45,8 +45,7 @@ add_test(NAME export_transitive_modules1_build
"${CMAKE_COMMAND}"
"-Dexpected_source_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexpected_binary_dir=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_transitive_modules1_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_transitive_modules1_cps_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -65,7 +65,7 @@ add_test(NAME export_transitive_targets_build
"${CMAKE_COMMAND}"
"-Dexpected_source_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexpected_binary_dir=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_transitive_targets_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -104,7 +104,7 @@ add_test(NAME export_usage_build
"${CMAKE_COMMAND}"
"-Dexpected_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dexport_interfaces_flag=${variable_flag}"
"-Dexport_usage_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -46,8 +46,7 @@ endif ()
add_test(NAME export_with_headers_build
COMMAND
"${CMAKE_COMMAND}"
"-Dexport_with_headers_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-Dexport_with_headers_cps_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -53,7 +53,7 @@ add_test(NAME import_std_export_no_std_build
COMMAND
"${CMAKE_COMMAND}"
"-Dexpected_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dimport_std_export_no_std_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -48,7 +48,7 @@ add_test(NAME import_std_not_in_export_build
COMMAND
"${CMAKE_COMMAND}"
"-Dexpected_dir=${CMAKE_CURRENT_SOURCE_DIR}"
"-Dimport_std_not_in_export_DIR=${CMAKE_CURRENT_BINARY_DIR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}"
${generator}
-S "${CMAKE_CURRENT_SOURCE_DIR}/test"
-B "${CMAKE_CURRENT_BINARY_DIR}/test")
@@ -1,7 +1,7 @@
project(TestLibrary C)
set(liba_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build")
set(libb_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build")
set(liba_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build/cps/liba")
set(libb_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build/cps/libb")
find_package(libb REQUIRED COMPONENTS libb)
@@ -2,13 +2,13 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/Appendix-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "interface" "components" "mammal" "type")
expect_value("${content}" "LGPL-3.0-or-later" "default_license")
expect_value("${content}" "1.0" "version")
file(READ "${out_dir}/foo-dog.cps" content)
file(READ "${out_dir}/cps/foo/foo-dog.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "interface" "components" "canine" "type")
expect_value("${content}" "GPL-3.0-or-later" "default_license")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/CompileOnly-build")
file(READ "${out_dir}/bar.cps" content)
file(READ "${out_dir}/cps/bar/bar.cps" content)
string(JSON component GET "${content}" "components" "bar")
expect_array("${component}" 2 "compile_requires")
expect_value("${component}" "foo:linkOnlyOne" "compile_requires" 0)
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/Config-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
foreach(config FooConfig BarConfig)
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/DependencyVersionCMake-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_array("${content}" 1 "requires" "bar" "components")
expect_value("${content}" "bar" "requires" "bar" "components" 0)
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/DependencyVersionCps-build/")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_array("${content}" 1 "requires" "baz" "components")
expect_value("${content}" "baz" "requires" "baz" "components" 0)
@@ -2,8 +2,8 @@ CMake Error in CMakeLists\.txt:
export called with target "bar" which requires target "foo" that is not in
this export set, but in another export set which is exported multiple times
with different namespaces:.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/foo\.cmake,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/foo\.cps\.
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/cps/foo/foo\.cps,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/foo\.cmake\.
An exported target cannot depend upon another target which is exported in
more than one export set or with more than one namespace\. Consider
@@ -14,8 +14,8 @@ CMake Error in CMakeLists\.txt:
export called with target "bar" which requires target "foo" that is not in
this export set, but in another export set which is exported multiple times
with different namespaces:.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/foo\.cmake,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/foo\.cps\.
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/cps/foo/foo\.cps,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentNamespace-build/foo\.cmake\.
An exported target cannot depend upon another target which is exported in
more than one export set or with more than one namespace\. Consider
@@ -1,9 +1,9 @@
CMake Error in CMakeLists\.txt:
export called with target "bar" which requires target "foo" that is not in
this export set, but in multiple other export sets:.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/cps/foo/foo\.cps,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo-alt\.cmake,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo\.cmake,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo\.cps\.
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo\.cmake\.
An exported target cannot depend upon another target which is exported in
more than one export set or with more than one namespace\. Consider
@@ -13,9 +13,9 @@ CMake Error in CMakeLists\.txt:
CMake Error in CMakeLists\.txt:
export called with target "bar" which requires target "foo" that is not in
this export set, but in multiple other export sets:.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/cps/foo/foo\.cps,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo-alt\.cmake,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo\.cmake,.*
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo\.cps\.
.*/Tests/RunCMake/ExportPackageInfo/DependsMultipleDifferentSets-build/foo\.cmake\.
An exported target cannot depend upon another target which is exported in
more than one export set or with more than one namespace\. Consider
@@ -2,6 +2,6 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/EmptyConfig-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_object("${content}" "components" "foo" "configurations" "noconfig")
@@ -2,6 +2,6 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/ExportSymbolicComponent-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "symbolic" "components" "foo" "type")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/FileSetHeaders-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
string(JSON component GET "${content}" "components" "foo")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/InterfaceProperties-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
string(JSON component GET "${content}" "components" "foo")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/LinkDependentLibraries-build")
file(READ "${out_dir}/dyld.cps" content)
file(READ "${out_dir}/cps/dyld/dyld.cps" content)
expect_value("${content}" "dyld" "name")
expect_value("${content}" "dylib" "components" "private" "type")
expect_value("${content}" "dylib" "components" "public" "type")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/LinkOnly-build")
file(READ "${out_dir}/bar.cps" content)
file(READ "${out_dir}/cps/bar/bar.cps" content)
string(JSON component GET "${content}" "components" "bar")
expect_array("${component}" 2 "link_requires")
expect_value("${component}" "foo:linkOnlyOne" "link_requires" 0)
@@ -2,8 +2,8 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/LowerCaseFile-build")
file(READ "${out_dir}/lowercase.cps" content)
file(READ "${out_dir}/cps/lowercase/lowercase.cps" content)
expect_value("${content}" "LowerCase" "name")
file(READ "${out_dir}/PreserveCase.cps" content)
file(READ "${out_dir}/cps/PreserveCase/PreserveCase.cps" content)
expect_value("${content}" "PreserveCase" "name")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/Metadata-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "1.2.3" "version")
expect_value("${content}" "1.2.0" "compat_version")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/Minimal-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "interface" "components" "foo" "type")
expect_missing("${content}" "version")
@@ -2,19 +2,19 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/MinimalVersion-build")
file(READ "${out_dir}/foo1.cps" content)
file(READ "${out_dir}/cps/foo1/foo1.cps" content)
expect_value("${content}" "foo1" "name")
expect_value("${content}" "1.0" "version")
expect_missing("${content}" "compat_version")
expect_missing("${content}" "version_schema")
file(READ "${out_dir}/foo2.cps" content)
file(READ "${out_dir}/cps/foo2/foo2.cps" content)
expect_value("${content}" "foo2" "name")
expect_value("${content}" "1.5" "version")
expect_value("${content}" "1.0" "compat_version")
expect_missing("${content}" "version_schema")
file(READ "${out_dir}/foo3.cps" content)
file(READ "${out_dir}/cps/foo3/foo3.cps" content)
expect_value("${content}" "foo3" "name")
expect_value("${content}" "1.0" "version")
expect_missing("${content}" "compat_version")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/NoProjectMetadata-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_missing("${content}" "version")
expect_missing("${content}" "compat_version")
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/ProjectMetadata-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "1.2.3" "version")
expect_value("${content}" "1.1.0" "compat_version")
@@ -10,7 +10,7 @@ expect_value("${content}" "BSD-3-Clause" "license")
expect_value("${content}" "Sample package" "description")
expect_value("${content}" "https://www.example.com/package/foo" "website")
file(READ "${out_dir}/test1.cps" content)
file(READ "${out_dir}/cps/test1/test1.cps" content)
expect_value("${content}" "test1" "name")
expect_value("${content}" "1.2.3" "version")
expect_value("${content}" "1.1.0" "compat_version")
@@ -18,7 +18,7 @@ expect_value("${content}" "BSD-3-Clause" "license")
expect_value("${content}" "Sample package" "description")
expect_value("${content}" "https://www.example.com/package/foo" "website")
file(READ "${out_dir}/test2.cps" content)
file(READ "${out_dir}/cps/test2/test2.cps" content)
expect_value("${content}" "test2" "name")
expect_value("${content}" "1.4.7" "version")
expect_missing("${content}" "compat_version")
@@ -2,11 +2,11 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/Requirements-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "interface" "components" "libb" "type")
file(READ "${out_dir}/bar.cps" content)
file(READ "${out_dir}/cps/bar/bar.cps" content)
expect_value("${content}" "bar" "name")
expect_array("${content}" 1 "requires" "foo" "components")
expect_value("${content}" "libb" "requires" "foo" "components" 0)
@@ -2,7 +2,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/TargetTypes-build")
file(READ "${out_dir}/foo.cps" content)
file(READ "${out_dir}/cps/foo/foo.cps" content)
expect_value("${content}" "foo" "name")
expect_value("${content}" "archive" "components" "foo-static" "type")
expect_value("${content}" "dylib" "components" "foo-shared" "type")
@@ -3,7 +3,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake)
set(out_dir "${RunCMake_BINARY_DIR}/TransitiveSymbolicComponent-build")
file(READ "${out_dir}/bar.cps" content)
file(READ "${out_dir}/cps/bar/bar.cps" content)
expect_value("${content}" "bar" "name")
expect_array("${content}" 1 "requires" "Symbolic" "components")
expect_value("${content}" "test" "requires" "Symbolic" "components" 0)
@@ -1,2 +1,2 @@
file(READ "${RunCMake_TEST_BINARY_DIR}/application_targets.spdx.json" content)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/application_targets/application_targets.spdx.json" content)
include(${CMAKE_CURRENT_LIST_DIR}/../Sbom/ApplicationTarget-install-check.cmake)
@@ -1,2 +1,2 @@
file(READ "${RunCMake_TEST_BINARY_DIR}/interface_targets.spdx.json" content)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/interface_targets/interface_targets.spdx.json" content)
include(${CMAKE_CURRENT_LIST_DIR}/../Sbom/InterfaceTarget-install-check.cmake)
@@ -1,2 +1,2 @@
file(READ "${RunCMake_TEST_BINARY_DIR}/interface_targets.spdx.json" content)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/interface_targets/interface_targets.spdx.json" content)
include(${CMAKE_CURRENT_LIST_DIR}/../Sbom/MissingPackageNamespace-install-check.cmake)
@@ -1,2 +1,2 @@
file(READ "${RunCMake_TEST_BINARY_DIR}/test_targets.spdx.json" content)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/test_targets/test_targets.spdx.json" content)
include(${CMAKE_CURRENT_LIST_DIR}/../Sbom/ProjectMetadata-install-check.cmake)
@@ -1,2 +1,2 @@
file(READ "${RunCMake_TEST_BINARY_DIR}/dog.spdx.json" content)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/dog/dog.spdx.json" content)
include(${CMAKE_CURRENT_LIST_DIR}/../Sbom/ReferencesNonExportedTarget-install-check.cmake)
@@ -1,3 +1,3 @@
file(READ "${RunCMake_TEST_BINARY_DIR}/bar.spdx.json" BAR_CONTENT)
file(READ "${RunCMake_TEST_BINARY_DIR}/foo.spdx.json" FOO_CONTENT)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/bar/bar.spdx.json" BAR_CONTENT)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/foo/foo.spdx.json" FOO_CONTENT)
include(${CMAKE_CURRENT_LIST_DIR}/../Sbom/Requirements-install-check.cmake)
@@ -1,2 +1,2 @@
file(READ "${RunCMake_TEST_BINARY_DIR}/shared_targets.spdx.json" content)
file(READ "${RunCMake_TEST_BINARY_DIR}/sbom/shared_targets/shared_targets.spdx.json" content)
include(${CMAKE_CURRENT_LIST_DIR}/../Sbom/SharedTarget-install-check.cmake)