#!/bin/bash # Allowed licenses: build only for licenses in this array ALLOWED_LICENSES=('GPL' 'GPL1' 'GPL2' 'LGPL' 'LGPL1' 'LGPL2') if [ $# -ne 3 ]; then echo "usage: $(basename $0) " exit 1 fi BASEDIR="$(dirname $0)/../" . "$BASEDIR/db-functions" source_makepkg packagename="$1" reponame="$2" arch="$3" srcpath="$FTP_BASE/sources/" WORKDIR="/tmp/make-sourceball.$packagename.$UID" cleanup() { restore_umask rm -rf "$WORKDIR" [ "$1" ] && exit $1 } ctrl_c() { echo "Interrupted" >&2 cleanup 0 } die() { echo "$*" >&2 cleanup 1 } #usage: chk_license ${license[@]}" chk_license() { 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" if ! chk_license ${license[@]}; then echo "Package license does not require source tarballs. Doing nothing" echo " license => (${license[@]})" cleanup 0 fi if ! /usr/bin/makepkg --allsource >/dev/null 2>&1; then popd >/dev/null return 1 fi popd >/dev/null local pkg_file="${pkgname}-${pkgver}-${pkgrel}${SRCEXT}" echo ":: Source package complete: $pkg_file" if [ ! -d "$srcpath" ]; then mkdir -p "$srcpath" fi #Remove old sourceballs for pkg in "$srcpath/$pkgname-"*; do pkg="$(basename $pkg)" if [ "$(getpkgname $pkg)" == "$pkgname" ]; then rm -f "$srcpath/$pkg" fi done cp "$pkgname/$pkg_file" "$srcpath" return 0 fi } trap ctrl_c 2 trap cleanup 0 1 set_umask /bin/mkdir -p "$WORKDIR" cd "$WORKDIR" echo "Creating Source tarball for $packagename ($reponame-$arch)" if /usr/bin/svn export -q "$SVN_PATH/$packagename/repos/$reponame-$arch" $packagename; then create_srcpackage "$packagename" if [ $? -eq 0 ]; then exit 0 elif [ $? -eq 1 ]; then #trunk sometimes has updated URLs echo ":: Failed to download source, attempting trunk build" rm -rf "$packagename" if /usr/bin/svn export -q "$SVN_PATH/$packagename/trunk" "$packagename"; then create_srcpackage "$packagename" if [ $? -eq 0 ]; then echo ":: Source package complete: $pkg_file" exit 0 elif [ $? -eq 1 ]; then die ":: Failed to download source" elif [ $? -eq 2 ]; then die ":: Failed to compress package" else die ":: Unknown failure reason" fi fi exit 1 elif [ $? -eq 2 ]; then die ":: Failed to compress package" fi else die "Package '$packagename' does not exist in repo $reponame-$arch" fi