makesrctars revision 1.39
11.1Sjtc#! /bin/sh
21.3Smikel#
31.39Schristos#	$NetBSD: makesrctars,v 1.39 2014/01/07 13:32:38 christos 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.38SuebayasiUsage: ${prog} [-N password/group dir] [-q] [-x xsrcdir] [-y extsrcsrcdir] 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.38Suebayasi	-y extsrcsrcdir	build extsrc.tgz from extsrcsrcdir
291.17Slukem	srcdir		location of sources
301.17Slukem	setdir		where to write the .tgz files to
311.17SlukemUSAGE
321.17Slukem	exit 1
331.17Slukem}
341.17Slukem
351.34Slukemmsg()
361.34Slukem{
371.34Slukem	$quiet || echo $*
381.34Slukem}
391.34Slukem
401.34Slukem
411.17Slukem# handle args
421.38Suebayasiwhile getopts N:qx:y: ch; do
431.17Slukem	case ${ch} in
441.34Slukem	q)
451.34Slukem		quiet=true
461.34Slukem		;;
471.27Sjmc	x)
481.30Sapb		xsrcdir="${OPTARG}"
491.17Slukem		;;
501.38Suebayasi	y)
511.38Suebayasi		extsrcsrcdir="${OPTARG}"
521.38Suebayasi		;;
531.22Sjmc	N)
541.30Sapb		PASSWD="${OPTARG}"
551.22Sjmc		;;
561.17Slukem	*)
571.17Slukem		usage
581.17Slukem		;;
591.17Slukem	esac
601.17Slukemdone
611.17Slukemshift $((${OPTIND} - 1))
621.17Slukem
631.15Slukemif [ $# -ne 2 ]; then
641.22Sjmc	usage
651.1Sjtcfi
661.30Sapbsrcdir="$1"
671.30Sapbsetdir="$2"
681.30Sapb: ${PASSWD:="${srcdir}/etc"}
691.1Sjtc
701.15Slukemif [ ! -d "${setdir}" ]; then
711.34Slukem	echo >&2 "${prog}: ${setdir} is not a directory"
721.1Sjtc	exit 1
731.1Sjtcfi
741.1Sjtc
751.15Slukemmakeset()
761.22Sjmc{(
771.30Sapb	set="${1}.tgz"
781.15Slukem	shift
791.30Sapb	dir="$1"
801.22Sjmc	shift
811.30Sapb	intmp="/tmp/in$$"
821.34Slukem	msg "Creating ${set}"
831.22Sjmc	if [ "${dir}" != "." ]; then
841.30Sapb		cd "${dir}"
851.22Sjmc		srcprefix="${srcprefix}/${dir}"
861.22Sjmc	fi
871.22Sjmc	# Gets rid of any obj dirs and things below it 
881.30Sapb	echo "obj" > "${intmp}"
891.30Sapb	egrep="$*"
901.30Sapb	if [ "${egrep}" = "" ]; then
911.27Sjmc		egrep='.'
921.22Sjmc	fi
931.15Slukem	set -f
941.36Sapb	${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \
951.30Sapb		${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \
961.29Sapb		${SED} -e 's:type=file:& mode=0664:' \
971.22Sjmc			-e 's:type=dir:& mode=0775:' \
981.31Shubertf			-e 's:$: uname=root gname=wsrc:' \
991.32Stron			-e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \
1001.39Schristos			-e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \
1011.30Sapb		${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \
1021.29Sapb		${GZIP_CMD} > "${setdir}/${set}"
1031.30Sapb	rm -f "${intmp}"
1041.22Sjmc)}
1051.15Slukem
1061.15Slukem
1071.17Slukem# create (base)src sets
1081.17Slukem#
1091.17Slukem
1101.17Slukemif ! cd "${srcdir}"; then
1111.34Slukem	echo >&2 "${prog}: can't chdir to ${srcdir}"
1121.17Slukem	exit 1
1131.17Slukemfi
1141.17Slukem
1151.17Slukemsrcprefix=usr/src
1161.22Sjmcexport setdir MTREE PAX CKSUM GZIP PASSWD srcprefix
1171.22Sjmc
1181.33Sjnemethmakeset src . -v '^\.\/gnu|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config|^\.\/common'
1191.22Sjmc
1201.22Sjmcmakeset gnusrc gnu
1211.17Slukem
1221.33Sjnemethmakeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common'
1231.1Sjtc
1241.22Sjmcmakeset sharesrc share
1251.6Sperry
1261.17Slukem
1271.17Slukem# create xsrc sets
1281.17Slukem#
1291.17Slukemif [ -n "${xsrcdir}" ]; then
1301.17Slukem	if ! cd "${xsrcdir}"; then
1311.34Slukem		echo >&2 "${prog}: can't chdir to ${xsrcdir}"
1321.17Slukem		exit 1
1331.17Slukem	fi
1341.17Slukem	srcprefix=usr/xsrc
1351.17Slukem	makeset xsrc .
1361.17Slukemfi
1371.17Slukem
1381.17Slukem
1391.38Suebayasi# create extsrc sets
1401.38Suebayasi#
1411.38Suebayasiif [ -n "${extsrcsrcdir}" ]; then
1421.38Suebayasi	if ! cd "${extsrcsrcdir}"; then
1431.38Suebayasi		echo >&2 "${prog}: can't chdir to ${extsrcsrcdir}"
1441.38Suebayasi		exit 1
1451.38Suebayasi	fi
1461.38Suebayasi	srcprefix=usr/extsrc
1471.38Suebayasi	makeset extsrc .
1481.38Suebayasifi
1491.38Suebayasi
1501.38Suebayasi
1511.34Slukemmsg "Creating checksum files"
1521.30Sapb(cd "${setdir}"
1531.21Sjmc	${CKSUM} -a md5  *.tgz > MD5
1541.21Sjmc	${CKSUM} -a sha512 *.tgz > SHA512
1551.13Slukem)
1561.27Sjmcexit 0
157