mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-06 14:19:59 -05:00
replace "std::string::find(x) == 0" with cmHasPrefix()
This commit is contained in:
@@ -98,7 +98,7 @@ bool cmCPackWIXGenerator::RunCandleCommand(std::string const& sourceFile,
|
||||
command << " -ext " << QuotePath(ext);
|
||||
}
|
||||
|
||||
if (sourceFile.rfind(this->CPackTopLevel, 0) != 0) {
|
||||
if (!cmHasSuffix(sourceFile, this->CPackTopLevel)) {
|
||||
command << " " << QuotePath("-I" + this->CPackTopLevel);
|
||||
}
|
||||
|
||||
|
||||
@@ -379,7 +379,7 @@ int cmCTestBuildAndTestHandler::ProcessCommandLineArguments(
|
||||
const std::vector<std::string>& allArgs)
|
||||
{
|
||||
// --build-and-test options
|
||||
if (currentArg.find("--build-and-test", 0) == 0 &&
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-and-test") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
if (idx + 2 < allArgs.size()) {
|
||||
idx++;
|
||||
@@ -397,25 +397,29 @@ int cmCTestBuildAndTestHandler::ProcessCommandLineArguments(
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (currentArg.find("--build-target", 0) == 0 && idx < allArgs.size() - 1) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-target") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
idx++;
|
||||
this->BuildTargets.push_back(allArgs[idx]);
|
||||
}
|
||||
if (currentArg.find("--build-nocmake", 0) == 0) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-nocmake")) {
|
||||
this->BuildNoCMake = true;
|
||||
}
|
||||
if (currentArg.find("--build-run-dir", 0) == 0 && idx < allArgs.size() - 1) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-run-dir") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
idx++;
|
||||
this->BuildRunDir = allArgs[idx];
|
||||
}
|
||||
if (currentArg.find("--build-two-config", 0) == 0) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-two-config")) {
|
||||
this->BuildTwoConfig = true;
|
||||
}
|
||||
if (currentArg.find("--build-exe-dir", 0) == 0 && idx < allArgs.size() - 1) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-exe-dir") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
idx++;
|
||||
this->ExecutableDirectory = allArgs[idx];
|
||||
}
|
||||
if (currentArg.find("--test-timeout", 0) == 0 && idx < allArgs.size() - 1) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--test-timeout") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
idx++;
|
||||
this->Timeout = cmDuration(atof(allArgs[idx].c_str()));
|
||||
}
|
||||
@@ -431,31 +435,33 @@ int cmCTestBuildAndTestHandler::ProcessCommandLineArguments(
|
||||
idx++;
|
||||
this->BuildGeneratorToolset = allArgs[idx];
|
||||
}
|
||||
if (currentArg.find("--build-project", 0) == 0 && idx < allArgs.size() - 1) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-project") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
idx++;
|
||||
this->BuildProject = allArgs[idx];
|
||||
}
|
||||
if (currentArg.find("--build-makeprogram", 0) == 0 &&
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-makeprogram") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
idx++;
|
||||
this->BuildMakeProgram = allArgs[idx];
|
||||
}
|
||||
if (currentArg.find("--build-config-sample", 0) == 0 &&
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-config-sample") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
idx++;
|
||||
this->ConfigSample = allArgs[idx];
|
||||
}
|
||||
if (currentArg.find("--build-noclean", 0) == 0) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-noclean")) {
|
||||
this->BuildNoClean = true;
|
||||
}
|
||||
if (currentArg.find("--build-options", 0) == 0) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--build-options")) {
|
||||
while (idx + 1 < allArgs.size() && allArgs[idx + 1] != "--build-target" &&
|
||||
allArgs[idx + 1] != "--test-command") {
|
||||
++idx;
|
||||
this->BuildOptions.push_back(allArgs[idx]);
|
||||
}
|
||||
}
|
||||
if (currentArg.find("--test-command", 0) == 0 && idx < allArgs.size() - 1) {
|
||||
if (cmHasLiteralPrefix(currentArg, "--test-command") &&
|
||||
idx < allArgs.size() - 1) {
|
||||
++idx;
|
||||
this->TestCommand = allArgs[idx];
|
||||
while (idx + 1 < allArgs.size()) {
|
||||
|
||||
@@ -67,7 +67,7 @@ protected:
|
||||
// Check if this is an absolute path that falls within our
|
||||
// source or binary directories.
|
||||
for (std::string const& filePath : FilePaths) {
|
||||
if (filename.find(filePath) == 0) {
|
||||
if (cmHasPrefix(filename, filePath)) {
|
||||
this->CurFileName = filename;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "cmDocumentation.h"
|
||||
#include "cmDocumentationEntry.h" // IWYU pragma: keep
|
||||
#include "cmState.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmake.h"
|
||||
|
||||
@@ -111,8 +112,8 @@ int main(int argc, char const* const* argv)
|
||||
|
||||
std::string cacheDir = cmSystemTools::GetCurrentWorkingDirectory();
|
||||
for (i = 1; i < args.size(); ++i) {
|
||||
std::string arg = args[i];
|
||||
if (arg.find("-B", 0) == 0) {
|
||||
std::string const& arg = args[i];
|
||||
if (cmHasPrefix(arg, "-B")) {
|
||||
cacheDir = arg.substr(2);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1835,7 +1835,7 @@ bool cmCTest::HandleCommandLineArguments(size_t& i,
|
||||
int plevel = atoi(args[i].c_str());
|
||||
this->SetParallelLevel(plevel);
|
||||
this->Impl->ParallelLevelSetInCli = true;
|
||||
} else if (arg.find("-j") == 0) {
|
||||
} else if (cmHasPrefix(arg, "-j")) {
|
||||
int plevel = atoi(arg.substr(2).c_str());
|
||||
this->SetParallelLevel(plevel);
|
||||
this->Impl->ParallelLevelSetInCli = true;
|
||||
|
||||
@@ -385,7 +385,9 @@ void cmCacheManager::OutputKey(std::ostream& fout, std::string const& key)
|
||||
{
|
||||
// support : in key name by double quoting
|
||||
const char* q =
|
||||
(key.find(':') != std::string::npos || key.find("//") == 0) ? "\"" : "";
|
||||
(key.find(':') != std::string::npos || cmHasLiteralPrefix(key, "//"))
|
||||
? "\""
|
||||
: "";
|
||||
fout << q << key << q;
|
||||
}
|
||||
|
||||
|
||||
@@ -1200,7 +1200,8 @@ void cmComputeLinkInformation::AddUserItem(BT<std::string> const& item,
|
||||
// CMP0003 so put it in OldUserFlagItems, if it is not a -l
|
||||
// or -Wl,-l (-framework -pthread), then allow it without a
|
||||
// CMP0003 as -L will not affect those other linker flags
|
||||
if (item.Value.find("-l") == 0 || item.Value.find("-Wl,-l") == 0) {
|
||||
if (cmHasLiteralPrefix(item.Value, "-l") ||
|
||||
cmHasLiteralPrefix(item.Value, "-Wl,-l")) {
|
||||
// This is a linker option provided by the user.
|
||||
this->OldUserFlagItems.push_back(item.Value);
|
||||
}
|
||||
@@ -1796,9 +1797,9 @@ void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
||||
// support or if using the link path as an rpath.
|
||||
if (use_build_rpath) {
|
||||
std::string d = ri;
|
||||
if (!rootPath.empty() && d.find(rootPath) == 0) {
|
||||
if (!rootPath.empty() && cmHasPrefix(d, rootPath)) {
|
||||
d = d.substr(rootPath.size());
|
||||
} else if (stagePath && *stagePath && d.find(stagePath) == 0) {
|
||||
} else if (stagePath && *stagePath && cmHasPrefix(d, stagePath)) {
|
||||
std::string suffix = d.substr(strlen(stagePath));
|
||||
d = cmStrCat(installPrefix, '/', suffix);
|
||||
cmSystemTools::ConvertToUnixSlashes(d);
|
||||
@@ -1827,9 +1828,9 @@ void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
||||
!cmSystemTools::IsSubDirectory(ri, topSourceDir) &&
|
||||
!cmSystemTools::IsSubDirectory(ri, topBinaryDir)) {
|
||||
std::string d = ri;
|
||||
if (!rootPath.empty() && d.find(rootPath) == 0) {
|
||||
if (!rootPath.empty() && cmHasPrefix(d, rootPath)) {
|
||||
d = d.substr(rootPath.size());
|
||||
} else if (stagePath && *stagePath && d.find(stagePath) == 0) {
|
||||
} else if (stagePath && *stagePath && cmHasPrefix(d, stagePath)) {
|
||||
std::string suffix = d.substr(strlen(stagePath));
|
||||
d = cmStrCat(installPrefix, '/', suffix);
|
||||
cmSystemTools::ConvertToUnixSlashes(d);
|
||||
|
||||
@@ -264,19 +264,19 @@ void cmDependsC::ReadCacheFile()
|
||||
// file doesn't exist, check that the regular expressions
|
||||
// haven't changed
|
||||
else if (!res) {
|
||||
if (line.find(INCLUDE_REGEX_LINE_MARKER) == 0) {
|
||||
if (cmHasLiteralPrefix(line, INCLUDE_REGEX_LINE_MARKER)) {
|
||||
if (line != this->IncludeRegexLineString) {
|
||||
return;
|
||||
}
|
||||
} else if (line.find(INCLUDE_REGEX_SCAN_MARKER) == 0) {
|
||||
} else if (cmHasLiteralPrefix(line, INCLUDE_REGEX_SCAN_MARKER)) {
|
||||
if (line != this->IncludeRegexScanString) {
|
||||
return;
|
||||
}
|
||||
} else if (line.find(INCLUDE_REGEX_COMPLAIN_MARKER) == 0) {
|
||||
} else if (cmHasLiteralPrefix(line, INCLUDE_REGEX_COMPLAIN_MARKER)) {
|
||||
if (line != this->IncludeRegexComplainString) {
|
||||
return;
|
||||
}
|
||||
} else if (line.find(INCLUDE_REGEX_TRANSFORM_MARKER) == 0) {
|
||||
} else if (cmHasLiteralPrefix(line, INCLUDE_REGEX_TRANSFORM_MARKER)) {
|
||||
if (line != this->IncludeRegexTransformString) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -97,9 +97,9 @@ void cmExportTryCompileFileGenerator::PopulateProperties(
|
||||
|
||||
properties[p] = target->GetProperty(p);
|
||||
|
||||
if (p.find("IMPORTED_LINK_INTERFACE_LIBRARIES") == 0 ||
|
||||
p.find("IMPORTED_LINK_DEPENDENT_LIBRARIES") == 0 ||
|
||||
p.find("INTERFACE_LINK_LIBRARIES") == 0) {
|
||||
if (cmHasLiteralPrefix(p, "IMPORTED_LINK_INTERFACE_LIBRARIES") ||
|
||||
cmHasLiteralPrefix(p, "IMPORTED_LINK_DEPENDENT_LIBRARIES") ||
|
||||
cmHasLiteralPrefix(p, "INTERFACE_LINK_LIBRARIES")) {
|
||||
std::string evalResult =
|
||||
this->FindTargets(p, target, std::string(), emitted);
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ void cmExtraCodeBlocksGenerator::CreateNewProjectFile(
|
||||
// Convert
|
||||
for (std::string const& listFile : listFiles) {
|
||||
// don't put cmake's own files into the project (#12110):
|
||||
if (listFile.find(cmSystemTools::GetCMakeRoot()) == 0) {
|
||||
if (cmHasPrefix(listFile, cmSystemTools::GetCMakeRoot())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -301,11 +301,11 @@ void cmExtraCodeBlocksGenerator::CreateNewProjectFile(
|
||||
case cmStateEnums::UTILITY:
|
||||
// Add all utility targets, except the Nightly/Continuous/
|
||||
// Experimental-"sub"targets as e.g. NightlyStart
|
||||
if (((targetName.find("Nightly") == 0) &&
|
||||
if ((cmHasLiteralPrefix(targetName, "Nightly") &&
|
||||
(targetName != "Nightly")) ||
|
||||
((targetName.find("Continuous") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Continuous") &&
|
||||
(targetName != "Continuous")) ||
|
||||
((targetName.find("Experimental") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Experimental") &&
|
||||
(targetName != "Experimental"))) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -936,11 +936,11 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
|
||||
case cmStateEnums::UTILITY:
|
||||
// Add all utility targets, except the Nightly/Continuous/
|
||||
// Experimental-"sub"targets as e.g. NightlyStart
|
||||
if (((targetName.find("Nightly") == 0) &&
|
||||
if ((cmHasLiteralPrefix(targetName, "Nightly") &&
|
||||
(targetName != "Nightly")) ||
|
||||
((targetName.find("Continuous") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Continuous") &&
|
||||
(targetName != "Continuous")) ||
|
||||
((targetName.find("Experimental") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Experimental") &&
|
||||
(targetName != "Experimental"))) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -144,11 +144,11 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
|
||||
case cmStateEnums::UTILITY:
|
||||
// Add all utility targets, except the Nightly/Continuous/
|
||||
// Experimental-"sub"targets as e.g. NightlyStart
|
||||
if (((targetName.find("Nightly") == 0) &&
|
||||
if ((cmHasLiteralPrefix(targetName, "Nightly") &&
|
||||
(targetName != "Nightly")) ||
|
||||
((targetName.find("Continuous") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Continuous") &&
|
||||
(targetName != "Continuous")) ||
|
||||
((targetName.find("Experimental") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Experimental") &&
|
||||
(targetName != "Experimental"))) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -199,11 +199,11 @@ void cmExtraSublimeTextGenerator::AppendAllTargets(
|
||||
case cmStateEnums::UTILITY:
|
||||
// Add all utility targets, except the Nightly/Continuous/
|
||||
// Experimental-"sub"targets as e.g. NightlyStart
|
||||
if (((targetName.find("Nightly") == 0) &&
|
||||
if ((cmHasLiteralPrefix(targetName, "Nightly") &&
|
||||
(targetName != "Nightly")) ||
|
||||
((targetName.find("Continuous") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Continuous") &&
|
||||
(targetName != "Continuous")) ||
|
||||
((targetName.find("Experimental") == 0) &&
|
||||
(cmHasLiteralPrefix(targetName, "Experimental") &&
|
||||
(targetName != "Experimental"))) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -158,8 +158,8 @@ bool cmGeneratorExpressionDAGChecker::GetTransitivePropertiesOnly()
|
||||
|
||||
bool cmGeneratorExpressionDAGChecker::EvaluatingGenexExpression()
|
||||
{
|
||||
return this->Property.find("TARGET_GENEX_EVAL:") == 0 ||
|
||||
this->Property.find("GENEX_EVAL:", 0) == 0;
|
||||
return cmHasLiteralPrefix(this->Property, "TARGET_GENEX_EVAL:") ||
|
||||
cmHasLiteralPrefix(this->Property, "GENEX_EVAL:");
|
||||
}
|
||||
|
||||
bool cmGeneratorExpressionDAGChecker::EvaluatingPICExpression()
|
||||
|
||||
@@ -2023,7 +2023,7 @@ bool cmGeneratorTarget::HasMacOSXRpathInstallNameDir(
|
||||
if (cmGeneratorTarget::ImportInfo const* info =
|
||||
this->GetImportInfo(config)) {
|
||||
if (!info->NoSOName && !info->SOName.empty()) {
|
||||
if (info->SOName.find("@rpath/") == 0) {
|
||||
if (cmHasLiteralPrefix(info->SOName, "@rpath/")) {
|
||||
install_name_is_rpath = true;
|
||||
}
|
||||
} else {
|
||||
@@ -2140,7 +2140,7 @@ std::string cmGeneratorTarget::GetSOName(const std::string& config) const
|
||||
return cmSystemTools::GetFilenameName(info->Location);
|
||||
}
|
||||
// Use the soname given if any.
|
||||
if (info->SOName.find("@rpath/") == 0) {
|
||||
if (cmHasLiteralPrefix(info->SOName, "@rpath/")) {
|
||||
return info->SOName.substr(6);
|
||||
}
|
||||
return info->SOName;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "cmMakefile.h"
|
||||
#include "cmMessageType.h"
|
||||
#include "cmSourceFile.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmVersion.h"
|
||||
#include "cmVisualStudioSlnData.h"
|
||||
#include "cmVisualStudioSlnParser.h"
|
||||
@@ -313,7 +314,7 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
|
||||
version.clear();
|
||||
}
|
||||
|
||||
if (version.find(this->GetPlatformToolsetString()) != 0) {
|
||||
if (!cmHasPrefix(version, this->GetPlatformToolsetString())) {
|
||||
std::ostringstream e;
|
||||
/* clang-format off */
|
||||
e <<
|
||||
|
||||
@@ -505,13 +505,13 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections(
|
||||
const std::vector<std::string> propKeys =
|
||||
root->GetMakefile()->GetPropertyKeys();
|
||||
for (std::string const& it : propKeys) {
|
||||
if (it.find("VS_GLOBAL_SECTION_") == 0) {
|
||||
if (cmHasLiteralPrefix(it, "VS_GLOBAL_SECTION_")) {
|
||||
std::string sectionType;
|
||||
std::string name = it.substr(18);
|
||||
if (name.find("PRE_") == 0) {
|
||||
if (cmHasLiteralPrefix(name, "PRE_")) {
|
||||
name = name.substr(4);
|
||||
sectionType = "preSolution";
|
||||
} else if (name.find("POST_") == 0) {
|
||||
} else if (cmHasLiteralPrefix(name, "POST_")) {
|
||||
name = name.substr(5);
|
||||
sectionType = "postSolution";
|
||||
} else
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "cmSourceGroup.h"
|
||||
#include "cmState.h"
|
||||
#include "cmStateTypes.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmTarget.h"
|
||||
#include "cmXCode21Object.h"
|
||||
@@ -2407,7 +2408,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
||||
// Convert "XCODE_ATTRIBUTE_*" properties directly.
|
||||
{
|
||||
for (auto const& prop : gtgt->GetPropertyKeys()) {
|
||||
if (prop.find("XCODE_ATTRIBUTE_") == 0) {
|
||||
if (cmHasLiteralPrefix(prop, "XCODE_ATTRIBUTE_")) {
|
||||
std::string attribute = prop.substr(16);
|
||||
this->FilterConfigurationAttribute(configName, attribute);
|
||||
if (!attribute.empty()) {
|
||||
@@ -3143,7 +3144,7 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
|
||||
// Put this last so it can override existing settings
|
||||
// Convert "CMAKE_XCODE_ATTRIBUTE_*" variables directly.
|
||||
for (const auto& var : this->CurrentMakefile->GetDefinitions()) {
|
||||
if (var.find("CMAKE_XCODE_ATTRIBUTE_") == 0) {
|
||||
if (cmHasLiteralPrefix(var, "CMAKE_XCODE_ATTRIBUTE_")) {
|
||||
std::string attribute = var.substr(22);
|
||||
this->FilterConfigurationAttribute(config.first, attribute);
|
||||
if (!attribute.empty()) {
|
||||
|
||||
@@ -402,9 +402,9 @@ bool cmGraphVizWriter::ItemExcluded(cmLinkItem const& item)
|
||||
}
|
||||
|
||||
if (item.Target->GetType() == cmStateEnums::UTILITY) {
|
||||
if ((itemName.find("Nightly") == 0) ||
|
||||
(itemName.find("Continuous") == 0) ||
|
||||
(itemName.find("Experimental") == 0)) {
|
||||
if (cmHasLiteralPrefix(itemName, "Nightly") ||
|
||||
cmHasLiteralPrefix(itemName, "Continuous") ||
|
||||
cmHasLiteralPrefix(itemName, "Experimental")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,7 +90,8 @@ void cmGetCMakeInputs(const cmGlobalGenerator* gg,
|
||||
|
||||
const std::string startOfFile = lf.substr(0, cmakeRootDir.size());
|
||||
const bool isInternal = (startOfFile == cmakeRootDir);
|
||||
const bool isTemporary = !isInternal && (lf.find(buildDir + '/') == 0);
|
||||
const bool isTemporary =
|
||||
!isInternal && (cmHasPrefix(lf, buildDir + '/'));
|
||||
|
||||
std::string toAdd = lf;
|
||||
if (!sourceDir.empty()) {
|
||||
|
||||
@@ -1784,7 +1784,7 @@ private:
|
||||
const std::string& testDir)
|
||||
{
|
||||
// First check if the test directory "starts with" the base directory:
|
||||
if (testDir.find(baseDir) != 0) {
|
||||
if (!cmHasPrefix(testDir, baseDir)) {
|
||||
return false;
|
||||
}
|
||||
// If it does, then check that it's either the same string, or that the
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "cmMakefile.h"
|
||||
#include "cmMessageType.h"
|
||||
#include "cmSourceFile.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmXMLParser.h"
|
||||
#include "cmake.h"
|
||||
@@ -2008,7 +2009,7 @@ void cmLocalVisualStudio7Generator::WriteVCProjFooter(
|
||||
fout << "\t<Globals>\n";
|
||||
|
||||
for (std::string const& key : target->GetPropertyKeys()) {
|
||||
if (key.find("VS_GLOBAL_") == 0) {
|
||||
if (cmHasLiteralPrefix(key, "VS_GLOBAL_")) {
|
||||
std::string name = key.substr(10);
|
||||
if (!name.empty()) {
|
||||
/* clang-format off */
|
||||
|
||||
@@ -2622,7 +2622,7 @@ cmMakefile::AppleSDK cmMakefile::GetAppleSDKType() const
|
||||
};
|
||||
|
||||
for (auto const& entry : sdkDatabase) {
|
||||
if (sdkRoot.find(entry.name) == 0 ||
|
||||
if (cmHasPrefix(sdkRoot, entry.name) ||
|
||||
sdkRoot.find(std::string("/") + entry.name) != std::string::npos) {
|
||||
return entry.sdk;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ static void AddVisualStudioPath(std::vector<std::string>& paths,
|
||||
std::string vsloc;
|
||||
bool found = false;
|
||||
# ifndef CMAKE_BOOTSTRAP
|
||||
if (gg->GetName().find(prefix) == 0) {
|
||||
if (cmHasPrefix(gg->GetName(), prefix)) {
|
||||
cmGlobalVisualStudioVersionedGenerator* vsgen =
|
||||
static_cast<cmGlobalVisualStudioVersionedGenerator*>(gg);
|
||||
if (vsgen->GetVSInstance(vsloc)) {
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "cmLocalVisualStudio10Generator.h"
|
||||
#include "cmMakefile.h"
|
||||
#include "cmSourceFile.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmVisualStudioGeneratorOptions.h"
|
||||
|
||||
@@ -557,7 +558,7 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||
std::vector<std::string> keys = this->GeneratorTarget->GetPropertyKeys();
|
||||
for (std::string const& keyIt : keys) {
|
||||
static const char* prefix = "VS_GLOBAL_";
|
||||
if (keyIt.find(prefix) != 0)
|
||||
if (!cmHasPrefix(keyIt, prefix))
|
||||
continue;
|
||||
std::string globalKey = keyIt.substr(strlen(prefix));
|
||||
// Skip invalid or separately-handled properties.
|
||||
@@ -814,7 +815,7 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReferences(Elem& e0)
|
||||
}
|
||||
cmPropertyMap const& props = this->GeneratorTarget->Target->GetProperties();
|
||||
for (auto const& i : props.GetList()) {
|
||||
if (i.first.find("VS_DOTNET_REFERENCE_") == 0) {
|
||||
if (cmHasPrefix(i.first, "VS_DOTNET_REFERENCE_")) {
|
||||
std::string name = i.first.substr(20);
|
||||
if (!name.empty()) {
|
||||
std::string path = i.second;
|
||||
@@ -910,7 +911,7 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReferenceCustomTags(
|
||||
CustomTags tags;
|
||||
cmPropertyMap const& props = this->GeneratorTarget->Target->GetProperties();
|
||||
for (const auto& i : props.GetList()) {
|
||||
if (i.first.find(refPropFullPrefix) == 0) {
|
||||
if (cmHasPrefix(i.first, refPropFullPrefix)) {
|
||||
std::string refTag = i.first.substr(refPropFullPrefix.length());
|
||||
std::string refVal = i.second;
|
||||
if (!refTag.empty() && !refVal.empty()) {
|
||||
@@ -952,7 +953,7 @@ void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup(Elem& e0)
|
||||
// subdirectory
|
||||
// of the .csproj file, we have to use relative pathnames, otherwise
|
||||
// visual studio does not show the file in the IDE. Sorry.
|
||||
if (obj.find(srcDir) == 0) {
|
||||
if (cmHasPrefix(obj, srcDir)) {
|
||||
obj = this->ConvertPath(obj, true);
|
||||
ConvertToWindowsSlash(obj);
|
||||
useRelativePath = true;
|
||||
@@ -999,9 +1000,9 @@ void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup(Elem& e0)
|
||||
}
|
||||
if (!generator.empty()) {
|
||||
e2.Element("Generator", generator);
|
||||
if (designerResource.find(srcDir) == 0) {
|
||||
if (cmHasPrefix(designerResource, srcDir)) {
|
||||
designerResource = designerResource.substr(srcDir.length() + 1);
|
||||
} else if (designerResource.find(binDir) == 0) {
|
||||
} else if (cmHasPrefix(designerResource, binDir)) {
|
||||
designerResource = designerResource.substr(binDir.length() + 1);
|
||||
} else {
|
||||
designerResource =
|
||||
@@ -1014,7 +1015,7 @@ void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup(Elem& e0)
|
||||
const cmPropertyMap& props = oi->GetProperties();
|
||||
for (const std::string& p : props.GetKeys()) {
|
||||
static const std::string propNamePrefix = "VS_CSHARP_";
|
||||
if (p.find(propNamePrefix) == 0) {
|
||||
if (cmHasPrefix(p, propNamePrefix)) {
|
||||
std::string tagName = p.substr(propNamePrefix.length());
|
||||
if (!tagName.empty()) {
|
||||
const std::string& value = *props.GetPropertyValue(p);
|
||||
@@ -4799,7 +4800,7 @@ void cmVisualStudio10TargetGenerator::GetCSharpSourceProperties(
|
||||
const cmPropertyMap& props = sf->GetProperties();
|
||||
for (const std::string& p : props.GetKeys()) {
|
||||
static const std::string propNamePrefix = "VS_CSHARP_";
|
||||
if (p.find(propNamePrefix) == 0) {
|
||||
if (cmHasPrefix(p, propNamePrefix)) {
|
||||
std::string tagName = p.substr(propNamePrefix.length());
|
||||
if (!tagName.empty()) {
|
||||
const std::string& val = *props.GetPropertyValue(p);
|
||||
@@ -4840,9 +4841,9 @@ std::string cmVisualStudio10TargetGenerator::GetCSharpSourceLink(
|
||||
if (sourceGroup && !sourceGroup->GetFullName().empty()) {
|
||||
link = sourceGroup->GetFullName() + "/" +
|
||||
cmsys::SystemTools::GetFilenameName(fullFileName);
|
||||
} else if (fullFileName.find(srcDir) == 0) {
|
||||
} else if (cmHasPrefix(fullFileName, srcDir)) {
|
||||
link = fullFileName.substr(srcDir.length() + 1);
|
||||
} else if (fullFileName.find(binDir) == 0) {
|
||||
} else if (cmHasPrefix(fullFileName, binDir)) {
|
||||
link = fullFileName.substr(binDir.length() + 1);
|
||||
} else if (const char* l = source->GetProperty("VS_CSHARP_Link")) {
|
||||
link = l;
|
||||
|
||||
+39
-39
@@ -292,7 +292,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
bool findPackageMode = false;
|
||||
for (unsigned int i = 1; i < args.size(); ++i) {
|
||||
std::string const& arg = args[i];
|
||||
if (arg.find("-D", 0) == 0) {
|
||||
if (cmHasLiteralPrefix(arg, "-D")) {
|
||||
std::string entry = arg.substr(2);
|
||||
if (entry.empty()) {
|
||||
++i;
|
||||
@@ -381,7 +381,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
// -Wno-error=<name>
|
||||
this->DiagLevels[name] = std::min(this->DiagLevels[name], DIAG_WARN);
|
||||
}
|
||||
} else if (arg.find("-U", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-U")) {
|
||||
std::string entryPattern = arg.substr(2);
|
||||
if (entryPattern.empty()) {
|
||||
++i;
|
||||
@@ -411,7 +411,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
for (std::string const& currentEntry : entriesToDelete) {
|
||||
this->State->RemoveCacheEntry(currentEntry);
|
||||
}
|
||||
} else if (arg.find("-C", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-C")) {
|
||||
std::string path = arg.substr(2);
|
||||
if (path.empty()) {
|
||||
++i;
|
||||
@@ -426,7 +426,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
// Resolve script path specified on command line relative to $PWD.
|
||||
path = cmSystemTools::CollapseFullPath(path);
|
||||
this->ReadListFile(args, path);
|
||||
} else if (arg.find("-P", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-P")) {
|
||||
i++;
|
||||
if (i >= args.size()) {
|
||||
cmSystemTools::Error("-P must be followed by a file name.");
|
||||
@@ -445,7 +445,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
this->SetHomeOutputDirectory(
|
||||
cmSystemTools::GetCurrentWorkingDirectory());
|
||||
this->ReadListFile(args, path);
|
||||
} else if (arg.find("--find-package", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--find-package")) {
|
||||
findPackageMode = true;
|
||||
}
|
||||
}
|
||||
@@ -623,7 +623,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
#endif
|
||||
for (unsigned int i = 1; i < args.size(); ++i) {
|
||||
std::string const& arg = args[i];
|
||||
if (arg.find("-H", 0) == 0 || arg.find("-S", 0) == 0) {
|
||||
if (cmHasLiteralPrefix(arg, "-H") || cmHasLiteralPrefix(arg, "-S")) {
|
||||
std::string path = arg.substr(2);
|
||||
if (path.empty()) {
|
||||
++i;
|
||||
@@ -641,9 +641,9 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
path = cmSystemTools::CollapseFullPath(path);
|
||||
cmSystemTools::ConvertToUnixSlashes(path);
|
||||
this->SetHomeDirectory(path);
|
||||
} else if (arg.find("-O", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-O")) {
|
||||
// There is no local generate anymore. Ignore -O option.
|
||||
} else if (arg.find("-B", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-B")) {
|
||||
std::string path = arg.substr(2);
|
||||
if (path.empty()) {
|
||||
++i;
|
||||
@@ -662,54 +662,54 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
cmSystemTools::ConvertToUnixSlashes(path);
|
||||
this->SetHomeOutputDirectory(path);
|
||||
} else if ((i < args.size() - 2) &&
|
||||
(arg.find("--check-build-system", 0) == 0)) {
|
||||
cmHasLiteralPrefix(arg, "--check-build-system")) {
|
||||
this->CheckBuildSystemArgument = args[++i];
|
||||
this->ClearBuildSystem = (atoi(args[++i].c_str()) > 0);
|
||||
} else if ((i < args.size() - 1) &&
|
||||
(arg.find("--check-stamp-file", 0) == 0)) {
|
||||
cmHasLiteralPrefix(arg, "--check-stamp-file")) {
|
||||
this->CheckStampFile = args[++i];
|
||||
} else if ((i < args.size() - 1) &&
|
||||
(arg.find("--check-stamp-list", 0) == 0)) {
|
||||
cmHasLiteralPrefix(arg, "--check-stamp-list")) {
|
||||
this->CheckStampList = args[++i];
|
||||
} else if (arg == "--regenerate-during-build") {
|
||||
this->RegenerateDuringBuild = true;
|
||||
}
|
||||
#if defined(CMAKE_HAVE_VS_GENERATORS)
|
||||
else if ((i < args.size() - 1) &&
|
||||
(arg.find("--vs-solution-file", 0) == 0)) {
|
||||
cmHasLiteralPrefix(arg, "--vs-solution-file")) {
|
||||
this->VSSolutionFile = args[++i];
|
||||
}
|
||||
#endif
|
||||
else if (arg.find("-D", 0) == 0) {
|
||||
else if (cmHasLiteralPrefix(arg, "-D")) {
|
||||
// skip for now
|
||||
// in case '-D var=val' is given, also skip the next
|
||||
// in case '-Dvar=val' is given, don't skip the next
|
||||
if (arg.size() == 2) {
|
||||
++i;
|
||||
}
|
||||
} else if (arg.find("-U", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-U")) {
|
||||
// skip for now
|
||||
// in case '-U var' is given, also skip the next
|
||||
// in case '-Uvar' is given, don't skip the next
|
||||
if (arg.size() == 2) {
|
||||
++i;
|
||||
}
|
||||
} else if (arg.find("-C", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-C")) {
|
||||
// skip for now
|
||||
// in case '-C path' is given, also skip the next
|
||||
// in case '-Cpath' is given, don't skip the next
|
||||
if (arg.size() == 2) {
|
||||
++i;
|
||||
}
|
||||
} else if (arg.find("-P", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-P")) {
|
||||
// skip for now
|
||||
i++;
|
||||
} else if (arg.find("--find-package", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--find-package")) {
|
||||
// skip for now
|
||||
i++;
|
||||
} else if (arg.find("-W", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-W")) {
|
||||
// skip for now
|
||||
} else if (arg.find("--graphviz=", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--graphviz=")) {
|
||||
std::string path = arg.substr(strlen("--graphviz="));
|
||||
path = cmSystemTools::CollapseFullPath(path);
|
||||
cmSystemTools::ConvertToUnixSlashes(path);
|
||||
@@ -718,13 +718,13 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
cmSystemTools::Error("No file specified for --graphviz");
|
||||
return;
|
||||
}
|
||||
} else if (arg.find("--debug-trycompile", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--debug-trycompile")) {
|
||||
std::cout << "debug trycompile on\n";
|
||||
this->DebugTryCompileOn();
|
||||
} else if (arg.find("--debug-output", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--debug-output")) {
|
||||
std::cout << "Running with debug output on.\n";
|
||||
this->SetDebugOutputOn(true);
|
||||
} else if (arg.find("--log-level=", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--log-level=")) {
|
||||
const auto logLevel =
|
||||
StringToLogLevel(arg.substr(sizeof("--log-level=") - 1));
|
||||
if (logLevel == LogLevel::LOG_UNDEFINED) {
|
||||
@@ -733,7 +733,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
}
|
||||
this->SetLogLevel(logLevel);
|
||||
this->LogLevelWasSetViaCLI = true;
|
||||
} else if (arg.find("--loglevel=", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--loglevel=")) {
|
||||
// This is supported for backward compatibility. This option only
|
||||
// appeared in the 3.15.x release series and was renamed to
|
||||
// --log-level in 3.16.0
|
||||
@@ -747,14 +747,14 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
this->LogLevelWasSetViaCLI = true;
|
||||
} else if (arg == "--log-context") {
|
||||
this->SetShowLogContext(true);
|
||||
} else if (arg.find("--debug-find", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--debug-find")) {
|
||||
std::cout << "Running with debug output on for the `find` commands.\n";
|
||||
this->SetDebugFindOutputOn(true);
|
||||
} else if (arg.find("--trace-expand", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--trace-expand")) {
|
||||
std::cout << "Running with expanded trace output on.\n";
|
||||
this->SetTrace(true);
|
||||
this->SetTraceExpand(true);
|
||||
} else if (arg.find("--trace-format=", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--trace-format=")) {
|
||||
this->SetTrace(true);
|
||||
const auto traceFormat =
|
||||
StringToTraceFormat(arg.substr(strlen("--trace-format=")));
|
||||
@@ -764,35 +764,35 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
return;
|
||||
}
|
||||
this->SetTraceFormat(traceFormat);
|
||||
} else if (arg.find("--trace-source=", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--trace-source=")) {
|
||||
std::string file = arg.substr(strlen("--trace-source="));
|
||||
cmSystemTools::ConvertToUnixSlashes(file);
|
||||
this->AddTraceSource(file);
|
||||
this->SetTrace(true);
|
||||
} else if (arg.find("--trace-redirect=", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--trace-redirect=")) {
|
||||
std::string file = arg.substr(strlen("--trace-redirect="));
|
||||
cmSystemTools::ConvertToUnixSlashes(file);
|
||||
this->SetTraceFile(file);
|
||||
this->SetTrace(true);
|
||||
} else if (arg.find("--trace", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--trace")) {
|
||||
std::cout << "Running with trace output on.\n";
|
||||
this->SetTrace(true);
|
||||
this->SetTraceExpand(false);
|
||||
} else if (arg.find("--warn-uninitialized", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--warn-uninitialized")) {
|
||||
std::cout << "Warn about uninitialized values.\n";
|
||||
this->SetWarnUninitialized(true);
|
||||
} else if (arg.find("--warn-unused-vars", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--warn-unused-vars")) {
|
||||
std::cout << "Finding unused variables.\n";
|
||||
this->SetWarnUnused(true);
|
||||
} else if (arg.find("--no-warn-unused-cli", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--no-warn-unused-cli")) {
|
||||
std::cout << "Not searching for unused variables given on the "
|
||||
<< "command line.\n";
|
||||
this->SetWarnUnusedCli(false);
|
||||
} else if (arg.find("--check-system-vars", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--check-system-vars")) {
|
||||
std::cout << "Also check system files when warning about unused and "
|
||||
<< "uninitialized variables.\n";
|
||||
this->SetCheckSystemVars(true);
|
||||
} else if (arg.find("-A", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-A")) {
|
||||
std::string value = arg.substr(2);
|
||||
if (value.empty()) {
|
||||
++i;
|
||||
@@ -808,7 +808,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
}
|
||||
this->SetGeneratorPlatform(value);
|
||||
havePlatform = true;
|
||||
} else if (arg.find("-T", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-T")) {
|
||||
std::string value = arg.substr(2);
|
||||
if (value.empty()) {
|
||||
++i;
|
||||
@@ -824,7 +824,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
}
|
||||
this->SetGeneratorToolset(value);
|
||||
haveToolset = true;
|
||||
} else if (arg.find("-G", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "-G")) {
|
||||
std::string value = arg.substr(2);
|
||||
if (value.empty()) {
|
||||
++i;
|
||||
@@ -849,12 +849,12 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
}
|
||||
this->SetGlobalGenerator(std::move(gen));
|
||||
#if !defined(CMAKE_BOOTSTRAP)
|
||||
} else if (arg.find("--profiling-format", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--profiling-format")) {
|
||||
profilingFormat = arg.substr(strlen("--profiling-format="));
|
||||
if (profilingFormat.empty()) {
|
||||
cmSystemTools::Error("No format specified for --profiling-format");
|
||||
}
|
||||
} else if (arg.find("--profiling-output", 0) == 0) {
|
||||
} else if (cmHasLiteralPrefix(arg, "--profiling-output")) {
|
||||
profilingOutput = arg.substr(strlen("--profiling-output="));
|
||||
profilingOutput = cmSystemTools::CollapseFullPath(profilingOutput);
|
||||
cmSystemTools::ConvertToUnixSlashes(profilingOutput);
|
||||
@@ -2480,7 +2480,7 @@ int cmake::GetSystemInformation(std::vector<std::string>& args)
|
||||
bool writeToStdout = true;
|
||||
for (unsigned int i = 1; i < args.size(); ++i) {
|
||||
std::string const& arg = args[i];
|
||||
if (arg.find("-G", 0) == 0) {
|
||||
if (cmHasLiteralPrefix(arg, "-G")) {
|
||||
std::string value = arg.substr(2);
|
||||
if (value.empty()) {
|
||||
++i;
|
||||
|
||||
+3
-3
@@ -1510,7 +1510,7 @@ int cmcmd::ExecuteEchoColor(std::vector<std::string> const& args)
|
||||
bool newline = true;
|
||||
std::string progressDir;
|
||||
for (auto const& arg : cmMakeRange(args).advance(2)) {
|
||||
if (arg.find("--switch=") == 0) {
|
||||
if (cmHasLiteralPrefix(arg, "--switch=")) {
|
||||
// Enable or disable color based on the switch value.
|
||||
std::string value = arg.substr(9);
|
||||
if (!value.empty()) {
|
||||
@@ -1565,7 +1565,7 @@ int cmcmd::ExecuteLinkScript(std::vector<std::string> const& args)
|
||||
// args[3] == --verbose=?
|
||||
bool verbose = false;
|
||||
if (args.size() >= 4) {
|
||||
if (args[3].find("--verbose=") == 0) {
|
||||
if (cmHasLiteralPrefix(args[3], "--verbose=")) {
|
||||
if (!cmIsOff(args[3].substr(10))) {
|
||||
verbose = true;
|
||||
}
|
||||
@@ -1825,7 +1825,7 @@ int cmcmd::VisualStudioLink(std::vector<std::string> const& args, int type)
|
||||
std::vector<std::string> expandedArgs;
|
||||
for (std::string const& i : args) {
|
||||
// check for nmake temporary files
|
||||
if (i[0] == '@' && i.find("@CMakeFiles") != 0) {
|
||||
if (i[0] == '@' && !cmHasLiteralPrefix(i, "@CMakeFiles")) {
|
||||
cmsys::ifstream fin(i.substr(1).c_str());
|
||||
std::string line;
|
||||
while (cmSystemTools::GetLineFromStream(fin, line)) {
|
||||
|
||||
Reference in New Issue
Block a user