#!/bin/sh -
##
## newvers -- setup new program version file
## Copyright (c) 1994-1997 Ralf S. Engelschall, <rse@engelschall.com>
##
VERSION="2.0"
DATE="01 Jan 1997"
# print version information line
print_version () {
echo "This is NEWVERS, Version $VERSION ($DATE)"
}
# give general help information
print_help () {
cat <<'EOT'
NEWVERS -- generate/maintain a version information file
Copyright (c) 1994-1997 Ralf S. Engelschall, <rse@engelschall.com>
NEWVERS will create and update a version information file,
which can be setup as a C source file or a Perl source file.
Examples:
$ newvers -m c -p TestProg version.c
$ newvers -m perl -p TestProg version.pl
EOT
}
# give usage information
print_usage () {
cat <<'EOT'
Usage: newvers [options] versionfile
Options are:
-l<lang> set language to one of "c", "perl"
-p<progname> set program name
-r<v>.<r>.<p> set release version string
-i{v|r|p} increase version, revision or patchlevel (default)
-d display current version only
-D display current version only (incl. date)
-V print NEWVERS version
-h print help page
EOT
}
# process the argument line
LANG=unknown
PROGNAME="-UNKNOWN-"
VERSION=unknown
REPORT=NO
REPORTFULL=NO
INCREASE=p
set -- `getopt l:p:r:i:dDVh $*`
if [ $? != 0 ]; then
print_usage
exit 2
fi
for opt in $*; do
case $opt in
-l) LANG=$2; shift; shift ;;
-p) PROGNAME=$2; shift; shift ;;
-r) VERSION=$2; shift; shift ;;
-i) INCREASE=$2; shift; shift ;;
-d) REPORT=YES; shift ;;
-D) REPORT=YES; REPORTFULL=YES; shift ;;
-V) print_version; exit 0 ;;
-h) print_help; print_usage; exit 0 ;;
--) shift; break ;;
esac
done
case $# in
1) VERSIONFILE=$1 ;;
*) print_usage; exit 1 ;;
esac
# determine language
if [ "$LANG" = "unknown" ]; then
case $VERSIONFILE in
*.c ) LANG=c ;;
*.pl ) LANG=perl ;;
esac
fi
## determine version
if [ "$VERSION" = "unknown" ]; then
if [ -r "$VERSIONFILE" ]; then
# grep out current information
id=`grep '"[0-9]*.[0-9]*.[0-9]* ([0-9]*-[0-9]*-[0-9]*)"' $VERSIONFILE | \
head -1 | \
sed -e 's%.*"\([0-9]*\.[0-9]*\.[0-9]*\) (\([0-9]*-[0-9]*-[0-9]*\)).*%\1.\2%'`
version=`echo $id | awk -F. '{ print $1 }'`
revision=`echo $id | awk -F. '{ print $2 }'`
patchlevel=`echo $id | awk -F. '{ print $3 }'`
date=`echo $id | awk -F. '{ print $4 }'`
if [ $REPORT = NO ]; then
if [ $INCREASE = p ]; then
patchlevel=`expr $patchlevel + 1`
else
if [ $INCREASE = r ]; then
revision=`expr $revision + 1`
patchlevel=0
else
if [ $INCREASE = v ]; then
version=`expr $version + 1`
revision=0
patchlevel=0
fi
fi
fi
fi
else
# intialise to first version
version=1
revision=0
patchlevel=0
date=`date '+%d-%m-19%y'`
fi
else
# take given version
version=`echo $VERSION | awk -F. '{ print $1 }'`
revision=`echo $VERSION | awk -F. '{ print $2 }'`
patchlevel=`echo $VERSION | awk -F. '{ print $3 }'`
date=`date '+%d-%m-19%y'`
fi
if [ $REPORT = YES ]; then
if [ $REPORTFULL = YES ]; then
echo "$version.$revision.$patchlevel ($date)"
else
echo "$version.$revision.$patchlevel"
fi
exit 0;
else
echo "new version: $version.$revision.$patchlevel ($date)"
fi
# create date string
year=`date '+19%y'`
month=`date '+%m'`
day=`date '+%d'`
# create the version file according the the selected language
tmpfile="/tmp/newvers.tmp.$$"
rm -f $tmpfile
case $LANG in
c )
cat >$tmpfile <<'EOF'
/* !! This file was automatically generated by NEWVERS !! */
/* for logfiles, etc. */
char @PROGNAME@_Version[] =
"@VERSION@.@REVISION@.@PATCHLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
/* interactive 'hello' string to identify us to the user */
char @PROGNAME@_Hello[] =
"This is @PROGNAME@ Version @VERSION@.@REVISION@.@PATCHLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
/* a GNU --version output */
char @PROGNAME@_GNUVersion[] =
"@PROGNAME@ Version @VERSION@.@REVISION@.@PATCHLEVEL@";
/* a UNIX what(1) id string */
char @PROGNAME@_WhatID[] =
"@(#)@PROGNAME@ Version @VERSION@.@REVISION@.@PATCHLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
/* a RCS ident(1) id string */
char @PROGNAME@_RCSIdentID[] =
"$Id: @PROGNAME@ @VERSION@.@REVISION@.@PATCHLEVEL@ @DAY@-@MONTH@-@YEAR@ $";
/* a WWW id string */
char @PROGNAME@_WebID[] =
"@PROGNAME@/@VERSION@.@REVISION@.@PATCHLEVEL@";
EOF
;;
perl )
cat >$tmpfile <<'EOF'
# !! This file was automatically generated by NEWVERS !!
package Vers;
# for logfiles, etc.
$@PROGNAME@_Version =
"@VERSION@.@REVISION@.@PATCHLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
# interactive 'hello' string to identify us to the user
$@PROGNAME@_Hello =
"This is @PROGNAME@ Version @VERSION@.@REVISION@.@PATCHLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
# a GNU --version output
$@PROGNAME@_GNUVersion =
"@PROGNAME@ Version @VERSION@.@REVISION@.@PATCHLEVEL@";
# a UNIX what(1) id string
$@PROGNAME@_WhatID =
"@(#)@PROGNAME@ Version @VERSION@.@REVISION@.@PATCHLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
# a RCS ident(1) id string
$@PROGNAME@_RCSIdentID =
"\$Id: @PROGNAME@ @VERSION@.@REVISION@.@PATCHLEVEL@ @DAY@-@MONTH@-@YEAR@ \$";
# a WWW id string
$@PROGNAME@_WebID =
"@PROGNAME@/@VERSION@.@REVISION@.@PATCHLEVEL@";
1;
EOF
;;
* ) print_usage; exit 1
;;
esac
rm -f $VERSIONFILE
sed \
-e "s|@PROGNAME@|$PROGNAME|g" \
-e "s|@VERSION@|$version|g" \
-e "s|@REVISION@|$revision|g" \
-e "s|@PATCHLEVEL@|$patchlevel|g" \
-e "s|@YEAR@|$year|g" \
-e "s|@MONTH@|$month|g" \
-e "s|@DAY@|$day|g" <$tmpfile >$VERSIONFILE
rm -f $tmpfile
##EOF##