Apple text-based stubs: ensure runpath is correctly defined

This is a complement to !8204.
This commit is contained in:
Marc Chevrier
2023-06-04 15:29:42 +02:00
parent 326bd503ed
commit bfa5b430b3
3 changed files with 26 additions and 3 deletions

View File

@@ -1175,7 +1175,14 @@ void cmComputeLinkInformation::AddItem(LinkEntry const& entry)
LinkEntry libEntry{ entry };
libEntry.Item = lib;
this->AddTargetItem(libEntry);
this->AddLibraryRuntimeInfo(lib.Value, tgt);
if (tgt->IsApple() && tgt->HasImportLibrary(config)) {
// Use the library rather than the tbd file for runpath computation
this->AddLibraryRuntimeInfo(
tgt->GetFullPath(config, cmStateEnums::RuntimeBinaryArtifact, true),
tgt);
} else {
this->AddLibraryRuntimeInfo(lib.Value, tgt);
}
if (tgt && tgt->GetType() == cmStateEnums::SHARED_LIBRARY &&
this->Target->IsDLLPlatform()) {
this->AddRuntimeDLL(tgt);
@@ -1261,7 +1268,15 @@ void cmComputeLinkInformation::AddSharedDepItem(LinkEntry const& entry)
? cmStateEnums::ImportLibraryArtifact
: cmStateEnums::RuntimeBinaryArtifact;
lib = tgt->GetFullPath(this->Config, artifact);
this->AddLibraryRuntimeInfo(lib, tgt);
if (tgt->IsApple() && tgt->HasImportLibrary(this->Config)) {
// Use the library rather than the tbd file for runpath computation
this->AddLibraryRuntimeInfo(
tgt->GetFullPath(this->Config, cmStateEnums::RuntimeBinaryArtifact,
true),
tgt);
} else {
this->AddLibraryRuntimeInfo(lib, tgt);
}
} else {
lib = item.Value;
this->AddLibraryRuntimeInfo(lib);

View File

@@ -7,6 +7,9 @@ set_property(TARGET foo PROPERTY ARCHIVE_OUTPUT_NAME "tbd")
add_executable(main main.c)
target_link_libraries(main PRIVATE foo)
set_property(TARGET main PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$<CONFIG>")
add_custom_target(run COMMAND "$<TARGET_FILE:main>")
set (GENERATE_CONTENT "if (\"${CMAKE_TAPI}\")

View File

@@ -19,7 +19,12 @@ endfunction()
build_project(Simple)
build_project(Framework)
build_project(LibraryWithOutputs)
function(LibraryWithOutputs-run)
run_cmake_command(${test}-run ${CMAKE_COMMAND} --build . --target run --config Release)
endfunction()
build_project(LibraryWithOutputs LibraryWithOutputs-run)
function(LibraryWithVersions-install)