Add cmHasLiteralSuffix API.
This commit is contained in:
parent
dc08199848
commit
802a28fc5e
|
@ -1151,8 +1151,8 @@ void cmFindPackageCommand::AddPrefixesSystemEnvironment()
|
||||||
std::string const& d = *i;
|
std::string const& d = *i;
|
||||||
|
|
||||||
// If the path is a PREFIX/bin case then add its parent instead.
|
// If the path is a PREFIX/bin case then add its parent instead.
|
||||||
if((d.size() >= 4 && strcmp(d.c_str()+d.size()-4, "/bin") == 0) ||
|
if((cmHasLiteralSuffix(d, "/bin")) ||
|
||||||
(d.size() >= 5 && strcmp(d.c_str()+d.size()-5, "/sbin") == 0))
|
(cmHasLiteralSuffix(d, "/sbin")))
|
||||||
{
|
{
|
||||||
this->AddPathInternal(cmSystemTools::GetFilenamePath(d), EnvPath);
|
this->AddPathInternal(cmSystemTools::GetFilenamePath(d), EnvPath);
|
||||||
}
|
}
|
||||||
|
|
|
@ -391,6 +391,22 @@ inline bool cmHasLiteralPrefixImpl(const char* str1,
|
||||||
return strncmp(str1, str2, N) == 0;
|
return strncmp(str1, str2, N) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool cmHasLiteralSuffixImpl(const std::string &str1,
|
||||||
|
const char *str2,
|
||||||
|
size_t N)
|
||||||
|
{
|
||||||
|
size_t len = str1.size();
|
||||||
|
return len >= N && strcmp(str1.c_str() + len - N, str2) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool cmHasLiteralSuffixImpl(const char* str1,
|
||||||
|
const char* str2,
|
||||||
|
size_t N)
|
||||||
|
{
|
||||||
|
size_t len = strlen(str1);
|
||||||
|
return len >= N && strcmp(str1 + len - N, str2) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(_MSC_VER) && _MSC_VER < 1300 \
|
#if defined(_MSC_VER) && _MSC_VER < 1300 \
|
||||||
|| defined(__GNUC__) && __GNUC__ < 3 \
|
|| defined(__GNUC__) && __GNUC__ < 3 \
|
||||||
|| defined(__BORLANDC__)
|
|| defined(__BORLANDC__)
|
||||||
|
@ -402,6 +418,9 @@ inline bool cmHasLiteralPrefixImpl(const char* str1,
|
||||||
#define cmHasLiteralPrefix(STR1, STR2) \
|
#define cmHasLiteralPrefix(STR1, STR2) \
|
||||||
cmHasLiteralPrefixImpl(STR1, "" STR2 "", sizeof(STR2) - 1)
|
cmHasLiteralPrefixImpl(STR1, "" STR2 "", sizeof(STR2) - 1)
|
||||||
|
|
||||||
|
#define cmHasLiteralSuffix(STR1, STR2) \
|
||||||
|
cmHasLiteralSuffixImpl(STR1, "" STR2 "", sizeof(STR2) - 1)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
template<typename T, size_t N>
|
template<typename T, size_t N>
|
||||||
|
@ -417,6 +436,12 @@ bool cmHasLiteralPrefix(T str1, const char (&str2)[N])
|
||||||
return cmHasLiteralPrefixImpl(str1, str2, N - 1);
|
return cmHasLiteralPrefixImpl(str1, str2, N - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T, size_t N>
|
||||||
|
bool cmHasLiteralSuffix(T str1, const char (&str2)[N])
|
||||||
|
{
|
||||||
|
return cmHasLiteralSuffixImpl(str1, str2, N - 1);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct cmStrCmp {
|
struct cmStrCmp {
|
||||||
|
|
|
@ -359,18 +359,11 @@ bool cmSystemTools::IsOn(const char* val)
|
||||||
|
|
||||||
bool cmSystemTools::IsNOTFOUND(const char* val)
|
bool cmSystemTools::IsNOTFOUND(const char* val)
|
||||||
{
|
{
|
||||||
size_t len = strlen(val);
|
if(strcmp(val, "NOTFOUND") == 0)
|
||||||
const char* notfound = "-NOTFOUND";
|
|
||||||
const size_t lenNotFound = 9;
|
|
||||||
if(len < lenNotFound-1)
|
|
||||||
{
|
{
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
if(len == lenNotFound-1)
|
return cmHasLiteralSuffix(val, "-NOTFOUND");
|
||||||
{
|
|
||||||
return ( strcmp(val, "NOTFOUND") == 0);
|
|
||||||
}
|
|
||||||
return ((strncmp((val + (len - lenNotFound)), notfound, lenNotFound) == 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue