1 1.1 jtc #! /bin/sh 2 1.3 mikel # 3 1.41 christos # $NetBSD: makesrctars,v 1.41 2017/04/12 17:29:49 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.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.22 jmc # Gets rid of any obj dirs and things below it 88 1.30 apb echo "obj" > "${intmp}" 89 1.30 apb egrep="$*" 90 1.30 apb if [ "${egrep}" = "" ]; then 91 1.27 jmc egrep='.' 92 1.22 jmc fi 93 1.15 lukem set -f 94 1.36 apb ${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \ 95 1.30 apb ${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \ 96 1.29 apb ${SED} -e 's:type=file:& mode=0664:' \ 97 1.22 jmc -e 's:type=dir:& mode=0775:' \ 98 1.31 hubertf -e 's:$: uname=root gname=wsrc:' \ 99 1.32 tron -e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \ 100 1.39 christos -e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \ 101 1.30 apb ${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \ 102 1.29 apb ${GZIP_CMD} > "${setdir}/${set}" 103 1.30 apb rm -f "${intmp}" 104 1.22 jmc )} 105 1.15 lukem 106 1.15 lukem 107 1.17 lukem # create (base)src sets 108 1.17 lukem # 109 1.17 lukem 110 1.17 lukem if ! cd "${srcdir}"; then 111 1.34 lukem echo >&2 "${prog}: can't chdir to ${srcdir}" 112 1.17 lukem exit 1 113 1.17 lukem fi 114 1.17 lukem 115 1.17 lukem srcprefix=usr/src 116 1.22 jmc export setdir MTREE PAX CKSUM GZIP PASSWD srcprefix 117 1.22 jmc 118 1.41 christos makeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config' 119 1.22 jmc 120 1.41 christos makeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3' 121 1.17 lukem 122 1.33 jnemeth makeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common' 123 1.1 jtc 124 1.22 jmc makeset sharesrc share 125 1.6 perry 126 1.17 lukem 127 1.17 lukem # create xsrc sets 128 1.17 lukem # 129 1.17 lukem if [ -n "${xsrcdir}" ]; then 130 1.17 lukem if ! cd "${xsrcdir}"; then 131 1.34 lukem echo >&2 "${prog}: can't chdir to ${xsrcdir}" 132 1.17 lukem exit 1 133 1.17 lukem fi 134 1.17 lukem srcprefix=usr/xsrc 135 1.17 lukem makeset xsrc . 136 1.17 lukem fi 137 1.17 lukem 138 1.17 lukem 139 1.38 uebayasi # create extsrc sets 140 1.38 uebayasi # 141 1.38 uebayasi if [ -n "${extsrcsrcdir}" ]; then 142 1.38 uebayasi if ! cd "${extsrcsrcdir}"; then 143 1.38 uebayasi echo >&2 "${prog}: can't chdir to ${extsrcsrcdir}" 144 1.38 uebayasi exit 1 145 1.38 uebayasi fi 146 1.38 uebayasi srcprefix=usr/extsrc 147 1.38 uebayasi makeset extsrc . 148 1.38 uebayasi fi 149 1.38 uebayasi 150 1.38 uebayasi 151 1.34 lukem msg "Creating checksum files" 152 1.30 apb (cd "${setdir}" 153 1.21 jmc ${CKSUM} -a md5 *.tgz > MD5 154 1.21 jmc ${CKSUM} -a sha512 *.tgz > SHA512 155 1.13 lukem ) 156 1.27 jmc exit 0 157