mirror of
https://github.com/reactos/CMake.git
synced 2025-02-27 07:27:23 +00:00
cmStringAlgorithms: Add cmIsInternallyOn, cmIsNOTFOUND, cmIsOn, cmIsOff
This adds the following functions to cmStringAlgorithms: - `cmIsInternallyOn` - `cmIsNOTFOUND` - `cmIsOn` - `cmIsOff` The implementations were copied from the equivalent functions in cmSystemTools.
This commit is contained in:
parent
34301441b9
commit
5b7650216b
@ -212,6 +212,85 @@ std::string cmCatViews(std::initializer_list<cm::string_view> views)
|
||||
return result;
|
||||
}
|
||||
|
||||
bool cmIsInternallyOn(cm::string_view val)
|
||||
{
|
||||
return (val.size() == 4) && //
|
||||
(val[0] == 'I' || val[0] == 'i') && //
|
||||
(val[1] == '_') && //
|
||||
(val[2] == 'O' || val[2] == 'o') && //
|
||||
(val[3] == 'N' || val[3] == 'n');
|
||||
}
|
||||
|
||||
bool cmIsNOTFOUND(cm::string_view val)
|
||||
{
|
||||
return (val == "NOTFOUND") || cmHasLiteralSuffix(val, "-NOTFOUND");
|
||||
}
|
||||
|
||||
bool cmIsOn(cm::string_view val)
|
||||
{
|
||||
switch (val.size()) {
|
||||
case 1:
|
||||
return val[0] == '1' || val[0] == 'Y' || val[0] == 'y';
|
||||
case 2:
|
||||
return //
|
||||
(val[0] == 'O' || val[0] == 'o') && //
|
||||
(val[1] == 'N' || val[1] == 'n');
|
||||
case 3:
|
||||
return //
|
||||
(val[0] == 'Y' || val[0] == 'y') && //
|
||||
(val[1] == 'E' || val[1] == 'e') && //
|
||||
(val[2] == 'S' || val[2] == 's');
|
||||
case 4:
|
||||
return //
|
||||
(val[0] == 'T' || val[0] == 't') && //
|
||||
(val[1] == 'R' || val[1] == 'r') && //
|
||||
(val[2] == 'U' || val[2] == 'u') && //
|
||||
(val[3] == 'E' || val[3] == 'e');
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool cmIsOff(cm::string_view val)
|
||||
{
|
||||
switch (val.size()) {
|
||||
case 0:
|
||||
return true;
|
||||
case 1:
|
||||
return val[0] == '0' || val[0] == 'N' || val[0] == 'n';
|
||||
case 2:
|
||||
return //
|
||||
(val[0] == 'N' || val[0] == 'n') && //
|
||||
(val[1] == 'O' || val[1] == 'o');
|
||||
case 3:
|
||||
return //
|
||||
(val[0] == 'O' || val[0] == 'o') && //
|
||||
(val[1] == 'F' || val[1] == 'f') && //
|
||||
(val[2] == 'F' || val[2] == 'f');
|
||||
case 5:
|
||||
return //
|
||||
(val[0] == 'F' || val[0] == 'f') && //
|
||||
(val[1] == 'A' || val[1] == 'a') && //
|
||||
(val[2] == 'L' || val[2] == 'l') && //
|
||||
(val[3] == 'S' || val[3] == 's') && //
|
||||
(val[4] == 'E' || val[4] == 'e');
|
||||
case 6:
|
||||
return //
|
||||
(val[0] == 'I' || val[0] == 'i') && //
|
||||
(val[1] == 'G' || val[1] == 'g') && //
|
||||
(val[2] == 'N' || val[2] == 'n') && //
|
||||
(val[3] == 'O' || val[3] == 'o') && //
|
||||
(val[4] == 'R' || val[4] == 'r') && //
|
||||
(val[5] == 'E' || val[5] == 'e');
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return cmIsNOTFOUND(val);
|
||||
}
|
||||
|
||||
bool cmStrToLong(const char* str, long* value)
|
||||
{
|
||||
errno = 0;
|
||||
|
@ -180,6 +180,51 @@ std::string cmWrap(char prefix, Range const& rng, char suffix,
|
||||
sep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Does a string indicates that CMake/CPack/CTest internally
|
||||
* forced this value. This is not the same as On, but this
|
||||
* may be considered as "internally switched on".
|
||||
*/
|
||||
bool cmIsInternallyOn(cm::string_view val);
|
||||
inline bool cmIsInternallyOn(const char* val)
|
||||
{
|
||||
if (!val) {
|
||||
return false;
|
||||
}
|
||||
return cmIsInternallyOn(cm::string_view(val));
|
||||
}
|
||||
|
||||
/** Return true if value is NOTFOUND or ends in -NOTFOUND. */
|
||||
bool cmIsNOTFOUND(cm::string_view val);
|
||||
|
||||
/**
|
||||
* Does a string indicate a true or ON value? This is not the same as ifdef.
|
||||
*/
|
||||
bool cmIsOn(cm::string_view val);
|
||||
inline bool cmIsOn(const char* val)
|
||||
{
|
||||
if (!val) {
|
||||
return false;
|
||||
}
|
||||
return cmIsOn(cm::string_view(val));
|
||||
}
|
||||
|
||||
/**
|
||||
* Does a string indicate a false or off value ? Note that this is
|
||||
* not the same as !IsOn(...) because there are a number of
|
||||
* ambiguous values such as "/usr/local/bin" a path will result in
|
||||
* IsON and IsOff both returning false. Note that the special path
|
||||
* NOTFOUND, *-NOTFOUND or IGNORE will cause IsOff to return true.
|
||||
*/
|
||||
bool cmIsOff(cm::string_view val);
|
||||
inline bool cmIsOff(const char* val)
|
||||
{
|
||||
if (!val) {
|
||||
return true;
|
||||
}
|
||||
return cmIsOff(cm::string_view(val));
|
||||
}
|
||||
|
||||
/** Returns true if string @a str starts with the character @a prefix. */
|
||||
inline bool cmHasPrefix(cm::string_view str, char prefix)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user