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