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