diff options
author | Marc Chevrier <marc.chevrier@gmail.com> | 2023-04-14 14:48:16 (GMT) |
---|---|---|
committer | Marc Chevrier <marc.chevrier@gmail.com> | 2023-04-24 08:41:10 (GMT) |
commit | e08ba229ee3107bcb814ca45bc9c72a48abf1ba2 (patch) | |
tree | c34d2ca05820acbb31202c5bdbc102059441076b | |
parent | 51b0d45d9120d4bca5c7285d5e6b2f80db5a8310 (diff) | |
download | CMake-e08ba229ee3107bcb814ca45bc9c72a48abf1ba2.zip CMake-e08ba229ee3107bcb814ca45bc9c72a48abf1ba2.tar.gz CMake-e08ba229ee3107bcb814ca45bc9c72a48abf1ba2.tar.bz2 |
CMake code rely on cmList class for CMake lists management (part. 1)
77 files changed, 374 insertions, 381 deletions
diff --git a/Source/CPack/IFW/cmCPackIFWCommon.cxx b/Source/CPack/IFW/cmCPackIFWCommon.cxx index 5d995c3..4ff3a10 100644 --- a/Source/CPack/IFW/cmCPackIFWCommon.cxx +++ b/Source/CPack/IFW/cmCPackIFWCommon.cxx @@ -5,12 +5,11 @@ #include <cstddef> // IWYU pragma: keep #include <sstream> #include <utility> -#include <vector> #include "cmCPackGenerator.h" #include "cmCPackIFWGenerator.h" #include "cmCPackLog.h" // IWYU pragma: keep -#include "cmStringAlgorithms.h" +#include "cmList.h" #include "cmSystemTools.h" #include "cmTimestamp.h" #include "cmVersionConfig.h" @@ -76,12 +75,12 @@ bool cmCPackIFWCommon::IsVersionEqual(const char* version) const void cmCPackIFWCommon::ExpandListArgument( const std::string& arg, std::map<std::string, std::string>& argsOut) { - std::vector<std::string> args = cmExpandedList(arg, false); + cmList args{ arg }; if (args.empty()) { return; } - std::size_t i = 0; + cmList::index_type i = 0; std::size_t c = args.size(); if (c % 2) { argsOut[""] = args[i]; @@ -89,7 +88,7 @@ void cmCPackIFWCommon::ExpandListArgument( } --c; - for (; i < c; i += 2) { + for (; i < static_cast<cmList::index_type>(c); i += 2) { argsOut[args[i]] = args[i + 1]; } } @@ -97,12 +96,12 @@ void cmCPackIFWCommon::ExpandListArgument( void cmCPackIFWCommon::ExpandListArgument( const std::string& arg, std::multimap<std::string, std::string>& argsOut) { - std::vector<std::string> args = cmExpandedList(arg, false); + cmList args{ arg }; if (args.empty()) { return; } - std::size_t i = 0; + cmList::index_type i = 0; std::size_t c = args.size(); if (c % 2) { argsOut.insert(std::pair<std::string, std::string>("", args[i])); @@ -110,7 +109,7 @@ void cmCPackIFWCommon::ExpandListArgument( } --c; - for (; i < c; i += 2) { + for (; i < static_cast<cmList::index_type>(c); i += 2) { argsOut.insert(std::pair<std::string, std::string>(args[i], args[i + 1])); } } diff --git a/Source/CPack/IFW/cmCPackIFWGenerator.cxx b/Source/CPack/IFW/cmCPackIFWGenerator.cxx index bc14eb4..5724175 100644 --- a/Source/CPack/IFW/cmCPackIFWGenerator.cxx +++ b/Source/CPack/IFW/cmCPackIFWGenerator.cxx @@ -14,6 +14,7 @@ #include "cmCPackLog.h" // IWYU pragma: keep #include "cmDuration.h" #include "cmGeneratedFileStream.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -409,8 +410,8 @@ int cmCPackIFWGenerator::InitializeInternal() // Repositories if (cmValue RepoAllStr = this->GetOption("CPACK_IFW_REPOSITORIES_ALL")) { - std::vector<std::string> RepoAllVector = cmExpandedList(RepoAllStr); - for (std::string const& r : RepoAllVector) { + cmList RepoAllList{ RepoAllStr }; + for (std::string const& r : RepoAllList) { this->GetRepository(r); } } diff --git a/Source/CPack/IFW/cmCPackIFWPackage.cxx b/Source/CPack/IFW/cmCPackIFWPackage.cxx index 1668fb5..b759eff 100644 --- a/Source/CPack/IFW/cmCPackIFWPackage.cxx +++ b/Source/CPack/IFW/cmCPackIFWPackage.cxx @@ -15,6 +15,7 @@ #include "cmCPackIFWInstaller.h" #include "cmCPackLog.h" // IWYU pragma: keep #include "cmGeneratedFileStream.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmTimestamp.h" @@ -455,7 +456,7 @@ int cmCPackIFWPackage::ConfigureFromPrefix(const std::string& prefix) if (this->IsSetToEmpty(option)) { this->AlienAutoDependOn.clear(); } else if (cmValue value = this->GetOption(option)) { - std::vector<std::string> depsOn = cmExpandedList(value); + cmList depsOn{ value }; for (std::string const& d : depsOn) { DependenceStruct dep(d); if (this->Generator->Packages.count(dep.Name)) { diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index aeb3db3..1ce346f 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -18,6 +18,7 @@ #include "cmCryptoHash.h" #include "cmGeneratedFileStream.h" #include "cmInstalledFile.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmUuid.h" @@ -239,7 +240,7 @@ bool cmCPackWIXGenerator::InitializeWiXConfiguration() cmValue patchFilePath = GetOption("CPACK_WIX_PATCH_FILE"); if (patchFilePath) { - std::vector<std::string> patchFilePaths = cmExpandedList(patchFilePath); + cmList patchFilePaths{ patchFilePath }; for (std::string const& p : patchFilePaths) { if (!this->Patch->LoadFragments(p)) { @@ -322,8 +323,7 @@ void cmCPackWIXGenerator::AppendUserSuppliedExtraObjects(std::ostream& stream) if (!cpackWixExtraObjects) return; - std::vector<std::string> expandedExtraObjects = - cmExpandedList(cpackWixExtraObjects); + cmList expandedExtraObjects{ cpackWixExtraObjects }; for (std::string const& obj : expandedExtraObjects) { stream << " " << QuotePath(obj); @@ -1160,7 +1160,7 @@ void cmCPackWIXGenerator::CollectExtensions(std::string const& variableName, if (!variableContent) return; - std::vector<std::string> list = cmExpandedList(variableContent); + cmList list{ variableContent }; extensions.insert(list.begin(), list.end()); } @@ -1172,7 +1172,7 @@ void cmCPackWIXGenerator::CollectXmlNamespaces(std::string const& variableName, return; } - std::vector<std::string> list = cmExpandedList(variableContent); + cmList list{ variableContent }; for (std::string const& str : list) { auto pos = str.find('='); if (pos != std::string::npos) { @@ -1200,7 +1200,7 @@ void cmCPackWIXGenerator::AddCustomFlags(std::string const& variableName, if (!variableContent) return; - std::vector<std::string> list = cmExpandedList(variableContent); + cmList list{ variableContent }; for (std::string const& i : list) { stream << " " << QuotePath(i); diff --git a/Source/CPack/cmCPackBundleGenerator.cxx b/Source/CPack/cmCPackBundleGenerator.cxx index b3d425a..7e6e473 100644 --- a/Source/CPack/cmCPackBundleGenerator.cxx +++ b/Source/CPack/cmCPackBundleGenerator.cxx @@ -6,6 +6,7 @@ #include <vector> #include "cmCPackLog.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -191,7 +192,7 @@ int cmCPackBundleGenerator::SignBundle(const std::string& src_dir) cmValue sign_files = this->GetOption("CPACK_BUNDLE_APPLE_CODESIGN_FILES"); - std::vector<std::string> relFiles = cmExpandedList(sign_files); + cmList relFiles{ sign_files }; // sign the files supplied by the user, ie. frameworks. for (auto const& file : relFiles) { diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx index 6ba28d1..34c56c9 100644 --- a/Source/CPack/cmCPackDebGenerator.cxx +++ b/Source/CPack/cmCPackDebGenerator.cxx @@ -20,6 +20,7 @@ #include "cmCPackLog.h" #include "cmCryptoHash.h" #include "cmGeneratedFileStream.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -427,8 +428,7 @@ bool DebGenerator::generateControlTar(std::string const& md5Filename) const // default control_tar.ClearPermissions(); - std::vector<std::string> controlExtraList = - cmExpandedList(this->ControlExtra); + cmList controlExtraList{ this->ControlExtra }; for (std::string const& i : controlExtraList) { std::string filenamename = cmsys::SystemTools::GetFilenameName(i); std::string localcopy = this->WorkDir + "/" + filenamename; diff --git a/Source/CPack/cmCPackDragNDropGenerator.cxx b/Source/CPack/cmCPackDragNDropGenerator.cxx index 68e7ba3..2a0409d 100644 --- a/Source/CPack/cmCPackDragNDropGenerator.cxx +++ b/Source/CPack/cmCPackDragNDropGenerator.cxx @@ -19,6 +19,7 @@ #include "cmCPackLog.h" #include "cmDuration.h" #include "cmGeneratedFileStream.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -128,8 +129,7 @@ int cmCPackDragNDropGenerator::InitializeInternal() return 0; } - std::vector<std::string> languages = - cmExpandedList(this->GetOption("CPACK_DMG_SLA_LANGUAGES")); + cmList languages{ this->GetOption("CPACK_DMG_SLA_LANGUAGES") }; if (languages.empty()) { cmCPackLogger(cmCPackLog::LOG_ERROR, "CPACK_DMG_SLA_LANGUAGES set but empty" << std::endl); diff --git a/Source/CPack/cmCPackFreeBSDGenerator.cxx b/Source/CPack/cmCPackFreeBSDGenerator.cxx index ea7b24b..0840e33 100644 --- a/Source/CPack/cmCPackFreeBSDGenerator.cxx +++ b/Source/CPack/cmCPackFreeBSDGenerator.cxx @@ -2,15 +2,6 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCPackFreeBSDGenerator.h" -#include "cmArchiveWrite.h" -#include "cmCPackArchiveGenerator.h" -#include "cmCPackLog.h" -#include "cmGeneratedFileStream.h" -#include "cmStringAlgorithms.h" -#include "cmSystemTools.h" -#include "cmWorkingDirectory.h" - -// Needed for ::open() and ::stat() #include <algorithm> #include <ostream> #include <utility> @@ -21,6 +12,15 @@ #include <sys/stat.h> +#include "cmArchiveWrite.h" +#include "cmCPackArchiveGenerator.h" +#include "cmCPackLog.h" +#include "cmGeneratedFileStream.h" +#include "cmList.h" +#include "cmStringAlgorithms.h" +#include "cmSystemTools.h" +#include "cmWorkingDirectory.h" + // Suffix used to tell libpkg what compression to use static const char FreeBSDPackageCompression[] = "txz"; static const char FreeBSDPackageSuffix_17[] = ".pkg"; @@ -292,8 +292,7 @@ void cmCPackFreeBSDGenerator::write_manifest_fields( manifest << ManifestKeyValue( "desc", var_lookup("CPACK_FREEBSD_PACKAGE_DESCRIPTION")); manifest << ManifestKeyValue("www", var_lookup("CPACK_FREEBSD_PACKAGE_WWW")); - std::vector<std::string> licenses = - cmExpandedList(var_lookup("CPACK_FREEBSD_PACKAGE_LICENSE")); + cmList licenses{ var_lookup("CPACK_FREEBSD_PACKAGE_LICENSE") }; std::string licenselogic("single"); if (licenses.empty()) { cmSystemTools::SetFatalErrorOccurred(); @@ -302,12 +301,10 @@ void cmCPackFreeBSDGenerator::write_manifest_fields( } manifest << ManifestKeyValue("licenselogic", licenselogic); manifest << (ManifestKeyListValue("licenses") << licenses); - std::vector<std::string> categories = - cmExpandedList(var_lookup("CPACK_FREEBSD_PACKAGE_CATEGORIES")); + cmList categories{ var_lookup("CPACK_FREEBSD_PACKAGE_CATEGORIES") }; manifest << (ManifestKeyListValue("categories") << categories); manifest << ManifestKeyValue("prefix", var_lookup("CMAKE_INSTALL_PREFIX")); - std::vector<std::string> deps = - cmExpandedList(var_lookup("CPACK_FREEBSD_PACKAGE_DEPS")); + cmList deps{ var_lookup("CPACK_FREEBSD_PACKAGE_DEPS") }; if (!deps.empty()) { manifest << (ManifestKeyDepsValue("deps") << deps); } diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx index 2ac5b3d..83194a6 100644 --- a/Source/CPack/cmCPackGenerator.cxx +++ b/Source/CPack/cmCPackGenerator.cxx @@ -19,6 +19,7 @@ #include "cmFileTimes.h" #include "cmGeneratedFileStream.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmState.h" #include "cmStateSnapshot.h" @@ -216,8 +217,7 @@ int cmCPackGenerator::InstallProject() cmValue default_dir_install_permissions = this->GetOption("CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS"); if (cmNonempty(default_dir_install_permissions)) { - std::vector<std::string> items = - cmExpandedList(default_dir_install_permissions); + cmList items{ default_dir_install_permissions }; for (const auto& arg : items) { if (!cmFSPermissions::stringToModeT(arg, default_dir_mode_v)) { cmCPackLogger(cmCPackLog::LOG_ERROR, @@ -266,7 +266,7 @@ int cmCPackGenerator::InstallProject() // Run pre-build actions cmValue preBuildScripts = this->GetOption("CPACK_PRE_BUILD_SCRIPTS"); if (preBuildScripts) { - const auto scripts = cmExpandedList(preBuildScripts, false); + const cmList scripts{ preBuildScripts }; for (const auto& script : scripts) { cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Executing pre-build script: " << script << std::endl); @@ -296,8 +296,7 @@ int cmCPackGenerator::InstallProjectViaInstallCommands( std::string tempInstallDirectoryEnv = cmStrCat("CMAKE_INSTALL_PREFIX=", tempInstallDirectory); cmSystemTools::PutEnv(tempInstallDirectoryEnv); - std::vector<std::string> installCommandsVector = - cmExpandedList(installCommands); + cmList installCommandsVector{ installCommands }; for (std::string const& ic : installCommandsVector) { cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Execute: " << ic << std::endl); std::string output; @@ -333,8 +332,7 @@ int cmCPackGenerator::InstallProjectViaInstalledDirectories( std::vector<cmsys::RegularExpression> ignoreFilesRegex; cmValue cpackIgnoreFiles = this->GetOption("CPACK_IGNORE_FILES"); if (cpackIgnoreFiles) { - std::vector<std::string> ignoreFilesRegexString = - cmExpandedList(cpackIgnoreFiles); + cmList ignoreFilesRegexString{ cpackIgnoreFiles }; for (std::string const& ifr : ignoreFilesRegexString) { cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Create ignore files regex for: " << ifr << std::endl); @@ -343,9 +341,8 @@ int cmCPackGenerator::InstallProjectViaInstalledDirectories( } cmValue installDirectories = this->GetOption("CPACK_INSTALLED_DIRECTORIES"); if (cmNonempty(installDirectories)) { - std::vector<std::string> installDirectoriesVector = - cmExpandedList(installDirectories); - if (installDirectoriesVector.size() % 2 != 0) { + cmList installDirectoriesList{ installDirectories }; + if (installDirectoriesList.size() % 2 != 0) { cmCPackLogger( cmCPackLog::LOG_ERROR, "CPACK_INSTALLED_DIRECTORIES should contain pairs of <directory> " @@ -355,10 +352,10 @@ int cmCPackGenerator::InstallProjectViaInstalledDirectories( << std::endl); return 0; } - std::vector<std::string>::iterator it; + cmList::iterator it; const std::string& tempDir = tempInstallDirectory; - for (it = installDirectoriesVector.begin(); - it != installDirectoriesVector.end(); ++it) { + for (it = installDirectoriesList.begin(); + it != installDirectoriesList.end(); ++it) { std::vector<std::pair<std::string, std::string>> symlinkedFiles; cmCPackLogger(cmCPackLog::LOG_DEBUG, "Find files" << std::endl); cmsys::Glob gl; @@ -485,7 +482,7 @@ int cmCPackGenerator::InstallProjectViaInstallScript( if (cmakeScripts && !cmakeScripts->empty()) { cmCPackLogger(cmCPackLog::LOG_OUTPUT, "- Install scripts: " << cmakeScripts << std::endl); - std::vector<std::string> cmakeScriptsVector = cmExpandedList(cmakeScripts); + cmList cmakeScriptsVector{ cmakeScripts }; for (std::string const& installScript : cmakeScriptsVector) { cmCPackLogger(cmCPackLog::LOG_OUTPUT, @@ -549,14 +546,12 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( << std::endl); return 0; } - std::vector<std::string> cmakeProjectsVector = - cmExpandedList(cmakeProjects); - std::vector<std::string>::iterator it; - for (it = cmakeProjectsVector.begin(); it != cmakeProjectsVector.end(); - ++it) { - if (it + 1 == cmakeProjectsVector.end() || - it + 2 == cmakeProjectsVector.end() || - it + 3 == cmakeProjectsVector.end()) { + cmList cmakeProjectsList{ cmakeProjects }; + cmList::iterator it; + for (it = cmakeProjectsList.begin(); it != cmakeProjectsList.end(); ++it) { + if (it + 1 == cmakeProjectsList.end() || + it + 2 == cmakeProjectsList.end() || + it + 3 == cmakeProjectsList.end()) { cmCPackLogger( cmCPackLog::LOG_ERROR, "Not enough items on list: CPACK_INSTALL_CMAKE_PROJECTS. " @@ -594,9 +589,8 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( cmSystemTools::UpperCase(project.Component) + "_INSTALL_TYPES"; cmValue installTypes = this->GetOption(installTypesVar); if (cmNonempty(installTypes)) { - std::vector<std::string> installTypesVector = - cmExpandedList(installTypes); - for (std::string const& installType : installTypesVector) { + cmList installTypesList{ installTypes }; + for (std::string const& installType : installTypesList) { project.InstallationTypes.push_back( this->GetInstallationType(project.ProjectName, installType)); } @@ -1129,7 +1123,7 @@ int cmCPackGenerator::DoPackage() this->MakefileMap->AddDefinition("CPACK_PACKAGE_FILES", cmJoin(this->packageFileNames, ";")); - const auto scripts = cmExpandedList(postBuildScripts, false); + const cmList scripts{ postBuildScripts }; for (const auto& script : scripts) { cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Executing post-build script: " << script << std::endl); @@ -1595,9 +1589,8 @@ cmCPackComponent* cmCPackGenerator::GetComponent( // Determine the installation types. cmValue installTypes = this->GetOption(macroPrefix + "_INSTALL_TYPES"); if (cmNonempty(installTypes)) { - std::vector<std::string> installTypesVector = - cmExpandedList(installTypes); - for (std::string const& installType : installTypesVector) { + cmList installTypesList{ installTypes }; + for (auto const& installType : installTypesList) { component->InstallationTypes.push_back( this->GetInstallationType(projectName, installType)); } @@ -1606,8 +1599,8 @@ cmCPackComponent* cmCPackGenerator::GetComponent( // Determine the component dependencies. cmValue depends = this->GetOption(macroPrefix + "_DEPENDS"); if (cmNonempty(depends)) { - std::vector<std::string> dependsVector = cmExpandedList(depends); - for (std::string const& depend : dependsVector) { + cmList dependsList{ depends }; + for (auto const& depend : dependsList) { cmCPackComponent* child = this->GetComponent(projectName, depend); component->Dependencies.push_back(child); child->ReverseDependencies.push_back(component); diff --git a/Source/CPack/cmCPackNSISGenerator.cxx b/Source/CPack/cmCPackNSISGenerator.cxx index d7119c5..38a9d59 100644 --- a/Source/CPack/cmCPackNSISGenerator.cxx +++ b/Source/CPack/cmCPackNSISGenerator.cxx @@ -19,6 +19,7 @@ #include "cmCPackLog.h" #include "cmDuration.h" #include "cmGeneratedFileStream.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -569,9 +570,8 @@ int cmCPackNSISGenerator::InitializeInternal() cmCPackLogger(cmCPackLog::LOG_DEBUG, "The cpackPackageExecutables: " << cpackPackageExecutables << "." << std::endl); - std::vector<std::string> cpackPackageExecutablesVector = - cmExpandedList(cpackPackageExecutables); - if (cpackPackageExecutablesVector.size() % 2 != 0) { + cmList cpackPackageExecutablesList{ cpackPackageExecutables }; + if (cpackPackageExecutablesList.size() % 2 != 0) { cmCPackLogger( cmCPackLog::LOG_ERROR, "CPACK_PACKAGE_EXECUTABLES should contain pairs of <executable> and " @@ -579,9 +579,9 @@ int cmCPackNSISGenerator::InitializeInternal() << std::endl); return 0; } - std::vector<std::string>::iterator it; - for (it = cpackPackageExecutablesVector.begin(); - it != cpackPackageExecutablesVector.end(); ++it) { + cmList::iterator it; + for (it = cpackPackageExecutablesList.begin(); + it != cpackPackageExecutablesList.end(); ++it) { std::string execName = *it; ++it; std::string linkName = *it; @@ -622,9 +622,8 @@ void cmCPackNSISGenerator::CreateMenuLinks(std::ostream& str, } cmCPackLogger(cmCPackLog::LOG_DEBUG, "The cpackMenuLinks: " << cpackMenuLinks << "." << std::endl); - std::vector<std::string> cpackMenuLinksVector = - cmExpandedList(cpackMenuLinks); - if (cpackMenuLinksVector.size() % 2 != 0) { + cmList cpackMenuLinksList{ cpackMenuLinks }; + if (cpackMenuLinksList.size() % 2 != 0) { cmCPackLogger( cmCPackLog::LOG_ERROR, "CPACK_NSIS_MENU_LINKS should contain pairs of <shortcut target> and " @@ -636,9 +635,8 @@ void cmCPackNSISGenerator::CreateMenuLinks(std::ostream& str, static cmsys::RegularExpression urlRegex( "^(mailto:|(ftps?|https?|news)://).*$"); - std::vector<std::string>::iterator it; - for (it = cpackMenuLinksVector.begin(); it != cpackMenuLinksVector.end(); - ++it) { + cmList::iterator it; + for (it = cpackMenuLinksList.begin(); it != cpackMenuLinksList.end(); ++it) { std::string sourceName = *it; const bool url = urlRegex.find(sourceName); diff --git a/Source/CPack/cpack.cxx b/Source/CPack/cpack.cxx index 234bc59..90716e6 100644 --- a/Source/CPack/cpack.cxx +++ b/Source/CPack/cpack.cxx @@ -29,6 +29,7 @@ #include "cmDocumentationEntry.h" #include "cmGlobalGenerator.h" #include "cmJSONState.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmState.h" #include "cmStateSnapshot.h" @@ -509,8 +510,8 @@ int main(int argc, char const* const* argv) cmCPack_Log(&log, cmCPackLog::LOG_ERROR, "CPack generator not specified\n"); } else { - std::vector<std::string> generatorsVector = cmExpandedList(*genList); - for (std::string const& gen : generatorsVector) { + cmList generatorsList{ *genList }; + for (std::string const& gen : generatorsList) { cmMakefile::ScopePushPop raii(&globalMF); cmMakefile* mf = &globalMF; cmCPack_Log(&log, cmCPackLog::LOG_VERBOSE, diff --git a/Source/CTest/cmCTestGIT.cxx b/Source/CTest/cmCTestGIT.cxx index b2fb069..a6e7ac5 100644 --- a/Source/CTest/cmCTestGIT.cxx +++ b/Source/CTest/cmCTestGIT.cxx @@ -14,6 +14,7 @@ #include "cmCTest.h" #include "cmCTestVC.h" +#include "cmList.h" #include "cmProcessOutput.h" #include "cmProcessTools.h" #include "cmStringAlgorithms.h" @@ -215,7 +216,7 @@ bool cmCTestGIT::UpdateByFetchAndReset() bool cmCTestGIT::UpdateByCustom(std::string const& custom) { - std::vector<std::string> git_custom_command = cmExpandedList(custom, true); + cmList git_custom_command{ custom, cmList::EmptyElements::Yes }; std::vector<char const*> git_custom; git_custom.reserve(git_custom_command.size() + 1); for (std::string const& i : git_custom_command) { diff --git a/Source/CTest/cmCTestP4.cxx b/Source/CTest/cmCTestP4.cxx index 0e67c41..e22ec4b 100644 --- a/Source/CTest/cmCTestP4.cxx +++ b/Source/CTest/cmCTestP4.cxx @@ -13,9 +13,9 @@ #include "cmCTest.h" #include "cmCTestVC.h" +#include "cmList.h" #include "cmProcessTools.h" #include "cmRange.h" -#include "cmStringAlgorithms.h" #include "cmSystemTools.h" cmCTestP4::cmCTestP4(cmCTest* ct, std::ostream& log) @@ -460,7 +460,7 @@ bool cmCTestP4::LoadModifications() bool cmCTestP4::UpdateCustom(const std::string& custom) { - std::vector<std::string> p4_custom_command = cmExpandedList(custom, true); + cmList p4_custom_command{ custom, cmList::EmptyElements::Yes }; std::vector<char const*> p4_custom; p4_custom.reserve(p4_custom_command.size() + 1); diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx index ee06b29..461ad1a 100644 --- a/Source/CTest/cmCTestScriptHandler.cxx +++ b/Source/CTest/cmCTestScriptHandler.cxx @@ -33,6 +33,7 @@ #include "cmDuration.h" #include "cmGeneratedFileStream.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmState.h" #include "cmStateDirectory.h" @@ -521,7 +522,7 @@ int cmCTestScriptHandler::RunCurrentScript() // set any environment variables if (!this->CTestEnv.empty()) { - std::vector<std::string> envArgs = cmExpandedList(this->CTestEnv); + cmList envArgs{ this->CTestEnv }; cmSystemTools::AppendEnv(envArgs); } @@ -625,7 +626,7 @@ int cmCTestScriptHandler::PerformExtraUpdates() // do an initial cvs update as required command = this->UpdateCmd; for (std::string const& eu : this->ExtraUpdates) { - std::vector<std::string> cvsArgs = cmExpandedList(eu); + cmList cvsArgs{ eu }; if (cvsArgs.size() == 2) { std::string fullCommand = cmStrCat(command, " update ", cvsArgs[1]); output.clear(); @@ -764,7 +765,7 @@ int cmCTestScriptHandler::RunConfigurationDashboard() } // run ctest, it may be more than one command in here - std::vector<std::string> ctestCommands = cmExpandedList(this->CTestCmd); + cmList ctestCommands{ this->CTestCmd }; // for each variable/argument do a putenv for (std::string const& ctestCommand : ctestCommands) { command = ctestCommand; diff --git a/Source/CTest/cmCTestSubmitCommand.cxx b/Source/CTest/cmCTestSubmitCommand.cxx index a1933cc..a92f9f2 100644 --- a/Source/CTest/cmCTestSubmitCommand.cxx +++ b/Source/CTest/cmCTestSubmitCommand.cxx @@ -13,10 +13,10 @@ #include "cmCTest.h" #include "cmCTestSubmitHandler.h" #include "cmCommand.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmRange.h" -#include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -64,14 +64,14 @@ cmCTestGenericHandler* cmCTestSubmitCommand::InitializeHandler() cmValue notesFilesVariable = this->Makefile->GetDefinition("CTEST_NOTES_FILES"); if (notesFilesVariable) { - std::vector<std::string> notesFiles = cmExpandedList(*notesFilesVariable); + cmList notesFiles{ *notesFilesVariable }; this->CTest->GenerateNotesFile(notesFiles); } cmValue extraFilesVariable = this->Makefile->GetDefinition("CTEST_EXTRA_SUBMIT_FILES"); if (extraFilesVariable) { - std::vector<std::string> extraFiles = cmExpandedList(*extraFilesVariable); + cmList extraFiles{ *extraFilesVariable }; if (!this->CTest->SubmitExtraFiles(extraFiles)) { this->SetError("problem submitting extra files."); return nullptr; diff --git a/Source/CTest/cmCTestSubmitHandler.cxx b/Source/CTest/cmCTestSubmitHandler.cxx index 3ff8c8f..a095e5d 100644 --- a/Source/CTest/cmCTestSubmitHandler.cxx +++ b/Source/CTest/cmCTestSubmitHandler.cxx @@ -22,6 +22,7 @@ #include "cmCurl.h" #include "cmDuration.h" #include "cmGeneratedFileStream.h" +#include "cmList.h" #include "cmState.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" @@ -160,7 +161,7 @@ bool cmCTestSubmitHandler::SubmitUsingHTTP( /* In windows, this will init the winsock stuff */ ::curl_global_init(CURL_GLOBAL_ALL); std::string curlopt(this->CTest->GetCTestConfiguration("CurlOptions")); - std::vector<std::string> args = cmExpandedList(curlopt); + cmList args{ curlopt }; bool verifyPeerOff = false; bool verifyHostOff = false; for (std::string const& arg : args) { @@ -499,7 +500,7 @@ int cmCTestSubmitHandler::HandleCDashUploadFile(std::string const& file, cmCTestCurl curl(this->CTest); curl.SetQuiet(this->Quiet); std::string curlopt(this->CTest->GetCTestConfiguration("CurlOptions")); - std::vector<std::string> args = cmExpandedList(curlopt); + cmList args{ curlopt }; curl.SetCurlOptions(args); auto submitInactivityTimeout = this->GetSubmitInactivityTimeout(); if (submitInactivityTimeout != 0) { diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index f693ace..3adf33e 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -38,6 +38,7 @@ #include "cmGeneratedFileStream.h" #include "cmGlobalGenerator.h" #include "cmJSONState.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmState.h" #include "cmStateSnapshot.h" @@ -2235,19 +2236,19 @@ bool cmCTestTestHandler::SetTestsProperties( } else if (key == "ATTACHED_FILES_ON_FAIL"_s) { cmExpandList(val, rt.AttachOnFail); } else if (key == "RESOURCE_LOCK"_s) { - std::vector<std::string> lval = cmExpandedList(val); + cmList lval{ val }; rt.LockedResources.insert(lval.begin(), lval.end()); } else if (key == "FIXTURES_SETUP"_s) { - std::vector<std::string> lval = cmExpandedList(val); + cmList lval{ val }; rt.FixturesSetup.insert(lval.begin(), lval.end()); } else if (key == "FIXTURES_CLEANUP"_s) { - std::vector<std::string> lval = cmExpandedList(val); + cmList lval{ val }; rt.FixturesCleanup.insert(lval.begin(), lval.end()); } else if (key == "FIXTURES_REQUIRED"_s) { - std::vector<std::string> lval = cmExpandedList(val); + cmList lval{ val }; rt.FixturesRequired.insert(lval.begin(), lval.end()); } else if (key == "TIMEOUT"_s) { @@ -2260,12 +2261,12 @@ bool cmCTestTestHandler::SetTestsProperties( } else if (key == "RUN_SERIAL"_s) { rt.RunSerial = cmIsOn(val); } else if (key == "FAIL_REGULAR_EXPRESSION"_s) { - std::vector<std::string> lval = cmExpandedList(val); + cmList lval{ val }; for (std::string const& cr : lval) { rt.ErrorRegularExpressions.emplace_back(cr, cr); } } else if (key == "SKIP_REGULAR_EXPRESSION"_s) { - std::vector<std::string> lval = cmExpandedList(val); + cmList lval{ val }; for (std::string const& cr : lval) { rt.SkipRegularExpressions.emplace_back(cr, cr); } @@ -2292,7 +2293,7 @@ bool cmCTestTestHandler::SetTestsProperties( } else if (key == "ENVIRONMENT_MODIFICATION"_s) { cmExpandList(val, rt.EnvironmentModification); } else if (key == "LABELS"_s) { - std::vector<std::string> Labels = cmExpandedList(val); + cmList Labels{ val }; rt.Labels.insert(rt.Labels.end(), Labels.begin(), Labels.end()); // sort the array std::sort(rt.Labels.begin(), rt.Labels.end()); @@ -2309,21 +2310,21 @@ bool cmCTestTestHandler::SetTestsProperties( rt.Measurements[val] = "1"; } } else if (key == "PASS_REGULAR_EXPRESSION"_s) { - std::vector<std::string> lval = cmExpandedList(val); + cmList lval{ val }; for (std::string const& cr : lval) { rt.RequiredRegularExpressions.emplace_back(cr, cr); } } else if (key == "WORKING_DIRECTORY"_s) { rt.Directory = val; } else if (key == "TIMEOUT_AFTER_MATCH"_s) { - std::vector<std::string> propArgs = cmExpandedList(val); + cmList propArgs{ val }; if (propArgs.size() != 2) { cmCTestLog(this->CTest, WARNING, "TIMEOUT_AFTER_MATCH expects two arguments, found " << propArgs.size() << std::endl); } else { rt.AlternateTimeout = cmDuration(atof(propArgs[0].c_str())); - std::vector<std::string> lval = cmExpandedList(propArgs[1]); + cmList lval{ propArgs[1] }; for (std::string const& cr : lval) { rt.TimeoutRegularExpressions.emplace_back(cr, cr); } @@ -2365,7 +2366,7 @@ bool cmCTestTestHandler::SetDirectoryProperties( std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); if (cwd == rt.Directory) { if (key == "LABELS"_s) { - std::vector<std::string> DirectoryLabels = cmExpandedList(val); + cmList DirectoryLabels{ val }; rt.Labels.insert(rt.Labels.end(), DirectoryLabels.begin(), DirectoryLabels.end()); diff --git a/Source/CursesDialog/cmCursesCacheEntryComposite.cxx b/Source/CursesDialog/cmCursesCacheEntryComposite.cxx index e9ec09e..fc5450e 100644 --- a/Source/CursesDialog/cmCursesCacheEntryComposite.cxx +++ b/Source/CursesDialog/cmCursesCacheEntryComposite.cxx @@ -4,7 +4,6 @@ #include <cassert> #include <utility> -#include <vector> #include <cm/memory> @@ -15,9 +14,9 @@ #include "cmCursesPathWidget.h" #include "cmCursesStringWidget.h" #include "cmCursesWidget.h" +#include "cmList.h" #include "cmState.h" #include "cmStateTypes.h" -#include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -76,7 +75,7 @@ cmCursesCacheEntryComposite::cmCursesCacheEntryComposite( if (stringsProp) { auto ow = cm::make_unique<cmCursesOptionsWidget>(this->EntryWidth, 1, 1, 1); - for (std::string const& opt : cmExpandedList(*stringsProp)) { + for (auto const& opt : cmList{ *stringsProp }) { ow->AddOption(opt); } ow->SetOption(*value); diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index c8eea38..c763cc6 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -55,6 +55,7 @@ #include "cmGeneratedFileStream.h" #include "cmGlobalGenerator.h" #include "cmJSONState.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmProcessOutput.h" #include "cmState.h" @@ -1468,7 +1469,7 @@ void cmCTest::AddSiteProperties(cmXMLWriter& xml) ch->GetCMake()->GetState()->GetGlobalProperty("SubProjectLabels"); if (labels) { xml.StartElement("Labels"); - std::vector<std::string> args = cmExpandedList(*labels); + cmList args{ *labels }; for (std::string const& i : args) { xml.Element("Label", i); } @@ -1500,7 +1501,7 @@ std::vector<std::string> cmCTest::GetLabelsForSubprojects() { std::string labelsForSubprojects = this->GetCTestConfiguration("LabelsForSubprojects"); - std::vector<std::string> subprojects = cmExpandedList(labelsForSubprojects); + cmList subprojects{ labelsForSubprojects }; // sort the array std::sort(subprojects.begin(), subprojects.end()); @@ -1508,7 +1509,7 @@ std::vector<std::string> cmCTest::GetLabelsForSubprojects() auto new_end = std::unique(subprojects.begin(), subprojects.end()); subprojects.erase(new_end, subprojects.end()); - return subprojects; + return std::move(subprojects.data()); } void cmCTest::EndXML(cmXMLWriter& xml) diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx index b9d1f66..d95dcc4 100644 --- a/Source/cmCacheManager.cxx +++ b/Source/cmCacheManager.cxx @@ -12,6 +12,7 @@ #include "cmsys/Glob.hxx" #include "cmGeneratedFileStream.h" +#include "cmList.h" #include "cmMessageType.h" #include "cmMessenger.h" #include "cmState.h" @@ -531,15 +532,11 @@ void cmCacheManager::AddCacheEntry(const std::string& key, cmValue value, // make sure we only use unix style paths if (type == cmStateEnums::FILEPATH || type == cmStateEnums::PATH) { if (e.Value.find(';') != std::string::npos) { - std::vector<std::string> paths = cmExpandedList(e.Value); - const char* sep = ""; - e.Value = ""; + cmList paths{ e.Value }; for (std::string& i : paths) { cmSystemTools::ConvertToUnixSlashes(i); - e.Value += sep; - e.Value += i; - sep = ";"; } + e.Value = paths.to_string(); } else { cmSystemTools::ConvertToUnixSlashes(e.Value); } diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx index f6fdd48..1cb62b3 100644 --- a/Source/cmCommonTargetGenerator.cxx +++ b/Source/cmCommonTargetGenerator.cxx @@ -15,6 +15,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalCommonGenerator.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalCommonGenerator.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -303,8 +304,7 @@ std::string cmCommonTargetGenerator::GetLinkerLauncher( *launcherProp, this->LocalCommonGenerator, config, this->GeneratorTarget, &dagChecker, this->GeneratorTarget, lang); // Convert ;-delimited list to single string - std::vector<std::string> args = - cmExpandedList(evaluatedLinklauncher, true); + cmList args{ evaluatedLinklauncher, cmList::EmptyElements::Yes }; if (!args.empty()) { args[0] = this->LocalCommonGenerator->ConvertToOutputFormat( args[0], cmOutputConverter::SHELL); diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx index 5f408d0..f51a1c8 100644 --- a/Source/cmComputeLinkDepends.cxx +++ b/Source/cmComputeLinkDepends.cxx @@ -20,6 +20,7 @@ #include "cmGeneratorExpressionDAGChecker.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -627,7 +628,7 @@ void cmComputeLinkDepends::AddVarLinkEntries(size_t depender_index, // This is called to add the dependencies named by // <item>_LIB_DEPENDS. The variable contains a semicolon-separated // list. The list contains link-type;item pairs and just items. - std::vector<std::string> deplist = cmExpandedList(value); + cmList deplist{ value }; // Look for entries meant for this configuration. std::vector<cmLinkItem> actual_libs; diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index a93477b..6a5b4cc 100644 --- a/Source/cmComputeLinkInformation.cxx +++ b/Source/cmComputeLinkInformation.cxx @@ -15,6 +15,7 @@ #include "cmComputeLinkDepends.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -858,8 +859,8 @@ bool cmComputeLinkInformation::AddLibraryFeature(std::string const& feature) return false; } - auto items = cmExpandListWithBacktrace(*langFeature, - this->Target->GetBacktrace(), true); + auto items = cmExpandListWithBacktrace( + *langFeature, this->Target->GetBacktrace(), cmList::EmptyElements::Yes); if ((items.size() == 1 && !IsValidFeatureFormat(items.front().Value)) || (items.size() == 3 && !IsValidFeatureFormat(items[1].Value))) { @@ -1016,8 +1017,8 @@ cmComputeLinkInformation::GetGroupFeature(std::string const& feature) .first->second; } - auto items = cmExpandListWithBacktrace(*langFeature, - this->Target->GetBacktrace(), true); + auto items = cmExpandListWithBacktrace( + *langFeature, this->Target->GetBacktrace(), cmList::EmptyElements::Yes); // replace LINKER: pattern this->Target->ResolveLinkerWrapper(items, this->LinkLanguage, true); @@ -1072,8 +1073,8 @@ void cmComputeLinkInformation::AddRuntimeLinkLibrary(std::string const& lang) } if (cmValue runtimeLinkOptions = this->Makefile->GetDefinition(cmStrCat( "CMAKE_", lang, "_RUNTIME_LIBRARY_LINK_OPTIONS_", runtimeLibrary))) { - std::vector<std::string> libsVec = cmExpandedList(*runtimeLinkOptions); - for (std::string const& i : libsVec) { + cmList libs{ *runtimeLinkOptions }; + for (auto const& i : libs) { if (!cm::contains(this->ImplicitLinkLibs, i)) { this->AddItem({ i }); } @@ -1087,8 +1088,8 @@ void cmComputeLinkInformation::AddImplicitLinkInfo(std::string const& lang) // linker language. std::string libVar = cmStrCat("CMAKE_", lang, "_IMPLICIT_LINK_LIBRARIES"); if (cmValue libs = this->Makefile->GetDefinition(libVar)) { - std::vector<std::string> libsVec = cmExpandedList(*libs); - for (std::string const& i : libsVec) { + cmList libsList{ *libs }; + for (auto const& i : libsList) { if (!cm::contains(this->ImplicitLinkLibs, i)) { this->AddItem({ i }); } @@ -1099,8 +1100,8 @@ void cmComputeLinkInformation::AddImplicitLinkInfo(std::string const& lang) // implied by the linker language. std::string dirVar = cmStrCat("CMAKE_", lang, "_IMPLICIT_LINK_DIRECTORIES"); if (cmValue dirs = this->Makefile->GetDefinition(dirVar)) { - std::vector<std::string> dirsVec = cmExpandedList(*dirs); - this->OrderLinkerSearchPath->AddLanguageDirectories(dirsVec); + cmList dirsList{ *dirs }; + this->OrderLinkerSearchPath->AddLanguageDirectories(dirsList); } } @@ -1370,15 +1371,15 @@ void cmComputeLinkInformation::ComputeItemParserInfo() LinkUnknown); if (cmValue linkSuffixes = mf->GetDefinition("CMAKE_EXTRA_LINK_EXTENSIONS")) { - std::vector<std::string> linkSuffixVec = cmExpandedList(*linkSuffixes); - for (std::string const& i : linkSuffixVec) { + cmList linkSuffixList{ *linkSuffixes }; + for (auto const& i : linkSuffixList) { this->AddLinkExtension(i, LinkUnknown); } } if (cmValue sharedSuffixes = mf->GetDefinition("CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES")) { - std::vector<std::string> sharedSuffixVec = cmExpandedList(*sharedSuffixes); - for (std::string const& i : sharedSuffixVec) { + cmList sharedSuffixList{ *sharedSuffixes }; + for (std::string const& i : sharedSuffixList) { this->AddLinkExtension(i, LinkShared); } } @@ -2279,7 +2280,7 @@ static void cmCLI_ExpandListUnique(std::string const& str, std::vector<std::string>& out, std::set<std::string>& emitted) { - std::vector<std::string> tmp = cmExpandedList(str); + cmList tmp{ str }; for (std::string const& i : tmp) { if (emitted.insert(i).second) { out.push_back(i); diff --git a/Source/cmConditionEvaluator.cxx b/Source/cmConditionEvaluator.cxx index 5de012a..288e107 100644 --- a/Source/cmConditionEvaluator.cxx +++ b/Source/cmConditionEvaluator.cxx @@ -18,6 +18,7 @@ #include "cmCMakePath.h" #include "cmExpandedCommandArgument.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmState.h" @@ -764,7 +765,9 @@ bool cmConditionEvaluator::HandleLevel2(cmArgumentList& newArgs, cmValue rhs = this->Makefile.GetDefinition(args.nextnext->GetValue()); newArgs.ReduceTwoArgs( - rhs && cm::contains(cmExpandedList(*rhs, true), *lhs), args); + rhs && + cm::contains(cmList{ *rhs, cmList::EmptyElements::Yes }, *lhs), + args); } else if (this->Policy57Status == cmPolicies::WARN) { diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 3149ccf..02ee9e2 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -20,6 +20,7 @@ #include "cmConfigureLog.h" #include "cmExportTryCompileFileGenerator.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmOutputConverter.h" @@ -1024,7 +1025,7 @@ cm::optional<cmTryCompileResult> cmCoreTryCompile::TryCompileCode( if (cmValue varListStr = this->Makefile->GetDefinition( kCMAKE_TRY_COMPILE_PLATFORM_VARIABLES)) { - std::vector<std::string> varList = cmExpandedList(*varListStr); + cmList varList{ *varListStr }; vars.insert(varList.begin(), varList.end()); } diff --git a/Source/cmCustomCommandGenerator.cxx b/Source/cmCustomCommandGenerator.cxx index 14c22e3..7623ccf 100644 --- a/Source/cmCustomCommandGenerator.cxx +++ b/Source/cmCustomCommandGenerator.cxx @@ -17,6 +17,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmStateTypes.h" @@ -116,7 +117,7 @@ std::vector<std::string> EvaluateDepends(std::vector<std::string> const& paths, /*outputConfig=*/outputConfig, /*commandConfig=*/commandConfig, /*target=*/nullptr); - cm::append(depends, cmExpandedList(ep)); + cm::append(depends, cmList{ ep }); } for (std::string& p : depends) { if (cmSystemTools::FileIsFullPath(p)) { @@ -196,7 +197,7 @@ cmCustomCommandGenerator::cmCustomCommandGenerator( clarg, ge, this->LG, useOutputConfig, this->OutputConfig, this->CommandConfig, target, &this->Utilities); if (this->CC->GetCommandExpandLists()) { - cm::append(argv, cmExpandedList(parsed_arg)); + cm::append(argv, cmList{ parsed_arg }); } else { argv.push_back(std::move(parsed_arg)); } diff --git a/Source/cmExportBuildAndroidMKGenerator.cxx b/Source/cmExportBuildAndroidMKGenerator.cxx index 5d0b208..5e7008b 100644 --- a/Source/cmExportBuildAndroidMKGenerator.cxx +++ b/Source/cmExportBuildAndroidMKGenerator.cxx @@ -10,6 +10,7 @@ #include "cmGeneratorTarget.h" #include "cmLinkItem.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmPolicies.h" @@ -148,7 +149,7 @@ void cmExportBuildAndroidMKGenerator::GenerateInterfaceProperties( } } else if (property.first == "INTERFACE_INCLUDE_DIRECTORIES") { std::string includes = property.second; - std::vector<std::string> includeList = cmExpandedList(includes); + cmList includeList{ includes }; os << "LOCAL_EXPORT_C_INCLUDES := "; std::string end; for (std::string const& i : includeList) { @@ -158,9 +159,8 @@ void cmExportBuildAndroidMKGenerator::GenerateInterfaceProperties( os << "\n"; } else if (property.first == "INTERFACE_LINK_OPTIONS") { os << "LOCAL_EXPORT_LDFLAGS := "; - std::vector<std::string> linkFlagsList = - cmExpandedList(property.second); - os << cmJoin(linkFlagsList, " ") << "\n"; + cmList linkFlagsList{ property.second }; + os << linkFlagsList.join(" ") << "\n"; } else { os << "# " << property.first << " " << (property.second) << "\n"; } diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx index 511b28d..2ad2b47 100644 --- a/Source/cmExportFileGenerator.cxx +++ b/Source/cmExportFileGenerator.cxx @@ -17,6 +17,7 @@ #include "cmGeneratedFileStream.h" #include "cmGeneratorTarget.h" #include "cmLinkItem.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -507,7 +508,7 @@ static void getPropertyContents(cmGeneratorTarget const* tgt, if (!p) { return; } - std::vector<std::string> content = cmExpandedList(*p); + cmList content{ *p }; ifaceProperties.insert(content.begin(), content.end()); } @@ -1245,7 +1246,7 @@ bool cmExportFileGenerator::PopulateExportProperties( const auto& targetProperties = gte->Target->GetProperties(); if (cmValue exportProperties = targetProperties.GetPropertyValue("EXPORT_PROPERTIES")) { - for (auto& prop : cmExpandedList(*exportProperties)) { + for (auto& prop : cmList{ *exportProperties }) { /* Black list reserved properties */ if (cmHasLiteralPrefix(prop, "IMPORTED_") || cmHasLiteralPrefix(prop, "INTERFACE_")) { diff --git a/Source/cmExportTryCompileFileGenerator.cxx b/Source/cmExportTryCompileFileGenerator.cxx index c6ebad5..f30c3c3 100644 --- a/Source/cmExportTryCompileFileGenerator.cxx +++ b/Source/cmExportTryCompileFileGenerator.cxx @@ -12,6 +12,7 @@ #include "cmGeneratorExpressionDAGChecker.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -126,7 +127,7 @@ void cmExportTryCompileFileGenerator::PopulateProperties( std::string evalResult = this->FindTargets(p, target, std::string(), emitted); - std::vector<std::string> depends = cmExpandedList(evalResult); + cmList depends{ evalResult }; for (std::string const& li : depends) { cmGeneratorTarget* tgt = target->GetLocalGenerator()->FindGeneratorTargetToUse(li); diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx index e9e2921..8d7f33e 100644 --- a/Source/cmExtraCodeBlocksGenerator.cxx +++ b/Source/cmExtraCodeBlocksGenerator.cxx @@ -14,6 +14,7 @@ #include "cmGeneratedFileStream.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmRange.h" @@ -567,13 +568,13 @@ void cmExtraCodeBlocksGenerator::AppendTarget( std::string systemIncludeDirs = makefile->GetSafeDefinition( "CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS"); if (!systemIncludeDirs.empty()) { - cm::append(allIncludeDirs, cmExpandedList(systemIncludeDirs)); + cm::append(allIncludeDirs, cmList{ systemIncludeDirs }); } systemIncludeDirs = makefile->GetSafeDefinition( "CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS"); if (!systemIncludeDirs.empty()) { - cm::append(allIncludeDirs, cmExpandedList(systemIncludeDirs)); + cm::append(allIncludeDirs, cmList{ systemIncludeDirs }); } auto end = cmRemoveDuplicates(allIncludeDirs); diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index 6201889..c7ce5b0 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -16,6 +16,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -418,7 +419,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile() if (cmValue extraNaturesProp = mf->GetState()->GetGlobalProperty("ECLIPSE_EXTRA_NATURES")) { - std::vector<std::string> extraNatures = cmExpandedList(*extraNaturesProp); + cmList extraNatures{ *extraNaturesProp }; for (std::string const& n : extraNatures) { xml.Element("nature", n); } @@ -798,7 +799,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const mf->GetDefinition("CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS"); if (this->CEnabled && cDefs) { // Expand the list. - std::vector<std::string> defs = cmExpandedList(*cDefs, true); + cmList defs{ *cDefs, cmList::EmptyElements::Yes }; // the list must contain only definition-value pairs: if ((defs.size() % 2) == 0) { @@ -830,7 +831,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const mf->GetDefinition("CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS"); if (this->CXXEnabled && cxxDefs) { // Expand the list. - std::vector<std::string> defs = cmExpandedList(*cxxDefs, true); + cmList defs{ *cxxDefs, cmList::EmptyElements::Yes }; // the list must contain only definition-value pairs: if ((defs.size() % 2) == 0) { @@ -879,14 +880,14 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const if (this->CEnabled && !compiler.empty()) { std::string systemIncludeDirs = mf->GetSafeDefinition("CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS"); - std::vector<std::string> dirs = cmExpandedList(systemIncludeDirs); + cmList dirs{ systemIncludeDirs }; this->AppendIncludeDirectories(xml, dirs, emitted); } compiler = mf->GetSafeDefinition("CMAKE_CXX_COMPILER"); if (this->CXXEnabled && !compiler.empty()) { std::string systemIncludeDirs = mf->GetSafeDefinition("CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS"); - std::vector<std::string> dirs = cmExpandedList(systemIncludeDirs); + cmList dirs{ systemIncludeDirs }; this->AppendIncludeDirectories(xml, dirs, emitted); } diff --git a/Source/cmExtraSublimeTextGenerator.cxx b/Source/cmExtraSublimeTextGenerator.cxx index 33901ac..205a691 100644 --- a/Source/cmExtraSublimeTextGenerator.cxx +++ b/Source/cmExtraSublimeTextGenerator.cxx @@ -14,6 +14,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -138,7 +139,7 @@ void cmExtraSublimeTextGenerator::CreateNewProjectFile( // End of build_systems fout << "\n\t]"; std::string systemName = mf->GetSafeDefinition("CMAKE_SYSTEM_NAME"); - std::vector<std::string> tokens = cmExpandedList(this->EnvSettings); + cmList tokens{ this->EnvSettings }; if (!this->EnvSettings.empty()) { fout << ","; diff --git a/Source/cmFileCopier.cxx b/Source/cmFileCopier.cxx index ef55abf..663bddc 100644 --- a/Source/cmFileCopier.cxx +++ b/Source/cmFileCopier.cxx @@ -9,6 +9,7 @@ #include "cmExecutionStatus.h" #include "cmFSPermissions.h" #include "cmFileTimes.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" @@ -169,8 +170,7 @@ bool cmFileCopier::GetDefaultDirectoryPermissions(mode_t** mode) cmValue default_dir_install_permissions = this->Makefile->GetDefinition( "CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS"); if (cmNonempty(default_dir_install_permissions)) { - std::vector<std::string> items = - cmExpandedList(*default_dir_install_permissions); + cmList items{ *default_dir_install_permissions }; for (const auto& arg : items) { if (!this->CheckPermissions(arg, **mode)) { this->Status.SetError( diff --git a/Source/cmFileSet.cxx b/Source/cmFileSet.cxx index b96ba6e..48a2570 100644 --- a/Source/cmFileSet.cxx +++ b/Source/cmFileSet.cxx @@ -12,6 +12,7 @@ #include "cmsys/RegularExpression.hxx" #include "cmGeneratorExpression.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -113,7 +114,7 @@ cmFileSet::CompileFileEntries() const std::vector<std::unique_ptr<cmCompiledGeneratorExpression>> result; for (auto const& entry : this->FileEntries) { - for (auto const& ex : cmExpandedList(entry.Value)) { + for (auto const& ex : cmList{ entry.Value }) { cmGeneratorExpression ge(this->CMakeInstance, entry.Backtrace); auto cge = ge.Parse(ex); result.push_back(std::move(cge)); @@ -129,7 +130,7 @@ cmFileSet::CompileDirectoryEntries() const std::vector<std::unique_ptr<cmCompiledGeneratorExpression>> result; for (auto const& entry : this->DirectoryEntries) { - for (auto const& ex : cmExpandedList(entry.Value)) { + for (auto const& ex : cmList{ entry.Value }) { cmGeneratorExpression ge(this->CMakeInstance, entry.Backtrace); auto cge = ge.Parse(ex); result.push_back(std::move(cge)); @@ -148,7 +149,7 @@ std::vector<std::string> cmFileSet::EvaluateDirectoryEntries( std::vector<std::string> result; for (auto const& cge : cges) { auto entry = cge->Evaluate(lg, config, target, dagChecker); - auto dirs = cmExpandedList(entry); + cmList dirs{ entry }; for (std::string dir : dirs) { if (!cmSystemTools::FileIsFullPath(dir)) { dir = cmStrCat(lg->GetCurrentSourceDirectory(), '/', dir); @@ -184,7 +185,7 @@ void cmFileSet::EvaluateFileEntry( cmGeneratorExpressionDAGChecker* dagChecker) const { auto files = cge->Evaluate(lg, config, target, dagChecker); - for (std::string file : cmExpandedList(files)) { + for (std::string file : cmList{ files }) { if (!cmSystemTools::FileIsFullPath(file)) { file = cmStrCat(lg->GetCurrentSourceDirectory(), '/', file); } diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx index 4df81d5..929c6c1 100644 --- a/Source/cmFindBase.cxx +++ b/Source/cmFindBase.cxx @@ -15,6 +15,7 @@ #include "cmCMakePath.h" #include "cmExecutionStatus.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -154,7 +155,7 @@ bool cmFindBase::ParseArguments(std::vector<std::string> const& argsIn) } // ensure a macro is not specified as validator const auto& validatorName = args[j]; - auto macros = cmExpandedList(this->Makefile->GetProperty("MACROS")); + cmList macros{ this->Makefile->GetProperty("MACROS") }; if (std::find_if(macros.begin(), macros.end(), [&validatorName](const std::string& item) { return cmSystemTools::Strucmp(validatorName.c_str(), @@ -403,7 +404,7 @@ void cmFindBase::FillCMakeSystemVariablePath() this->Makefile->GetDefinition("CMAKE_SYSTEM_PREFIX_PATH"); // remove entries from CMAKE_SYSTEM_PREFIX_PATH - std::vector<std::string> expanded = cmExpandedList(*prefix_paths); + cmList expanded{ *prefix_paths }; install_entry.remove_self(expanded); staging_entry.remove_self(expanded); diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index b1029e6..656703c 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -23,6 +23,7 @@ #include "cmAlgorithms.h" #include "cmDependencyProvider.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -2338,7 +2339,7 @@ void cmFindPackageCommand::FillPrefixesCMakeSystemVariable() cmValue prefix_paths = this->Makefile->GetDefinition("CMAKE_SYSTEM_PREFIX_PATH"); // remove entry from CMAKE_SYSTEM_PREFIX_PATH - std::vector<std::string> expanded = cmExpandedList(*prefix_paths); + cmList expanded{ *prefix_paths }; long count = 0; for (const auto& path : expanded) { bool const to_add = diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index 727931c..9dcbc39 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -708,9 +708,9 @@ static const struct PathNode : public cmGeneratorExpressionNode static auto processList = [](std::string const& arg, std::function<void(std::string&)> transform) -> std::string { - auto list = cmExpandedList(arg); + cmList list{ arg }; std::for_each(list.begin(), list.end(), std::move(transform)); - return cmJoin(list, ";"); + return list.to_string(); }; static std::unordered_map< @@ -4363,7 +4363,7 @@ static const struct ShellPathNode : public cmGeneratorExpressionNode const GeneratorExpressionContent* content, cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override { - std::vector<std::string> listIn = cmExpandedList(parameters.front()); + cmList listIn{ parameters.front() }; if (listIn.empty()) { reportError(context, content->GetOriginalExpression(), "\"\" is not an absolute path."); diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 90cddb5..db3d7e6 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -36,6 +36,7 @@ #include "cmGeneratorExpressionDAGChecker.h" #include "cmGeneratorExpressionNode.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -1634,20 +1635,20 @@ void AddFileSetEntries(cmGeneratorTarget const* headTarget, EvaluatedTargetPropertyEntries& entries) { for (auto const& entry : headTarget->Target->GetHeaderSetsEntries()) { - for (auto const& name : cmExpandedList(entry.Value)) { + for (auto const& name : cmList{ entry.Value }) { auto const* headerSet = headTarget->Target->GetFileSet(name); addFileSetEntry(headTarget, config, dagChecker, headerSet, entries); } } for (auto const& entry : headTarget->Target->GetCxxModuleSetsEntries()) { - for (auto const& name : cmExpandedList(entry.Value)) { + for (auto const& name : cmList{ entry.Value }) { auto const* cxxModuleSet = headTarget->Target->GetFileSet(name); addFileSetEntry(headTarget, config, dagChecker, cxxModuleSet, entries); } } for (auto const& entry : headTarget->Target->GetCxxModuleHeaderSetsEntries()) { - for (auto const& name : cmExpandedList(entry.Value)) { + for (auto const& name : cmList{ entry.Value }) { auto const* cxxModuleHeaderSet = headTarget->Target->GetFileSet(name); addFileSetEntry(headTarget, config, dagChecker, cxxModuleHeaderSet, entries); @@ -1740,8 +1741,8 @@ std::vector<BT<std::string>> cmGeneratorTarget::GetSourceFilePaths( cmBTStringRange sourceEntries = this->Target->GetSourceEntries(); for (auto const& entry : sourceEntries) { - std::vector<std::string> items = cmExpandedList(entry.Value); - for (std::string const& item : items) { + cmList items{ entry.Value }; + for (auto const& item : items) { if (cmHasLiteralPrefix(item, "$<TARGET_OBJECTS:") && item.back() == '>') { continue; @@ -3105,8 +3106,8 @@ void cmTargetTraceDependencies::Trace() // Queue dependencies added explicitly by the user. if (cmValue additionalDeps = sf->GetProperty("OBJECT_DEPENDS")) { - std::vector<std::string> objDeps = cmExpandedList(*additionalDeps); - for (std::string& objDep : objDeps) { + cmList objDeps{ *additionalDeps }; + for (auto& objDep : objDeps) { if (cmSystemTools::FileIsFullPath(objDep)) { objDep = cmSystemTools::CollapseFullPath(objDep); } @@ -4606,7 +4607,7 @@ std::vector<BT<std::string>> cmGeneratorTarget::GetLinkOptions( // wrap host link options const std::string wrapper(this->Makefile->GetSafeDefinition( "CMAKE_" + language + "_DEVICE_COMPILER_WRAPPER_FLAG")); - std::vector<std::string> wrapperFlag = cmExpandedList(wrapper); + cmList wrapperFlag{ wrapper }; const std::string wrapperSep(this->Makefile->GetSafeDefinition( "CMAKE_" + language + "_DEVICE_COMPILER_WRAPPER_FLAG_SEP")); bool concatFlagAndArgs = true; @@ -4665,7 +4666,7 @@ std::vector<BT<std::string>>& cmGeneratorTarget::ResolveLinkerWrapper( "CMAKE_" + language + (this->IsDeviceLink() ? "_DEVICE_LINKER_WRAPPER_FLAG" : "_LINKER_WRAPPER_FLAG"))); - std::vector<std::string> wrapperFlag = cmExpandedList(wrapper); + cmList wrapperFlag{ wrapper }; const std::string wrapperSep(this->Makefile->GetSafeDefinition( "CMAKE_" + language + (this->IsDeviceLink() ? "_DEVICE_LINKER_WRAPPER_FLAG_SEP" @@ -4911,7 +4912,7 @@ std::vector<BT<std::string>> cmGeneratorTarget::GetLinkDepends( EvaluatedTargetPropertyEntries entries; if (cmValue linkDepends = this->GetProperty("LINK_DEPENDS")) { - std::vector<std::string> depends = cmExpandedList(*linkDepends); + cmList depends{ *linkDepends }; for (const auto& depend : depends) { std::unique_ptr<TargetPropertyEntry> entry = CreateTargetPropertyEntry( *this->LocalGenerator->GetCMakeInstance(), depend); @@ -5590,8 +5591,8 @@ void cmGeneratorTarget::ConstructSourceFileFlags() const // Process public headers to mark the source files. if (cmValue files = this->GetProperty("PUBLIC_HEADER")) { - std::vector<std::string> relFiles = cmExpandedList(*files); - for (std::string const& relFile : relFiles) { + cmList relFiles{ *files }; + for (auto const& relFile : relFiles) { if (cmSourceFile* sf = this->Makefile->GetSource(relFile)) { SourceFileFlags& flags = this->SourceFlagsMap[sf]; flags.MacFolder = "Headers"; @@ -5603,8 +5604,8 @@ void cmGeneratorTarget::ConstructSourceFileFlags() const // Process private headers after public headers so that they take // precedence if a file is listed in both. if (cmValue files = this->GetProperty("PRIVATE_HEADER")) { - std::vector<std::string> relFiles = cmExpandedList(*files); - for (std::string const& relFile : relFiles) { + cmList relFiles{ *files }; + for (auto const& relFile : relFiles) { if (cmSourceFile* sf = this->Makefile->GetSource(relFile)) { SourceFileFlags& flags = this->SourceFlagsMap[sf]; flags.MacFolder = "PrivateHeaders"; @@ -5615,8 +5616,8 @@ void cmGeneratorTarget::ConstructSourceFileFlags() const // Mark sources listed as resources. if (cmValue files = this->GetProperty("RESOURCE")) { - std::vector<std::string> relFiles = cmExpandedList(*files); - for (std::string const& relFile : relFiles) { + cmList relFiles{ *files }; + for (auto const& relFile : relFiles) { if (cmSourceFile* sf = this->Makefile->GetSource(relFile)) { SourceFileFlags& flags = this->SourceFlagsMap[sf]; flags.MacFolder = ""; @@ -5757,7 +5758,7 @@ void checkPropertyConsistency(cmGeneratorTarget const* depender, return; } - std::vector<std::string> props = cmExpandedList(*prop); + cmList props{ *prop }; std::string pdir = cmStrCat(cmSystemTools::GetCMakeRoot(), "/Help/prop_tgt/"); @@ -6799,10 +6800,10 @@ void cmGeneratorTarget::ExpandLinkItems( entry.Backtrace); std::unique_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(entry.Value); cge->SetEvaluateForBuildsystem(true); - std::vector<std::string> libs = cmExpandedList( - cge->Evaluate(this->LocalGenerator, config, headTarget, &dagChecker, - this, headTarget->LinkerLanguage)); - for (std::string const& lib : libs) { + cmList libs{ cge->Evaluate(this->LocalGenerator, config, headTarget, + &dagChecker, this, + headTarget->LinkerLanguage) }; + for (auto const& lib : libs) { if (cm::optional<cmLinkItem> maybeItem = this->LookupLinkItem( lib, cge->GetBacktrace(), &scope, field == LinkInterfaceField::Libraries ? LookupSelf::No @@ -7466,10 +7467,10 @@ std::vector<ValueType> computeImplicitLanguageTargets( currentTarget->GetRuntimeLinkLibrary(lang, config); if (cmValue runtimeLinkOptions = currentTarget->Makefile->GetDefinition( "CMAKE_" + lang + "_RUNTIME_LIBRARIES_" + runtimeLibrary)) { - std::vector<std::string> libsVec = cmExpandedList(*runtimeLinkOptions); - result.reserve(libsVec.size()); + cmList libsList{ *runtimeLinkOptions }; + result.reserve(libsList.size()); - for (std::string const& i : libsVec) { + for (auto const& i : libsList) { cmGeneratorTarget::TargetOrString resolved = currentTarget->ResolveTargetReference(i, lg); if (resolved.Target) { @@ -7550,9 +7551,9 @@ const cmLinkInterface* cmGeneratorTarget::GetImportLinkInterface( this->ExpandLinkItems(info->LibrariesProp, cmMakeRange(info->Libraries), config, headTarget, interfaceFor, LinkInterfaceField::Libraries, iface); - std::vector<std::string> deps = cmExpandedList(info->SharedDeps); + cmList deps{ info->SharedDeps }; LookupLinkItemScope scope{ this->LocalGenerator }; - for (std::string const& dep : deps) { + for (auto const& dep : deps) { if (cm::optional<cmLinkItem> maybeItem = this->LookupLinkItem( dep, cmListFileBacktrace(), &scope, LookupSelf::No)) { iface.SharedDeps.emplace_back(std::move(*maybeItem)); @@ -7873,8 +7874,8 @@ void cmGeneratorTarget::GetObjectLibrariesCMP0026( // behavior of CMP0024 and CMP0026 only. cmBTStringRange rng = this->Target->GetSourceEntries(); for (auto const& entry : rng) { - std::vector<std::string> files = cmExpandedList(entry.Value); - for (std::string const& li : files) { + cmList files{ entry.Value }; + for (auto const& li : files) { if (cmHasLiteralPrefix(li, "$<TARGET_OBJECTS:") && li.back() == '>') { std::string objLibName = li.substr(17, li.size() - 18); @@ -8636,7 +8637,7 @@ bool cmGeneratorTarget::AddHeaderSetVerification() const bool all = verifyValue.IsEmpty(); std::set<std::string> verifySet; if (!all) { - auto verifyList = cmExpandedList(verifyValue); + cmList verifyList{ verifyValue }; verifySet.insert(verifyList.begin(), verifyList.end()); } @@ -8649,7 +8650,7 @@ bool cmGeneratorTarget::AddHeaderSetVerification() std::set<cmFileSet*> fileSets; for (auto const& entry : interfaceFileSetEntries) { - for (auto const& name : cmExpandedList(entry.Value)) { + for (auto const& name : cmList{ entry.Value }) { if (all || verifySet.count(name)) { fileSets.insert(this->Target->GetFileSet(name)); verifySet.erase(name); diff --git a/Source/cmGhsMultiTargetGenerator.cxx b/Source/cmGhsMultiTargetGenerator.cxx index 8471dfe..a1e0650 100644 --- a/Source/cmGhsMultiTargetGenerator.cxx +++ b/Source/cmGhsMultiTargetGenerator.cxx @@ -17,6 +17,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalGhsMultiGenerator.h" #include "cmLinkLineComputer.h" // IWYU pragma: keep +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmLocalGhsMultiGenerator.h" #include "cmMakefile.h" @@ -484,7 +485,7 @@ void cmGhsMultiTargetGenerator::WriteSourceProperty( { cmValue prop = sf->GetProperty(propName); if (prop) { - std::vector<std::string> list = cmExpandedList(*prop); + cmList list{ *prop }; for (const std::string& p : list) { fout << " " << propFlag << p << '\n'; } diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 3563a1a..d0a0fdf 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -42,6 +42,7 @@ #include "cmInstallGenerator.h" #include "cmInstallRuntimeDependencySet.h" #include "cmLinkLineComputer.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMSVC60LinkLineComputer.h" #include "cmMakefile.h" @@ -670,7 +671,7 @@ void cmGlobalGenerator::EnableLanguage( mf->GetState()->SetInTopLevelIncludes(true); std::string includes = mf->GetSafeDefinition("CMAKE_PROJECT_TOP_LEVEL_INCLUDES"); - std::vector<std::string> includesList = cmExpandedList(includes); + cmList includesList{ includes }; for (std::string const& setupFile : includesList) { std::string absSetupFile = cmSystemTools::CollapseFullPath( setupFile, mf->GetCurrentSourceDirectory()); @@ -1234,7 +1235,7 @@ void cmGlobalGenerator::SetLanguageEnabledMaps(const std::string& l, std::string ignoreExtensionsVar = std::string("CMAKE_") + std::string(l) + std::string("_IGNORE_EXTENSIONS"); std::string ignoreExts = mf->GetSafeDefinition(ignoreExtensionsVar); - std::vector<std::string> extensionList = cmExpandedList(ignoreExts); + cmList extensionList{ ignoreExts }; for (std::string const& i : extensionList) { this->IgnoreExtensions[i] = true; } @@ -1246,7 +1247,7 @@ void cmGlobalGenerator::FillExtensionToLanguageMap(const std::string& l, std::string extensionsVar = std::string("CMAKE_") + std::string(l) + std::string("_SOURCE_FILE_EXTENSIONS"); const std::string& exts = mf->GetSafeDefinition(extensionsVar); - std::vector<std::string> extensionList = cmExpandedList(exts); + cmList extensionList{ exts }; for (std::string const& i : extensionList) { this->ExtensionToLanguage[i] = l; } @@ -1887,10 +1888,9 @@ void cmGlobalGenerator::FinalizeTargetConfiguration() "CMAKE_" + li + "_STANDARD_INCLUDE_DIRECTORIES"; std::string const& standardIncludesStr = mf->GetSafeDefinition(standardIncludesVar); - std::vector<std::string> standardIncludesVec = - cmExpandedList(standardIncludesStr); - standardIncludesSet.insert(standardIncludesVec.begin(), - standardIncludesVec.end()); + cmList standardIncludesList{ standardIncludesStr }; + standardIncludesSet.insert(standardIncludesList.begin(), + standardIncludesList.end()); } mf->AddSystemIncludeDirectories(standardIncludesSet); } diff --git a/Source/cmGlobalGhsMultiGenerator.cxx b/Source/cmGlobalGhsMultiGenerator.cxx index b1f2b4a..578e805 100644 --- a/Source/cmGlobalGhsMultiGenerator.cxx +++ b/Source/cmGlobalGhsMultiGenerator.cxx @@ -18,6 +18,7 @@ #include "cmGeneratedFileStream.h" #include "cmGeneratorTarget.h" #include "cmGhsMultiGpj.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmLocalGhsMultiGenerator.h" #include "cmMakefile.h" @@ -531,7 +532,7 @@ void cmGlobalGhsMultiGenerator::WriteMacros(std::ostream& fout, fout << "macro PROJ_NAME=" << root->GetProjectName() << '\n'; cmValue ghsGpjMacros = root->GetMakefile()->GetDefinition("GHS_GPJ_MACROS"); if (ghsGpjMacros) { - std::vector<std::string> expandedList = cmExpandedList(*ghsGpjMacros); + cmList expandedList{ *ghsGpjMacros }; for (std::string const& arg : expandedList) { fout << "macro " << arg << '\n'; } diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 5de3a55..694698e 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -17,6 +17,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmLocalVisualStudio7Generator.h" #include "cmMakefile.h" @@ -580,7 +581,7 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections( } fout << "\tGlobalSection(" << name << ") = " << sectionType << "\n"; cmValue p = root->GetMakefile()->GetProperty(it); - std::vector<std::string> keyValuePairs = cmExpandedList(p ? *p : ""); + cmList keyValuePairs{ *p }; for (std::string const& itPair : keyValuePairs) { const std::string::size_type posEqual = itPair.find('='); if (posEqual != std::string::npos) { diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 1396357..1328f4b 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -30,6 +30,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalGeneratorFactory.h" #include "cmLinkItem.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmLocalXCodeGenerator.h" @@ -1027,7 +1028,7 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateXCodeSourceFile( cmValue extraFileAttributes = sf->GetProperty("XCODE_FILE_ATTRIBUTES"); if (extraFileAttributes) { // Expand the list of attributes. - std::vector<std::string> attributes = cmExpandedList(*extraFileAttributes); + cmList attributes{ *extraFileAttributes }; // Store the attributes. for (const auto& attribute : attributes) { @@ -1171,7 +1172,7 @@ template <class T> std::string GetTargetObjectDirArch(T const& target, const std::string& defaultVal) { - auto archs = cmExpandedList(target.GetSafeProperty("OSX_ARCHITECTURES")); + cmList archs{ target.GetSafeProperty("OSX_ARCHITECTURES") }; if (archs.size() > 1) { return "$(CURRENT_ARCH)"; } else if (archs.size() == 1) { @@ -3127,8 +3128,8 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateUtilityTarget( std::string cmGlobalXCodeGenerator::AddConfigurations(cmXCodeObject* target, cmGeneratorTarget* gtgt) { - std::vector<std::string> const configVector = cmExpandedList( - this->CurrentMakefile->GetRequiredDefinition("CMAKE_CONFIGURATION_TYPES")); + cmList const configList{ this->CurrentMakefile->GetRequiredDefinition( + "CMAKE_CONFIGURATION_TYPES") }; cmXCodeObject* configlist = this->CreateObject(cmXCodeObject::XCConfigurationList); cmXCodeObject* buildConfigurations = @@ -3140,7 +3141,7 @@ std::string cmGlobalXCodeGenerator::AddConfigurations(cmXCodeObject* target, configlist->SetComment(comment); target->AddAttribute("buildConfigurationList", this->CreateObjectReference(configlist)); - for (auto const& i : configVector) { + for (auto const& i : configList) { cmXCodeObject* config = this->CreateObject(cmXCodeObject::XCBuildConfiguration); buildConfigurations->AddObject(config); @@ -3153,12 +3154,12 @@ std::string cmGlobalXCodeGenerator::AddConfigurations(cmXCodeObject* target, this->CreateTargetXCConfigSettings(gtgt, config, i); } - if (!configVector.empty()) { + if (!configList.empty()) { configlist->AddAttribute("defaultConfigurationName", - this->CreateString(configVector[0])); + this->CreateString(configList[0])); configlist->AddAttribute("defaultConfigurationIsVisible", this->CreateString("0")); - return configVector[0]; + return configList[0]; } return ""; } @@ -4029,7 +4030,7 @@ void cmGlobalXCodeGenerator::AddEmbeddedObjects( this->CreateString("0")); cmXCodeObject* buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST); // Collect all embedded frameworks and dylibs and add them to build phase - std::vector<std::string> relFiles = cmExpandedList(*files); + cmList relFiles{ *files }; for (std::string const& relFile : relFiles) { cmXCodeObject* buildFile{ nullptr }; std::string filePath = relFile; @@ -5008,7 +5009,7 @@ void cmGlobalXCodeGenerator::AppendDefines(BuildObjectListOrString& defs, } // Expand the list of definitions. - std::vector<std::string> defines = cmExpandedList(defines_list); + cmList defines{ defines_list }; // Store the definitions in the string. this->AppendDefines(defs, defines, dflag); diff --git a/Source/cmGraphVizWriter.cxx b/Source/cmGraphVizWriter.cxx index 2bb438d..a8a7abb 100644 --- a/Source/cmGraphVizWriter.cxx +++ b/Source/cmGraphVizWriter.cxx @@ -15,6 +15,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" #include "cmLinkItem.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmState.h" @@ -255,9 +256,8 @@ void cmGraphVizWriter::ReadSettings( this->TargetsToIgnoreRegex.clear(); if (!ignoreTargetsRegexes.empty()) { - std::vector<std::string> ignoreTargetsRegExVector = - cmExpandedList(ignoreTargetsRegexes); - for (std::string const& currentRegexString : ignoreTargetsRegExVector) { + cmList ignoreTargetsRegExList{ ignoreTargetsRegexes }; + for (std::string const& currentRegexString : ignoreTargetsRegExList) { cmsys::RegularExpression currentRegex; if (!currentRegex.compile(currentRegexString)) { std::cerr << "Could not compile bad regex \"" << currentRegexString diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx index 40230d9..7f5f15b 100644 --- a/Source/cmInstallCommand.cxx +++ b/Source/cmInstallCommand.cxx @@ -39,6 +39,7 @@ #include "cmInstallRuntimeDependencySetGenerator.h" #include "cmInstallScriptGenerator.h" #include "cmInstallTargetGenerator.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmPolicies.h" @@ -1079,7 +1080,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args, if (createInstallGeneratorsForTargetFileSets && !namelinkOnly) { cmValue files = target.GetProperty("PRIVATE_HEADER"); if (cmNonempty(files)) { - std::vector<std::string> relFiles = cmExpandedList(*files); + cmList relFiles{ *files }; std::vector<std::string> absFiles; if (!helper.MakeFilesFullPath("PRIVATE_HEADER", relFiles, absFiles)) { return false; @@ -1101,7 +1102,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args, files = target.GetProperty("PUBLIC_HEADER"); if (cmNonempty(files)) { - std::vector<std::string> relFiles = cmExpandedList(*files); + cmList relFiles{ *files }; std::vector<std::string> absFiles; if (!helper.MakeFilesFullPath("PUBLIC_HEADER", relFiles, absFiles)) { return false; @@ -1123,7 +1124,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args, files = target.GetProperty("RESOURCE"); if (cmNonempty(files)) { - std::vector<std::string> relFiles = cmExpandedList(*files); + cmList relFiles{ *files }; std::vector<std::string> absFiles; if (!helper.MakeFilesFullPath("RESOURCE", relFiles, absFiles)) { return false; @@ -1145,8 +1146,8 @@ bool HandleTargetsMode(std::vector<std::string> const& args, if (!namelinkOnly) { for (std::size_t i = 0; i < fileSetArgs.size(); i++) { if (auto* fileSet = target.GetFileSet(fileSetArgs[i].GetFileSet())) { - auto interfaceFileSetEntries = cmExpandedList(target.GetSafeProperty( - cmTarget::GetInterfaceFileSetsPropertyName(fileSet->GetType()))); + cmList interfaceFileSetEntries{ target.GetSafeProperty( + cmTarget::GetInterfaceFileSetsPropertyName(fileSet->GetType())) }; if (std::find(interfaceFileSetEntries.begin(), interfaceFileSetEntries.end(), fileSetArgs[i].GetFileSet()) != diff --git a/Source/cmLDConfigLDConfigTool.cxx b/Source/cmLDConfigLDConfigTool.cxx index cce6178..0752b33 100644 --- a/Source/cmLDConfigLDConfigTool.cxx +++ b/Source/cmLDConfigLDConfigTool.cxx @@ -9,9 +9,9 @@ #include "cmsys/RegularExpression.hxx" +#include "cmList.h" #include "cmMakefile.h" #include "cmRuntimeDependencyArchive.h" -#include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmUVProcessChain.h" @@ -34,7 +34,7 @@ bool cmLDConfigLDConfigTool::GetLDConfigPaths(std::vector<std::string>& paths) } } - std::vector<std::string> ldConfigCommand = cmExpandedList(ldConfigPath); + cmList ldConfigCommand{ ldConfigPath }; ldConfigCommand.emplace_back("-v"); ldConfigCommand.emplace_back("-N"); // Don't rebuild the cache. ldConfigCommand.emplace_back("-X"); // Don't update links. diff --git a/Source/cmListFileCache.cxx b/Source/cmListFileCache.cxx index 6270c82..97f5de9 100644 --- a/Source/cmListFileCache.cxx +++ b/Source/cmListFileCache.cxx @@ -11,10 +11,10 @@ # include <cmsys/Encoding.hxx> #endif +#include "cmList.h" #include "cmListFileLexer.h" #include "cmMessageType.h" #include "cmMessenger.h" -#include "cmStringAlgorithms.h" #include "cmSystemTools.h" struct cmListFileParser @@ -496,10 +496,11 @@ std::ostream& operator<<(std::ostream& os, BT<std::string> const& s) } std::vector<BT<std::string>> cmExpandListWithBacktrace( - std::string const& list, cmListFileBacktrace const& bt, bool emptyArgs) + std::string const& list, cmListFileBacktrace const& bt, + cmList::EmptyElements emptyArgs) { std::vector<BT<std::string>> result; - std::vector<std::string> tmp = cmExpandedList(list, emptyArgs); + cmList tmp{ list, emptyArgs }; result.reserve(tmp.size()); for (std::string& i : tmp) { result.emplace_back(std::move(i), bt); diff --git a/Source/cmListFileCache.h b/Source/cmListFileCache.h index 0553989..e4e6eb3 100644 --- a/Source/cmListFileCache.h +++ b/Source/cmListFileCache.h @@ -13,6 +13,7 @@ #include <cm/optional> #include "cmConstStack.h" +#include "cmList.h" #include "cmSystemTools.h" /** \class cmListFileCache @@ -232,7 +233,7 @@ public: std::vector<BT<std::string>> cmExpandListWithBacktrace( std::string const& list, cmListFileBacktrace const& bt = cmListFileBacktrace(), - bool emptyArgs = false); + cmList::EmptyElements emptyArgs = cmList::EmptyElements::No); struct cmListFile { diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 01e4241..e00341c 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -38,6 +38,7 @@ #include "cmInstallTargetGenerator.h" #include "cmLinkLineComputer.h" #include "cmLinkLineDeviceComputer.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmRange.h" #include "cmRulePlaceholderExpander.h" @@ -347,7 +348,7 @@ void cmLocalGenerator::GenerateTestFiles() cmValue testIncludeFiles = this->Makefile->GetProperty("TEST_INCLUDE_FILES"); if (testIncludeFiles) { - std::vector<std::string> includesList = cmExpandedList(*testIncludeFiles); + cmList includesList{ *testIncludeFiles }; for (std::string const& i : includesList) { fout << "include(\"" << i << "\")\n"; } @@ -1064,9 +1065,9 @@ void cmLocalGenerator::AddCompileOptions(std::vector<BT<std::string>>& flags, std::string isJMCEnabled = cmGeneratorExpression::Evaluate(*jmcExprGen, this, config); if (cmIsOn(isJMCEnabled)) { - std::vector<std::string> optVec = cmExpandedList(*jmc); + cmList optList{ *jmc }; std::string jmcFlags; - this->AppendCompileOptions(jmcFlags, optVec); + this->AppendCompileOptions(jmcFlags, optList); if (!jmcFlags.empty()) { flags.emplace_back(std::move(jmcFlags)); } @@ -1954,8 +1955,8 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags, cmValue opt = target->Target->GetMakefile()->GetDefinition(optionFlagDef); if (opt) { - std::vector<std::string> optVec = cmExpandedList(*opt); - for (std::string const& i : optVec) { + cmList optList{ *opt }; + for (std::string const& i : optList) { this->AppendFlagEscape(flags, i); } } @@ -2426,7 +2427,7 @@ void cmLocalGenerator::AddPositionIndependentFlags(std::string& flags, cmStrCat("CMAKE_", lang, "_COMPILE_OPTIONS_PIC")); } if (!picFlags.empty()) { - std::vector<std::string> options = cmExpandedList(picFlags); + cmList options{ picFlags }; for (std::string const& o : options) { this->AppendFlagEscape(flags, o); } @@ -3163,7 +3164,7 @@ void cmLocalGenerator::AppendIPOLinkerFlags(std::string& flags, return; } - std::vector<std::string> flagsList = cmExpandedList(*rawFlagsList); + cmList flagsList{ *rawFlagsList }; for (std::string const& o : flagsList) { this->AppendFlagEscape(flags, o); } @@ -3198,7 +3199,7 @@ void cmLocalGenerator::AppendPositionIndependentLinkerFlags( return; } - std::vector<std::string> flagsList = cmExpandedList(pieFlags); + cmList flagsList{ pieFlags }; for (const auto& flag : flagsList) { this->AppendFlagEscape(flags, flag); } @@ -3264,7 +3265,7 @@ void cmLocalGenerator::AppendCompileOptions(std::string& options, } // Expand the list of options. - std::vector<std::string> options_vec = cmExpandedList(options_list); + cmList options_vec{ options_list }; this->AppendCompileOptions(options, options_vec, regex); } @@ -3322,7 +3323,7 @@ void cmLocalGenerator::AppendIncludeDirectories( } // Expand the list of includes. - std::vector<std::string> includes_vec = cmExpandedList(includes_list); + cmList includes_vec{ includes_list }; this->AppendIncludeDirectories(includes, includes_vec, sourceFile); } @@ -3454,7 +3455,7 @@ void cmLocalGenerator::AppendFeatureOptions(std::string& flags, cmValue optionList = this->Makefile->GetDefinition( cmStrCat("CMAKE_", lang, "_COMPILE_OPTIONS_", feature)); if (optionList) { - std::vector<std::string> options = cmExpandedList(*optionList); + cmList options{ *optionList }; for (std::string const& o : options) { this->AppendFlagEscape(flags, o); } @@ -4500,11 +4501,11 @@ cmLocalGenerator::MakeCustomCommandGenerators(cmCustomCommand const& cc, std::vector<std::string> cmLocalGenerator::ExpandCustomCommandOutputPaths( cmCompiledGeneratorExpression const& cge, std::string const& config) { - std::vector<std::string> paths = cmExpandedList(cge.Evaluate(this, config)); + cmList paths{ cge.Evaluate(this, config) }; for (std::string& p : paths) { p = cmSystemTools::CollapseFullPath(p, this->GetCurrentBinaryDirectory()); } - return paths; + return std::move(paths.data()); } std::vector<std::string> cmLocalGenerator::ExpandCustomCommandOutputGenex( diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx index d0bd375..42fa298 100644 --- a/Source/cmLocalNinjaGenerator.cxx +++ b/Source/cmLocalNinjaGenerator.cxx @@ -22,6 +22,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" #include "cmGlobalNinjaGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -301,7 +302,7 @@ void cmLocalNinjaGenerator::WritePools(std::ostream& os) if (jobpools) { cmGlobalNinjaGenerator::WriteComment( os, "Pools defined by global property JOB_POOLS"); - std::vector<std::string> pools = cmExpandedList(*jobpools); + cmList pools{ *jobpools }; for (std::string const& pool : pools) { const std::string::size_type eq = pool.find('='); unsigned int jobs; diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 56a41b1..12cecbd 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -29,6 +29,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" #include "cmGlobalUnixMakefileGenerator3.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -1434,7 +1435,7 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies( this->Makefile->GetSafeDefinition("CMAKE_DEPENDS_DEPENDENCY_FILES"); if (!depends.empty()) { // dependencies are managed by compiler - auto depFiles = cmExpandedList(depends, true); + cmList depFiles{ depends, cmList::EmptyElements::Yes }; std::string const internalDepFile = targetDir + "/compiler_depend.internal"; std::string const depFile = targetDir + "/compiler_depend.make"; @@ -1556,8 +1557,7 @@ bool cmLocalUnixMakefileGenerator3::ScanDependencies( this->WriteDisclaimer(internalRuleFileStream); // for each language we need to scan, scan it - std::vector<std::string> langs = - cmExpandedList(mf->GetSafeDefinition("CMAKE_DEPENDS_LANGUAGES")); + cmList langs{ mf->GetSafeDefinition("CMAKE_DEPENDS_LANGUAGES") }; for (std::string const& lang : langs) { // construct the checker // Create the scanner for this language @@ -1602,7 +1602,7 @@ void cmLocalUnixMakefileGenerator3::CheckMultipleOutputs(bool verbose) } // Convert the string to a list and preserve empty entries. - std::vector<std::string> pairs = cmExpandedList(*pairs_string, true); + cmList pairs{ *pairs_string, cmList::EmptyElements::Yes }; for (auto i = pairs.begin(); i != pairs.end() && (i + 1) != pairs.end();) { const std::string& depender = *i++; const std::string& dependee = *i++; @@ -1822,7 +1822,7 @@ void cmLocalUnixMakefileGenerator3::ClearDependencies(cmMakefile* mf, if (!infoDef) { return; } - std::vector<std::string> files = cmExpandedList(*infoDef); + cmList files{ *infoDef }; // Each depend information file corresponds to a target. Clear the // dependencies for that target. @@ -1863,7 +1863,7 @@ void cmLocalUnixMakefileGenerator3::ClearDependencies(cmMakefile* mf, cmSystemTools::Touch(DepTimestamp.GenericString(), true); // clear the dependencies files generated by the compiler - std::vector<std::string> dependencies = cmExpandedList(depsFiles, true); + cmList dependencies{ depsFiles, cmList::EmptyElements::Yes }; cmDependsCompiler depsManager; depsManager.SetVerbose(verbose); depsManager.ClearDependencies(dependencies); diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 239748d..a7ea0df 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -29,6 +29,7 @@ #include "cmGlobalGenerator.h" #include "cmGlobalVisualStudio7Generator.h" #include "cmGlobalVisualStudioGenerator.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmMakefile.h" #include "cmOutputConverter.h" @@ -1576,12 +1577,12 @@ cmLocalVisualStudio7GeneratorFCInfo::cmLocalVisualStudio7GeneratorFCInfo( // Check for extra object-file dependencies. if (cmValue deps = sf.GetProperty("OBJECT_DEPENDS")) { - std::vector<std::string> depends = cmExpandedList(*deps); - const char* sep = ""; - for (const std::string& d : depends) { - fc.AdditionalDeps += sep; - fc.AdditionalDeps += lg->ConvertToXMLOutputPath(d); - sep = ";"; + cmList depends{ *deps }; + if (!depends.empty()) { + for (std::string& d : depends) { + d = lg->ConvertToXMLOutputPath(d); + } + fc.AdditionalDeps += depends.to_string(); needfc = true; } } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 3a69b2e..490a905 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -43,6 +43,7 @@ #include "cmGlobalGenerator.h" #include "cmInstallGenerator.h" // IWYU pragma: keep #include "cmInstallSubdirectoryGenerator.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMessageType.h" @@ -1448,15 +1449,13 @@ bool cmMakefile::ParseDefineFlag(std::string const& def, bool remove) if (remove) { if (cmValue cdefs = this->GetProperty("COMPILE_DEFINITIONS")) { // Expand the list. - std::vector<std::string> defs = cmExpandedList(*cdefs); + cmList defs{ *cdefs }; // Recompose the list without the definition. - auto defEnd = std::remove(defs.begin(), defs.end(), define); - auto defBegin = defs.begin(); - std::string ndefs = cmJoin(cmMakeRange(defBegin, defEnd), ";"); + defs.remove_items({ define }); // Store the new list. - this->SetProperty("COMPILE_DEFINITIONS", ndefs); + this->SetProperty("COMPILE_DEFINITIONS", defs.to_string()); } } else { // Append the definition to the directory property. @@ -2064,7 +2063,7 @@ void cmMakefile::AddGlobalLinkInformation(cmTarget& target) } if (cmValue linkLibsProp = this->GetProperty("LINK_LIBRARIES")) { - std::vector<std::string> linkLibs = cmExpandedList(*linkLibsProp); + cmList linkLibs{ *linkLibsProp }; for (auto j = linkLibs.begin(); j != linkLibs.end(); ++j) { std::string libraryName = *j; @@ -2378,7 +2377,7 @@ void cmMakefile::ExpandVariablesCMP0019() } if (cmValue linkLibsProp = this->GetProperty("LINK_LIBRARIES")) { - std::vector<std::string> linkLibs = cmExpandedList(*linkLibsProp); + cmList linkLibs{ *linkLibsProp }; for (auto l = linkLibs.begin(); l != linkLibs.end(); ++l) { std::string libName = *l; @@ -3406,7 +3405,7 @@ bool cmMakefile::ExpandArguments( if (i.Delim == cmListFileArgument::Quoted) { outArgs.emplace_back(value, true); } else { - std::vector<std::string> stringArgs = cmExpandedList(value); + cmList stringArgs{ value }; for (std::string const& stringArg : stringArgs) { outArgs.emplace_back(stringArg, false); } @@ -3812,7 +3811,7 @@ std::string cmMakefile::GetModulesFile(const std::string& filename, // Always search in CMAKE_MODULE_PATH: cmValue cmakeModulePath = this->GetDefinition("CMAKE_MODULE_PATH"); if (cmakeModulePath) { - std::vector<std::string> modulePath = cmExpandedList(*cmakeModulePath); + cmList modulePath{ *cmakeModulePath }; // Look through the possible module directories. for (std::string itempl : modulePath) { diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx index 3e4a08e..43062d9 100644 --- a/Source/cmMakefileLibraryTargetGenerator.cxx +++ b/Source/cmMakefileLibraryTargetGenerator.cxx @@ -16,6 +16,7 @@ #include "cmGlobalUnixMakefileGenerator3.h" #include "cmLinkLineComputer.h" #include "cmLinkLineDeviceComputer.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmLocalUnixMakefileGenerator3.h" #include "cmMakefile.h" @@ -965,7 +966,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules( this->GeneratorTarget->HasImportLibrary(this->GetConfigName())) { auto genStubsRule = this->Makefile->GetDefinition("CMAKE_CREATE_TEXT_STUBS"); - auto genStubs_commands = cmExpandedList(genStubsRule); + cmList genStubs_commands{ genStubsRule }; std::string TBDFullPath = cmStrCat(outpathImp, this->TargetNames.ImportOutput); diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 3112acd..1e35fe7 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -29,6 +29,7 @@ #include "cmGlobalCommonGenerator.h" #include "cmGlobalUnixMakefileGenerator3.h" #include "cmLinkLineComputer.h" // IWYU pragma: keep +#include "cmList.h" #include "cmLocalCommonGenerator.h" #include "cmLocalGenerator.h" #include "cmLocalUnixMakefileGenerator3.h" @@ -1200,7 +1201,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( // If compiler launcher was specified and not consumed above, it // goes to the beginning of the command line. if (!compileCommands.empty() && !compilerLauncher.empty()) { - std::vector<std::string> args = cmExpandedList(compilerLauncher, true); + cmList args{ compilerLauncher, cmList::EmptyElements::Yes }; if (!args.empty()) { args[0] = this->LocalGenerator->ConvertToOutputFormat( args[0], cmOutputConverter::SHELL); @@ -1240,7 +1241,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( const auto& extraCommands = this->Makefile->GetSafeDefinition( cmStrCat("CMAKE_", lang, "_DEPENDS_EXTRA_COMMANDS")); if (!extraCommands.empty()) { - auto commandList = cmExpandedList(extraCommands); + cmList commandList{ extraCommands }; compileCommands.insert(compileCommands.end(), commandList.cbegin(), commandList.cend()); } @@ -1341,8 +1342,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( cmStrCat("CMAKE_", lang, "_CREATE_PREPROCESSED_SOURCE"); if (cmValue preprocessRule = this->Makefile->GetDefinition(preprocessRuleVar)) { - std::vector<std::string> preprocessCommands = - cmExpandedList(*preprocessRule); + cmList preprocessCommands{ *preprocessRule }; std::string shellObjI = this->LocalGenerator->ConvertToOutputFormat( objI, cmOutputConverter::SHELL); @@ -1386,8 +1386,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( cmStrCat("CMAKE_", lang, "_CREATE_ASSEMBLY_SOURCE"); if (cmValue assemblyRule = this->Makefile->GetDefinition(assemblyRuleVar)) { - std::vector<std::string> assemblyCommands = - cmExpandedList(*assemblyRule); + cmList assemblyCommands{ *assemblyRule }; std::string shellObjS = this->LocalGenerator->ConvertToOutputFormat( objS, cmOutputConverter::SHELL); @@ -1674,7 +1673,7 @@ void cmMakefileTargetGenerator::WriteDeviceLinkRule( } cmLocalUnixMakefileGenerator3* localGen{ this->LocalGenerator }; - std::vector<std::string> architectures = cmExpandedList(architecturesStr); + cmList architectures{ architecturesStr }; std::string const& relPath = localGen->GetHomeRelativeOutputPath(); // Ensure there are no duplicates. diff --git a/Source/cmMessageCommand.cxx b/Source/cmMessageCommand.cxx index 52373f3..baf40f8 100644 --- a/Source/cmMessageCommand.cxx +++ b/Source/cmMessageCommand.cxx @@ -10,6 +10,7 @@ #include "cmConfigureLog.h" #include "cmExecutionStatus.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmMessenger.h" @@ -31,13 +32,13 @@ enum class CheckingType std::string IndentText(std::string text, cmMakefile& mf) { auto indent = - cmJoin(cmExpandedList(mf.GetSafeDefinition("CMAKE_MESSAGE_INDENT")), ""); + cmList{ mf.GetSafeDefinition("CMAKE_MESSAGE_INDENT") }.join(""); const auto showContext = mf.GetCMakeInstance()->GetShowLogContext() || mf.IsOn("CMAKE_MESSAGE_CONTEXT_SHOW"); if (showContext) { - auto context = cmJoin( - cmExpandedList(mf.GetSafeDefinition("CMAKE_MESSAGE_CONTEXT")), "."); + auto context = + cmList{ mf.GetSafeDefinition("CMAKE_MESSAGE_CONTEXT") }.join("."); if (!context.empty()) { indent.insert(0u, cmStrCat("["_s, context, "] "_s)); } diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx index 4d68460..eb16f8f 100644 --- a/Source/cmNinjaNormalTargetGenerator.cxx +++ b/Source/cmNinjaNormalTargetGenerator.cxx @@ -23,6 +23,7 @@ #include "cmGlobalNinjaGenerator.h" #include "cmLinkLineComputer.h" #include "cmLinkLineDeviceComputer.h" +#include "cmList.h" #include "cmLocalCommonGenerator.h" #include "cmLocalGenerator.h" #include "cmLocalNinjaGenerator.h" @@ -754,7 +755,7 @@ void cmNinjaNormalTargetGenerator::WriteDeviceLinkStatement( } this->WriteDeviceLinkRules(config); - this->WriteDeviceLinkStatements(config, cmExpandedList(architecturesStr), + this->WriteDeviceLinkStatements(config, cmList{ architecturesStr }, targetOutputReal); } else { this->WriteNvidiaDeviceLinkStatement(config, fileConfig, targetOutputDir, diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 5dbc283..905c68e 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -32,6 +32,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalCommonGenerator.h" #include "cmGlobalNinjaGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmLocalNinjaGenerator.h" #include "cmMakefile.h" @@ -1038,7 +1039,7 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang, // If compiler launcher was specified and not consumed above, it // goes to the beginning of the command line. if (!compileCmds.empty() && !compilerLauncher.empty()) { - std::vector<std::string> args = cmExpandedList(compilerLauncher, true); + cmList args{ compilerLauncher, cmList::EmptyElements::Yes }; if (!args.empty()) { args[0] = this->LocalGenerator->ConvertToOutputFormat( args[0], cmOutputConverter::SHELL); @@ -1046,7 +1047,7 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang, i = this->LocalGenerator->EscapeForShell(i); } } - compileCmds.front().insert(0, cmStrCat(cmJoin(args, " "), ' ')); + compileCmds.front().insert(0, cmStrCat(args.join(" "), ' ')); } if (!compileCmds.empty()) { @@ -1056,7 +1057,7 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang, const auto& extraCommands = this->GetMakefile()->GetSafeDefinition( cmStrCat("CMAKE_", lang, "_DEPENDS_EXTRA_COMMANDS")); if (!extraCommands.empty()) { - auto commandList = cmExpandedList(extraCommands); + cmList commandList{ extraCommands }; compileCmds.insert(compileCmds.end(), commandList.cbegin(), commandList.cend()); } @@ -1468,7 +1469,7 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement( } if (cmValue objectDeps = source->GetProperty("OBJECT_DEPENDS")) { - std::vector<std::string> objDepList = cmExpandedList(*objectDeps); + cmList objDepList{ *objectDeps }; std::copy(objDepList.begin(), objDepList.end(), std::back_inserter(depList)); } @@ -1688,7 +1689,7 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement( if (!evaluatedObjectOutputs.empty()) { cmNinjaBuild build("phony"); build.Comment = "Additional output files."; - build.Outputs = cmExpandedList(evaluatedObjectOutputs); + build.Outputs = cmList{ evaluatedObjectOutputs }.data(); std::transform(build.Outputs.begin(), build.Outputs.end(), build.Outputs.begin(), this->MapToNinjaPath()); build.ExplicitDeps = objBuild.Outputs; diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 6c54e01..40fed80 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -6,16 +6,15 @@ #include <cassert> #include <cctype> #include <set> -#include <vector> #ifdef _WIN32 # include <unordered_map> # include <utility> #endif +#include "cmList.h" #include "cmState.h" #include "cmStateDirectory.h" -#include "cmStringAlgorithms.h" #include "cmSystemTools.h" #include "cmValue.h" @@ -319,7 +318,7 @@ cmOutputConverter::FortranFormat cmOutputConverter::GetFortranFormat( { FortranFormat format = FortranFormatNone; if (!value.empty()) { - for (std::string const& fi : cmExpandedList(value)) { + for (std::string const& fi : cmList(value)) { if (fi == "FIXED") { format = FortranFormatFixed; } diff --git a/Source/cmOutputRequiredFilesCommand.cxx b/Source/cmOutputRequiredFilesCommand.cxx index ad276d2..f147ed2 100644 --- a/Source/cmOutputRequiredFilesCommand.cxx +++ b/Source/cmOutputRequiredFilesCommand.cxx @@ -14,6 +14,7 @@ #include "cmExecutionStatus.h" #include "cmGeneratorExpression.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmSourceFile.h" #include "cmStringAlgorithms.h" @@ -126,9 +127,9 @@ public: std::string incDirs = cmGeneratorExpression::Preprocess( *incDirProp, cmGeneratorExpression::StripAllGeneratorExpressions); - std::vector<std::string> includes = cmExpandedList(incDirs); + cmList includes{ incDirs }; - for (std::string& path : includes) { + for (auto& path : includes) { this->Makefile->ExpandVariablesInString(path); if (uniqueIncludes.insert(path).second) { orderedAndUniqueIncludes.push_back(path); diff --git a/Source/cmParseArgumentsCommand.cxx b/Source/cmParseArgumentsCommand.cxx index 7e19566..3e677e6 100644 --- a/Source/cmParseArgumentsCommand.cxx +++ b/Source/cmParseArgumentsCommand.cxx @@ -12,6 +12,7 @@ #include "cmArgumentParser.h" #include "cmArgumentParserTypes.h" #include "cmExecutionStatus.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmRange.h" @@ -169,7 +170,7 @@ bool cmParseArgumentsCommand(std::vector<std::string> const& args, }; // the second argument is a (cmake) list of options without argument - std::vector<std::string> list = cmExpandedList(*argIter++); + cmList list{ *argIter++ }; parser.Bind(list, options, duplicateKey); // the third argument is a (cmake) list of single argument options diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 782c154..4c45949 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -35,6 +35,7 @@ #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" #include "cmLinkItem.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -507,7 +508,7 @@ bool cmQtAutoGenInitializer::InitCustomTargets() std::string const& deps = this->GenTarget->GetSafeProperty("AUTOGEN_TARGET_DEPENDS"); if (!deps.empty()) { - for (std::string const& depName : cmExpandedList(deps)) { + for (auto const& depName : cmList{ deps }) { // Allow target and file dependencies auto* depTarget = this->Makefile->FindTargetToUse(depName); if (depTarget) { @@ -545,8 +546,8 @@ bool cmQtAutoGenInitializer::InitCustomTargets() this->Moc.MacroNames.erase(cmRemoveDuplicates(this->Moc.MacroNames), this->Moc.MacroNames.end()); { - auto filterList = cmExpandedList( - this->GenTarget->GetSafeProperty("AUTOMOC_DEPEND_FILTERS")); + cmList filterList = { this->GenTarget->GetSafeProperty( + "AUTOMOC_DEPEND_FILTERS") }; if ((filterList.size() % 2) != 0) { cmSystemTools::Error( cmStrCat("AutoMoc: AUTOMOC_DEPEND_FILTERS predefs size ", @@ -558,7 +559,9 @@ bool cmQtAutoGenInitializer::InitCustomTargets() "Q_PLUGIN_METADATA", "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\(" "[^\\)]*FILE[ \t]*\"([^\"]+)\""); - for (std::size_t ii = 0; ii != filterList.size(); ii += 2) { + for (cmList::index_type ii = 0; + ii != static_cast<cmList::index_type>(filterList.size()); + ii += 2) { this->Moc.DependFilters.emplace_back(filterList[ii], filterList[ii + 1]); } @@ -701,7 +704,7 @@ bool cmQtAutoGenInitializer::InitUic() this->GenTarget->GetSafeProperty("AUTOUIC_SEARCH_PATHS"); if (!usp.empty()) { this->Uic.SearchPaths = - SearchPathSanitizer(this->Makefile)(cmExpandedList(usp)); + SearchPathSanitizer(this->Makefile)(cmList{ usp }); } } // Uic target options @@ -961,8 +964,8 @@ bool cmQtAutoGenInitializer::InitScanFiles() if (uicOpts.empty()) { this->Uic.UiFilesNoOptions.emplace_back(fullPath); } else { - this->Uic.UiFilesWithOptions.emplace_back(fullPath, - cmExpandedList(uicOpts)); + this->Uic.UiFilesWithOptions.emplace_back( + fullPath, std::move(cmList{ uicOpts }.data())); } auto uiHeaderRelativePath = cmSystemTools::RelativePath( @@ -1063,8 +1066,8 @@ bool cmQtAutoGenInitializer::InitScanFiles() if (!this->Rcc.Qrcs.empty()) { const bool modernQt = (this->QtVersion.Major >= 5); // Target rcc options - std::vector<std::string> optionsTarget = - cmExpandedList(this->GenTarget->GetSafeProperty(kw.AUTORCC_OPTIONS)); + cmList optionsTarget{ this->GenTarget->GetSafeProperty( + kw.AUTORCC_OPTIONS) }; // Check if file name is unique for (Qrc& qrc : this->Rcc.Qrcs) { diff --git a/Source/cmRemoveCommand.cxx b/Source/cmRemoveCommand.cxx index 8af13ae..65a2268 100644 --- a/Source/cmRemoveCommand.cxx +++ b/Source/cmRemoveCommand.cxx @@ -3,8 +3,8 @@ #include "cmRemoveCommand.h" #include "cmExecutionStatus.h" +#include "cmList.h" #include "cmMakefile.h" -#include "cmStringAlgorithms.h" #include "cmValue.h" // cmRemoveCommand @@ -25,12 +25,11 @@ bool cmRemoveCommand(std::vector<std::string> const& args, } // expand the variable - std::vector<std::string> const varArgsExpanded = cmExpandedList(*cacheValue); + cmList const varArgsExpanded{ *cacheValue }; // expand the args // check for REMOVE(VAR v1 v2 ... vn) - std::vector<std::string> const argsExpanded = - cmExpandedLists(args.begin() + 1, args.end()); + cmList const argsExpanded{ args.begin() + 1, args.end() }; // now create the new value std::string value; diff --git a/Source/cmSearchPath.cxx b/Source/cmSearchPath.cxx index d5f6f0d..2b992ef 100644 --- a/Source/cmSearchPath.cxx +++ b/Source/cmSearchPath.cxx @@ -9,6 +9,7 @@ #include <cm/optional> #include "cmFindCommon.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" @@ -71,7 +72,7 @@ void cmSearchPath::AddCMakePath(const std::string& variable) // Get a path from a CMake variable. if (cmValue value = this->FC->Makefile->GetDefinition(variable)) { - std::vector<std::string> expanded = cmExpandedList(*value); + cmList expanded{ *value }; for (std::string const& p : expanded) { this->AddPathInternal( @@ -95,7 +96,7 @@ void cmSearchPath::AddCMakePrefixPath(const std::string& variable) // Get a path from a CMake variable. if (cmValue value = this->FC->Makefile->GetDefinition(variable)) { - std::vector<std::string> expanded = cmExpandedList(*value); + cmList expanded{ *value }; this->AddPrefixPaths( expanded, this->FC->Makefile->GetCurrentSourceDirectory().c_str()); diff --git a/Source/cmStandardLevelResolver.cxx b/Source/cmStandardLevelResolver.cxx index d2eac0c..f6e8bc6 100644 --- a/Source/cmStandardLevelResolver.cxx +++ b/Source/cmStandardLevelResolver.cxx @@ -18,6 +18,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -349,7 +350,7 @@ struct StandardLevelComputer for (size_t i = 0; i < this->Levels.size(); ++i) { if (cmValue prop = makefile->GetDefinition( cmStrCat(prefix, this->LevelsAsStrings[i], "_COMPILE_FEATURES"))) { - std::vector<std::string> props = cmExpandedList(*prop); + cmList props{ *prop }; if (cm::contains(props, feature)) { maxLevel = { static_cast<int>(i), this->Levels[i] }; } @@ -468,7 +469,7 @@ bool cmStandardLevelResolver::CheckCompileFeaturesAvailable( return false; } - std::vector<std::string> availableFeatures = cmExpandedList(features); + cmList availableFeatures{ features }; if (!cm::contains(availableFeatures, feature)) { std::ostringstream e; e << "The compiler feature \"" << feature << "\" is not known to " << lang diff --git a/Source/cmStringAlgorithms.cxx b/Source/cmStringAlgorithms.cxx index 968dd3c..e352d8d 100644 --- a/Source/cmStringAlgorithms.cxx +++ b/Source/cmStringAlgorithms.cxx @@ -80,13 +80,6 @@ std::vector<std::string> cmTokenize(cm::string_view str, cm::string_view sep) return tokens; } -std::vector<std::string> cmExpandedList(cm::string_view arg, bool emptyArgs) -{ - std::vector<std::string> argsOut; - cmExpandList(arg, argsOut, emptyArgs); - return argsOut; -} - namespace { template <std::size_t N, typename T> inline void MakeDigits(cm::string_view& view, char (&digits)[N], diff --git a/Source/cmStringAlgorithms.h b/Source/cmStringAlgorithms.h index 20274e8..4ccbb8e 100644 --- a/Source/cmStringAlgorithms.h +++ b/Source/cmStringAlgorithms.h @@ -121,35 +121,6 @@ void cmExpandLists(InputIt first, InputIt last, cmList::append(first, last, argsOut); } -/** - * Same as cmExpandList but a new vector is created containing - * the expanded arguments from the string @a arg. - */ -std::vector<std::string> cmExpandedList(cm::string_view arg, - bool emptyArgs = false); -inline std::vector<std::string> cmExpandedList(cmValue arg, - bool emptyArgs = false) -{ - if (!arg) { - return {}; - } - return cmExpandedList(*arg, emptyArgs); -} - -/** - * Same as cmExpandList but a new vector is created containing the expanded - * versions of all arguments in the string range [@a first, @a last). - */ -template <class InputIt> -std::vector<std::string> cmExpandedLists(InputIt first, InputIt last) -{ - std::vector<std::string> argsOut; - for (; first != last; ++first) { - cmExpandList(*first, argsOut); - } - return argsOut; -} - /** Concatenate string pieces into a single string. */ std::string cmCatViews( std::initializer_list<std::pair<cm::string_view, std::string*>> views); diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 5e55871..4f14648 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -23,6 +23,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -92,7 +93,7 @@ cmValue cmTargetPropertyComputer::GetSources<cmTarget>(cmTarget const* tgt, std::ostringstream ss; const char* sep = ""; for (auto const& entry : entries) { - std::vector<std::string> files = cmExpandedList(entry.Value); + cmList files{ entry.Value }; for (std::string const& file : files) { if (cmHasLiteralPrefix(file, "$<TARGET_OBJECTS:") && file.back() == '>') { @@ -1115,7 +1116,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, if (globals) { const std::string genName = mf->GetGlobalGenerator()->GetName(); if (cmHasLiteralPrefix(genName, "Visual Studio")) { - std::vector<std::string> props = cmExpandedList(*globals); + cmList props{ *globals }; const std::string vsGlobal = "VS_GLOBAL_"; for (const std::string& i : props) { // split NAME=VALUE @@ -1428,7 +1429,7 @@ public: bool operator()(BT<std::string> const& entry) { - std::vector<std::string> files = cmExpandedList(entry.Value); + cmList files{ entry.Value }; std::vector<cmSourceFileLocation> locations; locations.reserve(files.size()); std::transform(files.begin(), files.end(), std::back_inserter(locations), @@ -2967,7 +2968,7 @@ std::vector<std::string> cmTarget::GetAllInterfaceFileSets() const auto appendEntries = [=](const std::vector<BT<std::string>>& entries) { for (auto const& entry : entries) { - auto expanded = cmExpandedList(entry.Value); + cmList expanded{ entry.Value }; std::copy(expanded.begin(), expanded.end(), inserter); } }; diff --git a/Source/cmTargetSourcesCommand.cxx b/Source/cmTargetSourcesCommand.cxx index 53e25b5..cd7ff74 100644 --- a/Source/cmTargetSourcesCommand.cxx +++ b/Source/cmTargetSourcesCommand.cxx @@ -13,6 +13,7 @@ #include "cmExperimental.h" #include "cmFileSet.h" #include "cmGeneratorExpression.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmMakefile.h" #include "cmMessageType.h" @@ -320,7 +321,7 @@ bool TargetSourcesImpl::HandleOneFileSet( fileSet.first->AddDirectoryEntry( BT<std::string>(baseDirectories, this->Makefile->GetBacktrace())); if (type == "HEADERS"_s || type == "CXX_MODULE_HEADER_UNITS"_s) { - for (auto const& dir : cmExpandedList(baseDirectories)) { + for (auto const& dir : cmList{ baseDirectories }) { auto interfaceDirectoriesGenex = cmStrCat("$<BUILD_INTERFACE:", dir, ">"); if (cmFileSetVisibilityIsForSelf(visibility)) { diff --git a/Source/cmTestGenerator.cxx b/Source/cmTestGenerator.cxx index 5e325dd..c4a2bc2 100644 --- a/Source/cmTestGenerator.cxx +++ b/Source/cmTestGenerator.cxx @@ -13,6 +13,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" @@ -147,16 +148,15 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os, } // Evaluate command line arguments - std::vector<std::string> argv = - this->EvaluateCommandLineArguments(this->Test->GetCommand(), ge, config); - - // Expand arguments if COMMAND_EXPAND_LISTS is set - if (this->Test->GetCommandExpandLists()) { - argv = cmExpandedLists(argv.begin(), argv.end()); - // Expanding lists on an empty command may have left it empty - if (argv.empty()) { - argv.emplace_back(); - } + cmList argv{ + this->EvaluateCommandLineArguments(this->Test->GetCommand(), ge, config), + // Expand arguments if COMMAND_EXPAND_LISTS is set + this->Test->GetCommandExpandLists() ? cmList::ExpandElements::Yes + : cmList::ExpandElements::No + }; + // Expanding lists on an empty command may have left it empty + if (argv.empty()) { + argv.emplace_back(); } // Check whether the command executable is a target whose name is to @@ -170,7 +170,7 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os, // Prepend with the emulator when cross compiling if required. cmValue emulator = target->GetProperty("CROSSCOMPILING_EMULATOR"); if (cmNonempty(emulator)) { - std::vector<std::string> emulatorWithArgs = cmExpandedList(*emulator); + cmList emulatorWithArgs{ *emulator }; std::string emulatorExe(emulatorWithArgs[0]); cmSystemTools::ConvertToUnixSlashes(emulatorExe); os << cmOutputConverter::EscapeForCMake(emulatorExe) << " "; diff --git a/Source/cmTryRunCommand.cxx b/Source/cmTryRunCommand.cxx index b648d9b..368155c 100644 --- a/Source/cmTryRunCommand.cxx +++ b/Source/cmTryRunCommand.cxx @@ -15,6 +15,7 @@ #include "cmCoreTryCompile.h" #include "cmDuration.h" #include "cmExecutionStatus.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageType.h" #include "cmRange.h" @@ -271,7 +272,7 @@ void TryRunCommandImpl::RunExecutable(const std::string& runArgs, const std::string& emulator = this->Makefile->GetSafeDefinition("CMAKE_CROSSCOMPILING_EMULATOR"); if (!emulator.empty()) { - std::vector<std::string> emulatorWithArgs = cmExpandedList(emulator); + cmList emulatorWithArgs{ emulator }; finalCommand += cmSystemTools::ConvertToRunCommandPath(emulatorWithArgs[0]); finalCommand += " "; diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 8926f9e..6266328 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -31,6 +31,7 @@ #include "cmGlobalVisualStudio7Generator.h" #include "cmGlobalVisualStudioGenerator.h" #include "cmLinkLineDeviceComputer.h" +#include "cmList.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmLocalVisualStudio10Generator.h" @@ -1167,7 +1168,7 @@ void cmVisualStudio10TargetGenerator::WriteImports(Elem& e0) cmValue imports = this->GeneratorTarget->Target->GetProperty("VS_PROJECT_IMPORT"); if (imports) { - std::vector<std::string> argsSplit = cmExpandedList(*imports, false); + cmList argsSplit{ *imports }; for (auto& path : argsSplit) { if (!cmsys::SystemTools::FileIsFullPath(path)) { path = this->Makefile->GetCurrentSourceDirectory() + "/" + path; @@ -2113,8 +2114,8 @@ void cmVisualStudio10TargetGenerator::ParseSettingsProperty( for (const std::string& config : this->Configurations) { std::string evaluated = cge->Evaluate(this->LocalGenerator, config); - std::vector<std::string> settings = cmExpandedList(evaluated); - for (const std::string& setting : settings) { + cmList settings{ evaluated }; + for (const auto& setting : settings) { const std::string::size_type assignment = setting.find('='); if (assignment != std::string::npos) { const std::string propName = setting.substr(0, assignment); @@ -2714,16 +2715,11 @@ void cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags( if (lang == "ASM_NASM") { if (cmValue objectDeps = sf.GetProperty("OBJECT_DEPENDS")) { - std::string dependencies; - std::vector<std::string> depends = cmExpandedList(*objectDeps); - const char* sep = ""; - for (std::string& d : depends) { + cmList depends{ *objectDeps }; + for (auto& d : depends) { ConvertToWindowsSlash(d); - dependencies += sep; - dependencies += d; - sep = ";"; } - e2.Element("AdditionalDependencies", dependencies); + e2.Element("AdditionalDependencies", depends.join(";")); } } diff --git a/Source/cmXCodeScheme.cxx b/Source/cmXCodeScheme.cxx index e727d22..7f26fd8 100644 --- a/Source/cmXCodeScheme.cxx +++ b/Source/cmXCodeScheme.cxx @@ -13,6 +13,7 @@ #include "cmGeneratedFileStream.h" #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" +#include "cmList.h" #include "cmStateTypes.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" @@ -270,7 +271,7 @@ void cmXCodeScheme::WriteLaunchAction(cmXMLWriter& xout, if (cmValue argList = this->Target->GetTarget()->GetProperty("XCODE_SCHEME_ARGUMENTS")) { - std::vector<std::string> arguments = cmExpandedList(*argList); + cmList arguments{ *argList }; if (!arguments.empty()) { xout.StartElement("CommandLineArguments"); @@ -290,7 +291,7 @@ void cmXCodeScheme::WriteLaunchAction(cmXMLWriter& xout, if (cmValue envList = this->Target->GetTarget()->GetProperty("XCODE_SCHEME_ENVIRONMENT")) { - std::vector<std::string> envs = cmExpandedList(*envList); + cmList envs{ *envList }; if (!envs.empty()) { xout.StartElement("EnvironmentVariables"); diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 8dee5cc..623478e 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -53,6 +53,7 @@ # include "cmMakefileProfilingData.h" #endif #include "cmJSONState.h" +#include "cmList.h" #include "cmMessenger.h" #include "cmState.h" #include "cmStateDirectory.h" @@ -813,7 +814,7 @@ bool cmake::FindPackage(const std::vector<std::string>& args) } } else if (mode == "COMPILE"_s) { std::string includes = mf->GetSafeDefinition("PACKAGE_INCLUDE_DIRS"); - std::vector<std::string> includeDirs = cmExpandedList(includes); + cmList includeDirs{ includes }; this->GlobalGenerator->CreateGenerationObjects(); const auto& lg = this->GlobalGenerator->LocalGenerators[0]; @@ -829,7 +830,7 @@ bool cmake::FindPackage(const std::vector<std::string>& args) tgt->SetProperty("LINKER_LANGUAGE", language); std::string libs = mf->GetSafeDefinition("PACKAGE_LIBRARIES"); - std::vector<std::string> libList = cmExpandedList(libs); + cmList libList{ libs }; for (std::string const& lib : libList) { tgt->AddLinkLibrary(*mf, lib, GENERAL_LibraryType); } @@ -1026,7 +1027,7 @@ void cmake::SetArgs(const std::vector<std::string>& args) CommandArgument{ "--check-build-system", CommandArgument::Values::Two, [](std::string const& value, cmake* state) -> bool { - std::vector<std::string> values = cmExpandedList(value); + cmList values{ value }; state->CheckBuildSystemArgument = values[0]; state->ClearBuildSystem = (atoi(values[1].c_str()) > 0); return true; @@ -2163,7 +2164,7 @@ struct SaveCacheEntry int cmake::HandleDeleteCacheVariables(const std::string& var) { - std::vector<std::string> argsSplit = cmExpandedList(var, true); + cmList argsSplit{ var, cmList::EmptyElements::Yes }; // erase the property to avoid infinite recursion this->State->SetGlobalProperty("__CMAKE_DELETE_CACHE_CHANGE_VARS_", ""); if (this->GetIsInTryCompile()) { diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx index f4e602b..ad27443 100644 --- a/Source/cmakemain.cxx +++ b/Source/cmakemain.cxx @@ -26,6 +26,7 @@ #include "cmConsoleBuf.h" #include "cmDocumentationEntry.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmMakefile.h" #include "cmMessageMetadata.h" #include "cmState.h" @@ -457,7 +458,7 @@ int do_build(int ac, char const* const* av) }; auto targetLambda = [&](std::string const& value) -> bool { if (!value.empty()) { - std::vector<std::string> values = cmExpandedList(value); + cmList values{ value }; for (auto const& v : values) { targets.emplace_back(v); if (v == "clean") { diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index a2a9e09..036ddc6 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -14,6 +14,7 @@ #include "cmConsoleBuf.h" #include "cmDuration.h" #include "cmGlobalGenerator.h" +#include "cmList.h" #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmQtAutoMocUic.h" @@ -342,7 +343,7 @@ int HandleIWYU(const std::string& runCmd, const std::string& /* sourceFile */, { // Construct the iwyu command line by taking what was given // and adding all the arguments we give to the compiler. - std::vector<std::string> iwyu_cmd = cmExpandedList(runCmd, true); + cmList iwyu_cmd{ runCmd, cmList::EmptyElements::Yes }; cm::append(iwyu_cmd, orig_cmd.begin() + 1, orig_cmd.end()); // Run the iwyu command line. Capture its stderr and hide its stdout. // Ignore its return code because the tool always returns non-zero. @@ -366,7 +367,7 @@ int HandleIWYU(const std::string& runCmd, const std::string& /* sourceFile */, int HandleTidy(const std::string& runCmd, const std::string& sourceFile, const std::vector<std::string>& orig_cmd) { - std::vector<std::string> tidy_cmd = cmExpandedList(runCmd, true); + cmList tidy_cmd{ runCmd, cmList::EmptyElements::Yes }; tidy_cmd.push_back(sourceFile); for (auto const& arg : tidy_cmd) { @@ -416,7 +417,7 @@ int HandleLWYU(const std::string& runCmd, const std::string& sourceFile, { // Construct the ldd -r -u (link what you use lwyu) command line // ldd -u -r lwuy target - std::vector<std::string> lwyu_cmd = cmExpandedList(runCmd, true); + cmList lwyu_cmd{ runCmd, cmList::EmptyElements::Yes }; lwyu_cmd.push_back(sourceFile); // Run the lwyu check command line, currently ldd is expected. @@ -444,7 +445,7 @@ int HandleCppLint(const std::string& runCmd, const std::string& sourceFile, const std::vector<std::string>&) { // Construct the cpplint command line. - std::vector<std::string> cpplint_cmd = cmExpandedList(runCmd, true); + cmList cpplint_cmd{ runCmd, cmList::EmptyElements::Yes }; cpplint_cmd.push_back(sourceFile); // Run the cpplint command line. Capture its output. @@ -471,7 +472,7 @@ int HandleCppCheck(const std::string& runCmd, const std::string& sourceFile, const std::vector<std::string>& orig_cmd) { // Construct the cpplint command line. - std::vector<std::string> cppcheck_cmd = cmExpandedList(runCmd, true); + cmList cppcheck_cmd{ runCmd, cmList::EmptyElements::Yes }; // extract all the -D, -U, and -I options from the compile line for (auto const& opt : orig_cmd) { if (opt.size() > 2) { diff --git a/Tests/RunCMake/CTestResourceAllocation/ctresalloc.cxx b/Tests/RunCMake/CTestResourceAllocation/ctresalloc.cxx index 65f17b6..2824fbf 100644 --- a/Tests/RunCMake/CTestResourceAllocation/ctresalloc.cxx +++ b/Tests/RunCMake/CTestResourceAllocation/ctresalloc.cxx @@ -19,6 +19,7 @@ #include "cmCTestTestHandler.h" #include "cmFileLock.h" #include "cmFileLockResult.h" +#include "cmList.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" @@ -282,7 +283,7 @@ static int doVerify(int argc, char const* const* argv) if (argc == 5) { testNames = argv[4]; } - auto testNameList = cmExpandedList(testNames, false); + cmList testNameList{ testNames }; std::set<std::string> testNameSet(testNameList.begin(), testNameList.end()); cmCTestResourceSpec spec; |