Merge topic 'LINKER_FLAGS-CMP0181-OLD'

2e9648e0de Ninja generator: restore correct encoding for policy CMP0181=OLD

Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !10645
This commit is contained in:
Brad King
2025-04-15 13:36:05 +00:00
committed by Kitware Robot
9 changed files with 44 additions and 8 deletions

View File

@@ -3891,6 +3891,12 @@ cmGlobalGenerator::StripCommandStyle cmGlobalGenerator::GetStripCommandStyle(
#endif
}
std::string cmGlobalGenerator::GetEncodedLiteral(std::string const& lit)
{
std::string result = lit;
return this->EncodeLiteral(result);
}
void cmGlobalGenerator::AddInstallScript(std::string const& file)
{
this->InstallScripts.push_back(file);

View File

@@ -666,6 +666,7 @@ public:
};
StripCommandStyle GetStripCommandStyle(std::string const& strip);
std::string GetEncodedLiteral(std::string const& lit);
virtual std::string& EncodeLiteral(std::string& lit) { return lit; }
bool CheckCMP0171() const;

View File

@@ -184,12 +184,6 @@ std::string cmGlobalNinjaGenerator::EncodeRuleName(std::string const& name)
return encoded;
}
std::string cmGlobalNinjaGenerator::GetEncodedLiteral(std::string const& lit)
{
std::string result = lit;
return this->EncodeLiteral(result);
}
std::string& cmGlobalNinjaGenerator::EncodeLiteral(std::string& lit)
{
cmSystemTools::ReplaceString(lit, "$", "$$");

View File

@@ -77,7 +77,6 @@ public:
static std::string EncodeRuleName(std::string const& name);
std::string& EncodeLiteral(std::string& lit) override;
std::string GetEncodedLiteral(std::string const& lit);
std::string EncodePath(std::string const& path);
std::unique_ptr<cmLinkLineComputer> CreateLinkLineComputer(

View File

@@ -2639,7 +2639,8 @@ void cmLocalGenerator::AppendFlags(std::string& flags,
}
CM_FALLTHROUGH;
case cmPolicies::OLD:
this->AppendFlags(flags, newFlags);
this->AppendFlags(
flags, this->GetGlobalGenerator()->GetEncodedLiteral(newFlags));
break;
case cmPolicies::NEW:
if (compileOrLink == cmBuildStep::Link) {

View File

@@ -970,6 +970,8 @@ add_RunCMake_test(target_link_libraries-LINK_GROUP -DCMAKE_SYSTEM_NAME=${CMAKE_S
-DCMAKE_IMPORT_LIBRARY_SUFFIX=${CMAKE_IMPORT_LIBRARY_SUFFIX}
-DCMAKE_LINK_LIBRARY_FLAG=${CMAKE_LINK_LIBRARY_FLAG})
add_RunCMake_test(target_link_libraries-LINKER-prefix -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
-DCMAKE_EXECUTABLE_FORMAT=${CMAKE_EXECUTABLE_FORMAT}
-DCMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN=${CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN}
-DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
-DCMAKE_C_COMPILER_FRONTEND_VARIANT=${CMAKE_C_COMPILER_FRONTEND_VARIANT})
add_RunCMake_test(add_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})

View File

@@ -0,0 +1,4 @@
file(RPATH_CHECK FILE "${file}" RPATH "${rpath}")
if(NOT EXISTS "${file}")
message(FATAL_ERROR "RPATH for ${file} did not contain the expected value")
endif()

View File

@@ -57,3 +57,17 @@ if (RunCMake_GENERATOR MATCHES "Makefiles|Ninja|Xcode|Visual Studio"
endif()
endforeach()
endif()
if(RunCMake_GENERATOR MATCHES "Makefiles|Ninja" AND
CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF" AND CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN)
foreach(policy IN ITEMS OLD NEW)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/encode_literal-CMP0181-${policy}-build)
run_cmake_with_options(encode_literal -DCMP0181=${policy})
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(encode_literal-CMP0181-${policy} "${CMAKE_COMMAND}" --build . --target encode_literal)
unset(RunCMake_TEST_BINARY_DIR)
unset(RunCMake_TEST_NO_CLEAN)
endforeach()
endif()

View File

@@ -0,0 +1,15 @@
enable_language(C)
cmake_policy(SET CMP0181 ${CMP0181})
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath=\\\$ORIGIN")
add_library(encode_literal SHARED LinkOptionsLib.c)
add_custom_command(TARGET encode_literal
POST_BUILD
COMMAND "${CMAKE_COMMAND}" "-Dfile=$<TARGET_FILE:encode_literal>"
"-Drpath=\$ORIGIN"
-P "${CMAKE_CURRENT_SOURCE_DIR}/CheckRPath.cmake"
VERBATIM)