Merge topic 'add-cmHasLiteralPrefix'

4fe963f Use new cmHasLiteralPrefix function
7d4b2b2 cmStandardIncludes: Add new cmHasLiteralPrefix function.
This commit is contained in:
Brad King 2013-11-22 08:41:30 -05:00 committed by CMake Topic Stage
commit 1744ad9257
17 changed files with 58 additions and 35 deletions

View File

@ -763,7 +763,7 @@ void cmCTestBuildHandler::GenerateXMLLaunchedFragment(std::ostream& os,
bool cmCTestBuildHandler::IsLaunchedErrorFile(const char* fname) bool cmCTestBuildHandler::IsLaunchedErrorFile(const char* fname)
{ {
// error-{hash}.xml // error-{hash}.xml
return (strncmp(fname, "error-", 6) == 0 && return (cmHasLiteralPrefix(fname, "error-") &&
strcmp(fname+strlen(fname)-4, ".xml") == 0); strcmp(fname+strlen(fname)-4, ".xml") == 0);
} }
@ -771,7 +771,7 @@ bool cmCTestBuildHandler::IsLaunchedErrorFile(const char* fname)
bool cmCTestBuildHandler::IsLaunchedWarningFile(const char* fname) bool cmCTestBuildHandler::IsLaunchedWarningFile(const char* fname)
{ {
// warning-{hash}.xml // warning-{hash}.xml
return (strncmp(fname, "warning-", 8) == 0 && return (cmHasLiteralPrefix(fname, "warning-") &&
strcmp(fname+strlen(fname)-4, ".xml") == 0); strcmp(fname+strlen(fname)-4, ".xml") == 0);
} }

View File

@ -536,11 +536,11 @@ private:
void DoHeaderLine() void DoHeaderLine()
{ {
// Look for header fields that we need. // Look for header fields that we need.
if(strncmp(this->Line.c_str(), "commit ", 7) == 0) if(cmHasLiteralPrefix(this->Line.c_str(), "commit "))
{ {
this->Rev.Rev = this->Line.c_str()+7; this->Rev.Rev = this->Line.c_str()+7;
} }
else if(strncmp(this->Line.c_str(), "author ", 7) == 0) else if(cmHasLiteralPrefix(this->Line.c_str(), "author "))
{ {
Person author; Person author;
this->ParsePerson(this->Line.c_str()+7, author); this->ParsePerson(this->Line.c_str()+7, author);
@ -548,7 +548,7 @@ private:
this->Rev.EMail = author.EMail; this->Rev.EMail = author.EMail;
this->Rev.Date = this->FormatDateTime(author); this->Rev.Date = this->FormatDateTime(author);
} }
else if(strncmp(this->Line.c_str(), "committer ", 10) == 0) else if(cmHasLiteralPrefix(this->Line.c_str(), "committer "))
{ {
Person committer; Person committer;
this->ParsePerson(this->Line.c_str()+10, committer); this->ParsePerson(this->Line.c_str()+10, committer);

View File

@ -1131,11 +1131,11 @@ int cmCTest::GetTestModelFromString(const char* str)
return cmCTest::EXPERIMENTAL; return cmCTest::EXPERIMENTAL;
} }
std::string rstr = cmSystemTools::LowerCase(str); std::string rstr = cmSystemTools::LowerCase(str);
if ( strncmp(rstr.c_str(), "cont", 4) == 0 ) if ( cmHasLiteralPrefix(rstr.c_str(), "cont") )
{ {
return cmCTest::CONTINUOUS; return cmCTest::CONTINUOUS;
} }
if ( strncmp(rstr.c_str(), "nigh", 4) == 0 ) if ( cmHasLiteralPrefix(rstr.c_str(), "nigh") )
{ {
return cmCTest::NIGHTLY; return cmCTest::NIGHTLY;
} }

View File

@ -240,7 +240,7 @@ static bool checkInterfaceDirs(const std::string &prepro,
{ {
continue; continue;
} }
if (strncmp(li->c_str(), "${_IMPORT_PREFIX}", 17) == 0) if (cmHasLiteralPrefix(li->c_str(), "${_IMPORT_PREFIX}"))
{ {
continue; continue;
} }

View File

@ -81,10 +81,10 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
os << "# Compute the installation prefix relative to this file.\n" os << "# Compute the installation prefix relative to this file.\n"
<< "get_filename_component(_IMPORT_PREFIX" << "get_filename_component(_IMPORT_PREFIX"
<< " \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n"; << " \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n";
if(strncmp(absDestS.c_str(), "/lib/", 5) == 0 || if(cmHasLiteralPrefix(absDestS.c_str(), "/lib/") ||
strncmp(absDestS.c_str(), "/lib64/", 7) == 0 || cmHasLiteralPrefix(absDestS.c_str(), "/lib64/") ||
strncmp(absDestS.c_str(), "/usr/lib/", 9) == 0 || cmHasLiteralPrefix(absDestS.c_str(), "/usr/lib/") ||
strncmp(absDestS.c_str(), "/usr/lib64/", 11) == 0) cmHasLiteralPrefix(absDestS.c_str(), "/usr/lib64/"))
{ {
// Handle "/usr move" symlinks created by some Linux distros. // Handle "/usr move" symlinks created by some Linux distros.
os << os <<

View File

@ -173,8 +173,8 @@ bool cmGeneratorExpressionDAGChecker::EvaluatingLinkLibraries(const char *tgt)
return (strcmp(prop, "LINK_LIBRARIES") == 0 return (strcmp(prop, "LINK_LIBRARIES") == 0
|| strcmp(prop, "LINK_INTERFACE_LIBRARIES") == 0 || strcmp(prop, "LINK_INTERFACE_LIBRARIES") == 0
|| strcmp(prop, "IMPORTED_LINK_INTERFACE_LIBRARIES") == 0 || strcmp(prop, "IMPORTED_LINK_INTERFACE_LIBRARIES") == 0
|| strncmp(prop, "LINK_INTERFACE_LIBRARIES_", 25) == 0 || cmHasLiteralPrefix(prop, "LINK_INTERFACE_LIBRARIES_")
|| strncmp(prop, "IMPORTED_LINK_INTERFACE_LIBRARIES_", 34) == 0) || cmHasLiteralPrefix(prop, "IMPORTED_LINK_INTERFACE_LIBRARIES_"))
|| strcmp(prop, "INTERFACE_LINK_LIBRARIES") == 0; || strcmp(prop, "INTERFACE_LINK_LIBRARIES") == 0;
} }
@ -200,7 +200,7 @@ bool cmGeneratorExpressionDAGChecker::EvaluatingCompileDefinitions() const
const char *prop = this->Property.c_str(); const char *prop = this->Property.c_str();
return (strcmp(prop, "COMPILE_DEFINITIONS") == 0 return (strcmp(prop, "COMPILE_DEFINITIONS") == 0
|| strcmp(prop, "INTERFACE_COMPILE_DEFINITIONS") == 0 || strcmp(prop, "INTERFACE_COMPILE_DEFINITIONS") == 0
|| strncmp(prop, "COMPILE_DEFINITIONS_", 20) == 0); || cmHasLiteralPrefix(prop, "COMPILE_DEFINITIONS_"));
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@ -902,8 +902,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(POPULATE_INTERFACE_PROPERTY_NAME) CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(POPULATE_INTERFACE_PROPERTY_NAME)
// Note that the above macro terminates with an else // Note that the above macro terminates with an else
/* else */ if (strncmp(propertyName.c_str(), /* else */ if (cmHasLiteralPrefix(propertyName.c_str(),
"COMPILE_DEFINITIONS_", 20) == 0) "COMPILE_DEFINITIONS_"))
{ {
interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS"; interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS";
} }

View File

@ -28,7 +28,7 @@ static const char* cmVS10GenName(const char* name, std::string& genName)
return 0; return 0;
} }
const char* p = name + sizeof(vs10generatorName) - 6; const char* p = name + sizeof(vs10generatorName) - 6;
if(strncmp(p, " 2010", 5) == 0) if(cmHasLiteralPrefix(p, " 2010"))
{ {
p += 5; p += 5;
} }

View File

@ -23,7 +23,7 @@ static const char* cmVS11GenName(const char* name, std::string& genName)
return 0; return 0;
} }
const char* p = name + sizeof(vs11generatorName) - 6; const char* p = name + sizeof(vs11generatorName) - 6;
if(strncmp(p, " 2012", 5) == 0) if(cmHasLiteralPrefix(p, " 2012"))
{ {
p += 5; p += 5;
} }

