11.1Sjtc#! /bin/sh
21.3Smikel#
31.46Schristos#	$NetBSD: makesrctars,v 1.46 2023/11/08 13:02:47 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.44SlukemUsage: ${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.46Schristosumask 022
411.17Slukem# handle args
421.44Slukemwhile getopts N:qx: 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.22Sjmc	N)
511.30Sapb		PASSWD="${OPTARG}"
521.22Sjmc		;;
531.17Slukem	*)
541.17Slukem		usage
551.17Slukem		;;
561.17Slukem	esac
571.17Slukemdone
581.17Slukemshift $((${OPTIND} - 1))
591.17Slukem
601.15Slukemif [ $# -ne 2 ]; then
611.22Sjmc	usage
621.1Sjtcfi
631.30Sapbsrcdir="$1"
641.30Sapbsetdir="$2"
651.30Sapb: ${PASSWD:="${srcdir}/etc"}
661.1Sjtc
671.15Slukemif [ ! -d "${setdir}" ]; then
681.34Slukem	echo >&2 "${prog}: ${setdir} is not a directory"
691.1Sjtc	exit 1
701.1Sjtcfi
711.1Sjtc
721.15Slukemmakeset()
731.22Sjmc{(
741.30Sapb	set="${1}.tgz"
751.15Slukem	shift
761.30Sapb	dir="$1"
771.22Sjmc	shift
781.30Sapb	intmp="/tmp/in$$"
791.34Slukem	msg "Creating ${set}"
801.22Sjmc	if [ "${dir}" != "." ]; then
811.30Sapb		cd "${dir}"
821.22Sjmc		srcprefix="${srcprefix}/${dir}"
831.22Sjmc	fi
841.43Smartin	# Gets rid of any obj dirs and things below it. Also skip
851.43Smartin	# .hg or .git repositories (if we got the source via git
861.43Smartin	# or mercurial)
871.43Smartin	printf "obj\n./.git\n./.hg\n" > "${intmp}"
881.30Sapb	egrep="$*"
891.30Sapb	if [ "${egrep}" = "" ]; then
901.27Sjmc		egrep='.'
911.22Sjmc	fi
921.15Slukem	set -f
931.36Sapb	${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \
941.30Sapb		${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \
951.29Sapb		${SED} -e 's:type=file:& mode=0664:' \
961.22Sjmc			-e 's:type=dir:& mode=0775:' \
971.31Shubertf			-e 's:$: uname=root gname=wsrc:' \
981.32Stron			-e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \
991.39Schristos			-e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \
1001.30Sapb		${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \
1011.29Sapb		${GZIP_CMD} > "${setdir}/${set}"
1021.30Sapb	rm -f "${intmp}"
1031.22Sjmc)}
1041.15Slukem
1051.15Slukem
1061.17Slukem# create (base)src sets
1071.17Slukem#
1081.17Slukem
1091.17Slukemif ! cd "${srcdir}"; then
1101.34Slukem	echo >&2 "${prog}: can't chdir to ${srcdir}"
1111.17Slukem	exit 1
1121.17Slukemfi
1131.17Slukem
1141.17Slukemsrcprefix=usr/src
1151.22Sjmcexport setdir MTREE PAX CKSUM GZIP PASSWD srcprefix
1161.22Sjmc
1171.41Schristosmakeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config'
1181.22Sjmc
1191.41Schristosmakeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3'
1201.17Slukem
1211.33Sjnemethmakeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common'
1221.1Sjtc
1231.22Sjmcmakeset sharesrc share
1241.6Sperry
1251.17Slukem
1261.17Slukem# create xsrc sets
1271.17Slukem#
1281.17Slukemif [ -n "${xsrcdir}" ]; then
1291.17Slukem	if ! cd "${xsrcdir}"; then
1301.34Slukem		echo >&2 "${prog}: can't chdir to ${xsrcdir}"
1311.17Slukem		exit 1
1321.17Slukem	fi
1331.17Slukem	srcprefix=usr/xsrc
1341.17Slukem	makeset xsrc .
1351.17Slukemfi
1361.17Slukem
1371.17Slukem
1381.34Slukemmsg "Creating checksum files"
1391.30Sapb(cd "${setdir}"
1401.42Smartin	${CKSUM} -a md5  *.tgz *.tar.xz > MD5
1411.42Smartin	${CKSUM} -a sha512 *.tgz *.tar.xz > SHA512
1421.13Slukem)
1431.27Sjmcexit 0
144