summaryrefslogblamecommitdiff
path: root/buildrepo
blob: 95360f360ab5a4c83271c729380b1acf3a692e90 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                    


                                                                                





                                                                                      
                                                     




























                                                                        



                                                                
                                      

                                             




                                                              



                     
                                  





                                      
                                               














                                                           
#!/bin/sh

program=${0##*/}

aportsdir=${APORTSDIR:-$HOME/aports}
repodir=${REPODIR:-$HOME/packages}


usage() {
	echo "usage: $program [-a APORTSDIR] [-d REPODIR] [-hp] [-l LOGPREFIX ]"
	echo "                [-r DEPREPO] 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"
	echo " -r  Dependencies are found in DEPREPO"
	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
		  PKGDEST="$repodir/$repo" abuild -r || return 1
		) || return 1
	done
	cd "$repodir/$repo"
	echo ">>> Generating Index..."
	md5sum *.apk | gzip -9 > INDEX.md5.gz
	if which apk >/dev/null; then
		local deps
		for i in $deprepo; do
			deps="--repo $repodir/$i"
		done
		apk $deps index *.apk | gzip -9 > APK_INDEX.gz
	fi
	purge "$repo"
}

while getopts "a:d:hl:pr:" opt; do
	case "$opt" in
		a) aportsdir=$OPTARG;;
		d) repodir=$OPTARG;;
		h) usage >&2;;
		l) logprefix=$OPTARG;;
		p) dopurge=1;;
		r) deprepo="$deprepo $OPTARG";;
	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