148 lines
3.8 KiB
Bash
Executable file
148 lines
3.8 KiB
Bash
Executable file
#! /bin/sh
|
|
|
|
# Simple program to make new version numbers for the shell.
|
|
# Big deal, but it was getting out of hand to do everything
|
|
# in the makefile. This creates a file named by the -o option,
|
|
# otherwise everything is echoed to the standard output.
|
|
|
|
PROGNAME=`basename $0`
|
|
USAGE="$PROGNAME [-b] [-S srcdir] -d version -p patchlevel [-s status] [-o outfile]"
|
|
|
|
source_dir="."
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-o) shift; OUTFILE=$1; shift ;;
|
|
-b) shift; inc_build=yes ;;
|
|
-s) shift; rel_status=$1; shift ;;
|
|
-p) shift; patch_level=$1; shift ;;
|
|
-d) shift; dist_version=$1; shift ;;
|
|
-S) shift; source_dir="$1"; shift ;;
|
|
*) echo "$PROGNAME: usage: $USAGE" >&2 ; exit 2 ;;
|
|
esac
|
|
done
|
|
|
|
# Required arguments
|
|
if [ -z "$dist_version" ]; then
|
|
echo "${PROGNAME}: required argument -d missing" >&2
|
|
echo "$PROGNAME: usage: $USAGE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
#if [ -z "$patch_level" ]; then
|
|
# echo "${PROGNAME}: required argument -p missing" >&2
|
|
# echo "$PROGNAME: usage: $USAGE" >&2
|
|
# exit 1
|
|
#fi
|
|
|
|
# Defaults
|
|
if [ -z "$rel_status" ]; then
|
|
rel_status="release"
|
|
fi
|
|
|
|
build_ver=
|
|
if [ -r .build ]; then
|
|
build_ver=`cat .build`
|
|
fi
|
|
if [ -z "$build_ver" ]; then
|
|
build_ver=0
|
|
fi
|
|
|
|
# increment the build version if that's what's required
|
|
|
|
if [ -n "$inc_build" ]; then
|
|
build_ver=`expr $build_ver + 1`
|
|
fi
|
|
|
|
# what's the patch level?
|
|
if [ -z "$patch_level" ]; then
|
|
patchlevel_h=$source_dir/patchlevel.h
|
|
if [ -s $patchlevel_h ]; then
|
|
patch_level=`cat $patchlevel_h | grep '^#define[ ]*PATCHLEVEL' | awk '{print $NF}'`
|
|
fi
|
|
fi
|
|
if [ -z "$patch_level" ]; then
|
|
patch_level=0
|
|
fi
|
|
|
|
# If we have an output file specified, make it the standard output
|
|
if [ -n "$OUTFILE" ]; then
|
|
if exec >$OUTFILE; then
|
|
:
|
|
else
|
|
echo "${PROGNAME}: cannot redirect standard output to $OUTFILE" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Output the leading comment.
|
|
echo "/* Version control for the shell. This file gets changed when you say"
|
|
echo " \`make version.h' to the Makefile. It is created by mkversion. */"
|
|
|
|
# Output the distribution version. Single numbers are converted to x.00.
|
|
# Allow, as a special case, `[:digit:].[:digit:][:digit:][:alpha:]' for
|
|
# intermediate versions (e.g., `2.05a').
|
|
# Any characters other than digits and `.' are invalid.
|
|
case "$dist_version" in
|
|
[0-9].[0-9][0-9][a-z]) ;; # special case
|
|
*[!0-9.]*) echo "mkversion.sh: ${dist_version}: bad distribution version" >&2
|
|
exit 1 ;;
|
|
*.*) ;;
|
|
*) dist_version=${dist_version}.00 ;;
|
|
esac
|
|
|
|
dist_major=`echo $dist_version | sed 's:\..*$::'`
|
|
[ -z "${dist_major}" ] && dist_major=0
|
|
|
|
dist_minor=`echo $dist_version | sed 's:^.*\.::'`
|
|
case "$dist_minor" in
|
|
"") dist_minor=00 ;;
|
|
[a-z]) dist_minor=00${dist_minor} ;;
|
|
?) dist_minor=0${dist_minor} ;;
|
|
*) ;;
|
|
esac
|
|
|
|
#float_dist=`echo $dist_version | awk '{printf "%.2f\n", $1}'`
|
|
float_dist=${dist_major}.${dist_minor}
|
|
|
|
echo
|
|
echo "/* The distribution version number of this shell. */"
|
|
echo "#define DISTVERSION \"${float_dist}\""
|
|
|
|
# Output the patch level
|
|
#echo
|
|
#echo "/* The patch level of this version of the shell. */"
|
|
#echo "#define PATCHLEVEL ${patch_level}"
|
|
|
|
# Output the build version
|
|
echo
|
|
echo "/* The last built version of this shell. */"
|
|
echo "#define BUILDVERSION ${build_ver}"
|
|
|
|
# Output the release status
|
|
echo
|
|
echo "/* The release status of this shell. */"
|
|
echo "#define RELSTATUS \"${rel_status}\""
|
|
|
|
# Output the SCCS version string
|
|
sccs_string="${float_dist}.${patch_level}(${build_ver}) ${rel_status} GNU"
|
|
echo
|
|
echo "/* A version string for use by sccs and the what command. */"
|
|
echo "#define SCCSVERSION \"@(#)Bash version ${sccs_string}\""
|
|
|
|
# extern function declarations
|
|
echo
|
|
echo '/* Functions from version.c. */'
|
|
echo 'extern char *shell_version_string __P((void));'
|
|
echo 'extern void show_shell_version __P((int));'
|
|
|
|
if [ -n "$inc_build" ]; then
|
|
# Make sure we can write to .build
|
|
if [ -f .build ] && [ ! -w .build ]; then
|
|
echo "$PROGNAME: cannot write to .build, not incrementing build version" >&2
|
|
else
|
|
echo "$build_ver" > .build
|
|
fi
|
|
fi
|
|
|
|
exit 0
|