diff options
-rw-r--r-- | bpkg/manifest | 10 | ||||
-rw-r--r-- | bpkg/manifest.cxx | 28 |
2 files changed, 33 insertions, 5 deletions
diff --git a/bpkg/manifest b/bpkg/manifest index 8f5d975..0c7c693 100644 --- a/bpkg/manifest +++ b/bpkg/manifest @@ -237,16 +237,19 @@ namespace bpkg inline std::ostream& operator<< (std::ostream& os, comparison c) {return os << to_string (c);} - struct dependency_condition + struct dependency_constraint { comparison operation; bpkg::version version; }; + std::ostream& + operator<< (std::ostream&, const dependency_constraint&); + struct dependency { std::string name; - butl::optional<dependency_condition> condition; + butl::optional<dependency_constraint> constraint; }; std::ostream& @@ -263,6 +266,9 @@ namespace bpkg : conditional (d), comment (std::move (c)) {} }; + std::ostream& + operator<< (std::ostream&, const dependency_alternatives&); + // requires // class requirement_alternatives: public strings diff --git a/bpkg/manifest.cxx b/bpkg/manifest.cxx index cc0065b..771cfaa 100644 --- a/bpkg/manifest.cxx +++ b/bpkg/manifest.cxx @@ -384,13 +384,35 @@ namespace bpkg else throw invalid_argument ("invalid comparion operator '" + s + "'"); } + inline ostream& + operator<< (ostream& o, const dependency_constraint& c) + { + return o << c.operation << ' ' << c.version; + } + ostream& operator<< (ostream& o, const dependency& d) { o << d.name; - if (d.condition) - o << " " << d.condition->operation << " " << d.condition->version; + if (d.constraint) + o << ' ' << *d.constraint; + + return o; + } + + ostream& + operator<< (ostream& o, const dependency_alternatives& as) + { + if (as.conditional) + o << "? "; + + bool f (true); + for (const dependency& a: as) + o << (f ? (f = false, "") : " | ") << a; + + if (!as.comment.empty ()) + o << "; " << as.comment; return o; } @@ -726,7 +748,7 @@ namespace bpkg } dependency d {move (nm), - dependency_condition {operation, move (v)}}; + dependency_constraint {operation, move (v)}}; da.push_back (move (d)); } } |