Home | History | Annotate | Line # | Download | only in sets
makesrctars revision 1.43
      1   1.1       jtc #! /bin/sh
      2   1.3     mikel #
      3  1.43    martin #	$NetBSD: makesrctars,v 1.43 2021/09/07 18:02:46 martin 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.38  uebayasi Usage: ${prog} [-N password/group dir] [-q] [-x xsrcdir] [-y extsrcsrcdir] 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.38  uebayasi 	-y extsrcsrcdir	build extsrc.tgz from extsrcsrcdir
     29  1.17     lukem 	srcdir		location of sources
     30  1.17     lukem 	setdir		where to write the .tgz files to
     31  1.17     lukem USAGE
     32  1.17     lukem 	exit 1
     33  1.17     lukem }
     34  1.17     lukem 
     35  1.34     lukem msg()
     36  1.34     lukem {
     37  1.34     lukem 	$quiet || echo $*
     38  1.34     lukem }
     39  1.34     lukem 
     40  1.34     lukem 
     41  1.17     lukem # handle args
     42  1.38  uebayasi while getopts N:qx:y: 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.38  uebayasi 	y)
     51  1.38  uebayasi 		extsrcsrcdir="${OPTARG}"
     52  1.38  uebayasi 		;;
     53  1.22       jmc 	N)
     54  1.30       apb 		PASSWD="${OPTARG}"
     55  1.22       jmc 		;;
     56  1.17     lukem 	*)
     57  1.17     lukem 		usage
     58  1.17     lukem 		;;
     59  1.17     lukem 	esac
     60  1.17     lukem done
     61  1.17     lukem shift $((${OPTIND} - 1))
     62  1.17     lukem 
     63  1.15     lukem if [ $# -ne 2 ]; then
     64  1.22       jmc 	usage
     65   1.1       jtc fi
     66  1.30       apb srcdir="$1"
     67  1.30       apb setdir="$2"
     68  1.30       apb : ${PASSWD:="${srcdir}/etc"}
     69   1.1       jtc 
     70  1.15     lukem if [ ! -d "${setdir}" ]; then
     71  1.34     lukem 	echo >&2 "${prog}: ${setdir} is not a directory"
     72   1.1       jtc 	exit 1
     73   1.1       jtc fi
     74   1.1       jtc 
     75  1.15     lukem makeset()
     76  1.22       jmc {(
     77  1.30       apb 	set="${1}.tgz"
     78  1.15     lukem 	shift
     79  1.30       apb 	dir="$1"
     80  1.22       jmc 	shift
     81  1.30       apb 	intmp="/tmp/in$$"
     82  1.34     lukem 	msg "Creating ${set}"
     83  1.22       jmc 	if [ "${dir}" != "." ]; then
     84  1.30       apb 		cd "${dir}"
     85  1.22       jmc 		srcprefix="${srcprefix}/${dir}"
     86  1.22       jmc 	fi
     87  1.43    martin 	# Gets rid of any obj dirs and things below it. Also skip
     88  1.43    martin 	# .hg or .git repositories (if we got the source via git
     89  1.43    martin 	# or mercurial)
     90  1.43    martin 	printf "obj\n./.git\n./.hg\n" > "${intmp}"
     91  1.30       apb 	egrep="$*"
     92  1.30       apb 	if [ "${egrep}" = "" ]; then
     93  1.27       jmc 		egrep='.'
     94  1.22       jmc 	fi
     95  1.15     lukem 	set -f
     96  1.36       apb 	${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \
     97  1.30       apb 		${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \
     98  1.29       apb 		${SED} -e 's:type=file:& mode=0664:' \
     99  1.22       jmc 			-e 's:type=dir:& mode=0775:' \
    100  1.31   hubertf 			-e 's:$: uname=root gname=wsrc:' \
    101  1.32      tron 			-e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \
    102  1.39  christos 			-e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \
    103  1.30       apb 		${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \
    104  1.29       apb 		${GZIP_CMD} > "${setdir}/${set}"
    105  1.30       apb 	rm -f "${intmp}"
    106  1.22       jmc )}
    107  1.15     lukem 
    108  1.15     lukem 
    109  1.17     lukem # create (base)src sets
    110  1.17     lukem #
    111  1.17     lukem 
    112  1.17     lukem if ! cd "${srcdir}"; then
    113  1.34     lukem 	echo >&2 "${prog}: can't chdir to ${srcdir}"
    114  1.17     lukem 	exit 1
    115  1.17     lukem fi
    116  1.17     lukem 
    117  1.17     lukem srcprefix=usr/src
    118  1.22       jmc export setdir MTREE PAX CKSUM GZIP PASSWD srcprefix
    119  1.22       jmc 
    120  1.41  christos makeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config'
    121  1.22       jmc 
    122  1.41  christos makeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3'
    123  1.17     lukem 
    124  1.33   jnemeth makeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common'
    125   1.1       jtc 
    126  1.22       jmc makeset sharesrc share
    127   1.6     perry 
    128  1.17     lukem 
    129  1.17     lukem # create xsrc sets
    130  1.17     lukem #
    131  1.17     lukem if [ -n "${xsrcdir}" ]; then
    132  1.17     lukem 	if ! cd "${xsrcdir}"; then
    133  1.34     lukem 		echo >&2 "${prog}: can't chdir to ${xsrcdir}"
    134  1.17     lukem 		exit 1
    135  1.17     lukem 	fi
    136  1.17     lukem 	srcprefix=usr/xsrc
    137  1.17     lukem 	makeset xsrc .
    138  1.17     lukem fi
    139  1.17     lukem 
    140  1.17     lukem 
    141  1.38  uebayasi # create extsrc sets
    142  1.38  uebayasi #
    143  1.38  uebayasi if [ -n "${extsrcsrcdir}" ]; then
    144  1.38  uebayasi 	if ! cd "${extsrcsrcdir}"; then
    145  1.38  uebayasi 		echo >&2 "${prog}: can't chdir to ${extsrcsrcdir}"
    146  1.38  uebayasi 		exit 1
    147  1.38  uebayasi 	fi
    148  1.38  uebayasi 	srcprefix=usr/extsrc
    149  1.38  uebayasi 	makeset extsrc .
    150  1.38  uebayasi fi
    151  1.38  uebayasi 
    152  1.38  uebayasi 
    153  1.34     lukem msg "Creating checksum files"
    154  1.30       apb (cd "${setdir}"
    155  1.42    martin 	${CKSUM} -a md5  *.tgz *.tar.xz > MD5
    156  1.42    martin 	${CKSUM} -a sha512 *.tgz *.tar.xz > SHA512
    157  1.13     lukem )
    158  1.27       jmc exit 0
    159