3 # Simple program to make new version numbers for the shell.
4 # Big deal, but it was getting out of hand to do everything
5 # in the makefile. This creates a file named by the -o option,
6 # otherwise everything is echoed to the standard output.
8 # Copyright (C) 1996-2020 Free Software Foundation, Inc.
10 # This program is free software: you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation, either version 3 of the License, or
13 # (at your option) any later version.
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
20 # You should have received a copy of the GNU General Public License
21 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 PROGNAME
=`basename $0`
25 USAGE
="$PROGNAME [-b] [-S srcdir] -d version -p patchlevel [-s status] [-o outfile]"
29 while [ $# -gt 0 ]; do
31 -o) shift; OUTFILE
=$1; shift ;;
32 -b) shift; inc_build
=yes ;;
33 -s) shift; rel_status
=$1; shift ;;
34 -p) shift; patch_level
=$1; shift ;;
35 -d) shift; dist_version
=$1; shift ;;
36 -S) shift; source_dir
="$1"; shift ;;
37 *) echo "$PROGNAME: usage: $USAGE" >&2 ; exit 2 ;;
42 if [ -z "$dist_version" ]; then
43 echo "${PROGNAME}: required argument -d missing" >&2
44 echo "$PROGNAME: usage: $USAGE" >&2
48 #if [ -z "$patch_level" ]; then
49 # echo "${PROGNAME}: required argument -p missing" >&2
50 # echo "$PROGNAME: usage: $USAGE" >&2
55 if [ -z "$rel_status" ]; then
60 if [ -r .build
]; then
61 build_ver
=`cat .build`
63 if [ -z "$build_ver" ]; then
67 # increment the build version if that's what's required
69 if [ -n "$inc_build" ]; then
70 build_ver
=`expr 1 + $build_ver`
73 # what's the patch level?
74 if [ -z "$patch_level" ]; then
75 patchlevel_h
=$source_dir/patchlevel.h
76 if [ -s $patchlevel_h ]; then
77 patch_level
=`cat $patchlevel_h | grep '^#define[ ]*PATCHLEVEL' | awk '{print $NF}'`
80 if [ -z "$patch_level" ]; then
84 # If we have an output file specified, make it the standard output
85 if [ -n "$OUTFILE" ]; then
86 if exec >$OUTFILE; then
89 echo "${PROGNAME}: cannot redirect standard output to $OUTFILE" >&2
94 # Output the leading comment.
95 echo "/* Version control for the shell. This file gets changed when you say"
96 echo " \`make version.h' to the Makefile. It is created by mkversion. */"
98 # Output the distribution version. Single numbers are converted to x.00.
99 # Allow, as a special case, `[:digit:].[:digit:][:alpha:]' for
100 # intermediate versions (e.g., `2.5a').
101 # Any characters other than digits and `.' are invalid.
102 case "$dist_version" in
103 [0-9].
[0-9][a-z
]) ;; # special case
104 *[!0-9.
]*) echo "mkversion.sh: ${dist_version}: bad distribution version" >&2
107 *) dist_version
=${dist_version}.00 ;;
110 dist_major
=`echo $dist_version | sed 's:\..*$::'`
111 [ -z "${dist_major}" ] && dist_major
=0
113 dist_minor
=`echo $dist_version | sed 's:^.*\.::'`
114 case "$dist_minor" in
116 [a-z
]) dist_minor
=0${dist_minor} ;;
117 ?
) dist_minor
=${dist_minor} ;;
121 #float_dist=`echo $dist_version | awk '{printf "%.2f\n", $1}'`
122 float_dist
=${dist_major}.
${dist_minor}
125 echo "/* The executable name of this shell. */"
126 echo "#define PROG_NAME \"${PACKAGE_NAME}\""
127 echo "#define PROG_NAME \"${PACKAGE_NAME}\"" > x.txt
130 echo "/* The distribution version number of this shell. */"
131 echo "#define DISTVERSION \"${float_dist}\""
133 # Output the patch level
135 #echo "/* The patch level of this version of the shell. */"
136 #echo "#define PATCHLEVEL ${patch_level}"
138 # Output the build version
140 echo "/* The last built version of this shell. */"
141 echo "#define BUILDVERSION ${build_ver}"
143 # Output the release status
145 echo "/* The release status of this shell. */"
146 echo "#define RELSTATUS \"${rel_status}\""
149 echo "/* The default shell compatibility-level (the current version) */"
150 echo "#define DEFAULT_COMPAT_LEVEL ${dist_major}${dist_minor}"
152 # Output the SCCS version string
153 sccs_string
="${float_dist}.${patch_level}(${build_ver}) ${rel_status} GNU"
155 echo "/* A version string for use by sccs and the what command. */"
156 echo "#define SCCSVERSION \"@(#)Bush version ${sccs_string}\""
158 # extern function declarations
160 #echo '/* Functions from version.c. */'
161 #echo 'extern char *shell_version_string PARAMS((void));'
162 #echo 'extern void show_shell_version PARAMS((int));'
164 if [ -n "$inc_build" ]; then
165 # Make sure we can write to .build
166 if [ -f .build
] && [ ! -w .build
]; then
167 echo "$PROGNAME: cannot write to .build, not incrementing build version" >&2
169 echo "$build_ver" > .build