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