Docs: strchrnul() fix. Bug 3108
[exim.git] / test / patchexim
index c8fbe466bf2fb889ff4b4bfb2c18a07bbadeeb14..a006022e0453bc73d93e916c1b204f16405d5dae 100755 (executable)
@@ -1,6 +1,8 @@
-#! /usr/bin/perl -w
+#! /usr/bin/env perl
 
 
-# $Cambridge: exim/test/patchexim,v 1.1 2006/02/06 16:07:10 ph10 Exp $
+use strict;
+use warnings;
+use Getopt::Std;
 
 ###############################################################################
 # This is an auxiliary script that is part of the Exim test suite. It must be #
 
 ###############################################################################
 # This is an auxiliary script that is part of the Exim test suite. It must be #
 #                                                                             #
 # The only argument to this script is the name of the Exim binary that is to  #
 # be copied. The script must be run in the correct current directory.         #
 #                                                                             #
 # The only argument to this script is the name of the Exim binary that is to  #
 # be copied. The script must be run in the correct current directory.         #
+#                                                                            #
+# One option, -o <outfile> can be given.  Default is "eximdir/exim"           #
 ###############################################################################
 
 ###############################################################################
 
-open(IN, "$ARGV[0]") || die "** Failed to open $ARGV[0]: $!\n";
-open(OUT, ">eximdir/exim") || die "** Failed to open eximdir/exim: $!\n";
+our ($opt_o);
+getopts('o:');
+
+my $outfile = defined($opt_o) ? $opt_o : 'eximdir/exim';
+
+open(IN, $ARGV[0]) || die "** Failed to open $ARGV[0]: $!\n";
+open(OUT, ">$outfile") || die "** Failed to open $outfile: $!\n";
 
 while(<IN>)
   {
   s/>>>running<<</<<<testing>>>/;
 
 while(<IN>)
   {
   s/>>>running<<</<<<testing>>>/;
-  s/(\d+\.\d+(?:\.\d+)?(-RC\d+)?\0<<eximversion>>)/"x.yz\0" . ("*" x (length($1) - 5))/e;
+  s{
+    (\d+[_.]\d+                       # major.minor
+    (?:[_.]\d+)?                      # optional security-patchlevel
+    (?:[_.]\d+)?                      # optional patchlevel
+    (?:[_-]RC\d+|[_-]?dev(?:start)?)? # optional RC or dev(start)
+    (?:(?:[_-]\d+)?                   # git tag distance
+       [-_][[:xdigit:]]+)?            # git id
+    (?:[-_]XX)?\0                     # git dirty bit
+    <<eximversion>>                   # marker
+    )
+   }
+   {"x.yz\0" . ("*" x (length($1) - 5))}xe;
   print OUT;
   }
 
 close(IN);
 close(OUT);
 
   print OUT;
   }
 
 close(IN);
 close(OUT);
 
-chmod 04755, "eximdir/exim";
+chmod 04755, $outfile;
 
 # End of patchexim script
 
 # End of patchexim script