Home | History | Annotate | Line # | Download | only in sets
      1   1.1       jtc #! /bin/sh
      2   1.3     mikel #
      3  1.46  christos #	$NetBSD: makesrctars,v 1.46 2023/11/08 13:02:47 christos Exp $
      4  1.15     lukem #
      5  1.15     lukem # makesrctars srcdir setdir
      6  1.15     lukem #	Create source tarballs in setdir from the source under srcdir.
      7   1.3     mikel #
      8   1.1       jtc 
      9  1.30       apb prog="${0##*/}"
     10  1.28       apb rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
     11  1.28       apb . "${rundir}/sets.subr"
     12  1.17     lukem 
     13  1.17     lukem # set defaults
     14  1.17     lukem xsrcdir=
     15  1.34     lukem quiet=false
     16  1.13     lukem 
     17  1.35     perry GZIP=-9n
     18   1.1       jtc export GZIP
     19   1.1       jtc 
     20  1.17     lukem usage()
     21  1.17     lukem {
     22  1.17     lukem 	cat 1>&2 <<USAGE
     23  1.44     lukem Usage: ${prog} [-N password/group dir] [-q] [-x xsrcdir] srcdir setdir
     24  1.22       jmc 	-N dir		location which contains master.passwd and group files
     25  1.27       jmc 			(defaults to \${srcdir}/etc)
     26  1.34     lukem 	-q		quiet operation
     27  1.17     lukem 	-x xsrcdir	build xsrc.tgz from xsrcdir
     28  1.17     lukem 	srcdir		location of sources
     29  1.17     lukem 	setdir		where to write the .tgz files to
     30  1.17     lukem USAGE
     31  1.17     lukem 	exit 1
     32  1.17     lukem }
     33  1.17     lukem 
     34  1.34     lukem msg()
     35  1.34     lukem {
     36  1.34     lukem 	$quiet || echo $*
     37  1.34     lukem }
     38  1.34     lukem 
     39  1.34     lukem 
     40  1.46  christos umask 022
     41  1.17     lukem # handle args
     42  1.44     lukem while getopts N:qx: ch; do
     43  1.17     lukem 	case ${ch} in
     44  1.34     lukem 	q)
     45  1.34     lukem 		quiet=true
     46  1.34     lukem 		;;
     47  1.27       jmc 	x)
     48  1.30       apb 		xsrcdir="${OPTARG}"
     49  1.17     lukem 		;;
     50  1.22       jmc 	N)
     51  1.30       apb 		PASSWD="${OPTARG}"
     52  1.22       jmc 		;;
     53  1.17     lukem 	*)
     54  1.17     lukem 		usage
     55  1.17     lukem 		;;
     56  1.17     lukem 	esac
     57  1.17     lukem done
     58  1.17     lukem shift $((${OPTIND} - 1))
     59  1.17     lukem 
     60  1.15     lukem if [ $# -ne 2 ]; then
     61  1.22       jmc 	usage
     62   1.1       jtc fi
     63  1.30       apb srcdir="$1"
     64  1.30       apb setdir="$2"
     65  1.30       apb : ${PASSWD:="${srcdir}/etc"}
     66   1.1       jtc 
     67  1.15     lukem if [ ! -d "${setdir}" ]; then
     68  1.34     lukem 	echo >&2 "${prog}: ${setdir} is not a directory"
     69   1.1       jtc 	exit 1
     70   1.1       jtc fi
     71   1.1       jtc 
     72  1.15     lukem makeset()
     73  1.22       jmc {(
     74  1.30       apb 	set="${1}.tgz"
     75  1.15     lukem 	shift
     76  1.30       apb 	dir="$1"
     77  1.22       jmc 	shift
     78  1.30       apb 	intmp="/tmp/in$$"
     79  1.34     lukem 	msg "Creating ${set}"
     80  1.22       jmc 	if [ "${dir}" != "." ]; then
     81  1.30       apb 		cd "${dir}"
     82  1.22       jmc 		srcprefix="${srcprefix}/${dir}"
     83  1.22       jmc 	fi
     84  1.43    martin 	# Gets rid of any obj dirs and things below it. Also skip
     85  1.43    martin 	# .hg or .git repositories (if we got the source via git
     86  1.43    martin 	# or mercurial)
     87  1.43    martin 	printf "obj\n./.git\n./.hg\n" > "${intmp}"
     88  1.30       apb 	egrep="$*"
     89  1.30       apb 	if [ "${egrep}" = "" ]; then
     90  1.27       jmc 		egrep='.'
     91  1.22       jmc 	fi
     92  1.15     lukem 	set -f
     93  1.36       apb 	${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \
     94  1.30       apb 		${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \
     95  1.29       apb 		${SED} -e 's:type=file:& mode=0664:' \
     96  1.22       jmc 			-e 's:type=dir:& mode=0775:' \
     97  1.31   hubertf 			-e 's:$: uname=root gname=wsrc:' \
     98  1.32      tron 			-e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \
     99  1.39  christos 			-e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \
    100  1.30       apb 		${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \
    101  1.29       apb 		${GZIP_CMD} > "${setdir}/${set}"
    102  1.30       apb 	rm -f "${intmp}"
    103  1.22       jmc )}
    104  1.15     lukem 
    105  1.15     lukem 
    106  1.17     lukem # create (base)src sets
    107  1.17     lukem #
    108  1.17     lukem 
    109  1.17     lukem if ! cd "${srcdir}"; then
    110  1.34     lukem 	echo >&2 "${prog}: can't chdir to ${srcdir}"
    111  1.17     lukem 	exit 1
    112  1.17     lukem fi
    113  1.17     lukem 
    114  1.17     lukem srcprefix=usr/src
    115  1.22       jmc export setdir MTREE PAX CKSUM GZIP PASSWD srcprefix
    116  1.22       jmc 
    117  1.41  christos makeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config'
    118  1.22       jmc 
    119  1.41  christos makeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3'
    120  1.17     lukem 
    121  1.33   jnemeth makeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common'
    122   1.1       jtc 
    123  1.22       jmc makeset sharesrc share
    124   1.6     perry 
    125  1.17     lukem 
    126  1.17     lukem # create xsrc sets
    127  1.17     lukem #
    128  1.17     lukem if [ -n "${xsrcdir}" ]; then
    129  1.17     lukem 	if ! cd "${xsrcdir}"; then
    130  1.34     lukem 		echo >&2 "${prog}: can't chdir to ${xsrcdir}"
    131  1.17     lukem 		exit 1
    132  1.17     lukem 	fi
    133  1.17     lukem 	srcprefix=usr/xsrc
    134  1.17     lukem 	makeset xsrc .
    135  1.17     lukem fi
    136  1.17     lukem 
    137  1.17     lukem 
    138  1.34     lukem msg "Creating checksum files"
    139  1.30       apb (cd "${setdir}"
    140  1.42    martin 	${CKSUM} -a md5  *.tgz *.tar.xz > MD5
    141  1.42    martin 	${CKSUM} -a sha512 *.tgz *.tar.xz > SHA512
    142  1.13     lukem )
    143  1.27       jmc exit 0
    144