#!/bin/bash if [ $# -ne 3 -a $# -ne 4 ]; then echo "usage: $(basename $0) [-f] " echo " -f Force building. Skip license checks" exit 1 fi . "$(dirname $0)/../db-functions" . "$(dirname $0)/../config" 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 } pkgname_from_src() { local tmp tmp=${1##*/} tmp=${tmp%$SRCEXT} for a in ${ARCHES[@]}; do tmp=${tmp%-$a} done tmp=${tmp%-any} echo ${tmp%-*-*} } pkgver_from_src() { tmp=${1##*/} tmp=${tmp%$SRCEXT} for a in ${ARCHES[@]}; do tmp=${tmp%-$a} done tmp=${tmp%-any} echo $tmp | sed 's|.*-\(.*-.*\)$|\1|g' } create_srcpackage() { if [ -d "$1" ]; then pushd "$1" >/dev/null . "$BUILDSCRIPT" if ! [ $FORCE == 1 ] && ! chk_license ${license[@]} ; then #Removed so as not to clutter failed.txt #echo -e "\t$packagename license (${license[@]}) does not require source tarballs" >&2 cleanup 0 else echo "Creating source tarball for $packagename-$pkgver-$pkgrel" fi local logfile="$logpath/$packagename" if ! /usr/bin/makepkg --allsource --ignorearch >"$logfile" 2>&1; then popd >/dev/null /bin/gzip -f -9 "$logfile" die "\tFailed to download source for $packagename-$pkgver-$pkgrel ($reponame-$_arch)" fi /bin/rm -f "$logfile"{,.gz} local pkg_file="${packagename}-${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 srcpkg in "$srcpath/$packagename-"*; do [ -f "$srcpkg" ] || continue if [ "$(pkgname_from_src $srcpkg)" == "$packagename" ]; then skip=0 pver="$(pkgver_from_src $srcpkg)" for v in $PKGVERS; do if [ "$v" = "$pver" ]; then skip=1 break fi done if [ $skip -ne 1 ]; then mv "$srcpkg" $SOURCE_CLEANUP_DESTDIR 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 "$SVNREPO/$packagename" $packagename; then remove_old "$packagename/repos/" create_srcpackage "$packagename/repos/$reponame-$_arch" else die "\tPackage '$packagename' does not exist in repo '$reponame-$_arch'" fi