1#! /bin/sh 2# 3# $NetBSD: heimdal2netbsd,v 1.3 2011/04/14 18:16:21 elric Exp $ 4# 5# Copyright (c) 2011 The NetBSD Foundation, Inc. 6# All rights reserved. 7# 8# Redistribution and use in source and binary forms, with or without 9# modification, are permitted provided that the following conditions 10# are met: 11# 1. Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# 2. Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in the 15# documentation and/or other materials provided with the distribution. 16# 17# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 18# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 19# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 21# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27# POSSIBILITY OF SUCH DAMAGE. 28# 29# heimdal2netbsd: convert a heimdal source tree into a 30# netbsd heimdal source tree, under src/crypto/external/bsd/heimdal/dist 31# based on bind2netbsd by Bernd Ernesti and changes by Simon Burge 32# 33# Rough instructions for importing new heimdal release from their git 34# repository: 35# 36# $ export SRCDIR=/usr/src 37# $ export HEIMDAL_SRCDIR=src/crypto/external/bsd/heimdal 38# $ cd /some/where/temporary 39# $ git clone git://svn.h5l.org/heimdal.git 40# $ sh $SRCDIR/$HEIMDAL_SRCDIR/heimdal2netbsd heimdal `pwd` 41# $ cd $HEIMDAL_SRCDIR/dist 42# $ cvs -d ... import $HEIMDAL_SRCDIR/dist HEIMDAL head-20110317 43# $ cd /some/where/temporary/heimdal 44# $ autoreconf -f -i 45# $ ./configure 46# $ make 47# >>> merge newly generated config.h 48# >>> with $HEIMDAL_SRCDIR/include/config.h 49# >>> and check out diffs in generated headers 50# >>> and C files. 51# $ cd .. 52# $ rm -r src heimdal 53# $ cd $SRCDIR/$HEIMDAL_SRCDIR 54# $ cvs commit -m "Updated generated files for Heimdal head-20110317" 55# 56# - check makefiles to see if any extra sources have been added. 57# - update distrib/sets if necessary. 58 59prog="$(basename "$0")" 60r=$1 61d=$2/src/crypto/external/bsd/heimdal/dist 62 63if [ $# -ne 2 ]; then echo "${prog} src dest"; exit 1; fi 64 65 66case "$d" in 67 /*) 68 ;; 69 *) 70 d="$(pwd)/$d" 71 ;; 72esac 73 74case "$r" in 75 /*) 76 ;; 77 *) 78 r=$(pwd)/$r 79 ;; 80esac 81 82echo preparing directory $d 83rm -rf $d 84mkdir -p $d 85 86### Copy the files and directories 87echo copying $r to $d 88cd $r 89pax -rw * $d 90 91### Remove unneeded files 92#echo removing unneeded directories and files 93#find $d/po -name '*[0-9] XXX: 94find $d -name '*.cat[0-9]' | xargs rm -f && echo removed catman pages 95find $d -name '*.info' | xargs rm -f && echo removed info pages 96rm -rf $d/appl && echo removed appl 97rm -rf $d/lib/libedit && echo removed lib/libedit 98rm -rf $d/lib/sqlite && echo removed lib/sqlite 99rm -rf $d/doc/standardisation && echo removed doc/standardisation 100 101# Fix man pages 102find $d -type f -name '*.[1358]' -print | while read f; do 103 sed \ 104 -e 's,\.Os HEIMDAL,.Os,' \ 105 -e 's,\.Pa krb5.h,.Pa krb5/krb5.h,' \ 106 -e 's,\.In krb5.h,.In krb5/krb5.h,' \ 107 -e 's,\.Pa gssapi.h,.Pa gssapi/gssapi.h,' \ 108 -e 's,\.In gssapi.h,.In gssapi/gssapi.h,' \ 109 -e 's,#include <krb5.h>,#include <krb5/krb5.h>,' \ 110 < $f > /tmp/heimdal1f$$ && mv /tmp/heimdal1f$$ $f && \ 111 echo fixing man page $f 112done 113 114# Fix include usage 115 116KRB5_INCRE="asn1-common|asn1_err" 117KRB5_INCRE="$KRB5_INCRE|base64" 118KRB5_INCRE="$KRB5_INCRE|cms_asn1" 119KRB5_INCRE="$KRB5_INCRE|com_err" 120KRB5_INCRE="$KRB5_INCRE|com_right" 121KRB5_INCRE="$KRB5_INCRE|crmf_asn1" 122KRB5_INCRE="$KRB5_INCRE|der|der-protos" 123KRB5_INCRE="$KRB5_INCRE|digest_asn1" 124KRB5_INCRE="$KRB5_INCRE|getarg" 125KRB5_INCRE="$KRB5_INCRE|hdb|hdb_err|hdb-protos|hdb_asn1" 126KRB5_INCRE="$KRB5_INCRE|heim_asn1|heim_err" 127KRB5_INCRE="$KRB5_INCRE|heimbase" 128KRB5_INCRE="$KRB5_INCRE|heimntlm|heimntlm-protos" 129KRB5_INCRE="$KRB5_INCRE|hex" 130KRB5_INCRE="$KRB5_INCRE|hx509|hx509-protos|hx509_err" 131KRB5_INCRE="$KRB5_INCRE|k524_err" 132KRB5_INCRE="$KRB5_INCRE|kafs" 133KRB5_INCRE="$KRB5_INCRE|kcm|kcm-protos" 134KRB5_INCRE="$KRB5_INCRE|kdc|kdc-protos" 135KRB5_INCRE="$KRB5_INCRE|krb5|krb5-private|krb5-protos|krb5-types" 136KRB5_INCRE="$KRB5_INCRE|krb5_asn1|krb5_err|krb5_ccapi" 137KRB5_INCRE="$KRB5_INCRE|krb5-v4compat" 138KRB5_INCRE="$KRB5_INCRE|krb_err" 139KRB5_INCRE="$KRB5_INCRE|kx509_asn1" 140KRB5_INCRE="$KRB5_INCRE|ntlm_err" 141KRB5_INCRE="$KRB5_INCRE|ocsp_asn1" 142KRB5_INCRE="$KRB5_INCRE|parse_bytes|parse_time|parse_units" 143KRB5_INCRE="$KRB5_INCRE|pkcs8_asn1|pkcs9_asn1|pkcs10_asn1|pkcs12_asn1" 144KRB5_INCRE="$KRB5_INCRE|pkinit_asn1" 145KRB5_INCRE="$KRB5_INCRE|resolve" 146KRB5_INCRE="$KRB5_INCRE|rfc2459_asn1" 147KRB5_INCRE="$KRB5_INCRE|roken|roken-common" 148KRB5_INCRE="$KRB5_INCRE|rtbl" 149KRB5_INCRE="$KRB5_INCRE|sl|ss" 150KRB5_INCRE="$KRB5_INCRE|wind|wind_err" 151KRB5_INCRE="$KRB5_INCRE|xdbm" 152 153GSS_INCRE="gssapi|gssapi_krb5|gssapi_spnego|gssapi_ntlm|gssapi_oid" 154 155KADM5_INCRE="admin|kadm5-protos|kadm5-pwcheck|kadm5_err" 156 157find $d -type f -name '*.[ch]' -a ! -name compile_et.? -print | while read f; do 158 sed -E \ 159 -e "s,#include <($GSS_INCRE)\\.h>,#include <gssapi/\\1.h>," \ 160 -e "s,#include \"($KRB5_INCRE)\\.h\",#include <krb5/\\1.h>," \ 161 -e "s,#include <($KRB5_INCRE)\\.h>,#include <krb5/\\1.h>," \ 162 -e "s,#include <($KADM5_INCRE)\\.h>,#include <kadm5/\\1.h>," \ 163 < $f > /tmp/heimdal1f$$ && mv /tmp/heimdal1f$$ $f && \ 164 echo fixing include paths in $f 165done 166 167# 168# In these files, we want only to fix the paths in the generated files, not 169# in the file itself. To do this, we search for "#include meaning that 170# it can't be on the left column. 171 172for f in $d/lib/sl/slc-gram.y $d/lib/com_err/compile_et.c; do 173 sed -E -e "s,(.#include <)($KRB5_INCRE)\\.h>,\\1krb5/\\2.h>," \ 174 < $f > /tmp/heimdal1f$$ && mv /tmp/heimdal1f$$ $f && \ 175 echo fixing include paths in $f 176done 177 178# Freeze imported NetBSD RCSID's. 179find $d -type f -print | xargs egrep -l '\$NetBSD:' | while read f; do 180 sed \ 181 -e 's/\$\(NetBSD.*\) \$/\1/' \ 182 < $f > /tmp/heimdal1f$$ && mv /tmp/heimdal1f$$ $f && \ 183 echo froze NetBSD RCSID for $f 184done 185 186# Convert unexpanded RCSID's to the NetBSD way. 187find $d -type f -print | xargs egrep -l 'RCSID\("\$Id\$"\)' | while read f; do 188 sed -e 's/RCSID("\$\Id\$")/__RCSID("\$NetBSD\$")/' \ 189 < $f > /tmp/heimdal1f$$ && mv /tmp/heimdal1f$$ $f && \ 190 echo converted RCSID to NetBSD for $f 191done 192 193### Remove the $'s around RCS tags 194find $d -type f -print | xargs egrep -l \ 195 '\$(Author|Date|Header|Id|Locker|Log|Name|RCSfile|Revision|Source|State)' | 196 while read f; do 197 sed \ 198 -e 's/\$\(Author.*\) \$/\1/' \ 199 -e 's/\$\(Date.*\) \$/\1/' \ 200 -e 's/\$\(Header.*\) \$/\1/' \ 201 -e 's/\$\(Id.*\)\$/\1/' \ 202 -e 's/\$\(Locker.*\) \$/\1/' \ 203 -e 's/\$\(Log.*\) \$/\1/' \ 204 -e 's/\$\(Name.*\) \$/\1/' \ 205 -e 's/\$\(RCSfile.*\) \$/\1/' \ 206 -e 's/\$\(Revision.*\) \$/\1/' \ 207 -e 's/\$\(Source.*\) \$/\1/' \ 208 -e 's/\$\(State.*\) \$/\1/' \ 209 < $f > /tmp/heimdal1f$$ && mv /tmp/heimdal1f$$ $f && \ 210 echo removed \$RCS tag from $f 211done 212 213### Add our NetBSD RCS Id 214find $d -type f -name '*.[chly]' -print | while read c; do 215 sed 1q < $c | grep -q '\$NetBSD' || ( 216echo "/* \$NetBSD\$ */" >/tmp/${prog}3n$$ 217echo "" >>/tmp/${prog}3n$$ 218cat $c >> /tmp/${prog}3n$$ 219mv /tmp/${prog}3n$$ $c && echo added NetBSD RCS tag to $c 220 ) 221done 222 223find $d -type f -name '*.[0-9]' -print | while read m; do 224 sed 1q < $m | grep -q '\$NetBSD' || ( 225echo ".\\\" \$NetBSD\$" >/tmp/${prog}2m$$ 226echo ".\\\"" >>/tmp/${prog}2m$$ 227cat $m >> /tmp/${prog}2m$$ 228mv /tmp/${prog}2m$$ $m && echo added NetBSD RCS tag to $m 229 ) 230done 231 232find $d -type f -name '*.texi' -print | while read t; do 233 sed "2 s/^/@c \$NetBSD\$\\ 234/" < $t > /tmp/${prog}4t$$ 235 mv /tmp/${prog}4t$$ $t && echo added NetBSD RCS tag to $t 236done 237 238echo done 239 240### Clean up any CVS directories that might be around. 241echo "cleaning up CVS residue." 242( 243 cd $d 244 find . -type d -name "CVS" -print | xargs rm -r 245) 246echo done 247 248echo "cleaning up git residue." 249rm -rf $d/.git 250 251### Fixing file and directory permissions. 252echo "Fixing file/directory permissions." 253( 254 cd $d 255 find . -type f -print | xargs chmod u+rw,go+r 256 find . -type d -print | xargs chmod u+rwx,go+rx 257) 258echo done 259 260exit 0 261