From 417ce421010dd1dd26dc362c8d4e3451f16182a3 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 18 Jan 2022 14:03:20 +0300 Subject: Temporary support requirements similar to '? cli' --- libbpkg/manifest.cxx | 16 +++++++++++++++- tests/manifest/testscript | 24 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx index 6a5ce25..88d4a87 100644 --- a/libbpkg/manifest.cxx +++ b/libbpkg/manifest.cxx @@ -1989,9 +1989,23 @@ namespace bpkg if (requirements_ && first && tt == type::question) { r.emplace_back (dependency ()); - r.enable = lexer_->peek_char () == '(' ? parse_eval () : string (); + + bool eval (lexer_->peek_char () == '('); + r.enable = eval ? parse_eval () : string (); next (t, tt); + + // @@ TMP Treat requirements similar to `? cli` as `cli ?` until + // toolchain 0.15.0 and ODB 2.5.0-b.22 are both released. + // + if (!eval && tt == type::word) + try + { + r.back ().name = package_name (move (t.value)); + next (t, tt); + } + catch (const invalid_argument&) {} + return r; } diff --git a/tests/manifest/testscript b/tests/manifest/testscript index 9f8a476..dccc053 100644 --- a/tests/manifest/testscript +++ b/tests/manifest/testscript @@ -2850,6 +2850,29 @@ stdin:6:13: error: end of simple requirement expected EOE + # @@ TMP Drop this test and uncomment the next one when toolchain 0.15.0 + # is released (see dependency_alternatives_parser::parse_alternative() + # for details). + # + : old-fashioned + : + $* <>EOO + : 1 + name: foo + version: 2.0.0 + summary: Modern C++ parser + license: LGPLv2 + requires: ? vc15; VC 15 or later if targeting Windows. + EOI + : 1 + name: foo + version: 2.0.0 + summary: Modern C++ parser + license: LGPLv2 + requires: vc15 ? ; VC 15 or later if targeting Windows. + EOO + + #\ : reflect : $* <>EOE != 0 @@ -2862,6 +2885,7 @@ EOI stdin:6:13: error: end of simple requirement expected EOE + #\ : with-id : -- cgit v1.1