diff options
author | Sebastian Holtermann <sebholt@xwmw.org> | 2017-08-31 14:03:52 (GMT) |
---|---|---|
committer | Sebastian Holtermann <sebholt@xwmw.org> | 2017-09-07 15:53:19 (GMT) |
commit | 761b3d79746ab91219d6478a021ba3a1c56f05c8 (patch) | |
tree | 1c6891affc7c5a75590295934c6860ce4823bf45 /Source | |
parent | 84658539bca3d0d45873872007b01a45712ba621 (diff) | |
download | CMake-761b3d79746ab91219d6478a021ba3a1c56f05c8.zip CMake-761b3d79746ab91219d6478a021ba3a1c56f05c8.tar.gz CMake-761b3d79746ab91219d6478a021ba3a1c56f05c8.tar.bz2 |
Autogen: Add functions to read/write a list of lists
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmQtAutoGeneratorInitializer.cxx | 16 | ||||
-rw-r--r-- | Source/cmQtAutoGenerators.cxx | 37 |
2 files changed, 53 insertions, 0 deletions
diff --git a/Source/cmQtAutoGeneratorInitializer.cxx b/Source/cmQtAutoGeneratorInitializer.cxx index d04e5b7..0333a55 100644 --- a/Source/cmQtAutoGeneratorInitializer.cxx +++ b/Source/cmQtAutoGeneratorInitializer.cxx @@ -207,6 +207,22 @@ static void AddDefinitionEscaped(cmMakefile* makefile, const char* key, key, cmOutputConverter::EscapeForCMake(cmJoin(values, ";")).c_str()); } +static void AddDefinitionEscaped( + cmMakefile* makefile, const char* key, + const std::vector<std::vector<std::string>>& lists) +{ + std::vector<std::string> seplist; + for (const std::vector<std::string>& list : lists) { + std::string blist = "{"; + blist += cmJoin(list, ";"); + blist += "}"; + seplist.push_back(std::move(blist)); + } + makefile->AddDefinition(key, cmOutputConverter::EscapeForCMake( + cmJoin(seplist, cmQtAutoGen::listSep)) + .c_str()); +} + static bool AddToSourceGroup(cmMakefile* makefile, const std::string& fileName, cmQtAutoGen::GeneratorType genType) { diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx index 7774a00..3369f65 100644 --- a/Source/cmQtAutoGenerators.cxx +++ b/Source/cmQtAutoGenerators.cxx @@ -75,6 +75,43 @@ static void InfoGet(cmMakefile* makefile, const char* key, cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition(key), list); } +static std::vector<std::string> InfoGetList(cmMakefile* makefile, + const char* key) +{ + std::vector<std::string> list; + cmSystemTools::ExpandListArgument(makefile->GetSafeDefinition(key), list); + return list; +} + +static std::vector<std::vector<std::string>> InfoGetLists(cmMakefile* makefile, + const char* key) +{ + std::vector<std::vector<std::string>> lists; + { + const std::string value = makefile->GetSafeDefinition(key); + std::string::size_type pos = 0; + while (pos < value.size()) { + std::string::size_type next = value.find(cmQtAutoGen::listSep, pos); + std::string::size_type length = + (next != std::string::npos) ? next - pos : value.size() - pos; + // Remove enclosing braces + if (length >= 2) { + std::string::const_iterator itBeg = value.begin() + (pos + 1); + std::string::const_iterator itEnd = itBeg + (length - 2); + { + std::string subValue(itBeg, itEnd); + std::vector<std::string> list; + cmSystemTools::ExpandListArgument(subValue, list); + lists.push_back(std::move(list)); + } + } + pos += length; + pos += cmQtAutoGen::listSep.size(); + } + } + return lists; +} + static void InfoGetConfig(cmMakefile* makefile, const char* key, const std::string& config, std::string& value) { |