The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use lib '../lib';

my $fil = "version.h";
my $ver;

foreach (@ARGV) {
  my ($opt, $arg) = (split(/=/, $_, 2));
  if ($opt eq '--with-version') {
    if ($arg =~ /^(\d)\.(\d\d\d)_?(\d\d\d)/) {
      $ver = join(".", $1*1, $2*1, $3*1);
    }
    else {
      $ver = $arg;
    }
  }
}

print "version.h.pl: creating $fil\n";
unless ($ver) {
  if (-e '../lib/Mail/SpamAssassin.pm') {
    eval {
      require Mail::SpamAssassin;
      $ver = Mail::SpamAssassin::Version();
    };
  }
  else {
    $@ = "File not found.";
  }
  unless ($ver) {
    die join("\n", "Failed to get the version from Mail::SpamAssassin.",
                   "Please use the --with-version= switch to specify it manually.",
                   "",
                   "The error was:",
                   $@,
          );
  }
}

open IN,  "<$fil.in" || die "Failed to open $fil.in: $!";
open OUT, ">$fil"    || die "Failed to open $fil: $!";

print OUT "/* $fil.  Generated by $0.  */\n";
foreach (<IN>) {
  s/(#define\s+VERSION_STRING\s+)".*"/$1"$ver"/;
  print OUT;
}

close IN;
close OUT;