#pragma once #include "Span.h" #include "vcpkg_Parse.h" #include "vcpkg_System.h" #include "vcpkg_expected.h" #include #include #include namespace vcpkg { extern bool g_feature_packages; struct Triplet; struct Features { std::string name; std::vector features; }; Features parse_feature_list(const std::string& name); struct Dependency { Features depend; std::string qualifier; std::string name() const; static Dependency parse_dependency(std::string name, std::string qualifier); }; const std::string to_string(const Dependency& dep); struct FeatureParagraph { std::string name; std::string description; std::vector depends; }; /// /// Port metadata (CONTROL file) /// struct SourceParagraph { std::string name; std::string version; std::string description; std::string maintainer; std::vector supports; std::vector depends; std::vector default_features; }; struct SourceControlFile { static Parse::ParseExpected parse_control_file( std::vector&& control_paragraphs); std::unique_ptr core_paragraph; std::vector> feature_paragraphs; }; void print_error_message(span> error_info_list); inline void print_error_message(const std::unique_ptr& error_info_list) { return print_error_message({&error_info_list, 1}); } std::vector filter_dependencies(const std::vector& deps, const Triplet& t); // zlib[uwp] becomes Dependency{"zlib", "uwp"} std::vector expand_qualified_dependencies(const std::vector& depends); std::vector parse_comma_list(const std::string& str); struct Supports { static ExpectedT> parse(const std::vector& strs); using Architecture = System::CPUArchitecture; enum class Platform { WINDOWS, UWP, }; enum class Linkage { DYNAMIC, STATIC, }; enum class ToolsetVersion { V140, V141, }; bool is_supported(Architecture arch, Platform plat, Linkage crt, ToolsetVersion tools); private: std::vector architectures; std::vector platforms; std::vector crt_linkages; std::vector toolsets; }; }