168 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
	
		
			4.7 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.
 | 
						|
 | 
						|
# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 | 
						|
#
 | 
						|
 | 
						|
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 1 + $build_ver`
 | 
						|
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}\""
 | 
						|
 | 
						|
echo
 | 
						|
echo "/* The default shell compatibility-level (the current version) */"
 | 
						|
echo "#define DEFAULT_COMPAT_LEVEL ${dist_major}${dist_minor}"
 | 
						|
 | 
						|
# 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
 |