maketars revision 1.44
11.2Sgwr#!/bin/sh
21.2Sgwr#
31.44Sdsl# $NetBSD: maketars,v 1.44 2003/10/16 14:20:20 dsl Exp $
41.2Sgwr#
51.2Sgwr# Make release tar files for some or all lists.  Usage:
61.34Slukem# maketars [-b] [-x] [-i installdir] [-a arch] [-m machine] [-s setsdir]
71.34Slukem#	[-M metalog] [-N etcdir] [-d destdir] [-t tardir] [setname ...]
81.35Slukem#
91.35Slukem# The default sets are "base comp etc games man misc text"
101.35Slukem#
111.35Slukem# If '-i installdir' is given, copy the given sets to installdir
121.35Slukem# (using pax -rw ...) instead of creating tar files.
131.35Slukem# In this case, remove "etc" from the list of default sets.
141.2Sgwr#
151.2Sgwr
161.43Slukemprog=${0##*/}
171.41Slukem
181.2Sgwr# set defaults
191.18Slukem: ${PAX=pax}
201.43Slukem: ${MKTEMP=mktemp}
211.18Slukem: ${MTREE=mtree}
221.43Slukemmake="${MAKE:-make} -j 1 -f $(dirname $0)/Makefile"
231.18Slukem
241.43Slukemmachine=$(${make} print_machine)
251.43Slukemmachine_arch=$(${make} print_machine_arch)
261.43Slukemsetd=$(pwd)
271.9Slukemnlists="base comp etc games man misc text"
281.22Stronxlists="xbase xcomp xcontrib xfont xserver xmisc"
291.9Slukemlists=$nlists
301.2Sgwrtars=$RELEASEDIR
311.2Sgwrdest=$DESTDIR
321.18Slukemmetalog=
331.28Slukeminstalldir=
341.30Slukemetcdir=
351.2Sgwr
361.2Sgwr# handle args
371.9Slukemwhile : ; do
381.2Sgwr	case $1 in
391.9Slukem	-b*)
401.9Slukem		lists="$xlists $nlists"
411.9Slukem		;;
421.18Slukem	-x*)
431.9Slukem		lists=$xlists
441.9Slukem		;;
451.28Slukem	-i*)
461.28Slukem		installdir=$2; shift
471.28Slukem		;;
481.9Slukem	-a*)
491.16Sthorpej		machine_arch=$2; shift
501.9Slukem		;;
511.18Slukem	-M*)
521.18Slukem		metalog=$2; shift
531.18Slukem		;;
541.9Slukem	-m*)
551.9Slukem		machine=$2; shift
561.9Slukem		;;
571.30Slukem	-N*)
581.30Slukem		etcdir=$2; shift
591.30Slukem		;;
601.9Slukem	-s*)
611.9Slukem		setd=$2; shift
621.9Slukem		;;
631.9Slukem	-d*)
641.9Slukem		dest=$2; shift
651.9Slukem		;;
661.18Slukem	-t*)
671.9Slukem		tars=$2; shift
681.9Slukem		;;
691.9Slukem	-*)
701.9Slukem		cat 1>&2 <<USAGE
711.41SlukemUsage: ${prog} [-b] [-x] [-i idir] [-a arch] [-m machine] [-s setsdir]
721.36Slukem	    [-M metalog] [-N etcdir] [-d dest] [-t targetdir] [setname ...]
731.9Slukem	-b		make netbsd + x11 lists
741.9Slukem	-x		only make x11 lists
751.30Slukem	-i idir		install sets to idir instead of creating tar files
761.16Sthorpej	-a arch		set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch]
771.16Sthorpej	-m machine	set machine (e.g, amiga, i386, macppc) [$machine]
781.16Sthorpej	-s setsdir	directory to find sets [$setd]
791.18Slukem	-M metalog	metalog file
801.30Slukem	-N etcdir	etc dir for metalog use [$dest/etc]
811.9Slukem	-d dest		\$DESTDIR	[$dest]
821.36Slukem	-t targetdir	\$RELEASEDIR	[$tars]
831.9Slukem	[setname ...]	sets to build 	[$lists]
841.9SlukemUSAGE
851.9Slukem		exit 1
861.9Slukem		;;
871.9Slukem	*)
881.9Slukem		break
891.9Slukem		;;
901.2Sgwr	esac
911.2Sgwr	shift
921.2Sgwrdone
931.28Slukemif [ -n "$installdir" ]; then		# if -i, remove etc from default list
941.28Slukem	lists=$(echo $lists | sed -e 's/ etc / /')
951.28Slukemfi
961.10Srossif [ -n "$*" ]; then
971.10Sross	lists="$*"
981.9Slukemfi
991.1Scgd
1001.28Slukemif [ -z "$tars" -a -z "$installdir" ]; then
1011.28Slukem	echo \$RELEASEDIR must be set, or -i must be used
1021.1Scgd	exit 1
1031.9Slukemfi
1041.1Scgd
1051.9Slukemif [ -z "$dest" ]; then
1061.9Slukem	echo \$DESTDIR must be set
1071.1Scgd	exit 1
1081.9Slukemfi
1091.30Slukem: ${etcdir:=${dest}/etc}
1101.1Scgd
1111.43SlukemSDIR=$(${MKTEMP} -d /tmp/${prog}.XXXXXX)
1121.20Sbjh21
1131.38Serhes=0
1141.38Serhcleanup()
1151.38Serh{
1161.44Sdsl	es=$?
1171.38Serh	/bin/rm -rf $SDIR
1181.38Serh	exit $es
1191.38Serh}
1201.38Serhtrap cleanup 0 2 3 13		# EXIT INT QUIT PIPE
1211.18Slukem
1221.18Slukemif [ -n "$metalog" ]; then
1231.28Slukem	echo "Parsing $metalog"
1241.23Slukem	(
1251.30Slukem		cat ${etcdir}/mtree/NetBSD.dist
1261.23Slukem		echo "/unset all"
1271.44Sdsl		cat $metalog 2>/dev/null
1281.33Slukem	) | ${MTREE} -C -k all -N ${etcdir} > $SDIR/metalog
1291.41Slukem	rv=$?
1301.41Slukem	if [ $rv -ne 0 ]; then
1311.41Slukem		echo "${prog}: mtree failed, exiting"
1321.41Slukem		exit $rv
1331.41Slukem	fi
1341.18Slukemfi
1351.18Slukem
1361.18SlukemGZIP=-9			# for pax -z
1371.18Slukemexport GZIP
1381.18Slukem
1391.9Slukemfor setname in $lists; do
1401.12Sfrueauf	out=$setname.tgz
1411.28Slukem	if [ -n "$installdir" ]; then
1421.28Slukem		echo "Copying set $setname"
1431.28Slukem	else
1441.43Slukem		if [ -n "$metalog" -a $tars/$out -nt "$metalog" ]; then
1451.42Sdsl			echo "$out is up to date"
1461.42Sdsl			continue
1471.43Slukem		fi
1481.28Slukem		echo "Creating $out"
1491.28Slukem	fi
1501.18Slukem	sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \
1511.18Slukem	    > $SDIR/flist.$setname
1521.18Slukem	if [ -n "$metalog" ]; then
1531.18Slukem		awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
1541.24Slukem		    > $SDIR/flist.$setname.full
1551.23Slukem		(
1561.23Slukem			echo "/set uname=root gname=wheel"
1571.24Slukem			awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog
1581.23Slukem		) > $SDIR/plist.$setname
1591.18Slukem	else
1601.18Slukem		mv $SDIR/flist.$setname $SDIR/plist.$setname
1611.18Slukem	fi
1621.18Slukem
1631.28Slukem	if [ -n "$installdir" ]; then
1641.28Slukem		( cd $dest ; \
1651.40Sperry		    ${PAX} -O -rwpe -d -N${etcdir} ${metalog:+-M} \
1661.28Slukem		    $installdir < ${SDIR}/plist.$setname )
1671.28Slukem	else
1681.28Slukem		( cd $dest ; \
1691.32Slukem		    ${PAX} -O -w -d -z -N${etcdir} ${metalog:+-M} \
1701.28Slukem		    < ${SDIR}/plist.$setname ) > ${tars}/$out
1711.28Slukem	fi
1721.18Slukem	es=$(($es + $?))
1731.2Sgwrdone
1741.38Serhif [ $es -gt 255 ] ; then
1751.38Serh	es=255
1761.38Serhfi
1771.17Sheexit $es
178