summaryrefslogtreecommitdiff
path: root/buildrepo
diff options
context:
space:
mode:
Diffstat (limited to 'buildrepo')
-rwxr-xr-xbuildrepo80
1 files changed, 80 insertions, 0 deletions
diff --git a/buildrepo b/buildrepo
new file mode 100755
index 0000000..067629d
--- /dev/null
+++ b/buildrepo
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+program=${0##*/}
+
+aportsdir=${APORTSDIR:-$HOME/aports}
+repodir=${REPODIR:-$HOME/packages}
+
+
+usage() {
+ echo "usage: $program [-a APORTSDIR] [-d REPODIR] [-hp] [-l LOGPREFIX ] REPOSITORY..."
+ echo "options:"
+ echo " -a Set the aports base dir to APORTSDIR instead of $aportsdir"
+ echo " -d Set destination repository base dir to REPODIR instead of $repodir"
+ echo " -h Show this help and exit"
+ echo " -l Send build to logfile, prefixed by LOGPREFIX"
+ echo " -p Purge obsolete packages from REPODIR after build"
+ exit 1
+}
+
+
+listpackages() {
+ cd "$aportsdir/$1"
+ for i in */APKBUILD; do
+ APKBUILD=$i abuild listpkg
+ done
+}
+
+# purge obsolete packages
+purge() {
+ [ -z "$dopurge" ] && return 0
+ local tmp=$(mktemp /tmp/$program-XXXXXX)
+ cd "$repodir/$1" || return 1
+ trap 'rm -f "$tmp"; exit 1' INT
+ ( listpackages "$1") >$tmp
+ ls *.apk 2>/dev/null | grep -v -w -f $tmp | xargs rm 2>/dev/null
+}
+
+build() {
+ local repo="$1" i
+
+ cd "$aportsdir/$repo" || return 1
+ mkdir -p "$repodir/$repo"
+
+ for i in */APKBUILD; do
+ ( cd ${i%/*} || return 1
+ build $1 || exit 1
+ purge $1 || exit 1
+ PKGDEST="$repodir/$repo" abuild -r || return 1
+ ) || return 1
+ done
+ cd "$repodir/$repo"
+ md5sum *.apk | gzip -9 > INDEX.md5.gz
+ if which apk >/dev/null; then
+ apk index *.apk | gzip -9 > APK_INDEX.gz
+ fi
+ purge "$repo"
+}
+
+while getopts "a:d:hl:p" opt; do
+ case "$opt" in
+ a) aportsdir=$OPTARG;;
+ d) repodir=$OPTARG;;
+ h) usage >&2;;
+ l) logprefix=$OPTARG;;
+ p) dopurge=1;;
+ esac
+done
+shift $(($OPTIND - 1))
+
+[ $# -eq 0 ] && usage >&2
+
+while [ $# -gt 0 ]; do
+ if [ -n "$logprefix" ]; then
+ build $1 >$logprefix.$1.log 2>&1 || exit 1
+ else
+ build $1 || exit 1
+ fi
+ shift
+done
+