#!/bin/bash
# libremakepkg
# analogous to devtools' archbuild
# Copyright 2010 - 2011 Nicolás Reynolds
# Copyright 2011 Joshua Ismael Haase Hernández
# Copyright 2012 Luke Shumaker
# ---------- GNU General Public License 3 ----------
# This file is part of Parabola.
# Parabola is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# Parabola is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Parabola. If not, see .
. /etc/libretools.conf
##
# copy logs if they exist
##
copy_log() {
find "${copydir}/build/" -maxdepth 1 -name "*\.log" -exec cp {} ./ \;
}
##
# End inmediately but print a useful message
##
trap_exit() {
copy_log
error "$@"
exit 1
}
usage() {
echo 'cd to a dir containing a PKGBUILD and run:'
echo '$0 [options] [-- makechrootpkg args [-- makepkg args]]'
echo 'This script will build your package in a chroot.'
echo ''
echo 'OPTIONS:'
echo ' -h Show this message'
echo ''
echo ' -c Clean the chroot before building'
echo ' -u Update the chroot before building'
echo ' -N Do not check freedom issues (for fullpkg)'
echo ''
echo " -d Use this dir instead of \`$CHROOTDIR'"
echo " -n Use this chroot instead of \`$CHROOT'"
echo ' -l Use this chroot copy instead of basing it'
echo ' on the username'
}
main() {
# The logic for setting CHROOTCOPY is mirred from makechrootpkg
CHROOTCOPY=$USER
[[ -n $SUDO_USER ]] && CHROOTCOPY=$SUDO_USER
[[ -z $CHROOTCOPY || $CHROOTCOPY = root ]] && CHROOTCOPY=copy
CLEANFIRST=false
UPDATEFIRST=false
CHECKNONFREE=true
makechrootpkg_args=()
while getopts 'hcuNd:n:l:' arg ; do
case "${arg}" in
c) CLEANFIRST=true;;
u) UPDATEFIRST=true;;
N) CHECKNONFREE=false;;
d) CHROOTDIR=$OPTARG;;
n) CHROOT=$OPTARG;;
l) CHROOTCOPY=$OPTARG;;
h) usage; exit 0;;
*) usage; exit 1;;
esac
done
shift $(($OPTIND - 1))
# Pass all arguments after -- right to makechrootpkg
makechrootpkg_args+=("$@")
# not local
rootdir="${CHROOTDIR}/${CHROOT}/root"
copydir="${CHROOTDIR}/${CHROOT}/${CHROOTCOPY}"
if (( EUID )); then
error "This script must be run as root"
exit 1
fi
if [[ ! -e PKGBUILD ]]; then
error "This isn't a build directory"
exit 1
fi
# OK, we're starting now ###############################################
# Trap signals from makepkg
set -E
trap 'trap_exit "(libremakepkg): TERM signal caught. Exiting..."' TERM HUP QUIT
trap 'trap_exit "(libremakepkg): Aborted by user! Exiting..."' INT
trap 'trap_exit "(libremakepkg): An unknown error has occurred. Exiting..."' ERR
if $CHECKNONFREE; then
msg "Checking PKGBUILD for non-free issues"
if ! pkgbuild-check-nonfree -f; then
if [[ $? -eq 15 ]]; then
# other errors mean fail, not nonfree
error "PKGBUILD contains non-free issues"
exit 15
else
warning "PKGBUILD couldn't be check aganist non-free issues"
fi
fi
fi
if $CLEANFIRST; then
librechroot -c -d "$CHROOTDIR" -l "$CHROOTCOPY" "$CHROOT"
fi
if $UPDATEFIRST; then
librechroot -u -d "$CHROOTDIR" -l "$CHROOTCOPY" "$CHROOT"
fi
unset CLEANFIRST UPDATEFIRST librechroot_args
makechrootpkg "${makechrootpkg_args[@]}" -d -r "$CHROOTDIR/$CHROOT" -l "$CHROOTCOPY"
ev=$? # exit value
copy_log
exit $ev
}
main "$@"