11.1Sjtc#! /bin/sh 21.3Smikel# 31.46Schristos# $NetBSD: makesrctars,v 1.46 2023/11/08 13:02:47 christos Exp $ 41.15Slukem# 51.15Slukem# makesrctars srcdir setdir 61.15Slukem# Create source tarballs in setdir from the source under srcdir. 71.3Smikel# 81.1Sjtc 91.30Sapbprog="${0##*/}" 101.28Sapbrundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/" 111.28Sapb. "${rundir}/sets.subr" 121.17Slukem 131.17Slukem# set defaults 141.17Slukemxsrcdir= 151.34Slukemquiet=false 161.13Slukem 171.35SperryGZIP=-9n 181.1Sjtcexport GZIP 191.1Sjtc 201.17Slukemusage() 211.17Slukem{ 221.17Slukem cat 1>&2 <<USAGE 231.44SlukemUsage: ${prog} [-N password/group dir] [-q] [-x xsrcdir] srcdir setdir 241.22Sjmc -N dir location which contains master.passwd and group files 251.27Sjmc (defaults to \${srcdir}/etc) 261.34Slukem -q quiet operation 271.17Slukem -x xsrcdir build xsrc.tgz from xsrcdir 281.17Slukem srcdir location of sources 291.17Slukem setdir where to write the .tgz files to 301.17SlukemUSAGE 311.17Slukem exit 1 321.17Slukem} 331.17Slukem 341.34Slukemmsg() 351.34Slukem{ 361.34Slukem $quiet || echo $* 371.34Slukem} 381.34Slukem 391.34Slukem 401.46Schristosumask 022 411.17Slukem# handle args 421.44Slukemwhile getopts N:qx: ch; do 431.17Slukem case ${ch} in 441.34Slukem q) 451.34Slukem quiet=true 461.34Slukem ;; 471.27Sjmc x) 481.30Sapb xsrcdir="${OPTARG}" 491.17Slukem ;; 501.22Sjmc N) 511.30Sapb PASSWD="${OPTARG}" 521.22Sjmc ;; 531.17Slukem *) 541.17Slukem usage 551.17Slukem ;; 561.17Slukem esac 571.17Slukemdone 581.17Slukemshift $((${OPTIND} - 1)) 591.17Slukem 601.15Slukemif [ $# -ne 2 ]; then 611.22Sjmc usage 621.1Sjtcfi 631.30Sapbsrcdir="$1" 641.30Sapbsetdir="$2" 651.30Sapb: ${PASSWD:="${srcdir}/etc"} 661.1Sjtc 671.15Slukemif [ ! -d "${setdir}" ]; then 681.34Slukem echo >&2 "${prog}: ${setdir} is not a directory" 691.1Sjtc exit 1 701.1Sjtcfi 711.1Sjtc 721.15Slukemmakeset() 731.22Sjmc{( 741.30Sapb set="${1}.tgz" 751.15Slukem shift 761.30Sapb dir="$1" 771.22Sjmc shift 781.30Sapb intmp="/tmp/in$$" 791.34Slukem msg "Creating ${set}" 801.22Sjmc if [ "${dir}" != "." ]; then 811.30Sapb cd "${dir}" 821.22Sjmc srcprefix="${srcprefix}/${dir}" 831.22Sjmc fi 841.43Smartin # Gets rid of any obj dirs and things below it. Also skip 851.43Smartin # .hg or .git repositories (if we got the source via git 861.43Smartin # or mercurial) 871.43Smartin printf "obj\n./.git\n./.hg\n" > "${intmp}" 881.30Sapb egrep="$*" 891.30Sapb if [ "${egrep}" = "" ]; then 901.27Sjmc egrep='.' 911.22Sjmc fi 921.15Slukem set -f 931.36Sapb ${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \ 941.30Sapb ${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \ 951.29Sapb ${SED} -e 's:type=file:& mode=0664:' \ 961.22Sjmc -e 's:type=dir:& mode=0775:' \ 971.31Shubertf -e 's:$: uname=root gname=wsrc:' \ 981.32Stron -e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \ 991.39Schristos -e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \ 1001.30Sapb ${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \ 1011.29Sapb ${GZIP_CMD} > "${setdir}/${set}" 1021.30Sapb rm -f "${intmp}" 1031.22Sjmc)} 1041.15Slukem 1051.15Slukem 1061.17Slukem# create (base)src sets 1071.17Slukem# 1081.17Slukem 1091.17Slukemif ! cd "${srcdir}"; then 1101.34Slukem echo >&2 "${prog}: can't chdir to ${srcdir}" 1111.17Slukem exit 1 1121.17Slukemfi 1131.17Slukem 1141.17Slukemsrcprefix=usr/src 1151.22Sjmcexport setdir MTREE PAX CKSUM GZIP PASSWD srcprefix 1161.22Sjmc 1171.41Schristosmakeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config' 1181.22Sjmc 1191.41Schristosmakeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3' 1201.17Slukem 1211.33Sjnemethmakeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common' 1221.1Sjtc 1231.22Sjmcmakeset sharesrc share 1241.6Sperry 1251.17Slukem 1261.17Slukem# create xsrc sets 1271.17Slukem# 1281.17Slukemif [ -n "${xsrcdir}" ]; then 1291.17Slukem if ! cd "${xsrcdir}"; then 1301.34Slukem echo >&2 "${prog}: can't chdir to ${xsrcdir}" 1311.17Slukem exit 1 1321.17Slukem fi 1331.17Slukem srcprefix=usr/xsrc 1341.17Slukem makeset xsrc . 1351.17Slukemfi 1361.17Slukem 1371.17Slukem 1381.34Slukemmsg "Creating checksum files" 1391.30Sapb(cd "${setdir}" 1401.42Smartin ${CKSUM} -a md5 *.tgz *.tar.xz > MD5 1411.42Smartin ${CKSUM} -a sha512 *.tgz *.tar.xz > SHA512 1421.13Slukem) 1431.27Sjmcexit 0 144