diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2017-06-17 02:39:14 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2017-06-20 09:36:21 -0700 |
| commit | 8741214bf69d1209a1e6d405ed8561d27f04436a (patch) | |
| tree | 85325eb4b2d2c1c15eb8bd58426dac5462242d4e /toolsrc/src/vcpkg_Build.cpp | |
| parent | 8c4d55b8f304c74aeb95878cfe354830ff4abc88 (diff) | |
| download | vcpkg-8741214bf69d1209a1e6d405ed8561d27f04436a.tar.gz vcpkg-8741214bf69d1209a1e6d405ed8561d27f04436a.zip | |
[vcpkg] Use unique_ptr<> for paragraphs. Post-parser phase rework.
Diffstat (limited to 'toolsrc/src/vcpkg_Build.cpp')
| -rw-r--r-- | toolsrc/src/vcpkg_Build.cpp | 83 |
1 files changed, 39 insertions, 44 deletions
diff --git a/toolsrc/src/vcpkg_Build.cpp b/toolsrc/src/vcpkg_Build.cpp index 0ca6dc243..a73d59910 100644 --- a/toolsrc/src/vcpkg_Build.cpp +++ b/toolsrc/src/vcpkg_Build.cpp @@ -11,7 +11,6 @@ #include "vcpkg_System.h" #include "vcpkg_optional.h" #include "vcpkglib.h" -#include "vcpkglib_helpers.h" namespace vcpkg::Build { @@ -218,56 +217,52 @@ namespace vcpkg::Build static BuildInfo inner_create_buildinfo(std::unordered_map<std::string, std::string> pgh) { + Parse::ParagraphParser parser(std::move(pgh)); + BuildInfo build_info; - const std::string crt_linkage_as_string = - details::remove_required_field(&pgh, BuildInfoRequiredField::CRT_LINKAGE); - - auto crtlinkage = to_linkage_type(crt_linkage_as_string); - if (auto p = crtlinkage.get()) - build_info.crt_linkage = *p; - else - Checks::exit_with_message(VCPKG_LINE_INFO, "Invalid crt linkage type: [%s]", crt_linkage_as_string); - - const std::string library_linkage_as_string = - details::remove_required_field(&pgh, BuildInfoRequiredField::LIBRARY_LINKAGE); - auto liblinkage = to_linkage_type(library_linkage_as_string); - if (auto p = liblinkage.get()) - build_info.library_linkage = *p; - else - Checks::exit_with_message(VCPKG_LINE_INFO, "Invalid library linkage type: [%s]", library_linkage_as_string); - - auto it_version = pgh.find("Version"); - if (it_version != pgh.end()) + { - build_info.version = it_version->second; - pgh.erase(it_version); + std::string crt_linkage_as_string; + parser.required_field(BuildInfoRequiredField::CRT_LINKAGE, crt_linkage_as_string); + + auto crtlinkage = to_linkage_type(crt_linkage_as_string); + if (auto p = crtlinkage.get()) + build_info.crt_linkage = *p; + else + Checks::exit_with_message(VCPKG_LINE_INFO, "Invalid crt linkage type: [%s]", crt_linkage_as_string); } - std::map<BuildPolicy, bool> policies; + { + std::string library_linkage_as_string; + parser.required_field(BuildInfoRequiredField::LIBRARY_LINKAGE, library_linkage_as_string); + auto liblinkage = to_linkage_type(library_linkage_as_string); + if (auto p = liblinkage.get()) + build_info.library_linkage = *p; + else + Checks::exit_with_message( + VCPKG_LINE_INFO, "Invalid library linkage type: [%s]", library_linkage_as_string); + } + build_info.version = parser.optional_field("Version"); - // The remaining entries are policies - for (const std::unordered_map<std::string, std::string>::value_type& p : pgh) + std::map<BuildPolicy, bool> policies; + for (auto policy : g_all_policies) { - auto maybe_policy = to_build_policy(p.first); - if (auto policy = maybe_policy.get()) - { - Checks::check_exit(VCPKG_LINE_INFO, - policies.find(*policy) == policies.end(), - "Policy specified multiple times: %s", - p.first); - - if (p.second == "enabled") - policies.emplace(*policy, true); - else if (p.second == "disabled") - policies.emplace(*policy, false); - else - Checks::exit_with_message( - VCPKG_LINE_INFO, "Unknown setting for policy '%s': %s", p.first, p.second); - } + const auto setting = parser.optional_field(to_string(policy)); + if (setting.empty()) + continue; + else if (setting == "enabled") + policies.emplace(policy, true); + else if (setting == "disabled") + policies.emplace(policy, false); else - { - Checks::exit_with_message(VCPKG_LINE_INFO, "Unknown policy found: %s", p.first); - } + Checks::exit_with_message( + VCPKG_LINE_INFO, "Unknown setting for policy '%s': %s", to_string(policy), setting); + } + + if (auto err = parser.error_info("PostBuildInformation")) + { + print_error_message(err); + Checks::exit_fail(VCPKG_LINE_INFO); } build_info.policies = BuildPolicies(std::move(policies)); |
