newvers.sh revision 306941
123925Sgibbs#!/bin/sh -
223925Sgibbs#
323925Sgibbs# Copyright (c) 1984, 1986, 1990, 1993
423925Sgibbs#	The Regents of the University of California.  All rights reserved.
523925Sgibbs#
623925Sgibbs# Redistribution and use in source and binary forms, with or without
723925Sgibbs# modification, are permitted provided that the following conditions
823925Sgibbs# are met:
923925Sgibbs# 1. Redistributions of source code must retain the above copyright
1023925Sgibbs#    notice, this list of conditions and the following disclaimer.
1126997Sgibbs# 2. Redistributions in binary form must reproduce the above copyright
1226997Sgibbs#    notice, this list of conditions and the following disclaimer in the
1339220Sgibbs#    documentation and/or other materials provided with the distribution.
1423925Sgibbs# 4. Neither the name of the University nor the names of its contributors
1523925Sgibbs#    may be used to endorse or promote products derived from this software
1623925Sgibbs#    without specific prior written permission.
1723925Sgibbs#
1823925Sgibbs# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
1923925Sgibbs# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2023925Sgibbs# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2123925Sgibbs# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2223925Sgibbs# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2323925Sgibbs# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2423925Sgibbs# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2523925Sgibbs# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2623925Sgibbs# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2723925Sgibbs# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2839220Sgibbs# SUCH DAMAGE.
2923925Sgibbs#
3023925Sgibbs#	@(#)newvers.sh	8.1 (Berkeley) 4/20/94
3123925Sgibbs# $FreeBSD: releng/10.1/sys/conf/newvers.sh 306941 2016-10-10 07:18:54Z delphij $
3223925Sgibbs
3323925SgibbsTYPE="FreeBSD"
3423925SgibbsREVISION="10.1"
3523925SgibbsBRANCH="RELEASE-p40"
3623925Sgibbsif [ "X${BRANCH_OVERRIDE}" != "X" ]; then
3723925Sgibbs	BRANCH=${BRANCH_OVERRIDE}
3823925Sgibbsfi
3923925SgibbsRELEASE="${REVISION}-${BRANCH}"
4023925SgibbsVERSION="${TYPE} ${RELEASE}"
4123925Sgibbs
4229897Sgibbsif [ "X${SYSDIR}" = "X" ]; then
4323925Sgibbs    SYSDIR=$(dirname $0)/..
4423925Sgibbsfi
4523925Sgibbs
4623925Sgibbsif [ "X${PARAMFILE}" != "X" ]; then
4723925Sgibbs	RELDATE=$(awk '/__FreeBSD_version.*propagated to newvers/ {print $3}' \
4823925Sgibbs		${PARAMFILE})
4923925Sgibbselse
5023925Sgibbs	RELDATE=$(awk '/__FreeBSD_version.*propagated to newvers/ {print $3}' \
5123925Sgibbs		${SYSDIR}/sys/param.h)
5223925Sgibbsfi
5323925Sgibbs
5423925Sgibbsb=share/examples/etc/bsd-style-copyright
5523925Sgibbsyear=`date '+%Y'`
5623925Sgibbs# look for copyright template
5723925Sgibbsfor bsd_copyright in ../$b ../../$b ../../../$b /usr/src/$b /usr/$b
5823925Sgibbsdo
5923925Sgibbs	if [ -r "$bsd_copyright" ]; then
6023925Sgibbs		COPYRIGHT=`sed \
6123925Sgibbs		    -e "s/\[year\]/1992-$year/" \
6223925Sgibbs		    -e 's/\[your name here\]\.* /The FreeBSD Project./' \
6323925Sgibbs		    -e 's/\[your name\]\.*/The FreeBSD Project./' \
6423925Sgibbs		    -e '/\[id for your version control system, if any\]/d' \
6523925Sgibbs		    $bsd_copyright` 
6623925Sgibbs		break
6723925Sgibbs	fi
6823925Sgibbsdone
6923925Sgibbs
7023925Sgibbs# no copyright found, use a dummy
7123925Sgibbsif [ X"$COPYRIGHT" = X ]; then
7223925Sgibbs	COPYRIGHT="/*-
7323925Sgibbs * Copyright (c) 1992-$year The FreeBSD Project.
7423925Sgibbs * All rights reserved.
7523925Sgibbs *
7623925Sgibbs */"
7723925Sgibbsfi
7823925Sgibbs
7923925Sgibbs# add newline
8023925SgibbsCOPYRIGHT="$COPYRIGHT
8123925Sgibbs"
8239220Sgibbs
8323925SgibbsLC_ALL=C; export LC_ALL
8423925Sgibbsif [ ! -r version ]
8523925Sgibbsthen
8623925Sgibbs	echo 0 > version
8723925Sgibbsfi
8823925Sgibbs
8923925Sgibbstouch version
9023925Sgibbsv=`cat version` u=${USER:-root} d=`pwd` h=${HOSTNAME:-`hostname`} t=`date`
9123925Sgibbsi=`${MAKE:-make} -V KERN_IDENT`
9223925Sgibbscompiler_v=$($(${MAKE:-make} -V CC) -v 2>&1 | grep 'version')
9323925Sgibbs
9423925Sgibbsfor dir in /usr/bin /usr/local/bin; do
9523925Sgibbs	if [ ! -z "${svnversion}" ] ; then
9623925Sgibbs		break
9723925Sgibbs	fi
9823925Sgibbs	if [ -x "${dir}/svnversion" ] && [ -z ${svnversion} ] ; then
9923925Sgibbs		# Run svnversion from ${dir} on this script; if return code
10023925Sgibbs		# is not zero, the checkout might not be compatible with the
10123925Sgibbs		# svnversion being used.
10223925Sgibbs		${dir}/svnversion $(realpath ${0}) >/dev/null 2>&1
10323925Sgibbs		if [ $? -eq 0 ]; then
10423925Sgibbs			svnversion=${dir}/svnversion
10523925Sgibbs			break
10623925Sgibbs		fi
10723925Sgibbs	fi
10823925Sgibbsdone
10923925Sgibbs
11023925Sgibbsif [ -z "${svnversion}" ] && [ -x /usr/bin/svnliteversion ] ; then
11123925Sgibbs	/usr/bin/svnliteversion $(realpath ${0}) >/dev/null 2>&1
11223925Sgibbs	if [ $? -eq 0 ]; then
11339220Sgibbs		svnversion=/usr/bin/svnliteversion
11439220Sgibbs	else
11539220Sgibbs		svnversion=
11639220Sgibbs	fi
11739220Sgibbsfi
11839220Sgibbs
11923925Sgibbsfor dir in /usr/bin /usr/local/bin; do
12039220Sgibbs	if [ -x "${dir}/p4" ] && [ -z ${p4_cmd} ] ; then
12139220Sgibbs		p4_cmd=${dir}/p4
12239220Sgibbs	fi
12339220Sgibbsdone
12439220Sgibbsif [ -d "${SYSDIR}/../.git" ] ; then
12539220Sgibbs	for dir in /usr/bin /usr/local/bin; do
12639220Sgibbs		if [ -x "${dir}/git" ] ; then
12739220Sgibbs			git_cmd="${dir}/git --git-dir=${SYSDIR}/../.git"
12839220Sgibbs			break
12939220Sgibbs		fi
13039220Sgibbs	done
13139220Sgibbsfi
13239220Sgibbs
13339220Sgibbsif [ -d "${SYSDIR}/../.hg" ] ; then
13439220Sgibbs	for dir in /usr/bin /usr/local/bin; do
13539220Sgibbs		if [ -x "${dir}/hg" ] ; then
13639220Sgibbs			hg_cmd="${dir}/hg -R ${SYSDIR}/.."
13739220Sgibbs			break
13839220Sgibbs		fi
13939220Sgibbs	done
14023925Sgibbsfi
14123925Sgibbs
14223925Sgibbsif [ -n "$svnversion" ] ; then
14323925Sgibbs	svn=`cd ${SYSDIR} && $svnversion 2>/dev/null`
14423925Sgibbs	case "$svn" in
14523925Sgibbs	[0-9]*)	svn=" r${svn}" ;;
14623925Sgibbs	*)	unset svn ;;
14723925Sgibbs	esac
14823925Sgibbsfi
14923925Sgibbs
15023925Sgibbsif [ -n "$git_cmd" ] ; then
15123925Sgibbs	git=`$git_cmd rev-parse --verify --short HEAD 2>/dev/null`
15223925Sgibbs	svn=`$git_cmd svn find-rev $git 2>/dev/null`
15323925Sgibbs	if [ -n "$svn" ] ; then
15423925Sgibbs		svn=" r${svn}"
15523925Sgibbs		git="=${git}"
15623925Sgibbs	else
15723925Sgibbs		svn=`$git_cmd log | fgrep 'git-svn-id:' | head -1 | \
15823925Sgibbs		     sed -n 's/^.*@\([0-9][0-9]*\).*$/\1/p'`
15923925Sgibbs		if [ -z "$svn" ] ; then
16023925Sgibbs			svn=`$git_cmd log --format='format:%N' | \
16123925Sgibbs			     grep '^svn ' | head -1 | \
162			     sed -n 's/^.*revision=\([0-9][0-9]*\).*$/\1/p'`
163		fi
164		if [ -n "$svn" ] ; then
165			svn=" r${svn}"
166			git="+${git}"
167		else
168			git=" ${git}"
169		fi
170	fi
171	git_b=`$git_cmd rev-parse --abbrev-ref HEAD`
172	if [ -n "$git_b" ] ; then
173		git="${git}(${git_b})"
174	fi
175	if $git_cmd --work-tree=${SYSDIR}/.. diff-index \
176	    --name-only HEAD | read dummy; then
177		git="${git}-dirty"
178	fi
179fi
180
181if [ -n "$p4_cmd" ] ; then
182	p4version=`cd ${SYSDIR} && $p4_cmd changes -m1 "./...#have" 2>&1 | \
183		awk '{ print $2 }'`
184	case "$p4version" in
185	[0-9]*)
186		p4version=" ${p4version}"
187		p4opened=`cd ${SYSDIR} && $p4_cmd opened ./... 2>&1`
188		case "$p4opened" in
189		File*) ;;
190		//*)	p4version="${p4version}+edit" ;;
191		esac
192		;;
193	*)	unset p4version ;;
194	esac
195fi
196
197if [ -n "$hg_cmd" ] ; then
198	hg=`$hg_cmd id 2>/dev/null`
199	svn=`$hg_cmd svn info 2>/dev/null | \
200		awk -F': ' '/Revision/ { print $2 }'`
201	if [ -n "$svn" ] ; then
202		svn=" r${svn}"
203	fi
204	if [ -n "$hg" ] ; then
205		hg=" ${hg}"
206	fi
207fi
208
209cat << EOF > vers.c
210$COPYRIGHT
211#define SCCSSTR "@(#)${VERSION} #${v}${svn}${git}${hg}${p4version}: ${t}"
212#define VERSTR "${VERSION} #${v}${svn}${git}${hg}${p4version}: ${t}\\n    ${u}@${h}:${d}\\n"
213#define RELSTR "${RELEASE}"
214
215char sccs[sizeof(SCCSSTR) > 128 ? sizeof(SCCSSTR) : 128] = SCCSSTR;
216char version[sizeof(VERSTR) > 256 ? sizeof(VERSTR) : 256] = VERSTR;
217char compiler_version[] = "${compiler_v}";
218char ostype[] = "${TYPE}";
219char osrelease[sizeof(RELSTR) > 32 ? sizeof(RELSTR) : 32] = RELSTR;
220int osreldate = ${RELDATE};
221char kern_ident[] = "${i}";
222EOF
223
224echo $((v + 1)) > version
225