postgis/utils/repo_revision.pl
2020-07-01 11:00:58 +02:00

82 lines
1.6 KiB
Perl
Executable File

#!/usr/bin/env perl
$ENV{"LC_ALL"} = "C";
use warnings;
use strict;
my $top_srcdir = ".";
my $rev_file = $top_srcdir.'/postgis_revision.h';
my $target = 'local';
$target = $ARGV[0] if $ARGV[0];
# Read the revision number
my $rev = &read_rev($target);
# Write it
&write_defn($rev);
sub read_rev {
my $target = shift;
#print STDERR "Target: $target\n";
return &read_rev_git();
}
sub read_rev_git {
# TODO: test on old systems, I think I saw some `which`
# implementations returning "nothing found" or something
# like that, making the later if ( ! $git_exe ) always false
#
my $git_exe = `which git`;
if ( ! $git_exe ) {
print STDERR "Can't determine revision: no git executable found\n";
return 0;
}
chop($git_exe);
my $cmd = "\"${git_exe}\" describe --always";
#print STDERR "cmd: ${cmd}\n";
my $rev = `$cmd`;
if ( ! $rev ) {
print STDERR "Can't determine revision from git log\n";
$rev = 0;
} else {
chop($rev);
}
return $rev;
}
sub write_defn {
my $rev = shift;
my $oldrev = 0;
# Do not override the file if new detected
# revision isn't zero nor different from the existing one
if ( -f $rev_file ) {
open(IN, "<$rev_file");
my $oldrevline = <IN>;
if ( $oldrevline =~ /POSTGIS_REVISION (.*)/ ) {
$oldrev = $1;
}
close(IN);
if ( $rev eq "0" or $rev eq $oldrev ) {
print STDERR "Not updating existing rev file at $oldrev\n";
return;
}
}
my $string = "#define POSTGIS_REVISION $rev\n";
open(OUT,">$rev_file");
print OUT $string;
close(OUT);
print STDERR "Wrote rev file at $rev\n";
}