From aa52c352384cc29048ed40f91f5b36e0ecb11e13 Mon Sep 17 00:00:00 2001 From: emmett1 Date: Mon, 30 Dec 2019 23:16:02 +0800 Subject: [PATCH] fix, improve, add --clean option, remove --log option --- pkgbuild | 157 ++++++++++++++++++++++++------------------------ scratchpkg.conf | 1 - 2 files changed, 80 insertions(+), 78 deletions(-) diff --git a/pkgbuild b/pkgbuild index bda6ffd..54cb190 100755 --- a/pkgbuild +++ b/pkgbuild @@ -40,24 +40,22 @@ updatemdsum() { } generatemdsum() { - local um file missingsource + local src FILENAME if [ -z $source ]; then echo SKIP return 0 fi - - for um in $(seq 0 $((${#source[@]} - 1))); do - if [ $(echo ${source[$um]} | grep -E "(ftp|http|https)://") ]; then - if [ $(echo ${source[$um]} | grep -E "::(ftp|http|https)://") ]; then - sourcename="$SOURCE_DIR/$(echo ${source[$um]} | awk -F '::' '{print $1}')" - else - sourcename="$SOURCE_DIR/$(echo ${source[$um]} | rev | cut -d / -f 1 | rev)" - fi + + for src in ${source[@]}; do + if [ $(echo $src | grep -E "::(ftp|http|https)://") ]; then + FILENAME=$SOURCE_DIR/$(echo $src | awk -F '::' '{print $1}') + elif [ $(echo $src | grep -E "(ftp|http|https)://") ]; then + FILENAME=$SOURCE_DIR/$(basename $src) else - sourcename="${source[$um]}" + FILENAME=$src fi - needupdatechecksum="$needupdatechecksum $sourcename" + needupdatechecksum="$needupdatechecksum $FILENAME" done md5sum $needupdatechecksum | sed -e 's| .*/| |' | sort -k 2 @@ -92,7 +90,7 @@ download_src() { local FILE FILENAME for FILE in ${source[@]}; do - if [[ $FILE =~ ::(http|https|ftp|file):// ]]; then + if [[ $FILE =~ ::(http|https|ftp):// ]]; then FILENAME=$(echo $FILE | awk -F '::' '{print $1}') SRCURL=$(echo $FILE | awk -F '::' '{print $2}') else @@ -145,18 +143,15 @@ prepare_src() { if [ "${#source[@]}" -gt 0 ]; then for FILE in ${source[@]}; do - if [[ $FILE =~ ::(http|https|ftp|file):// ]]; then - FILENAME=$(echo $FILE | awk -F '::' '{print $1}') - SRC_DIR="$SOURCE_DIR" - elif [[ $FILE =~ ^(http|https|ftp|file):// ]]; then - FILENAME=$(basename $FILE) - SRC_DIR="$SOURCE_DIR" + if [[ $FILE =~ ::(http|https|ftp):// ]]; then + FILENAME=$SOURCE_DIR/$(echo $FILE | awk -F '::' '{print $1}') + elif [[ $FILE =~ ^(http|https|ftp):// ]]; then + FILENAME=$SOURCE_DIR/$(basename $FILE) else - FILENAME=$(basename $FILE) - SRC_DIR="$PWD" + FILENAME=$PWD/$(basename $FILE) fi for NOEXT in ${noextract[@]}; do - if [ "$NOEXT" = "$FILENAME" ]; then + if [ "$NOEXT" = "$(basename $FILENAME)" ]; then nxt=1 break fi @@ -165,26 +160,29 @@ prepare_src() { case $FILENAME in *.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip|*.rpm) if [ $(type -p bsdtar) ]; then - COMMAND="bsdtar -p -o -C $SRC -xf $SOURCE_DIR/$FILENAME" + COMMAND="bsdtar -p -o -C $SRC -xf $FILENAME" else - COMMAND="tar -p -o -C $SRC -xf $SOURCE_DIR/$FILENAME" + COMMAND="tar -p -o -C $SRC -xf $FILENAME" fi MODE="Unpacking" ;; *) - COMMAND="cp $SOURCE_DIR/$FILENAME $SRC" + COMMAND="cp $FILENAME $SRC" MODE="Preparing" ;; esac - msg2 "$MODE '$FILENAME'..." - $COMMAND - if [ $? != 0 ]; then + msg "$MODE '$(basename $FILENAME)'..." + $COMMAND || { msgerr "$MODE '$FILENAME' failed." abort 1 - fi + } else - msg2 "Preparing '$FILENAME'..." - cp "$SRC_DIR/$FILENAME" "$SRC" + MODE="Preparing" + msg "$MODE '$(basename $FILENAME)'..." + cp "$FILENAME" "$SRC" || { + msgerr "$MODE '$FILENAME' failed." + abort 1 + } fi - nxt= + unset nxt done fi } @@ -202,14 +200,7 @@ run_build() { pushd $SRC >/dev/null - if [ "$LOGGING" = yes ]; then - ( - set -e -x; build 2>&1 | tee $LOG_DIR/$name-$version-$release.log - exit $PIPESTATUS - ) - else - (set -e -x; build) - fi + (set -e -x; build) if [ $? != 0 ]; then msgerr "Build '$name-$version-$release' failed." @@ -368,6 +359,26 @@ generate_pkgfiles() { | sort -k 3 > .pkgfiles } +cleanup() { + if [ -e "$PACKAGE_DIR/$PKGNAME" ]; then + msg "Removing $PACKAGE_DIR/$PKGNAME" + rm -f "$PACKAGE_DIR/$PKGNAME" + fi + for src in ${source[@]}; do + if [ $(echo $src | grep -E "::(ftp|http|https)://") ]; then + FILENAME=$SOURCE_DIR/$(echo $src | awk -F '::' '{print $1}') + elif [ $(echo $src | grep -E "(ftp|http|https)://") ]; then + FILENAME=$SOURCE_DIR/$(basename $src) + else + FILENAME=$src + fi + if [ -e "$FILENAME" ] && [ "$FILENAME" != "$src" ]; then + msg "Removing $FILENAME" + rm -f "$FILENAME" + fi + done +} + check_buildscript() { # check the required field in buildscript if [ -z "$name" ]; then @@ -480,9 +491,9 @@ parse_opts() { -o | --download) DOWNLOAD_ONLY=yes ;; -x | --extract) EXTRACT_ONLY=yes ;; -w | --keep-work) KEEP_WORK=yes ;; - -l | --log) LOGGING=yes ;; -p | --pkgfiles) GENPKGFILES=yes ;; -h | --help) SHOWHELP=yes ;; + --clean) CLEANUP=yes ;; --root=*) OPTS+=($1) ;; --no-preinstall) OPTS+=($1) ;; --no-postinstall) OPTS+=($1) ;; @@ -493,7 +504,6 @@ parse_opts() { --config=*) PKGBUILD_CONF="${1#*=}" ;; --srcdir=*) CUSTOM_SOURCE_DIR="${1#*=}" ;; --pkgdir=*) CUSTOM_PACKAGE_DIR="${1#*=}" ;; - --logdir=*) CUSTOM_LOG_DIR="${1#*=}" ;; --workdir=*) CUSTOM_WORK_DIR="${1#*=}" ;; *) msg "Invalid $(basename $0) option! ($1)"; exit 1 ;; esac @@ -519,12 +529,11 @@ Options: -x, --extract extract only source file -p, --pkgfiles generate list files in package -w, --keep-work keep working directory - -l, --log log build process -h, --help show this help message + --clean remove downloaded sources and prebuilt packages --config= use custom config file --srcdir= override directory path for sources --pkgdir= override directory path for compiled package - --logdir= override directory path for build logs --workdir= override directory path for working dir --no-preinstall skip preinstall script before install package --no-postinstall skip postinstall script after install package @@ -554,15 +563,11 @@ main() { PACKAGE_DIR="$CUSTOM_PACKAGE_DIR" fi - if [ "$CUSTOM_LOG_DIR" ]; then - LOG_DIR="$CUSTOM_LOG_DIR" - fi - if [ "$CUSTOM_WORK_DIR" ]; then WORK_DIR="$CUSTOM_WORK_DIR" fi - checkdir "$SOURCE_DIR" "$PACKAGE_DIR" "$WORK_DIR" "$LOG_DIR" + checkdir "$SOURCE_DIR" "$PACKAGE_DIR" "$WORK_DIR" # show usage if [ "$SHOWHELP" ]; then @@ -572,19 +577,12 @@ main() { if [ -f $PKGBUILD_BSCRIPT ]; then description=$(grep "^# description[[:blank:]]*:" $PKGBUILD_BSCRIPT | sed 's/^# description[[:blank:]]*:[[:blank:]]*//') - backup=$(grep "^# backup[[:blank:]]*:" $PKGBUILD_BSCRIPT | sed 's/^# backup[[:blank:]]*:[[:blank:]]*//') - noextract=$(grep "^# noextract[[:blank:]]*:" $PKGBUILD_BSCRIPT | sed 's/^# noextract[[:blank:]]*:[[:blank:]]*//') source $PKGBUILD_BSCRIPT else msgerr "'$PKGBUILD_BSCRIPT' file not found." exit 1 fi - if [ "$LOGGING" = yes ] && [ -f $LOG_DIR/$name-$version-$release.log ] && [ ! -w $LOG_DIR/$name-$version-$release.log ]; then - msgerr "You dont have write permission for '$LOG_DIR/$name-$version-$release.log'." - exit 1 - fi - check_buildscript set_options @@ -594,10 +592,37 @@ main() { exit 1 ;; esac + # generate .pkgfiles if [ "$GENPKGFILES" = "yes" ]; then generate_pkgfiles exit 0 fi + + # download source only + if [ "$DOWNLOAD_ONLY" ]; then + download_src + exit 0 + fi + + # extract source only + if [ "$EXTRACT_ONLY" ]; then + download_src + prepare_src + exit 0 + fi + + # update md5sum + if [ "$UPDATE_MDSUM" ]; then + download_src + updatemdsum + exit 0 + fi + + # remove source and package + if [ "$CLEANUP" ]; then + cleanup + exit 0 + fi LOCK_FILE="/tmp/pkgbuild.$name.lock" @@ -614,27 +639,6 @@ main() { fi fi - # download source only - if [ "$DOWNLOAD_ONLY" ]; then - download_src - abort 0 - fi - - # extract source only - if [ "$EXTRACT_ONLY" ]; then - download_src - prepare_src - KEEP_WORK=yes - abort 0 - fi - - # update md5sum - if [ "$UPDATE_MDSUM" ]; then - download_src - updatemdsum - abort 0 - fi - # build package if [ -f "$PACKAGE_DIR/$PKGNAME" ] && [ ! "$FORCE_REBUILD" ]; then if [ ! "$INSTALL_PKG" ] && [ ! "$REINSTALL_PKG" ] && [ ! "$UPGRADE_PKG" ]; then @@ -666,7 +670,6 @@ PKGBUILD_BSCRIPT="spkgbuild" SOURCE_DIR="/var/cache/scratchpkg/sources" PACKAGE_DIR="/var/cache/scratchpkg/packages" -LOG_DIR="/var/cache/scratchpkg/log" WORK_DIR="/var/cache/scratchpkg/work" DOWNLOAD_PROG="wget" COMPRESSION_MODE="xz" diff --git a/scratchpkg.conf b/scratchpkg.conf index a50e0fd..4ce517c 100644 --- a/scratchpkg.conf +++ b/scratchpkg.conf @@ -8,7 +8,6 @@ MAKEFLAGS="-j$(nproc)" # SOURCE_DIR="/var/cache/scratchpkg/sources" # PACKAGE_DIR="/var/cache/scratchpkg/packages" -# LOG_DIR="/var/cache/scratchpkg/log" # WORK_DIR="/var/cache/scratchpkg/work" # DOWNLOAD_PROG="wget" # WGET_OPTS=""