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