#!/bin/bash # # Copyright 2004 Todd Kulesza # # The Dropline GNOME Installation System 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 2 of the License, or # (at your option) any later version. # # This software 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 this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA # # ${DLG_ROOT} should be the root directory of the Dropline Build System. # This only needs to be set if you try to run ./build from outside of # the root directory. #DLG_ROOT=/usr/src/dropline-build-system export DLG_ROOT=${DLG_ROOT:-`pwd`} . ${DLG_ROOT}/SCRIPTS/dropline-header . ${DLG_ROOT}/config show_usage () { echo "Usage:" echo " $0 " echo " $0 -meta " echo "" echo "Note: Package definitions in the SCRIPTS-\$DLG_OTHERVERSION directory" echo "will only be used if the environment variable DLG_OTHERVERSION is" echo "actually set to something non-null." die } if [ -z "$1" ]; then show_usage fi build_package () { if [ $# != "1" ]; then return fi NAME=${1} if [ -n "$DLG_OTHERVERSION" -a -d $DLG_SCRIPTDIR-$DLG_OTHERVERSION/$NAME ]; then echo "*** ALPHA TESTER MODE ENABLED ***" DESC="$DLG_SCRIPTDIR-$DLG_OTHERVERSION/$NAME/desc" BUILD="$DLG_SCRIPTDIR-$DLG_OTHERVERSION/$NAME/build" else DESC="${DLG_SCRIPTDIR}/${NAME}/desc" BUILD="${DLG_SCRIPTDIR}/${NAME}/build" fi export DLG_SCRIPTDIR export DLG_SRCDIR if [ ! -e ${DLG_SCRIPTDIR}/${NAME} ]; then echo "Build script directory for ${NAME} not found on the main tree. Searching Dropline extras" if [ -e ${DLG_EXTRASCRIPTDIR}/${NAME} ]; then echo "Build script directory for ${NAME} found on Dropline extras" export DLG_SRCDIR="$DLG_EXTRASRCDIR" export DLG_SCRIPTDIR="$DLG_EXTRASCRIPTDIR" DESC="${DLG_SCRIPTDIR}/${NAME}/desc" BUILD="${DLG_SCRIPTDIR}/${NAME}/build" elif [ -e ${DLG_CONTRIBSCRIPTDIR}/${NAME} ]; then echo "Build script directory ${NAME} found on Contrib extras" export DLG_SRCDIR="$DLG_CONTRIBSRCDIR" export DLG_SCRIPTDIR="$DLG_CONTRIBSCRIPTDIR" DESC="${DLG_SCRIPTDIR}/${NAME}/desc" BUILD="${DLG_SCRIPTDIR}/${NAME}/build" else echo "You don't seem to have a build script directory for ${NAME}." echo -n "Would you like me to create a build script for you? (Y/n)? " read template_answer template_answer=$(echo $template_answer | tr [A-Z] [a-z]) if [ "$template_answer" == "n" ]; then echo "Aborting execution" exit 0 else ${DLG_ROOT}/new-build-script.sh ${NAME} || die "Something went wrong." fi fi fi if [ ! -e ${DESC} ]; then die "Error: Could not find desc file for ${NAME} on ${DESC}." fi if [[ ! -e ${BUILD} && ! -e ${BUILD}.user ]]; then die "Error: Could not find a build file for ${NAME} on ${BUILD}." fi if [ -f ${BUILD}.user ]; then VERSION="$(grep ^VERSION= ${BUILD}.user | cut -d"=" -f2)" echo "Using user's build script for package $NAME" REVISION="$(grep ^REVISION= ${BUILD} | cut -d"=" -f2 | cut -d"\"" -f2)" ls /var/log/packages/${NAME}-${VERSION}-*-${REVISION}* 2> /dev/null 1>&2 ALREADY_INSTALLED="$?" if [[ $ALREADY_INSTALLED == 0 && "$META_BUILD" == "YES" ]] ; then echo "It seems you already have the package ${NAME} version ${VERSION}-${REVISION} installed." echo -n "Do you want to rebuild? (y/N)?." read rebuild_answer rebuild_answer=$(echo $rebuild_answer | tr [A-Z] [a-z]) fi if [ "$rebuild_answer" == "y" ]; then echo "Using Dropline's build script for package $NAME" sh ${BUILD}.user || die "Failed package $NAME" fi if [ "$META_BUILD" != "YES" ]; then echo "Using Dropline's build script for package $NAME" sh ${BUILD}.user || die "Failed package $NAME" fi else VERSION="$(grep ^VERSION= ${BUILD} | cut -d"=" -f2 | cut -d"\"" -f2)" REVISION="$(grep ^REVISION= ${BUILD} | cut -d"=" -f2 | cut -d"\"" -f2)" ls /var/log/packages/${NAME}-${VERSION}-*-${REVISION}* 2> /dev/null 1>&2 ALREADY_INSTALLED="$?" if [[ $ALREADY_INSTALLED == 0 && "$META_BUILD" == "YES" ]] ; then echo "It seems you already have the package ${NAME} version ${VERSION}-${REVISION} installed." echo -n "Do you want to rebuild? (y/N)?." read rebuild_answer rebuild_answer=$(echo $rebuild_answer | tr [A-Z] [a-z]) fi if [ "$rebuild_answer" == "y" ]; then echo "Using Dropline's build script for package $NAME" sh ${BUILD} || die "Failed package $NAME" fi if [ "$META_BUILD" != "YES" ]; then echo "Using Dropline's build script for package $NAME" sh ${BUILD} || die "Failed package $NAME" fi fi } build_meta () { if [ $# != "1" ]; then return fi META=${1} META_BUILD=YES if [ ! -f "${DLG_METADIR}/${META}" ]; then echo "Meta list file for ${META} not found on the main tree. Searching Dropline extras" if [ ! -f "${DLG_EXTRAMETADIR}/${META}" ]; then echo "Meta list file for ${META} not found on Dropline Extras. Searching Contrib extras" if [ ! -f "${DLG_CONTRIBMETADIR}/${META}" ]; then die "Error: Could not find list file for ${META}." else echo "Found meta list file for ${META} on Contrib extras." LIST="${DLG_CONTRIBMETADIR}/${META}" fi else echo "Found meta list file for ${META} on Dropline extras." LIST="${DLG_EXTRAMETADIR}/${META}" fi else LIST="${DLG_METADIR}/${META}" fi echo "Building meta-package $META" for PKG in $(cat ${LIST} | grep -v "^#") do build_package $PKG echo "Installing/Upgrading $PKG" upgradepkg --reinstall --install-new \ ${DLG_PACKAGEROOT}/${NAME}-${VERSION}-*-${REVISION}*.tgz done echo "Finished meta-package $META" } if [[ "$1" == "-meta" || "$1" == "-m" ]]; then build_meta $2 else for PKG in $@ do build_package $PKG done fi