Merge topic 'install-namelink-no-rpath'

9c14f14848 install(TARGETS): Do not apply installation tweaks to NAMELINK files

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8370
This commit is contained in:
Brad King
2023-03-29 13:15:49 +00:00
committed by Kitware Robot
3 changed files with 30 additions and 4 deletions

View File

@@ -529,7 +529,7 @@ void cmInstallTargetGenerator::AddInstallNamePatchRule(
std::ostream& os, Indent indent, const std::string& config,
std::string const& toDestDirPath)
{
if (this->ImportLibrary ||
if (this->ImportLibrary || this->NamelinkMode == NamelinkModeOnly ||
!(this->Target->GetType() == cmStateEnums::SHARED_LIBRARY ||
this->Target->GetType() == cmStateEnums::MODULE_LIBRARY ||
this->Target->GetType() == cmStateEnums::EXECUTABLE)) {
@@ -626,7 +626,8 @@ void cmInstallTargetGenerator::AddRPathCheckRule(
std::string const& toDestDirPath)
{
// Skip the chrpath if the target does not need it.
if (this->ImportLibrary || !this->Target->IsChrpathUsed(config)) {
if (this->ImportLibrary || this->NamelinkMode == NamelinkModeOnly ||
!this->Target->IsChrpathUsed(config)) {
return;
}
// Skip if on Apple
@@ -677,7 +678,8 @@ void cmInstallTargetGenerator::AddChrpathPatchRule(
std::string const& toDestDirPath)
{
// Skip the chrpath if the target does not need it.
if (this->ImportLibrary || !this->Target->IsChrpathUsed(config)) {
if (this->ImportLibrary || this->NamelinkMode == NamelinkModeOnly ||
!this->Target->IsChrpathUsed(config)) {
return;
}
@@ -816,7 +818,7 @@ void cmInstallTargetGenerator::AddStripRule(std::ostream& os, Indent indent,
// don't strip static and import libraries, because it removes the only
// symbol table they have so you can't link to them anymore
if (this->Target->GetType() == cmStateEnums::STATIC_LIBRARY ||
this->ImportLibrary) {
this->ImportLibrary || this->NamelinkMode == NamelinkModeOnly) {
return;
}

View File

@@ -121,6 +121,10 @@ run_install_test(FILES-OPTIONAL)
run_install_test(DIRECTORY-OPTIONAL)
run_install_test(TARGETS-Defaults)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
run_install_test(TARGETS-NAMELINK-No-Tweak)
endif()
set(RunCMake_TEST_OPTIONS
"-DCMAKE_INSTALL_BINDIR:PATH=mybin"
"-DCMAKE_INSTALL_LIBDIR:PATH=mylib"

View File

@@ -0,0 +1,20 @@
enable_language(C)
add_library(foo SHARED obj1.c)
set_target_properties(foo PROPERTIES
VERSION 1.0
SOVERSION 1
INSTALL_RPATH "$ORIGIN"
)
install(TARGETS foo DESTINATION lib)
# Replace the .so "namelink" symlink with a linker script.
# It is no longer a symlink, so any install tweaks would break.
# This verifies that no install tweaks are added for the namelink.
set(linker_script "INPUT($<TARGET_SONAME_FILE_NAME:foo>)")
add_custom_command(TARGET foo POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E remove "$<TARGET_LINKER_FILE:foo>"
COMMAND "${CMAKE_COMMAND}" -E echo "${linker_script}" > "$<TARGET_LINKER_FILE:foo>"
COMMENT "Generating linker script: '${linker_script}' as file $<TARGET_LINKER_FILE:foo>"
VERBATIM
)