summaryrefslogtreecommitdiff
path: root/test/patchexim
blob: a006022e0453bc73d93e916c1b204f16405d5dae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#! /usr/bin/env perl

use strict;
use warnings;
use Getopt::Std;

###############################################################################
# This is an auxiliary script that is part of the Exim test suite. It must be #
# run as root, and is normally called from the main controlling script. Its   #
# job is to make a copy of Exim, suitably patched so that it can run in the   #
# test harness. See further comments in the main script.                      #
#                                                                             #
# 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"           #
###############################################################################

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>>>/;
  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);

chmod 04755, $outfile;

# End of patchexim script