mirror of
https://github.com/outbackdingo/scratchpkg.git
synced 2026-03-21 18:44:30 +00:00
fix, improve, add --clean option, remove --log option
This commit is contained in:
157
pkgbuild
157
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=<config> use custom config file
|
||||
--srcdir=<path> override directory path for sources
|
||||
--pkgdir=<path> override directory path for compiled package
|
||||
--logdir=<path> override directory path for build logs
|
||||
--workdir=<path> 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"
|
||||
|
||||
@@ -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=""
|
||||
|
||||
Reference in New Issue
Block a user