|
|
@@ -2135,37 +2135,33 @@ bool cmSystemTools::GuessLibraryInstallName(std::string const& fullPath,
|
|
|
std::string::size_type cmSystemToolsFindRPath(std::string const& have,
|
|
|
std::string const& want)
|
|
|
{
|
|
|
- // Search for the desired rpath.
|
|
|
- std::string::size_type pos = have.find(want);
|
|
|
-
|
|
|
- // If the path is not present we are done.
|
|
|
- if (pos == std::string::npos) {
|
|
|
- return pos;
|
|
|
- }
|
|
|
+ std::string::size_type pos = 0;
|
|
|
+ while (pos < have.size()) {
|
|
|
+ // Look for an occurrence of the string.
|
|
|
+ std::string::size_type const beg = have.find(want, pos);
|
|
|
+ if (beg == std::string::npos) {
|
|
|
+ return std::string::npos;
|
|
|
+ }
|
|
|
|
|
|
- // Build a regex to match a properly separated path instance.
|
|
|
- std::string regex_str = "(^|:)(";
|
|
|
- for (std::string::const_iterator i = want.begin(); i != want.end(); ++i) {
|
|
|
- int ch = *i;
|
|
|
- if (!(('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') ||
|
|
|
- ('0' <= ch && ch <= '9'))) {
|
|
|
- // Escape the non-alphanumeric character.
|
|
|
- regex_str += "\\";
|
|
|
+ // Make sure it is separated from preceding entries.
|
|
|
+ if (beg > 0 && have[beg - 1] != ':') {
|
|
|
+ pos = beg + 1;
|
|
|
+ continue;
|
|
|
}
|
|
|
- // Store the character.
|
|
|
- regex_str.append(1, static_cast<char>(ch));
|
|
|
- }
|
|
|
- regex_str += ")(:|$)";
|
|
|
|
|
|
- // Look for the separated path.
|
|
|
- cmsys::RegularExpression regex(regex_str.c_str());
|
|
|
- if (regex.find(have)) {
|
|
|
+ // Make sure it is separated from following entries.
|
|
|
+ std::string::size_type const end = beg + want.size();
|
|
|
+ if (end < have.size() && have[end] != ':') {
|
|
|
+ pos = beg + 1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
// Return the position of the path portion.
|
|
|
- return regex.start(2);
|
|
|
- } else {
|
|
|
- // The desired rpath was not found.
|
|
|
- return std::string::npos;
|
|
|
+ return beg;
|
|
|
}
|
|
|
+
|
|
|
+ // The desired rpath was not found.
|
|
|
+ return std::string::npos;
|
|
|
}
|
|
|
#endif
|
|
|
|