makesrctars revision 1.35
11.1Sjtc#! /bin/sh
21.3Smikel#
31.35Sperry#	$NetBSD: makesrctars,v 1.35 2009/04/03 22:36:35 perry Exp $
41.15Slukem#
51.15Slukem# makesrctars srcdir setdir
61.15Slukem#	Create source tarballs in setdir from the source under srcdir.
71.3Smikel#
81.1Sjtc
91.30Sapbprog="${0##*/}"
101.28Sapbrundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
111.28Sapb. "${rundir}/sets.subr"
121.17Slukem
131.17Slukem# set defaults
141.17Slukemxsrcdir=
151.34Slukemquiet=false
161.13Slukem
171.35SperryGZIP=-9n
181.1Sjtcexport GZIP
191.1Sjtc
201.17Slukemusage()
211.17Slukem{
221.17Slukem	cat 1>&2 <<USAGE
231.34SlukemUsage: ${prog} [-N password/group dir] [-q] [-x xsrcdir] srcdir setdir
241.22Sjmc	-N dir		location which contains master.passwd and group files
251.27Sjmc			(defaults to \${srcdir}/etc)
261.34Slukem	-q		quiet operation
271.17Slukem	-x xsrcdir	build xsrc.tgz from xsrcdir
281.17Slukem	srcdir		location of sources
291.17Slukem	setdir		where to write the .tgz files to
301.17SlukemUSAGE
311.17Slukem	exit 1
321.17Slukem}
331.17Slukem
341.34Slukemmsg()
351.34Slukem{
361.34Slukem	$quiet || echo $*
371.34Slukem}
381.34Slukem
391.34Slukem
401.17Slukem# handle args
411.34Slukemwhile getopts N:qx: ch; do
421.17Slukem	case ${ch} in
431.34Slukem	q)
441.34Slukem		quiet=true
451.34Slukem		;;
461.27Sjmc	x)
471.30Sapb		xsrcdir="${OPTARG}"
481.17Slukem		;;
491.22Sjmc	N)
501.30Sapb		PASSWD="${OPTARG}"
511.22Sjmc		;;
521.17Slukem	*)
531.17Slukem		usage
541.17Slukem		;;
551.17Slukem	esac
561.17Slukemdone
571.17Slukemshift $((${OPTIND} - 1))
581.17Slukem
591.15Slukemif [ $# -ne 2 ]; then
601.22Sjmc	usage
611.1Sjtcfi
621.30Sapbsrcdir="$1"
631.30Sapbsetdir="$2"
641.30Sapb: ${PASSWD:="${srcdir}/etc"}
651.1Sjtc
661.15Slukemif [ ! -d "${setdir}" ]; then
671.34Slukem	echo >&2 "${prog}: ${setdir} is not a directory"
681.1Sjtc	exit 1
691.1Sjtcfi
701.1Sjtc
711.15Slukemmakeset()
721.22Sjmc{(
731.30Sapb	set="${1}.tgz"
741.15Slukem	shift
751.30Sapb	dir="$1"
761.22Sjmc	shift
771.30Sapb	intmp="/tmp/in$$"
781.34Slukem	msg "Creating ${set}"
791.22Sjmc	if [ "${dir}" != "." ]; then
801.30Sapb		cd "${dir}"
811.22Sjmc		srcprefix="${srcprefix}/${dir}"
821.22Sjmc	fi
831.22Sjmc	# Gets rid of any obj dirs and things below it 
841.30Sapb	echo "obj" > "${intmp}"
851.30Sapb	egrep="$*"
861.30Sapb	if [ "${egrep}" = "" ]; then
871.27Sjmc		egrep='.'
881.22Sjmc	fi
891.15Slukem	set -f
901.30Sapb	${MTREE} -c -X "${intmp}" | ${MTREE} -C -k type | \
911.30Sapb		${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \
921.29Sapb		${SED} -e 's:type=file:& mode=0664:' \
931.22Sjmc			-e 's:type=dir:& mode=0775:' \
941.31Shubertf			-e 's:$: uname=root gname=wsrc:' \
951.32Stron			-e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \
961.31Shubertf			-e '/^\.\/build.sh /s:\(mode\)=[0-9]*:\1=0775:' | \
971.30Sapb		${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \
981.29Sapb		${GZIP_CMD} > "${setdir}/${set}"
991.30Sapb	rm -f "${intmp}"
1001.22Sjmc)}
1011.15Slukem
1021.15Slukem
1031.17Slukem# create (base)src sets
1041.17Slukem#
1051.17Slukem
1061.17Slukemif ! cd "${srcdir}"; then
1071.34Slukem	echo >&2 "${prog}: can't chdir to ${srcdir}"
1081.17Slukem	exit 1
1091.17Slukemfi
1101.17Slukem
1111.17Slukemsrcprefix=usr/src
1121.22Sjmcexport setdir MTREE PAX CKSUM GZIP PASSWD srcprefix
1131.22Sjmc
1141.33Sjnemethmakeset src . -v '^\.\/gnu|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config|^\.\/common'
1151.22Sjmc
1161.22Sjmcmakeset gnusrc gnu
1171.17Slukem
1181.33Sjnemethmakeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common'
1191.1Sjtc
1201.22Sjmcmakeset sharesrc share
1211.6Sperry
1221.17Slukem
1231.17Slukem# create xsrc sets
1241.17Slukem#
1251.17Slukemif [ -n "${xsrcdir}" ]; then
1261.17Slukem	if ! cd "${xsrcdir}"; then
1271.34Slukem		echo >&2 "${prog}: can't chdir to ${xsrcdir}"
1281.17Slukem		exit 1
1291.17Slukem	fi
1301.17Slukem	srcprefix=usr/xsrc
1311.17Slukem	makeset xsrc .
1321.17Slukemfi
1331.17Slukem
1341.17Slukem
1351.34Slukemmsg "Creating checksum files"
1361.30Sapb(cd "${setdir}"
1371.13Slukem	${CKSUM} -o1 *.tgz > BSDSUM
1381.13Slukem	${CKSUM}     *.tgz > CKSUM
1391.21Sjmc	${CKSUM} -a md5  *.tgz > MD5
1401.13Slukem	${CKSUM} -o2 *.tgz > SYSVSUM
1411.21Sjmc	${CKSUM} -a sha512 *.tgz > SHA512
1421.13Slukem)
1431.27Sjmcexit 0
144