1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

export: Do not fail generation for namelink-only case

This commit is contained in:
Deniz Bahadir
2020-10-09 12:13:13 +02:00
parent 3fb2112880
commit 64690f6df0
11 changed files with 66 additions and 19 deletions

View File

@@ -461,6 +461,28 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
std::unique_ptr<cmInstallFilesGenerator> publicHeaderGenerator;
std::unique_ptr<cmInstallFilesGenerator> resourceGenerator;
auto addTargetExport = [&]() {
// Add this install rule to an export if one was specified.
// (If this is a namelink-only rule no export file will be generated.)
if (!exports.empty()) {
auto te = cm::make_unique<cmTargetExport>();
te->TargetName = target.GetName();
te->ArchiveGenerator = archiveGenerator.get();
te->BundleGenerator = bundleGenerator.get();
te->FrameworkGenerator = frameworkGenerator.get();
te->HeaderGenerator = publicHeaderGenerator.get();
te->LibraryGenerator = libraryGenerator.get();
te->RuntimeGenerator = runtimeGenerator.get();
te->ObjectsGenerator = objectGenerator.get();
te->InterfaceIncludeDirectories =
cmJoin(includesArgs.GetIncludeDirs(), ";");
helper.Makefile->GetGlobalGenerator()
->GetExportSets()[exports]
.AddTargetExport(std::move(te));
}
};
// Avoid selecting default destinations for PUBLIC_HEADER and
// PRIVATE_HEADER if any artifacts are specified.
bool artifactsSpecified = false;
@@ -476,6 +498,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
if (target.IsDLLPlatform()) {
// When in namelink only mode skip all libraries on Windows.
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
addTargetExport();
continue;
}
@@ -507,6 +530,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
if (target.IsFrameworkOnApple()) {
// When in namelink only mode skip frameworks.
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
addTargetExport();
continue;
}
@@ -551,6 +575,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
if (target.IsFrameworkOnApple()) {
// When in namelink only mode skip frameworks.
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
addTargetExport();
continue;
}
@@ -744,25 +769,8 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
}
}
// Add this install rule to an export if one was specified and
// this is not a namelink-only rule.
if (!exports.empty() && !namelinkOnly) {
auto te = cm::make_unique<cmTargetExport>();
te->TargetName = target.GetName();
te->ArchiveGenerator = archiveGenerator.get();
te->BundleGenerator = bundleGenerator.get();
te->FrameworkGenerator = frameworkGenerator.get();
te->HeaderGenerator = publicHeaderGenerator.get();
te->LibraryGenerator = libraryGenerator.get();
te->RuntimeGenerator = runtimeGenerator.get();
te->ObjectsGenerator = objectGenerator.get();
te->InterfaceIncludeDirectories =
cmJoin(includesArgs.GetIncludeDirs(), ";");
helper.Makefile->GetGlobalGenerator()
->GetExportSets()[exports]
.AddTargetExport(std::move(te));
}
// Add this install rule to an export if one was specified.
addTargetExport();
// Keep track of whether we're installing anything in each category
installsArchive = installsArchive || archiveGenerator;

View File

@@ -0,0 +1,9 @@
enable_language(CXX)
add_library(foo SHARED empty.cpp)
install(TARGETS foo EXPORT fooExport
RUNTIME DESTINATION bin
LIBRARY
DESTINATION lib
NAMELINK_ONLY
)
export(EXPORT fooExport FILE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake")

View File

@@ -15,3 +15,5 @@ run_cmake(ForbiddenToExportPropertyWithGenExp)
run_cmake(ExportPropertiesUndefined)
run_cmake(DependOnNotExport)
run_cmake(DependOnDoubleExport)
run_cmake(UnknownExport)
run_cmake(NamelinkOnlyExport)

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1,4 @@
CMake Error at UnknownExport\.cmake:[0-9]+ \(export\):
export Export set "fooExport" not found\.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@@ -0,0 +1,2 @@
enable_language(CXX)
export(EXPORT fooExport FILE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake")

View File

@@ -0,0 +1,12 @@
enable_language(C)
add_library(foo SHARED empty.c)
install(TARGETS foo EXPORT fooExport
RUNTIME DESTINATION bin
LIBRARY
DESTINATION lib
NAMELINK_ONLY
)
install(EXPORT fooExport
DESTINATION "lib/cmake/"
FILE "foo.cmake"
)

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1 @@
CMake Error: INSTALL\(EXPORT\) given unknown export "fooExport"

View File

@@ -0,0 +1,5 @@
enable_language(C)
install(EXPORT fooExport
DESTINATION "lib/cmake/"
FILE "foo.cmake"
)

View File

@@ -76,6 +76,8 @@ run_cmake(DIRECTORY-DESTINATION-bad)
run_cmake(FILES-DESTINATION-bad)
run_cmake(TARGETS-DESTINATION-bad)
run_cmake(EXPORT-OldIFace)
run_cmake(EXPORT-UnknownExport)
run_cmake(EXPORT-NamelinkOnly)
run_cmake(CMP0062-OLD)
run_cmake(CMP0062-NEW)
run_cmake(CMP0062-WARN)