From bca0988023a8c7bfc896d0f5787eb02e74c6fb59 Mon Sep 17 00:00:00 2001 From: Daniel Shaw Date: Mon, 19 Jun 2017 15:06:15 -0700 Subject: [vcpkg] feature packages initial parsing --- toolsrc/src/SourceParagraph.cpp | 62 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 5 deletions(-) (limited to 'toolsrc/src/SourceParagraph.cpp') diff --git a/toolsrc/src/SourceParagraph.cpp b/toolsrc/src/SourceParagraph.cpp index 3b770a4b4..a938feb99 100644 --- a/toolsrc/src/SourceParagraph.cpp +++ b/toolsrc/src/SourceParagraph.cpp @@ -12,7 +12,7 @@ namespace vcpkg { - // + bool g_feature_packages = false; namespace SourceParagraphRequiredField { static const std::string SOURCE = "Source"; @@ -25,6 +25,7 @@ namespace vcpkg static const std::string MAINTAINER = "Maintainer"; static const std::string BUILD_DEPENDS = "Build-Depends"; static const std::string SUPPORTS = "Supports"; + static const std::string DEFAULTFEATURES = "Default-Features"; } static span get_list_of_valid_fields() @@ -40,6 +41,17 @@ namespace vcpkg return valid_fields; } + namespace FeatureParagraphRequiredField + { + static const std::string FEATURE = "Feature"; + } + + namespace FeatureParagraphOptionalField + { + static const std::string DESCRIPTION = "Description"; + static const std::string BUILD_DEPENDS = "Build-Depends"; + } + void print_error_message(span error_info_list) { Checks::check_exit(VCPKG_LINE_INFO, error_info_list.size() > 0); @@ -74,11 +86,22 @@ namespace vcpkg System::println("Different source may be available for vcpkg. Use .\\bootstrap-vcpkg.bat to update.\n"); } } + std::vector getSourceParagraphs(const std::vector& control_files) + { + return Util::fmap(control_files, [](const SourceControlFile& x) { return x.core_paragraph; }); + } - ExpectedT SourceParagraph::parse_control_file( - std::unordered_map fields) + ExpectedT SourceControlFile::parse_control_file( + std::vector>&& control_paragraphs) { - SourceParagraph sparagraph; + if (control_paragraphs.size() == 0) + { + return ExpectedT(); + } + auto&& fields = control_paragraphs.front(); + + SourceControlFile control_file; + SourceParagraph& sparagraph = control_file.core_paragraph; sparagraph.name = details::remove_required_field(&fields, SourceParagraphRequiredField::SOURCE); sparagraph.version = details::remove_required_field(&fields, SourceParagraphRequiredField::VERSION); sparagraph.description = details::remove_optional_field(&fields, SourceParagraphOptionalField::DESCRIPTION); @@ -90,6 +113,9 @@ namespace vcpkg std::string sups = details::remove_optional_field(&fields, SourceParagraphOptionalField::SUPPORTS); sparagraph.supports = parse_comma_list(sups); + sparagraph.default_features = + details::remove_optional_field(&fields, SourceParagraphOptionalField::DEFAULTFEATURES); + if (!fields.empty()) { const std::vector remaining_fields = Maps::extract_keys(fields); @@ -98,7 +124,33 @@ namespace vcpkg return ParseControlErrorInfo{sparagraph.name, remaining_fields_as_string}; } - return sparagraph; + + control_paragraphs.erase(control_paragraphs.begin()); + + for (auto&& feature_pgh : control_paragraphs) + { + control_file.feature_paragraphs.emplace_back(std::make_unique()); + + FeatureParagraph& fparagraph = *control_file.feature_paragraphs.back(); + + fparagraph.name = details::remove_required_field(&feature_pgh, FeatureParagraphRequiredField::FEATURE); + fparagraph.description = + details::remove_required_field(&feature_pgh, FeatureParagraphOptionalField::DESCRIPTION); + std::string feature_deps = + details::remove_optional_field(&feature_pgh, FeatureParagraphOptionalField::BUILD_DEPENDS); + fparagraph.depends = expand_qualified_dependencies(parse_comma_list(feature_deps)); + + if (!feature_pgh.empty()) + { + const std::vector remaining_fields = Maps::extract_keys(feature_pgh); + + const std::string remaining_fields_as_string = Strings::join("\n ", remaining_fields); + + return ParseControlErrorInfo{sparagraph.name, remaining_fields_as_string}; + } + } + + return control_file; } std::vector vcpkg::expand_qualified_dependencies(const std::vector& depends) -- cgit v1.2.3