#!/bin/sh # # Copyright (c) 2010-2013 Baptiste Daroussin # Copyright (c) 2012-2013 Bryan Drewery # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. LC_ALL=C unset SHELL SAVED_TERM=$TERM unset TERM POUDRIERE_VERSION="3.2-pre" usage() { cat << EOF Usage: poudriere [-e etcdir] [-N] command [options] Options: -e etcdir -- Specify an alternate etc/ dir where poudriere configuration resides. -N -- Disable colors Commands: bulk -- Generate packages for given ports distclean -- Remove old distfiles daemon -- Launch the poudriere daemon help -- Show usage jail -- Manage the jails used by poudriere ports -- Create, update or delete the portstrees used by poudriere pkgclean -- Remove packages that are no longer needed options -- Configure ports options queue -- Queue a build request status -- Get the status of builds testport -- Launch a test build of a given port version -- Show the version of poudriere EOF exit 1 } SETX="" while getopts "e:Nx" FLAG; do case "${FLAG}" in e) if [ ! -d "$OPTARG" ]; then echo "Error: argument '$OPTARG' not a directory" exit 1 fi export POUDRIERE_ETC=$OPTARG ;; N) USE_COLORS="no" ;; x) SETX="-x" ;; *) usage ;; esac done shift $((OPTIND-1)) [ $# -lt 1 ] && usage POUDRIEREPATH=`realpath $0` POUDRIEREPREFIX=${POUDRIEREPATH%\/bin/*} SCRIPTPREFIX=${POUDRIEREPREFIX}/share/poudriere CMD=$1 shift [ -n "${POUDRIERE_ETC}" ] && CMD_ENV="${CMD_ENV} POUDRIERE_ETC=${POUDRIERE_ETC}" [ -n "${USE_COLORS}" ] && CMD_ENV="${CMD_ENV} USE_COLORS=${USE_COLORS}" # Support running from checkout. if [ "${POUDRIEREPATH%src/bin/poudriere}" != "${POUDRIEREPATH}" ]; then LIBEXECPREFIX="${POUDRIEREPATH%src/bin/poudriere}" else LIBEXECPREFIX="${POUDRIEREPREFIX}/libexec/poudriere" fi CMD_ENV="${CMD_ENV} LIBEXECPREFIX=${LIBEXECPREFIX}" CMD_ENV="${CMD_ENV} PATH=${LIBEXECPREFIX}:${PATH}:/sbin:/usr/sbin" CMD_ENV="${CMD_ENV} POUDRIERE_VERSION=${POUDRIERE_VERSION}" # Handle special-case commands first. case "${CMD}" in version) echo "${POUDRIERE_VERSION}" exit 0 ;; help) usage ;; jails) CMD="jail" ;; options|testport|bulk) CMD_ENV="${CMD_ENV} SAVED_TERM=${SAVED_TERM}" esac SCRIPTPATH="${SCRIPTPREFIX}/${CMD}.sh" CMD_ENV="${CMD_ENV} SCRIPTPATH=${SCRIPTPATH} SCRIPTPREFIX=${SCRIPTPREFIX}" case "${CMD}" in api|bulk|distclean|daemon|jail|ports|options|pkgclean|queue|status|testport) ;; *) echo "Unknown command '${CMD}'" usage ;; esac case "${CMD}" in jail|ports|daemon|status|options) ;; *) SET_ERREXIT=-e ;; esac exec env -i ${CMD_ENV} sh ${SET_ERREXIT} ${SETX} "${SCRIPTPATH}" "$@"