#!/bin/bash # Allowed licenses: build only for licenses in this array ALLOWED_LICENSES=('GPL' 'GPL1' 'GPL2' 'LGPL' 'LGPL1' 'LGPL2') if [ $# -ne 3 -a $# -ne 4 ]; then echo "usage: $(basename $0) [-f] <packagename> <repo> <arch>" echo " -f Force building. Skip license checks" exit 1 fi BASEDIR="$(dirname $0)/../" . "$BASEDIR/db-functions" source_makepkg FORCE=0 if [ "$1" = "-f" ]; then FORCE=1 shift fi packagename="$1" reponame="$2" _arch="$3" srcpath="$FTP_BASE/sources/" logpath="/var/log/sourceballs/" WORKDIR="/tmp/make-sourceball.$packagename.$UID" cleanup() { restore_umask rm -rf "$WORKDIR" [ "$1" ] && exit $1 } ctrl_c() { echo "Interrupted" >&2 cleanup 0 } die() { echo -e "$*" >&2 cleanup 1 } #usage: chk_license ${license[@]}" chk_license() { #The -f flag skips this check if [ $FORCE = 1 ]; then return 0 fi local l for l in "$@"; do l="$(echo $l | tr '[:upper:]' '[:lower:]')" for allowed in ${ALLOWED_LICENSES[@]}; do allowed="$(echo $allowed | tr '[:upper:]' '[:lower:]')" if [ "$l" = "$allowed" ]; then return 0 fi done done return 1 } create_srcpackage() { if [ -d "$1" ]; then pushd "$1" >/dev/null . "$BUILDSCRIPT" echo "Creating source tarball for $pkgname-$pkgver-$pkgrel" if ! chk_license ${license[@]}; then echo -e "\t$pkgname license (${license[@]}) does not require source tarballs" >&2 cleanup 0 fi local logfile="$logpath/$pkgname" if ! /usr/bin/makepkg --allsource --ignorearch >"$logfile" 2>&1; then popd >/dev/null /bin/gzip -f -9 "$logfile" die "\tFailed to download source for $pkgname-$pkgver-$pkgrel ($reponame-$_arch)" fi /bin/rm -f "$logfile"{,.gz} local pkg_file="${pkgname}-${pkgver}-${pkgrel}${SRCEXT}" if [ ! -d "$srcpath" ]; then mkdir -p "$srcpath" fi cp "$pkg_file" "$srcpath" popd >/dev/null return 0 fi } remove_old() { if [ -d "$1" ]; then pushd "$1" >/dev/null PKGVERS="" for repo in *; do cd "$repo" . "$BUILDSCRIPT" PKGVERS="$PKGVERS $pkgver-$pkgrel" cd .. done for pkg in "$srcpath/$pkgname-"*; do pkg="$(basename $pkg)" if [ "$(getpkgname $pkg)" == "$pkgname" ]; then skip=0 pver="$(getpkgver $pkg)" for v in $PKGVERS; do if [ "$v" = "$pver" ]; then skip=1 break fi done if [ $skip -ne 1 ]; then rm -f "$srcpath/$pkg" fi fi done popd >/dev/null fi } trap ctrl_c 2 trap cleanup 0 1 set_umask /bin/mkdir -p "$WORKDIR" /bin/mkdir -p "$logpath" cd "$WORKDIR" if /usr/bin/svn export -q "$SVN_PATH/$packagename" $packagename; then remove_old "$pkgname/repos/" create_srcpackage "$packagename/repos/$reponame-$_arch" else die "\tPackage '$packagename' does not exist in repo '$reponame-$_arch'" fi