View File

@ -23,7 +23,7 @@ static const char* cmVS12GenName(const char* name, std::string& genName)
return 0; return 0;
} }
const char* p = name + sizeof(vs12generatorName) - 6; const char* p = name + sizeof(vs12generatorName) - 6;
if(strncmp(p, " 2013", 5) == 0) if(cmHasLiteralPrefix(p, " 2013"))
{ {
p += 5; p += 5;
} }

View File

@ -32,7 +32,7 @@ void cmLBDepend::DependWalk(cmDependInformation* info)
std::string line; std::string line;
while(cmSystemTools::GetLineFromStream(fin, line)) while(cmSystemTools::GetLineFromStream(fin, line))
{ {
if(!strncmp(line.c_str(), "#include", 8)) if(cmHasLiteralPrefix(line.c_str(), "#include"))
{ {
// if it is an include line then create a string class // if it is an include line then create a string class
std::string currentline = line; std::string currentline = line;

View File

@ -23,7 +23,7 @@ bool cmSetCommand
// watch for ENV signatures // watch for ENV signatures
const char* variable = args[0].c_str(); // VAR is always first const char* variable = args[0].c_str(); // VAR is always first
if (!strncmp(variable,"ENV{",4) && strlen(variable) > 5) if (cmHasLiteralPrefix(variable, "ENV{") && strlen(variable) > 5)
{ {
// what is the variable name // what is the variable name
char *varName = new char [strlen(variable)]; char *varName = new char [strlen(variable)];

View File

@ -377,13 +377,31 @@ static thisClass* SafeDownCast(cmObject *c) \
return 0;\ return 0;\
} }
inline bool cmHasLiteralPrefixImpl(const std::string &str1,
const char *str2,
size_t N)
{
return strncmp(str1.c_str(), str2, N) == 0;
}
inline bool cmHasLiteralPrefixImpl(const char* str1,
const char *str2,
size_t N)
{
return strncmp(str1, str2, N) == 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__)
#define cmArrayBegin(a) a #define cmArrayBegin(a) a
#define cmArraySize(a) (sizeof(a)/sizeof(*a)) #define cmArraySize(a) (sizeof(a)/sizeof(*a))
#define cmArrayEnd(a) a + cmArraySize(a) #define cmArrayEnd(a) a + cmArraySize(a)
#define cmHasLiteralPrefix(STR1, STR2) \
cmHasLiteralPrefixImpl(STR1, "" STR2 "", sizeof(STR2) - 1)
#else #else
template<typename T, size_t N> template<typename T, size_t N>
@ -393,6 +411,12 @@ const T* cmArrayEnd(const T (&a)[N]) { return a + N; }
template<typename T, size_t N> template<typename T, size_t N>
size_t cmArraySize(const T (&)[N]) { return N; } size_t cmArraySize(const T (&)[N]) { return N; }
template<typename T, size_t N>
bool cmHasLiteralPrefix(T str1, const char (&str2)[N])
{
return cmHasLiteralPrefixImpl(str1, str2, N - 1);
}
#endif #endif
struct cmStrCmp { struct cmStrCmp {

View File

@ -560,7 +560,7 @@ cmSourceFile* cmTarget::AddSource(const char* s)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmTarget::ProcessSourceExpression(std::string const& expr) void cmTarget::ProcessSourceExpression(std::string const& expr)
{ {
if(strncmp(expr.c_str(), "$<TARGET_OBJECTS:", 17) == 0 && if(cmHasLiteralPrefix(expr.c_str(), "$<TARGET_OBJECTS:") &&
expr[expr.size()-1] == '>') expr[expr.size()-1] == '>')
{ {
std::string objLibName = expr.substr(17, expr.size()-18); std::string objLibName = expr.substr(17, expr.size()-18);
@ -2199,11 +2199,11 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
void cmTarget::MaybeInvalidatePropertyCache(const char* prop) void cmTarget::MaybeInvalidatePropertyCache(const char* prop)
{ {
// Wipe out maps caching information affected by this property. // Wipe out maps caching information affected by this property.
if(this->IsImported() && strncmp(prop, "IMPORTED", 8) == 0) if(this->IsImported() && cmHasLiteralPrefix(prop, "IMPORTED"))
{ {
this->Internal->ImportInfoMap.clear(); this->Internal->ImportInfoMap.clear();
} }
if(!this->IsImported() && strncmp(prop, "LINK_INTERFACE_", 15) == 0) if(!this->IsImported() && cmHasLiteralPrefix(prop, "LINK_INTERFACE_"))
{ {
this->ClearLinkMaps(); this->ClearLinkMaps();
} }
@ -2279,21 +2279,21 @@ static void cmTargetCheckINTERFACE_LINK_LIBRARIES(const char* value,
void cmTarget::CheckProperty(const char* prop, cmMakefile* context) const void cmTarget::CheckProperty(const char* prop, cmMakefile* context) const
{ {
// Certain properties need checking. // Certain properties need checking.
if(strncmp(prop, "LINK_INTERFACE_LIBRARIES", 24) == 0) if(cmHasLiteralPrefix(prop, "LINK_INTERFACE_LIBRARIES"))
{ {
if(const char* value = this->GetProperty(prop)) if(const char* value = this->GetProperty(prop))
{ {
cmTargetCheckLINK_INTERFACE_LIBRARIES(prop, value, context, false); cmTargetCheckLINK_INTERFACE_LIBRARIES(prop, value, context, false);
} }
} }
if(strncmp(prop, "IMPORTED_LINK_INTERFACE_LIBRARIES", 33) == 0) if(cmHasLiteralPrefix(prop, "IMPORTED_LINK_INTERFACE_LIBRARIES"))
{ {
if(const char* value = this->GetProperty(prop)) if(const char* value = this->GetProperty(prop))
{ {
cmTargetCheckLINK_INTERFACE_LIBRARIES(prop, value, context, true); cmTargetCheckLINK_INTERFACE_LIBRARIES(prop, value, context, true);
} }
} }
if(strncmp(prop, "INTERFACE_LINK_LIBRARIES", 24) == 0) if(cmHasLiteralPrefix(prop, "INTERFACE_LINK_LIBRARIES"))
{ {
if(const char* value = this->GetProperty(prop)) if(const char* value = this->GetProperty(prop))
{ {
@ -2595,7 +2595,7 @@ const char *cmTarget::GetProperty(const char* prop,
} }
// Support "LOCATION_<CONFIG>". // Support "LOCATION_<CONFIG>".
if(strncmp(prop, "LOCATION_", 9) == 0) if(cmHasLiteralPrefix(prop, "LOCATION_"))
{ {
if (!this->HandleLocationPropertyPolicy()) if (!this->HandleLocationPropertyPolicy())
{ {

View File

@ -44,7 +44,7 @@ std::string cmTargetCompileDefinitionsCommand
for(std::vector<std::string>::const_iterator it = content.begin(); for(std::vector<std::string>::const_iterator it = content.begin();
it != content.end(); ++it) it != content.end(); ++it)
{ {
if (strncmp(it->c_str(), "-D", 2) == 0) if (cmHasLiteralPrefix(it->c_str(), "-D"))
{ {
defs += sep + it->substr(2); defs += sep + it->substr(2);
} }

View File

@ -24,7 +24,7 @@ bool cmUnsetCommand::InitialPass(std::vector<std::string> const& args,
const char* variable = args[0].c_str(); const char* variable = args[0].c_str();
// unset(ENV{VAR}) // unset(ENV{VAR})
if (!strncmp(variable,"ENV{",4) && strlen(variable) > 5) if (cmHasLiteralPrefix(variable, "ENV{") && strlen(variable) > 5)
{ {
// what is the variable name // what is the variable name
char *envVarName = new char [strlen(variable)]; char *envVarName = new char [strlen(variable)];

View File

@ -273,7 +273,7 @@ int do_cmake(int ac, char** av)
list_all_cached = true; list_all_cached = true;
list_help = true; list_help = true;
} }
else if (strncmp(av[i], "-P", strlen("-P")) == 0) else if (cmHasLiteralPrefix(av[i], "-P"))
{ {
if ( i == ac -1 ) if ( i == ac -1 )
{ {
@ -287,8 +287,7 @@ int do_cmake(int ac, char** av)
args.push_back(av[i]); args.push_back(av[i]);
} }
} }
else if (strncmp(av[i], "--find-package", else if (cmHasLiteralPrefix(av[i], "--find-package"))
strlen("--find-package")) == 0)
{ {
workingMode = cmake::FIND_PACKAGE_MODE; workingMode = cmake::FIND_PACKAGE_MODE;
args.push_back(av[i]); args.push_back(av[i]);