aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbpkg/manifest.cxx19
-rw-r--r--libbpkg/manifest.hxx6
2 files changed, 25 insertions, 0 deletions
diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx
index 82a11f3..637d0ae 100644
--- a/libbpkg/manifest.cxx
+++ b/libbpkg/manifest.cxx
@@ -3240,6 +3240,25 @@ namespace bpkg
return r;
}
+ // distribution_name_value
+ //
+ optional<string> distribution_name_value::
+ distribution (const string& s) const
+ {
+ size_t sn (s.size ());
+ size_t nn (name.size ());
+
+ if (nn > sn && name.compare (nn - sn, sn, s) == 0)
+ {
+ size_t p (name.find ('-'));
+
+ if (p == nn - sn)
+ return string (name, 0, p);
+ }
+
+ return nullopt;
+ }
+
// pkg_package_manifest
//
static build_class_expr
diff --git a/libbpkg/manifest.hxx b/libbpkg/manifest.hxx
index 757fc92..055cb7e 100644
--- a/libbpkg/manifest.hxx
+++ b/libbpkg/manifest.hxx
@@ -1156,6 +1156,12 @@ namespace bpkg
distribution_name_value (std::string n, std::string v)
: name (std::move (n)),
value (std::move (v)) {}
+
+ // Return the name's <distribution> component if the name has the
+ // specified suffix, which is assumed to be valid (-name, etc).
+ //
+ butl::optional<std::string>
+ distribution (const std::string& suffix) const;
};
class LIBBPKG_EXPORT package_manifest