makesrctars revision 1.43
11.1Sjtc#! /bin/sh
21.3Smikel#
31.43Smartin#	$NetBSD: makesrctars,v 1.43 2021/09/07 18:02:46 martin 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.43Smartin	# Gets rid of any obj dirs and things below it. Also skip
881.43Smartin	# .hg or .git repositories (if we got the source via git
891.43Smartin	# or mercurial)
901.43Smartin	printf "obj\n./.git\n./.hg\n" > "${intmp}"
911.30Sapb	egrep="$*"
921.30Sapb	if [ "${egrep}" = "" ]; then
931.27Sjmc		egrep='.'
941.22Sjmc	fi
951.15Slukem	set -f
961.36Sapb	${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \
971.30Sapb		${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \
981.29Sapb		${SED} -e 's:type=file:& mode=0664:' \
991.22Sjmc			-e 's:type=dir:& mode=0775:' \
1001.31Shubertf			-e 's:$: uname=root gname=wsrc:' \
1011.32Stron			-e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \
1021.39Schristos			-e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \
1031.30Sapb		${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \
1041.29Sapb		${GZIP_CMD} > "${setdir}/${set}"
1051.30Sapb	rm -f "${intmp}"
1061.22Sjmc)}
1071.15Slukem
1081.15Slukem
1091.17Slukem# create (base)src sets
1101.17Slukem#
1111.17Slukem
1121.17Slukemif ! cd "${srcdir}"; then
1131.34Slukem	echo >&2 "${prog}: can't chdir to ${srcdir}"
1141.17Slukem	exit 1
1151.17Slukemfi
1161.17Slukem
1171.17Slukemsrcprefix=usr/src
1181.22Sjmcexport setdir MTREE PAX CKSUM GZIP PASSWD srcprefix
1191.22Sjmc
1201.41Schristosmakeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config'
1211.22Sjmc
1221.41Schristosmakeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3'
1231.17Slukem
1241.33Sjnemethmakeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common'
1251.1Sjtc
1261.22Sjmcmakeset sharesrc share
1271.6Sperry
1281.17Slukem
1291.17Slukem# create xsrc sets
1301.17Slukem#
1311.17Slukemif [ -n "${xsrcdir}" ]; then
1321.17Slukem	if ! cd "${xsrcdir}"; then
1331.34Slukem		echo >&2 "${prog}: can't chdir to ${xsrcdir}"
1341.17Slukem		exit 1
1351.17Slukem	fi
1361.17Slukem	srcprefix=usr/xsrc
1371.17Slukem	makeset xsrc .
1381.17Slukemfi
1391.17Slukem
1401.17Slukem
1411.38Suebayasi# create extsrc sets
1421.38Suebayasi#
1431.38Suebayasiif [ -n "${extsrcsrcdir}" ]; then
1441.38Suebayasi	if ! cd "${extsrcsrcdir}"; then
1451.38Suebayasi		echo >&2 "${prog}: can't chdir to ${extsrcsrcdir}"
1461.38Suebayasi		exit 1
1471.38Suebayasi	fi
1481.38Suebayasi	srcprefix=usr/extsrc
1491.38Suebayasi	makeset extsrc .
1501.38Suebayasifi
1511.38Suebayasi
1521.38Suebayasi
1531.34Slukemmsg "Creating checksum files"
1541.30Sapb(cd "${setdir}"
1551.42Smartin	${CKSUM} -a md5  *.tgz *.tar.xz > MD5
1561.42Smartin	${CKSUM} -a sha512 *.tgz *.tar.xz > SHA512
1571.13Slukem)
1581.27Sjmcexit 0
159