# hence are not checked. File existence is checked with -e though.
# This test depends on File::Path::rmtree() to clean up with.
# - pvhp
-
+#
+# We are now checking that the correct use $version; is present in
+# Makefile.PL and $module.pm
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
# not already be found in the t/ subdirectory for perl.
my $name = 'h2xst';
my $header = "$name.h";
+my $thisversion = sprintf "%vd", $^V;
my @tests = (
-"-f -n $name", <<"EOXSFILES",
+"-f -n $name", $], <<"EOXSFILES",
+Defaulting to backwards compatibility with perl $thisversion
+If you intend this module to be compatible with earlier perl versions, please
+specify a minimum perl version with the -b option.
+
Writing $name/$name.pm
Writing $name/$name.xs
Writing $name/fallback.c
Writing $name/MANIFEST
EOXSFILES
-"\"-X\" -f -n $name", <<"EONOXSFILES",
+"-f -n $name -b $thisversion", $], <<"EOXSFILES",
+Writing $name/$name.pm
+Writing $name/$name.xs
+Writing $name/fallback.c
+Writing $name/fallback.xs
+Writing $name/Makefile.PL
+Writing $name/README
+Writing $name/t/1.t
+Writing $name/Changes
+Writing $name/MANIFEST
+EOXSFILES
+
+"-f -n $name -b 5.6.1", "5.006001", <<"EOXSFILES",
+Writing $name/$name.pm
+Writing $name/$name.xs
+Writing $name/fallback.c
+Writing $name/fallback.xs
+Writing $name/Makefile.PL
+Writing $name/README
+Writing $name/t/1.t
+Writing $name/Changes
+Writing $name/MANIFEST
+EOXSFILES
+
+"-f -n $name -b 5.5.3", "5.00503", <<"EOXSFILES",
+Writing $name/$name.pm
+Writing $name/$name.xs
+Writing $name/fallback.c
+Writing $name/fallback.xs
+Writing $name/Makefile.PL
+Writing $name/README
+Writing $name/t/1.t
+Writing $name/Changes
+Writing $name/MANIFEST
+EOXSFILES
+
+"\"-X\" -f -n $name -b $thisversion", $], <<"EONOXSFILES",
Writing $name/$name.pm
Writing $name/Makefile.PL
Writing $name/README
Writing $name/MANIFEST
EONOXSFILES
-"-f -n $name $header", <<"EOXSFILES",
+"-f -n $name $header -b $thisversion", $], <<"EOXSFILES",
Writing $name/$name.pm
Writing $name/$name.xs
Writing $name/fallback.c
);
my $total_tests = 3; # opening, closing and deleting the header file.
-for (my $i = $#tests; $i > 0; $i-=2) {
+for (my $i = $#tests; $i > 0; $i-=3) {
# 1 test for running it, 1 test for the expected result, and 1 for each file
+ # plus 1 to open and 1 to check for the use in $name.pm and Makefile.PL
# use the () to force list context and hence count the number of matches.
- $total_tests += 2 + (() = $tests[$i] =~ /(Writing)/sg);
+ $total_tests += 6 + (() = $tests[$i] =~ /(Writing)/sg);
}
plan tests => $total_tests;
HEADER
ok (close (HEADER));
-while (my ($args, $expectation) = splice @tests, 0, 2) {
+while (my ($args, $version, $expectation) = splice @tests, 0, 3) {
# h2xs warns about what it is writing hence the (possibly unportable)
# 2>&1 dupe:
# does it run?
# Was the output the list of files that were expected?
ok ($result, $expectation, "running $prog");
- $expectation =~ s/Writing //; # remove leader
- foreach (split(/Writing /,$expectation)) {
- chomp; # remove \n
+ foreach ($expectation =~ /Writing\s+(\S+)/gm) {
if ($^O eq 'MacOS') {
$_ = ':' . join(':',split(/\//,$_));
$_ =~ s/$name:t:1.t/$name:t\/1.t/; # is this an h2xs bug?
ok (-e $_, 1, "$_ missing");
}
+ foreach my $leaf ("$name.pm", 'Makefile.PL') {
+ my $file = ($^O eq 'MacOS') ? ":$name:$leaf" : "$name/$leaf";
+ if (ok (open (FILE, $file), 1, "open $file")) {
+ my $match = qr/use $version;/;
+ my $found;
+ while (<FILE>) {
+ last if $found = /$match/;
+ }
+ ok ($found, 1, "looking for /$match/ in $file");
+ close FILE or die "close $file: $!";
+ }
+ }
# clean up
rmtree($name);
}
- no 'use warnings'
Specifying a compatibility version higher than the version of perl you
-are using to run h2xs will have no effect.
+are using to run h2xs will have no effect. If unspecified h2xs will default
+to compatibility with the version of perl you are using to run h2xs.
=item B<-c>, B<--omit-constant>
usage "You must provide the backwards compatibility version in X.Y.Z form. "
. "(i.e. 5.5.0)\n";
my ($maj,$min,$sub) = split(/\./,$opt_b,3);
- $compat_version = sprintf("%d.%03d%02d",$maj,$min,$sub);
-}
+ if ($maj < 5 || ($maj == 5 && $min < 6)) {
+ $compat_version = sprintf("%d.%03d%02d",$maj,$min,$sub);
+ } else {
+ $compat_version = sprintf("%d.%03d%03d",$maj,$min,$sub);
+ }
+} else {
+ my ($maj,$min,$sub) = $compat_version =~ /(\d+)\.(\d\d\d)(\d\d\d?)/;
+ warn sprintf <<'EOF', $maj,$min,$sub;
+Defaulting to backwards compatibility with perl %d.%d.%d
+If you intend this module to be compatible with earlier perl versions, please
+specify a minimum perl version with the -b option.
+
+EOF
+}
if( $opt_v ){
$TEMPLATE_VERSION = $opt_v;