cmInstallTargetGenerator: Escape generated OLD_RPATH argument

On some platforms, e.g. most ELF-based ones, RPATHs may contain keywords
that match CMake's variable syntax. To prevent them from being falsely
substituted when running the cmake_install.cmake script CMake syntax
needs to be escaped.
This commit is contained in:
Dennis Klein
2019-05-31 16:43:24 +02:00
parent 9e84c7c5e8
commit 749ce48eb5

View File

@@ -750,13 +750,14 @@ void cmInstallTargetGenerator::AddChrpathPatchRule(
return; return;
} }
// Escape any CMake syntax in the install RPATH. // Escape any CMake syntax in the RPATHs.
std::string escapedOldRpath = cmOutputConverter::EscapeForCMake(oldRpath);
std::string escapedNewRpath = cmOutputConverter::EscapeForCMake(newRpath); std::string escapedNewRpath = cmOutputConverter::EscapeForCMake(newRpath);
// Write a rule to run chrpath to set the install-tree RPATH // Write a rule to run chrpath to set the install-tree RPATH
os << indent << "file(RPATH_CHANGE\n" os << indent << "file(RPATH_CHANGE\n"
<< indent << " FILE \"" << toDestDirPath << "\"\n" << indent << " FILE \"" << toDestDirPath << "\"\n"
<< indent << " OLD_RPATH \"" << oldRpath << "\"\n"; << indent << " OLD_RPATH " << escapedOldRpath << "\n";
// CMP0095: ``RPATH`` entries are properly escaped in the intermediary // CMP0095: ``RPATH`` entries are properly escaped in the intermediary
// CMake install script. // CMake install script.