mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
Ninja generator: restore correct encoding for policy CMP0181=OLD
Fixes: #26857
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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, "$", "$$");
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -896,6 +896,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})
|
||||
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user