xref: /freebsd/crypto/krb5/src/util/mkrel (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
1#!/bin/sh
2set -e
3repository=git.mit.edu:/git/krb5.git
4dodoc=t
5dosrc=t
6checkout=t
7multitar=nil
8: ${TAR=tar}
9while test $# -gt 2; do
10	case $1 in
11	--srconly)
12		dodoc=nil;;
13	--doconly)
14		dosrc=nil;;
15	--multi*)
16		multitar=t;;
17	--repository)
18		shift; repository=$1;;
19	--nocheckout)
20		checkout=nil;;
21	esac
22	shift
23done
24if test $# -lt 2; then
25	echo "usage: $0 [opts] release-tag release-dir"
26	echo "	release-tag is relative to $repository/"
27	exit 1
28fi
29
30reltag=$1
31reldir=$2
32
33relmajor=0
34relminor=0
35relpatch=0
36relhead=
37# reltail=
38reldate=`date +%Y%m%d`
39
40case "$reldir" in
41*/*)
42	echo "release-dir may not contain slashes."
43	exit 1
44	;;
45*" "*|*"	"*)
46	echo "release-dir may  not contain whitespace."
47	exit 1
48	;;
49krb5-*.*.*-*)
50	release=`echo $reldir|sed -e 's/krb5-//'`
51	relhead=`echo $release|sed -e 's/-.*//'`
52	reltail=`echo $release|sed -e 's/.*-//'`
53	relmajor=`echo $relhead|awk -F. '{print $1}'`
54	relminor=`echo $relhead|awk -F. '{print $2}'`
55	relpatch=`echo $relhead|awk -F. '{print $3}'`
56	;;
57krb5-*.*.*)
58	release=`echo $reldir|sed -e 's/krb5-//'`
59	relmajor=`echo $release|awk -F. '{print $1}'`
60	relminor=`echo $release|awk -F. '{print $2}'`
61	relpatch=`echo $release|awk -F. '{print $3}'`
62	;;
63krb5-*.*-current)
64	release=`echo $reldir|sed -e 's/krb5-//'`
65	relhead=`echo $release|sed -e 's/-.*//'`
66	relmajor=`echo $relhead|awk -F. '{print $1}'`
67	relminor=`echo $relhead|awk -F. '{print $2}'`
68	release=${relhead}-$reldate
69	;;
70krb5-*.*-*)
71	release=`echo $reldir|sed -e 's/krb5-//'`
72	relhead=`echo $release|sed -e 's/-.*//'`
73	reltail=`echo $release|sed -e 's/.*-//'`
74	relmajor=`echo $relhead|awk -F. '{print $1}'`
75	relminor=`echo $relhead|awk -F. '{print $2}'`
76	;;
77krb5-*.*)
78	release=`echo $reldir|sed -e 's/krb5-//'`
79	relmajor=`echo $release|awk -F. '{print $1}'`
80	relminor=`echo $release|awk -F. '{print $2}'`
81	;;
82krb5-current)
83	release=current-$reldate
84	;;
85*)
86	release="$reldir"
87	;;
88esac
89
90echo "release=$release"
91echo "major=$relmajor minor=$relminor patch=$relpatch"
92
93# $release is used for send-pr
94# $reltag, $release, $reldate are used for brand.c currently
95# $relmajor, $relminor, $relpatch are used for patchlevel.h currently
96
97if test $checkout = t; then
98	echo "Checking out krb5 with tag $reltag into directory $reldir..."
99	git clone -q -n $repository $reldir
100	(cd $reldir && git checkout -q $reltag)
101fi
102
103#
104# $newstyle = t if patchlevel.h is the master version stamp file.  If
105# so, we don't edit it here.
106#
107if grep KRB5_RELDATE $reldir/src/patchlevel.h > /dev/null 2>&1; then
108	newstyle=t;
109else
110	newstyle=nil;
111fi
112
113if test $newstyle = t; then
114	echo "parsing new style patchlevel.h..."
115	eval `sed -n 's/#define \([A-Z0-9_]*\)[ \t]*\(.*\)/\1=\2/p' < $reldir/src/patchlevel.h`
116	if test "$KRB5_RELTAG" != $reltag && \
117		test "$KRB5_RELTAG" != `echo $reltag|sed 's%[^/]*/%%'` ; then
118		echo "WARNING: patchlevel.h '$KRB5_RELTAG' != $reltag"
119	fi
120	if test "$KRB5_MAJOR_RELEASE" != "$relmajor" || \
121		test "$KRB5_MINOR_RELEASE" != "$relminor" || \
122		test "$KRB5_PATCHLEVEL" != "$relpatch" || \
123		( test -n "$reltail" && \
124			test "$KRB5_RELTAIL" != "$reltail" ); then
125
126		echo "WARNING: patchlevel.h $KRB5_MAJOR_RELEASE.$KRB5_MINOR_RELEASE.$KRB5_PATCHLEVEL${KRB5_RELTAIL+-$KRB5_RELTAIL} != $relmajor.$relminor.$relpatch${reltail+-$reltail}"
127	fi
128else
129	echo "old style patchlevel.h"
130fi
131
132echo "Editing release-specific files..."
133
134if test $newstyle = t; then
135	(cd $reldir/src && \
136		sed -e '/#[a-z 	]*KRB5_RELDATE/c\
137#define KRB5_RELDATE "'"$reldate"'"' patchlevel.h > patchlevel.h.new && \
138		mv patchlevel.h.new patchlevel.h)
139else
140
141	(cd $reldir/src/lib/krb5/krb && \
142		sed -e '/static/s%KRB5_BRAND:[^"]*"%'"KRB5_BRAND: $reltag $release $reldate"'"%' \
143			brand.c > brand.c.new && mv brand.c.new brand.c; \
144		rm -f brand.c.new)
145
146	(cd $reldir/src/util/send-pr && \
147		sed -e 's%RELEASE=.*%RELEASE='"krb5-$release"'%' Makefile.in \
148			> Makefile.in.new && mv Makefile.in.new Makefile.in)
149
150	(cd $reldir/src && \
151		cat > patchlevel.h <<EOF
152#define KRB5_MAJOR_RELEASE $relmajor
153#define KRB5_MINOR_RELEASE $relminor
154#define KRB5_PATCHLEVEL    $relpatch
155EOF
156	)
157fi
158
159if test $dosrc = t; then
160	if test -d $reldir/src/util/autoconf; then
161		echo "Building autoconf..."
162		(cd $reldir/src/util/autoconf
163			M4=gm4 ./configure
164			make)
165	fi
166	echo "Creating configure scripts..."
167	(cd $reldir/src; autoreconf -v)
168
169	if test -d $reldir/src/util/autoconf; then
170		echo "Cleaning src/util/autoconf..."
171		(cd $reldir/src/util/autoconf; make distclean)
172	fi
173fi
174
175echo "Nuking unneeded files..."
176find $reldir \( -name TODO -o -name todo -o -name .cvsignore \
177	-o -name .gitignore -o -name BADSYMS -o -name .Sanitize \
178	-o -name .rconf \) -print | xargs rm -f || true
179find $reldir -depth -type d \( -name autom4te.cache \
180	-o -name \$ac_config_fragdir \) -exec rm -rf {} \; || true
181rm -rf $reldir/.git || true
182
183if test $dodoc = t; then
184	echo "Building doc..."
185	(cd $reldir/src/doc && make -f Makefile.in \
186	    top_srcdir=.. srcdir=. SPHINX_ARGS=-W PYTHON=python3 html pdf)
187	(cd $reldir/src/doc && make -f Makefile.in \
188	    top_srcdir=.. srcdir=. SPHINX_ARGS=-W PYTHON=python3 clean)
189fi
190
191echo "Generating tarfiles..."
192GZIP=-9; export GZIP
193if test $multitar = t; then
194	if test -d $reldir/src/lib/des425; then
195		des425=$reldir/src/lib/des425
196	fi
197	if test -f $reldir/NOTICE;
198		then notice=$reldir/NOTICE
199	fi
200	if test $dosrc = t; then
201		$TAR --exclude $reldir/src/lib/crypto \
202			--exclude $reldir/src/lib/des425 \
203			--exclude $reldir/doc \
204			-zcf ${reldir}.src.tar.gz $reldir
205
206		$TAR zcf ${reldir}.crypto.tar.gz \
207			$reldir/src/lib/crypto \
208			$des425
209	fi
210	if test $dodoc = t; then
211		$TAR zcf ${reldir}.doc.tar.gz $reldir/doc $reldir/README $notice
212	fi
213	ls -l ${reldir}.*.tar.gz
214fi
215
216$TAR zcf ${reldir}.tar.gz $reldir
217ls -l ${reldir}.tar.gz
218
219echo "Done."
220
221exit 0
222