next-cvs_project_version.sh   [plain text]


#!/bin/sh
#ident $Id: next-cvs_project_version.sh,v 1.5 2004/10/26 08:44:50 davep Exp $

##
# Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
#
# @APPLE_LICENSE_HEADER_START@
# 
# The contents of this file constitute Original Code as defined in and
# are subject to the Apple Public Source License Version 1.1 (the
# "License").  You may not use this file except in compliance with the
# License.  Please obtain a copy of the License at
# http://www.apple.com/publicsource and read it before using this file.
# 
# This Original Code and all software distributed under the License are
# distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
# License for the specific language governing rights and limitations
# under the License.
# 
# @APPLE_LICENSE_HEADER_END@
##

# from /usr/bin/vers_string

test=test

# default vers file is ./CVSVersionInfo.txt
versFile=CVSVersionInfo.txt

cflag=0
fflag=0
lflag=0
Bflag=0
nflag=0

while $test $# -gt 0 ; do
	case $1 in
		-c) cflag=1;;
		-l) lflag=1;;
		-f) fflag=1;;
		-B) Bflag=1;;
		-n) nflag=1;;
		-V) versFile=$2;;
		*) argProjName=$1;;
	esac
	shift
done

#echo cflag $cflag
#echo fflag $fflag
#echo lflag $lflag
#echo Bflag $Bflag
#echo nflag $nflag

if $test '!' -r $versFile ; then
	# This used to call `$projectInfo -rootProjectDir -inDirectory $wd`
	# to try to get the vers file if it wasn't found in the working
	# directory, but the -rootProjectDir flag to projectInfo
	# is no longer supported.
	echo "error: could not find CVSVersionInfo.txt for project versioning" 1>&2
	exit 1
fi


isWinNT=`arch | grep winnt`

# on OpenStep For Windows we have to use gawk
case $isWinNT in
	*winnt*) awk=gawk;;
	*) awk=awk;;
esac


user=`$awk '/\\$\Id:/ {print $7;}' $versFile`
timestamp=`$awk '/\\$\Id:/ {print $5 " " $6;}' $versFile`
fileVers=`$awk '/\\$\Id:/ {print $4;}' $versFile`
name=`$awk '/^ProjectName:/ {print $2;}' $versFile`
tag=`$awk '/\\$\Name:/ {print $3;}' $versFile`
versNum=`$awk '/^ProjectVersion:/ {print $2;}' $versFile`


PROJ=${argProjName-$name}
clean_proj_name=`echo $PROJ | sed 's/[^0-9A-Za-z]/_/g'`


#debugging 
#echo user $user 
#echo timestamp $timestamp 
#echo fileVers $fileVers
#echo name $name
#echo PROJ $PROJ
#echo clean_proj_name $clean_proj_name
#echo tag $tag
#echo versNum $versNum


# the keyword name is the current tag and only gets filled in if 
# the files are extracted at that tag. If the tag has a value,
# then it is a released version, if the tag is '$' then
# it has no value and is a development version.
#
case $tag in
	'$') vers="$versNum.dev";;
	*)   vers=$versNum;;
esac

q='"'

if $test $fflag = 1 ; then
	echo $PROJ-$vers
elif $test $nflag = 1 ; then
	echo $versNum
else
	vers_str="Project:$PROJ Version:$vers (Checkpoint by:$user on:$timestamp revision:$fileVers)"

	if $test $lflag = 1 ; then	
		echo "const char "$clean_proj_name"_VERS_STRING[200] = $q@(#)$vers_str$q;"
	elif $test $cflag = 1 ; then
		echo "const char "$clean_proj_name"_VERS_STRING[200] = $q@(#)$vers_str$q;"
		echo "const char "$clean_proj_name"_VERS_NUM[32] = $q$vers$q;"
	else
		echo $vers_str
	fi
fi

exit 0