Added a -q flag, and cleaned up and simplified the code. Added -h (help) options, and make more use of other modules.
94 lines
2.8 KiB
Perl
94 lines
2.8 KiB
Perl
#!/usr/bin/perl
|
|
#*************************************************************************
|
|
# Copyright (c) 2012 UChicago Argonne LLC, as Operator of Argonne
|
|
# National Laboratory.
|
|
# Copyright (c) 2002 The Regents of the University of California, as
|
|
# Operator of Los Alamos National Laboratory.
|
|
# EPICS BASE is distributed subject to a Software License Agreement found
|
|
# in file LICENSE that is included with this distribution.
|
|
#*************************************************************************
|
|
|
|
use strict;
|
|
|
|
use Getopt::Std;
|
|
use File::Basename;
|
|
|
|
my $tool = basename($0);
|
|
|
|
our ($opt_h, $opt_q, $opt_v);
|
|
our $opt_o = 'epicsVersion.h';
|
|
|
|
$Getopt::Std::OUTPUT_HELP_VERSION = 1;
|
|
|
|
&HELP_MESSAGE unless getopts('ho:qv:') && @ARGV == 1;
|
|
&HELP_MESSAGE if $opt_h;
|
|
|
|
my ($infile) = @ARGV;
|
|
|
|
print "Building $opt_o from $infile\n" unless $opt_q;
|
|
|
|
open my $VARS, '<', $infile
|
|
or die "$tool: Can't open $infile: $!\n";
|
|
|
|
my ($ver, $rev, $mod, $patch, $snapshot, $commit_date);
|
|
while (<$VARS>) {
|
|
chomp;
|
|
next if m/^\s*#/; # Skip comments
|
|
if (m/^EPICS_VERSION\s*=\s*(\d+)/) { $ver = $1; }
|
|
if (m/^EPICS_REVISION\s*=\s*(\d+)/) { $rev = $1; }
|
|
if (m/^EPICS_MODIFICATION\s*=\s*(\d+)/) { $mod = $1; }
|
|
if (m/^EPICS_PATCH_LEVEL\s*=\s*(\d+)/) { $patch = $1; }
|
|
if (m/^EPICS_DEV_SNAPSHOT\s*=\s*([-\w]*)/) { $snapshot = $1; }
|
|
if (m/^COMMIT_DATE\s*=\s*"\\(.*)"/) { $commit_date = $1; }
|
|
}
|
|
close $VARS;
|
|
|
|
map {
|
|
die "$tool: Variable missing from $infile" unless defined $_;
|
|
} $ver, $rev, $mod, $patch, $snapshot, $commit_date;
|
|
|
|
my $ver_str = "$ver.$rev.$mod";
|
|
$ver_str .= ".$patch" if $patch > 0;
|
|
$ver_str .= $snapshot if $snapshot ne '';
|
|
$ver_str .= "-$opt_v" if $opt_v;
|
|
|
|
print "Found EPICS Version $ver_str\n" unless $opt_q;
|
|
|
|
open my $OUT, '>', $opt_o
|
|
or die "$tool: Can't create $opt_o: $!\n";
|
|
|
|
my $obase = basename($opt_o, '.h');
|
|
|
|
print $OUT <<"END";
|
|
/* Generated file $opt_o */
|
|
|
|
#ifndef INC_${obase}_H
|
|
#define INC_${obase}_H
|
|
|
|
#define EPICS_VERSION $ver
|
|
#define EPICS_REVISION $rev
|
|
#define EPICS_MODIFICATION $mod
|
|
#define EPICS_PATCH_LEVEL $patch
|
|
#define EPICS_DEV_SNAPSHOT "$snapshot"
|
|
#define EPICS_SITE_VERSION "$opt_v"
|
|
#define EPICS_VERSION_STRING "EPICS $ver_str"
|
|
#define epicsReleaseVersion "EPICS R$ver_str $commit_date"
|
|
|
|
#define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
|
|
#define EPICS_VERSION_INT VERSION_INT($ver, $rev, $mod, $patch)
|
|
|
|
#endif /* INC_${obase}_H */
|
|
END
|
|
|
|
close $OUT;
|
|
|
|
sub HELP_MESSAGE {
|
|
print STDERR "Usage: $tool [options] CONFIG_BASE_VERSION\n",
|
|
" -h Help: Print this message\n",
|
|
" -q Quiet: Only print errors\n",
|
|
" -o file Output filename, default is $opt_o\n",
|
|
" -v vers Site-specific version string\n",
|
|
"\n";
|
|
exit 1;
|
|
}
|