#!/bin/bash if [ -z "$1" ]; then cat << EOT Script to build a source package in one of the available cowbuilders. Synopsis -------- nd_build [arch] [cowbuilder options] Examples -------- Build for a single specific arch: nd_build nd+debian lenny i386 someting.dsc Build for all archs (will just build once for arch 'all'): nd_build ubuntu jaunty something.dsc Build the same way but don't put results in current dir: nd_build debian sid something.dsc --buildresult to-upload/ EOT exit 1 fi family=$1 dist=$2 set -e if [ -z "$family" ]; then echo "You need to provide a distribution family ('debian', 'ubuntu'); prefix with 'nd+' to enable the NeuroDebian repository." exit 1 fi if [ -z "$dist" ]; then echo "You need to provide a distribution codename (e.g. 'lenny', 'squeeze')." exit 1 fi . /etc/neurodebian/cmdsettings.sh # common options opts="--distribution $dist --aptcache $aptcache --buildplace $buildplace" if [ -z "$3" ]; then echo "You need to provide a .dsc file" exit 1 fi if [ ! "$3" = "${3%*.dsc}" ]; then dscfile=$3 # must already be the dsc file, hence no arch info given if [ "$(grep '^Architecture' $dscfile | awk '{ print $2 }')" = "all" ]; then echo "Arch 'all' package detected -- using amd64 system to build it" arch="amd64" else arch="i386 amd64" fi shift; shift; shift else # must be arch given and dsc as 4th arch=$3 dscfile=$4 if [ -z "$dscfile" ]; then echo "You need to provide a .dsc file" exit 1 fi shift; shift; shift; shift fi # failed will be set to 1 if any build fails failed= for a in $arch; do # default options="$opts" if [ "$a" = "amd64" ]; then # only force source into the upload for NeuroDebian if [ ! "$family" = "${family#nd+*}" ]; then options="$opts --debbuildopts -sa" fi else options="$opts --debbuildopts -B" fi echo "Building for $family $dist $a ..." buildfile="${dscfile%.dsc}_${a}.build" tsfile="${buildfile}.timestamp.`date +%s`" # "unique" timestamp file /usr/bin/time -f "%E real, %U user, %S sys, %O out" -o "${tsfile}" \ cowbuilder --build $dscfile \ --basepath ${cowbuilderroot}/cow/${family}-${dist}-${a}.cow \ --buildresult . \ --logfile "${buildfile}" \ $options \ "$@" && status='OK' || { status='FAILED'; failed=1; } timeinfo=$(tail -n 1 "${tsfile}") # Update the summary of builds touch summary.build # Assure existence sed -i -e "s/\(${buildfile}.*out$\)/\1 OLD/g" summary.build # Mark previous entry as OLD echo -e "${buildfile}\t$status\t$timeinfo" >> summary.build # Add current one rm -f "${tsfile}" done # Exit with failure status if any built failed [ -z $failed ] || exit 1