#! /bin/sh
#
#	$NetBSD: makesrctars,v 1.18.2.2 2005/10/21 17:44:57 riz Exp $
#
# makesrctars srcdir setdir
#	Create source tarballs in setdir from the source under srcdir.
#

prog=${0##*/}

# set defaults
: ${CKSUM:=cksum}
: ${MTREE:=/usr/sbin/mtree}
: ${PAX:=pax}

xsrcdir=

GZIP=-9
export GZIP

usage()
{
	cat 1>&2 <<USAGE
Usage: ${prog} [-N password/group dir] [-x xsrcdir] srcdir setdir
	-N dir		location which contains master.passwd and group files
			(defaults to \${srcdir}/etc)
	-x xsrcdir	build xsrc.tgz from xsrcdir
	srcdir		location of sources
	setdir		where to write the .tgz files to
USAGE
	exit 1
}

# handle args
while getopts N:x: ch; do
	case ${ch} in
	x)
		xsrcdir=${OPTARG}
		;;
	N)
		PASSWD=${OPTARG}
		;;
	*)
		usage
		;;
	esac
done
shift $((${OPTIND} - 1))

if [ $# -ne 2 ]; then
	usage
fi
srcdir=$1
setdir=$2
: ${PASSWD:=${srcdir}/etc}

if [ ! -d "${setdir}" ]; then
	echo "${setdir} is not a directory"
	exit 1
fi

makeset()
{(
	set=$1.tgz
	shift
	dir=$1
	shift
	echo "Creating ${set}"
	if [ "${dir}" != "." ]; then
		cd $dir
		srcprefix="${srcprefix}/${dir}"
	fi
	# Gets rid of any obj dirs and things below it 
	echo "obj" > /tmp/in$$
	egrep=$*
	if [ "$egrep" = "" ]; then
		egrep='.'
	fi
	set -f
	${MTREE} -c -X /tmp/in$$ | ${MTREE} -C -k type | \
		egrep -v 'type=link' | egrep $egrep | \
		sed -e 's:type=file:& mode=0664:' \
			-e 's:type=dir:& mode=0775:' \
			-e 's:$: uname=root gname=wsrc:' | \
		${PAX} -M -N ${PASSWD} -w -d -s'|^\.|'${srcprefix}'|' | \
		gzip > "${setdir}/${set}"
	rm -f /tmp/in$$
)}


# create (base)src sets
#

if ! cd "${srcdir}"; then
	echo "Can't chdir to ${srcdir}"
	exit 1
fi

srcprefix=usr/src
export setdir MTREE PAX CKSUM GZIP PASSWD srcprefix

makeset src . \
    -v '^\.\/gnu|^\.\/share|^\.\/sys|^\.\/contrib\.sys|^\.\/usr\.bin\/config'

makeset gnusrc gnu

makeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/contrib.type=dir|^\.\/contrib\/sys|^\.\/usr\.sbin.type=dir|^\.\/usr\.sbin\/config'

makeset sharesrc share


# create xsrc sets
#
if [ -n "${xsrcdir}" ]; then
	if ! cd "${xsrcdir}"; then
		echo "Can't chdir to ${xsrcdir}"
		exit 1
	fi
	srcprefix=usr/xsrc
	makeset xsrc .
fi


echo "Creating checksum files"
(cd ${setdir}
	${CKSUM} -o1 *.tgz > BSDSUM
	${CKSUM}     *.tgz > CKSUM
	${CKSUM} -m  *.tgz > MD5
	${CKSUM} -o2 *.tgz > SYSVSUM
)
exit 0
