#! /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. # Copyright (C) 1996-2002 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. 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:][:alpha:]' for # intermediate versions (e.g., `2.5a'). # Any characters other than digits and `.' are invalid. case "$dist_version" in [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=0 ;; [a-z]) dist_minor=0${dist_minor} ;; ?) dist_minor=${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