#!/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 "${chroot_path}/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+=("$@") 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; 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 "$@"