xref: /openbsd-src/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm (revision e068048151d29f2562a32185e21a8ba885482260)
1b8851fccSafresh1#--------------------------------------------------------------------------#
2b8851fccSafresh1# This is a modified copy of version.pm 0.9909, bundled exclusively for
3b8851fccSafresh1# use by ExtUtils::Makemaker and its dependencies to bootstrap when
4b8851fccSafresh1# version.pm is not available.  It should not be used by ordinary modules.
5b8851fccSafresh1#--------------------------------------------------------------------------#
6b8851fccSafresh1
7b8851fccSafresh1package ExtUtils::MakeMaker::version::regex;
8b8851fccSafresh1
9b8851fccSafresh1use strict;
10eac174f2Safresh1use warnings;
11b8851fccSafresh1
12b8851fccSafresh1use vars qw($VERSION $CLASS $STRICT $LAX);
13b8851fccSafresh1
14*e0680481Safresh1$VERSION = '7.70';
1556d68f1eSafresh1$VERSION =~ tr/_//d;
16b8851fccSafresh1
17b8851fccSafresh1#--------------------------------------------------------------------------#
18b8851fccSafresh1# Version regexp components
19b8851fccSafresh1#--------------------------------------------------------------------------#
20b8851fccSafresh1
21b8851fccSafresh1# Fraction part of a decimal version number.  This is a common part of
22b8851fccSafresh1# both strict and lax decimal versions
23b8851fccSafresh1
24b8851fccSafresh1my $FRACTION_PART = qr/\.[0-9]+/;
25b8851fccSafresh1
26b8851fccSafresh1# First part of either decimal or dotted-decimal strict version number.
27b8851fccSafresh1# Unsigned integer with no leading zeroes (except for zero itself) to
28b8851fccSafresh1# avoid confusion with octal.
29b8851fccSafresh1
30b8851fccSafresh1my $STRICT_INTEGER_PART = qr/0|[1-9][0-9]*/;
31b8851fccSafresh1
32b8851fccSafresh1# First part of either decimal or dotted-decimal lax version number.
33b8851fccSafresh1# Unsigned integer, but allowing leading zeros.  Always interpreted
34b8851fccSafresh1# as decimal.  However, some forms of the resulting syntax give odd
35b8851fccSafresh1# results if used as ordinary Perl expressions, due to how perl treats
36b8851fccSafresh1# octals.  E.g.
37b8851fccSafresh1#   version->new("010" ) == 10
38b8851fccSafresh1#   version->new( 010  ) == 8
39b8851fccSafresh1#   version->new( 010.2) == 82  # "8" . "2"
40b8851fccSafresh1
41b8851fccSafresh1my $LAX_INTEGER_PART = qr/[0-9]+/;
42b8851fccSafresh1
43b8851fccSafresh1# Second and subsequent part of a strict dotted-decimal version number.
44b8851fccSafresh1# Leading zeroes are permitted, and the number is always decimal.
45b8851fccSafresh1# Limited to three digits to avoid overflow when converting to decimal
46b8851fccSafresh1# form and also avoid problematic style with excessive leading zeroes.
47b8851fccSafresh1
48b8851fccSafresh1my $STRICT_DOTTED_DECIMAL_PART = qr/\.[0-9]{1,3}/;
49b8851fccSafresh1
50b8851fccSafresh1# Second and subsequent part of a lax dotted-decimal version number.
51b8851fccSafresh1# Leading zeroes are permitted, and the number is always decimal.  No
52b8851fccSafresh1# limit on the numerical value or number of digits, so there is the
53b8851fccSafresh1# possibility of overflow when converting to decimal form.
54b8851fccSafresh1
55b8851fccSafresh1my $LAX_DOTTED_DECIMAL_PART = qr/\.[0-9]+/;
56b8851fccSafresh1
57b8851fccSafresh1# Alpha suffix part of lax version number syntax.  Acts like a
58b8851fccSafresh1# dotted-decimal part.
59b8851fccSafresh1
60b8851fccSafresh1my $LAX_ALPHA_PART = qr/_[0-9]+/;
61b8851fccSafresh1
62b8851fccSafresh1#--------------------------------------------------------------------------#
63b8851fccSafresh1# Strict version regexp definitions
64b8851fccSafresh1#--------------------------------------------------------------------------#
65b8851fccSafresh1
66b8851fccSafresh1# Strict decimal version number.
67b8851fccSafresh1
68b8851fccSafresh1my $STRICT_DECIMAL_VERSION =
69b8851fccSafresh1    qr/ $STRICT_INTEGER_PART $FRACTION_PART? /x;
70b8851fccSafresh1
71b8851fccSafresh1# Strict dotted-decimal version number.  Must have both leading "v" and
72b8851fccSafresh1# at least three parts, to avoid confusion with decimal syntax.
73b8851fccSafresh1
74b8851fccSafresh1my $STRICT_DOTTED_DECIMAL_VERSION =
75b8851fccSafresh1    qr/ v $STRICT_INTEGER_PART $STRICT_DOTTED_DECIMAL_PART{2,} /x;
76b8851fccSafresh1
77b8851fccSafresh1# Complete strict version number syntax -- should generally be used
78b8851fccSafresh1# anchored: qr/ \A $STRICT \z /x
79b8851fccSafresh1
80b8851fccSafresh1$STRICT =
81b8851fccSafresh1    qr/ $STRICT_DECIMAL_VERSION | $STRICT_DOTTED_DECIMAL_VERSION /x;
82b8851fccSafresh1
83b8851fccSafresh1#--------------------------------------------------------------------------#
84b8851fccSafresh1# Lax version regexp definitions
85b8851fccSafresh1#--------------------------------------------------------------------------#
86b8851fccSafresh1
87b8851fccSafresh1# Lax decimal version number.  Just like the strict one except for
88b8851fccSafresh1# allowing an alpha suffix or allowing a leading or trailing
89b8851fccSafresh1# decimal-point
90b8851fccSafresh1
91b8851fccSafresh1my $LAX_DECIMAL_VERSION =
92b8851fccSafresh1    qr/ $LAX_INTEGER_PART (?: \. | $FRACTION_PART $LAX_ALPHA_PART? )?
93b8851fccSafresh1	|
94b8851fccSafresh1	$FRACTION_PART $LAX_ALPHA_PART?
95b8851fccSafresh1    /x;
96b8851fccSafresh1
97b8851fccSafresh1# Lax dotted-decimal version number.  Distinguished by having either
98b8851fccSafresh1# leading "v" or at least three non-alpha parts.  Alpha part is only
99b8851fccSafresh1# permitted if there are at least two non-alpha parts. Strangely
100b8851fccSafresh1# enough, without the leading "v", Perl takes .1.2 to mean v0.1.2,
101b8851fccSafresh1# so when there is no "v", the leading part is optional
102b8851fccSafresh1
103b8851fccSafresh1my $LAX_DOTTED_DECIMAL_VERSION =
104b8851fccSafresh1    qr/
105b8851fccSafresh1	v $LAX_INTEGER_PART (?: $LAX_DOTTED_DECIMAL_PART+ $LAX_ALPHA_PART? )?
106b8851fccSafresh1	|
107b8851fccSafresh1	$LAX_INTEGER_PART? $LAX_DOTTED_DECIMAL_PART{2,} $LAX_ALPHA_PART?
108b8851fccSafresh1    /x;
109b8851fccSafresh1
110b8851fccSafresh1# Complete lax version number syntax -- should generally be used
111b8851fccSafresh1# anchored: qr/ \A $LAX \z /x
112b8851fccSafresh1#
113b8851fccSafresh1# The string 'undef' is a special case to make for easier handling
114b8851fccSafresh1# of return values from ExtUtils::MM->parse_version
115b8851fccSafresh1
116b8851fccSafresh1$LAX =
117b8851fccSafresh1    qr/ undef | $LAX_DECIMAL_VERSION | $LAX_DOTTED_DECIMAL_VERSION /x;
118b8851fccSafresh1
119b8851fccSafresh1#--------------------------------------------------------------------------#
120b8851fccSafresh1
121b8851fccSafresh1# Preloaded methods go here.
122b8851fccSafresh1sub is_strict	{ defined $_[0] && $_[0] =~ qr/ \A $STRICT \z /x }
123b8851fccSafresh1sub is_lax	{ defined $_[0] && $_[0] =~ qr/ \A $LAX \z /x }
124b8851fccSafresh1
125b8851fccSafresh11;
126