diff --git a/lib/Pkgcraft/Version.pm b/lib/Pkgcraft/Version.pm index 751fbce..bb80c82 100644 --- a/lib/Pkgcraft/Version.pm +++ b/lib/Pkgcraft/Version.pm @@ -60,6 +60,12 @@ package Pkgcraft::Version { return; } + sub parse { + my $str = shift // die "missing version string"; + my $ptr = C::pkgcraft_version_parse($str); + return (defined $ptr) + } + sub revision { my $self = shift; my $ptr = C::pkgcraft_version_revision($self->{_ptr}); diff --git a/lib/_pkgcraft_c.pm b/lib/_pkgcraft_c.pm index bafc497..b99b2cd 100644 --- a/lib/_pkgcraft_c.pm +++ b/lib/_pkgcraft_c.pm @@ -131,6 +131,7 @@ $ffi->attach('pkgcraft_version_intersects' => ['version_t', 'version_t'] => 'boo $ffi->attach('pkgcraft_version_new' => ['string'] => 'version_t'); $ffi->attach('pkgcraft_version_revision' => ['version_t'] => 'revision_t'); $ffi->attach('pkgcraft_version_str' => ['version_t'] => 'c_str'); +$ffi->attach('pkgcraft_version_parse' => ['string'] => 'opaque'); # revision support $ffi->attach('pkgcraft_revision_cmp' => ['revision_t', 'revision_t'] => 'int'); diff --git a/t/Pkgcraft/Version.t b/t/Pkgcraft/Version.t index f7f2e18..607d265 100644 --- a/t/Pkgcraft/Version.t +++ b/t/Pkgcraft/Version.t @@ -31,6 +31,12 @@ ok(dies { Pkgcraft::Version->new("-2") }); ok(dies { $ver == "1-r2" }); ok(dies { Pkgcraft::Version->new(">1-r2") == ">1-r2" }); +# valid +foreach my $str (@{$VERSION_DATA->{"valid"}}) { + ok(Pkgcraft::Version->new($str)) + ok(Pkgcraft::Version->valid($str)) +} + # version comparisons foreach my $str (@{$VERSION_DATA->{"compares"}}) { my ($s1, $op, $s2) = split ' ', $str;