aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbpkg/manifest.cxx18
-rw-r--r--tests/manifest/testscript43
2 files changed, 61 insertions, 0 deletions
diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx
index 4a104f4..3df1726 100644
--- a/libbpkg/manifest.cxx
+++ b/libbpkg/manifest.cxx
@@ -2006,7 +2006,25 @@ namespace bpkg
list_parser lp (vc.first.begin (), vc.first.end ());
for (string lv (lp.next ()); !lv.empty (); lv = lp.next ())
+ {
+ // Reserve the license schemes for the future use and only recognize
+ // the 'other' scheme for now, if specified. By default, the 'spdx'
+ // scheme is implied.
+ //
+ // Note that if the substring that precedes ':' contains the
+ // 'DocumentRef-' substring, then this is not a license scheme but
+ // the license is a SPDX License Expression (see SPDX user defined
+ // license reference for details).
+ //
+ size_t p (lv.find (':'));
+
+ if (p != string::npos &&
+ lv.find ("DocumentRef-") > p &&
+ lv.compare (0, p, "other") != 0)
+ bad_value ("invalid package license scheme");
+
l.push_back (move (lv));
+ }
if (l.empty ())
bad_value ("empty package license specification");
diff --git a/tests/manifest/testscript b/tests/manifest/testscript
index a271a74..3d6b060 100644
--- a/tests/manifest/testscript
+++ b/tests/manifest/testscript
@@ -102,6 +102,49 @@
EOE
}
+ : license
+ :
+ {
+ : no-scheme
+ :
+ $* <<EOF >>EOF
+ : 1
+ name: libfoo
+ version: 2.0.0
+ summary: Modern C++ parser
+ license: MIT
+ EOF
+
+ : other-scheme
+ :
+ $* <<EOF >>EOF
+ : 1
+ name: libfoo
+ version: 2.0.0
+ summary: Modern C++ parser
+ license: other:proprietary
+ EOF
+
+ : user-defined
+ :
+ $* <<EOF >>EOF
+ : 1
+ name: libfoo
+ version: 2.0.0
+ summary: Modern C++ parser
+ license: DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-2; MIT-alike
+ EOF
+
+ : invalid-scheme
+ :
+ $* <<EOI 2>>EOE != 0
+ : 1
+ license: custom:proprietary
+ EOI
+ stdin:2:10: error: invalid package license scheme
+ EOE
+ }
+
: topics
:
{