makesrctars revision 1.44
11.1Sjtc#! /bin/sh
21.3Smikel#
31.44Slukem#	$NetBSD: makesrctars,v 1.44 2022/08/21 07:10:03 lukem 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.17Slukem# handle args
411.44Slukemwhile 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.43Smartin	# Gets rid of any obj dirs and things below it. Also skip
841.43Smartin	# .hg or .git repositories (if we got the source via git
851.43Smartin	# or mercurial)
861.43Smartin	printf "obj\n./.git\n./.hg\n" > "${intmp}"
871.30Sapb	egrep="$*"
881.30Sapb	if [ "${egrep}" = "" ]; then
891.27Sjmc		egrep='.'
901.22Sjmc	fi
911.15Slukem	set -f
921.36Sapb	${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \
931.30Sapb		${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \
941.29Sapb		${SED} -e 's:type=file:& mode=0664:' \
951.22Sjmc			-e 's:type=dir:& mode=0775:' \
961.31Shubertf			-e 's:$: uname=root gname=wsrc:' \
971.32Stron			-e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \
981.39Schristos			-e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \
991.30Sapb		${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \
1001.29Sapb		${GZIP_CMD} > "${setdir}/${set}"
1011.30Sapb	rm -f "${intmp}"
1021.22Sjmc)}
1031.15Slukem
1041.15Slukem
1051.17Slukem# create (base)src sets
1061.17Slukem#
1071.17Slukem
1081.17Slukemif ! cd "${srcdir}"; then
1091.34Slukem	echo >&2 "${prog}: can't chdir to ${srcdir}"
1101.17Slukem	exit 1
1111.17Slukemfi
1121.17Slukem
1131.17Slukemsrcprefix=usr/src
1141.22Sjmcexport setdir MTREE PAX CKSUM GZIP PASSWD srcprefix
1151.22Sjmc
1161.41Schristosmakeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config'
1171.22Sjmc
1181.41Schristosmakeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3'
1191.17Slukem
1201.33Sjnemethmakeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common'
1211.1Sjtc
1221.22Sjmcmakeset sharesrc share
1231.6Sperry
1241.17Slukem
1251.17Slukem# create xsrc sets
1261.17Slukem#
1271.17Slukemif [ -n "${xsrcdir}" ]; then
1281.17Slukem	if ! cd "${xsrcdir}"; then
1291.34Slukem		echo >&2 "${prog}: can't chdir to ${xsrcdir}"
1301.17Slukem		exit 1
1311.17Slukem	fi
1321.17Slukem	srcprefix=usr/xsrc
1331.17Slukem	makeset xsrc .
1341.17Slukemfi
1351.17Slukem
1361.17Slukem
1371.34Slukemmsg "Creating checksum files"
1381.30Sapb(cd "${setdir}"
1391.42Smartin	${CKSUM} -a md5  *.tgz *.tar.xz > MD5
1401.42Smartin	${CKSUM} -a sha512 *.tgz *.tar.xz > SHA512
1411.13Slukem)
1421.27Sjmcexit 0
143