makesrctars revision 1.43
11.1Sjtc#! /bin/sh 21.3Smikel# 31.43Smartin# $NetBSD: makesrctars,v 1.43 2021/09/07 18:02:46 martin 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.38SuebayasiUsage: ${prog} [-N password/group dir] [-q] [-x xsrcdir] [-y extsrcsrcdir] 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.38Suebayasi -y extsrcsrcdir build extsrc.tgz from extsrcsrcdir 291.17Slukem srcdir location of sources 301.17Slukem setdir where to write the .tgz files to 311.17SlukemUSAGE 321.17Slukem exit 1 331.17Slukem} 341.17Slukem 351.34Slukemmsg() 361.34Slukem{ 371.34Slukem $quiet || echo $* 381.34Slukem} 391.34Slukem 401.34Slukem 411.17Slukem# handle args 421.38Suebayasiwhile getopts N:qx:y: 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.38Suebayasi y) 511.38Suebayasi extsrcsrcdir="${OPTARG}" 521.38Suebayasi ;; 531.22Sjmc N) 541.30Sapb PASSWD="${OPTARG}" 551.22Sjmc ;; 561.17Slukem *) 571.17Slukem usage 581.17Slukem ;; 591.17Slukem esac 601.17Slukemdone 611.17Slukemshift $((${OPTIND} - 1)) 621.17Slukem 631.15Slukemif [ $# -ne 2 ]; then 641.22Sjmc usage 651.1Sjtcfi 661.30Sapbsrcdir="$1" 671.30Sapbsetdir="$2" 681.30Sapb: ${PASSWD:="${srcdir}/etc"} 691.1Sjtc 701.15Slukemif [ ! -d "${setdir}" ]; then 711.34Slukem echo >&2 "${prog}: ${setdir} is not a directory" 721.1Sjtc exit 1 731.1Sjtcfi 741.1Sjtc 751.15Slukemmakeset() 761.22Sjmc{( 771.30Sapb set="${1}.tgz" 781.15Slukem shift 791.30Sapb dir="$1" 801.22Sjmc shift 811.30Sapb intmp="/tmp/in$$" 821.34Slukem msg "Creating ${set}" 831.22Sjmc if [ "${dir}" != "." ]; then 841.30Sapb cd "${dir}" 851.22Sjmc srcprefix="${srcprefix}/${dir}" 861.22Sjmc fi 871.43Smartin # Gets rid of any obj dirs and things below it. Also skip 881.43Smartin # .hg or .git repositories (if we got the source via git 891.43Smartin # or mercurial) 901.43Smartin printf "obj\n./.git\n./.hg\n" > "${intmp}" 911.30Sapb egrep="$*" 921.30Sapb if [ "${egrep}" = "" ]; then 931.27Sjmc egrep='.' 941.22Sjmc fi 951.15Slukem set -f 961.36Sapb ${MTREE} -c -X "${intmp}" | ${MTREE} -CS -k type | \ 971.30Sapb ${EGREP} -v 'type=link' | ${EGREP} ${egrep} | \ 981.29Sapb ${SED} -e 's:type=file:& mode=0664:' \ 991.22Sjmc -e 's:type=dir:& mode=0775:' \ 1001.31Shubertf -e 's:$: uname=root gname=wsrc:' \ 1011.32Stron -e '/\/move-if-change /s:\(mode\)=[0-9]*:\1=0775:' \ 1021.39Schristos -e '/^\.\/.*[.-]sh /s:\(mode\)=[0-9]*:\1=0775:' | \ 1031.30Sapb ${PAX} -M -N "${PASSWD}" -w -d -s'|^\.|'"${srcprefix}"'|' | \ 1041.29Sapb ${GZIP_CMD} > "${setdir}/${set}" 1051.30Sapb rm -f "${intmp}" 1061.22Sjmc)} 1071.15Slukem 1081.15Slukem 1091.17Slukem# create (base)src sets 1101.17Slukem# 1111.17Slukem 1121.17Slukemif ! cd "${srcdir}"; then 1131.34Slukem echo >&2 "${prog}: can't chdir to ${srcdir}" 1141.17Slukem exit 1 1151.17Slukemfi 1161.17Slukem 1171.17Slukemsrcprefix=usr/src 1181.22Sjmcexport setdir MTREE PAX CKSUM GZIP PASSWD srcprefix 1191.22Sjmc 1201.41Schristosmakeset src . -v '^\.\/common|^\.\/external\/gpl2|^\.\/external\/gpl3|^\.\/share|^\.\/sys|^\.\/usr\.bin\/config' 1211.22Sjmc 1221.41Schristosmakeset gnusrc . -e '^\..type=dir|^\.\/external.type=dir|^\.\/external\/gpl2|^\.\/external\/gpl3' 1231.17Slukem 1241.33Sjnemethmakeset syssrc . -e '^\..type=dir|^\.\/sys|^\.\/usr\.bin.type=dir|^\.\/usr\.bin\/config|^\.\/common' 1251.1Sjtc 1261.22Sjmcmakeset sharesrc share 1271.6Sperry 1281.17Slukem 1291.17Slukem# create xsrc sets 1301.17Slukem# 1311.17Slukemif [ -n "${xsrcdir}" ]; then 1321.17Slukem if ! cd "${xsrcdir}"; then 1331.34Slukem echo >&2 "${prog}: can't chdir to ${xsrcdir}" 1341.17Slukem exit 1 1351.17Slukem fi 1361.17Slukem srcprefix=usr/xsrc 1371.17Slukem makeset xsrc . 1381.17Slukemfi 1391.17Slukem 1401.17Slukem 1411.38Suebayasi# create extsrc sets 1421.38Suebayasi# 1431.38Suebayasiif [ -n "${extsrcsrcdir}" ]; then 1441.38Suebayasi if ! cd "${extsrcsrcdir}"; then 1451.38Suebayasi echo >&2 "${prog}: can't chdir to ${extsrcsrcdir}" 1461.38Suebayasi exit 1 1471.38Suebayasi fi 1481.38Suebayasi srcprefix=usr/extsrc 1491.38Suebayasi makeset extsrc . 1501.38Suebayasifi 1511.38Suebayasi 1521.38Suebayasi 1531.34Slukemmsg "Creating checksum files" 1541.30Sapb(cd "${setdir}" 1551.42Smartin ${CKSUM} -a md5 *.tgz *.tar.xz > MD5 1561.42Smartin ${CKSUM} -a sha512 *.tgz *.tar.xz > SHA512 1571.13Slukem) 1581.27Sjmcexit 0 159