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