#!/bin/sh # This code is part of GOsa (http://www.gosa-project.org) # Copyright (C) 2008 GONICUS GmbH # # ID: $$Id$$ # # This program 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 program 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 # Define defaults RELEASE_REASON="GOsa svn snapshot" BRANCH="trunk" SECTION="web" SI_SECTION="utils" TARGET_RELEASE="etch" MAKE_PLUGINS="" MAKE_GOTO="" GOTO="" PBUILDER="" NOT_RELEASED="heimdal dak dfs glpi apache2" GOTO_NOT_RELEASED="apache-directory-studio goto-cd libresourcepool-net-ldap-perl-1.002 libresourcepool-perl-1.0104 openproj ptc syslinux konch ldm openssh-4.3p2" DEBIAN_PKG="remove" NO_SVN="use" EXTRACT=`pwd` usage() { cat <<-EOF GOsa Debian package build tool. Build snapshots from selected SVN locations or local directories. Usage: ${0##*/} [options] Options: -b|--branch Branch to export [$BRANCH] -p|--plugins Comma seperate list of plugins to build. Leave empty to build all. -e|--experimental Build not released plugins (for testers and developers only) -r|--release Debian release to build for [$TARGET_RELEASE] -c|--changelog Debian changelog entry [$RELEASE_REASON] -s|--section Debian section to place GOsa in [$SECTION] -i|--si-section Debian section to place GOsa-SI in [$SI_SECTION] -d|--debian-pkg Don't clear up debian packages for plugins (for developers only) -n|--no-svn Don't extract gosa from svn (when internet connectivity is not present) -x|--extract-dir Directory where the checkout is for no-svn -g|--build-goto Build the goto2 packages -l|--use-pbuilder Use pbuilder to build the packages -h|--help this help EOF exit 1 } for cmd in dh-make-gosa debchange dpkg-buildpackage dpkg-source svn; do if ! which $cmd >/dev/null; then echo "Error: cannot find '$cmd' command in path!"; exit 1 fi done # Import command line parameters PARMS=`getopt -o e::d::b:r:s:c:i:p:n:x:g::l::,h --long branch:,changelog:,plugins:,section:,si-section:,release:,help -n "${0##*/}" -- "$@"` eval set -- "$PARMS" while true; do case "$1" in -b|--branch) BRANCH=$2; shift 2 ;; -r|--release) TARGET_RELEASE=$2; shift 2 ;; -c|--changelog) RELEASE_REASON=$2; shift 2 ;; -p|--plugins) MAKE_PLUGINS=$(echo $2 | tr ',' ' '); shift 2 ;; -e|--experimental) NOT_RELEASED=""; shift 2;; -s|--section) SECTION=$2; shift 2 ;; -i|--si-section) SI_SECTION=$2; shift 2 ;; -d|--debian-pkg) DEBIAN_PKG=""; shift 2 ;; -n|--no-svn) NO_SVN=""; shift 2;; -x|--extract-dir) EXTRACT=$2; shift 2;; -g|--build-goto) GOTO="use"; shift 2;; -l|--use-pbuilder) PBUILDER="use"; shift 2;; -h|--help) usage ;; --) shift; break ;; *) echo "getopt error" ;; esac done if [ "$NO_SVN" = "use" ] then echo "Loading svn information for gosa '${BRANCH}'..." svn co -N https://oss.gonicus.de/repositories/gosa/${BRANCH} gosa-info/ > /dev/null BRANCH_REV=$(LANG=C svn info gosa-info | sed -n -e 's/^Last Changed Rev: \([0-9]*\).*$/\1/p') rm -rf gosa-info echo "Loading svn information for goto '${BRANCH}'..." svn co -N https://oss.gonicus.de/repositories/goto/${BRANCH} goto-info/ > /dev/null GOTO_BRANCH_REV=$(LANG=C svn info goto-info | sed -n -e 's/^Last Changed Rev: \([0-9]*\).*$/\1/p') rm -rf goto-info else echo "Loading svn information for gosa '${BRANCH}' from local checkout ..." BRANCH_REV=$(LANG=C svn info $EXTRACT/gosa-core | sed -n -e 's/^Last Changed Rev: \([0-9]*\).*$/\1/p') if [ "$GOTO" = "use" ] then echo "Loading svn information for goto '${BRANCH}' from local checkout ..." GOTO_BRANCH_REV=$(LANG=C svn info $EXTRACT/goto | sed -n -e 's/^Last Changed Rev: \([0-9]*\).*$/\1/p') fi fi if [ "$NO_SVN" = "use" ] then # Load current revision from logs VERSION=$(svn cat -r "${BRANCH_REV}" https://oss.gonicus.de/repositories/gosa/${BRANCH}/gosa-core/debian/changelog \ | head -n 1 | sed -n -e 's/.*(\([^-]*\).*/\1/p') if [ "$BRANCH" == "trunk" ]; then GOSA_VER="${VERSION}+svn${BRANCH_REV}" if [ "$GOTO" = "use" ] then GOTO_VER="+svn${GOTO_BRANCH_REV}" fi else GOSA_VER="${VERSION}" if [ "$GOTO" = "use" ] then GOTO_VER="" fi fi else # Load current revision from logs VERSION=$(cat $EXTRACT/gosa-core/debian/changelog | head -n 1 | sed -n -e 's/.*(\([^-]*\).*/\1/p') if [ "$BRANCH" == "trunk" ]; then GOSA_VER="${VERSION}+svn${BRANCH_REV}" else GOSA_VER="${VERSION}" fi echo $GOSA_VER fi GOSA_DIR="gosa-${GOSA_VER}" ORIG_FILE="gosa_${GOSA_VER}.orig.tar.gz" if [ "$NO_SVN" = "use" ] then # Export from svn... BNAME=$(basename $BRANCH) [ -d "gosa-${BNAME}" ] && rm -rf gosa-$BNAME echo "Exporting current GOsa (rev: ${BRANCH_REV}) from '${BRANCH}'..." svn export -r "${BRANCH_REV}" https://oss.gonicus.de/repositories/gosa/${BRANCH}/gosa-core gosa-${BNAME} > /dev/null svn export -r "${BRANCH_REV}" https://oss.gonicus.de/repositories/gosa/${BRANCH}/gosa-si gosa-si-${BNAME} > /dev/null svn export -r "${BRANCH_REV}" https://oss.gonicus.de/repositories/gosa/${BRANCH}/gosa-plugins gosa-plugins-${BNAME} > /dev/null if [ "$GOTO" = "use" ] then echo "Exporting current GOto (rev: ${GOTO_BRANCH_REV}) from '${BRANCH}'..." svn export -r "${GOTO_BRANCH_REV}" https://oss.gonicus.de/repositories/goto/${BRANCH}/ goto-${BNAME} > /dev/null fi else # Export from local checkout... echo "Exporting current GOsa (rev: ${BRANCH_REV}) from localcheckout '${BRANCH}'..." BNAME=$(basename $BRANCH) cp -r gosa-core gosa-${GOSA_VER} mv gosa-si gosa-si-${GOSA_VER} mv gosa-plugins gosa-plugins-${BNAME} if [ "$GOTO" = "use" ] then echo "Exporting current GOto (rev: ${GOTO_BRANCH_REV}) from localcheckout '${BRANCH}'..." BNAME=$(basename $BRANCH) mv goto goto-${BNAME} fi fi if [ "$NO_SVN" = "use" ] then VERSION=$(cat "gosa-${BNAME}/debian/changelog" | head -n 1 | sed -n -e 's/.*(\([^-]*\).*/\1/p') fi GOSA_DIR="gosa-${GOSA_VER}" GOSA_SI_DIR="gosa-si-${GOSA_VER}" GOTO_DIR="goto-${BNAME}" if [ "$NO_SVN" = "use" ] then if [ "$BNAME" != "$GOSA_VER" ] then rm -rf "gosa-${GOSA_VER}" fi fi if [ "$NO_SVN" = "use" ] then if [ "$BNAME" != "$GOSA_VER" ] then mv "gosa-${BNAME}" "gosa-${GOSA_VER}" mv "gosa-si-${BNAME}" "gosa-si-${GOSA_VER}" fi fi echo "cleaning svn entries from sources" find ${GOSA_DIR} -type d -name ".svn" -exec rm -rf {} \; >/dev/null 2>&1 find ${GOSA_SI_DIR} -type d -name ".svn" -exec rm -rf {} \; >/dev/null 2>&1 find gosa-plugins-${BNAME} -type d -name ".svn" -exec rm -rf {} \; >/dev/null 2>&1 if [ "$GOTO" = "use" ] then find goto-${BNAME} -type d -name ".svn" -exec rm -rf {} \; >/dev/null 2>&1 fi echo "Creating original sources 'gosa-${GOSA_VER}'..." tar -c --exclude "${GOSA_DIR}"/debian -f "gosa_${GOSA_VER}.orig.tar" "${GOSA_DIR}" tar -c --exclude "${GOSA_SI_DIR}"/debian -f "gosa-si_${GOSA_VER}.orig.tar" "${GOSA_SI_DIR}" echo "Compressing sources..." gzip -f -9 "gosa_${GOSA_VER}.orig.tar" gzip -f -9 "gosa-si_${GOSA_VER}.orig.tar" export OVERRIDE_VERSION="$GOSA_VER" if [ -z "$MAKE_PLUGINS" ]; then MAKE_PLUGINS=$(ls -1 gosa-plugins-${BNAME}/*/plugin.dsc | sed 's/^.*\/\([^\/]*\)\/plugin.dsc$/\1/') for i in $NOT_RELEASED; do MAKE_PLUGINS=$(echo -n $MAKE_PLUGINS | sed "s/$i//") done fi if [ "TARGET_RELEASE" == "etch" ]; then NOBREAKS="--no-break" fi for plugin in $MAKE_PLUGINS; do GOSA_PLUG_DIR="gosa-plugin-$plugin-${GOSA_VER}" echo "gosa plugin dir" $GOSA_PLUG_DIR mv "gosa-plugins-${BNAME}/$plugin" . echo "Debianizing plugin $plugin" yes | dh-make-gosa $NOBREAKS --section $SECTION $plugin rm -rf "$plugin" echo "Packing original sources 'gosa-plugin-$plugin-${GOSA_VER}'..." tar -c --exclude "gosa-plugin-${plugin}-${GOSA_VER}/debian" -f "gosa-plugin-${plugin}_${GOSA_VER}.orig.tar" "${GOSA_PLUG_DIR}" echo "Compressing sources..." gzip -f -9 "gosa-plugin-${plugin}_${GOSA_VER}.orig.tar" done rm -rf gosa-plugins-${BNAME} if [ "$GOTO" = "use" ] then MAKE_GOTO=$(ls -1 goto-${BNAME}/) for i in $GOTO_NOT_RELEASED; do MAKE_GOTO=$(echo -n $MAKE_GOTO | sed "s/$i//") done for goto in $MAKE_GOTO; do mv "goto-${BNAME}/$goto" . echo "Packing original sources '$goto'..." GOTO_VERSION=$(cat $goto/debian/changelog | head -n 1 | sed -n -e 's/.*(\([^-]*\).*/\1/p') if [ "$GOTO_VER" = "" ] then tar -c --exclude "$goto/debian" -f "${goto}_${GOTO_VERSION}.orig.tar" $goto echo "Compressing sources..." gzip -f -9 "${goto}_${GOTO_VERSION}.orig.tar" else tar -c --exclude "$goto/debian" -f "${goto}_${GOTO_VERSION}${GOTO_VER}.orig.tar" $goto echo "Compressing svn sources..." gzip -f -9 "${goto}_${GOTO_VERSION}${GOTO_VER}.orig.tar" echo "Adapting version in $goto" (cd "$goto"; echo | debchange -v "${GOTO_VERSION}${GOTO_VER}-1${TARGET_RELEASE}1" -D "$TARGET_RELEASE" "$RELEASE_REASON") fi done rm -rf goto-${BNAME} fi echo "Deploying patches..." for patch in $(find patches -type f | grep -v .svn); do if echo $patch | grep -q gosa-plugin; then plugin=$(echo $patch | sed 's/^.*gosa-plugin-\([^-]*\).*$/\1/g') echo "* gosa-plugin-$plugin patch: $patch" [ -d "gosa-plugin-${plugin}-${GOSA_VER}/debian/patches" ] || mkdir -p "gosa-plugin-${plugin}-${GOSA_VER}/debian/patches" cp "$patch" gosa-plugin-${plugin}-${GOSA_VER}/debian/patches else echo "* gosa-core patch: $patch" [ -d "${GOSA_DIR}/debian/patches" ] && mkdir -p "${GOSA_DIR}/debian/patches" cp "$patch" ${GOSA_DIR}/debian/patches fi done # Put section in GOsa_DIR sed -i "s#^Section: web#Section: $SECTION#g" ${GOSA_DIR}/debian/control sed -i "s#^Section: utils#Section: $SI_SECTION#g" ${GOSA_SI_DIR}/debian/control for plugin in $MAKE_PLUGINS; do GOSA_PLUGIN_DIRS="$GOSA_PLUGIN_DIRS gosa-plugin-$plugin-${GOSA_VER}" done if [ "$GOTO" = "use" ] then for goto in $MAKE_GOTO; do GOTO_DIRS="$GOTO_DIRS $goto" done fi for dir in $GOSA_DIR $GOSA_SI_DIR $GOSA_PLUGIN_DIRS; do echo "Adapting version in $dir" if [ "$TARGET_RELEASE" == "unstable" ]; then (cd "$dir"; echo | debchange -v "${GOSA_VER}" "$RELEASE_REASON" >/dev/null 2>&1) else (cd "$dir"; echo | debchange -v "${GOSA_VER}-1${TARGET_RELEASE}1" -D "$TARGET_RELEASE" "$RELEASE_REASON" >/dev/null 2>&1) fi [ -d $dir/debian/patches ] || continue echo "Creating patch list for $dir" ls -1 $dir/debian/patches | grep -v 00list | sed 's%^.*/%%g' > $dir/debian/patches/00list done # Update revision sed -i "s/^\$svn_revision = .*$/\$svn_revision = '\$Revision: $BRANCH_REV \$';/g" $GOSA_DIR/include/functions.inc if [ "$1" = "-s" ] then echo "Creating debian sources..." for dir in $GOSA_DIR $GOSA_SI_DIR $GOSA_PLUGIN_DIRS; do dpkg-source -b "$dir" done if [ "$GOTO" = "use" ] then echo "Creating GOto sources..." for dir in $GOTO_DIRS; do dpkg-source -b "$dir" done fi else echo "Creating debian packages..." for dir in $GOSA_DIR $GOSA_SI_DIR $GOSA_PLUGIN_DIRS; do if [ "$PBUILDER" = "use" ] then echo "using pbuilder to build gosa gosa-si gosa-plugins" (cd "$dir"; pdebuild --debbuildopts -sa; debsign) else (cd "$dir"; dpkg-buildpackage -k$DEBSIGN_KEYID -rfakeroot -sa) fi done if [ "$GOTO" = "use" ] then echo "Creating GOto debian packages..." for dir in $GOTO_DIRS; do if [ "$PBUILDER" = "use" ] then echo "using pbuilder to build goto debian packages" (cd "$dir"; pdebuild --debbuildopts -sa; debsign -k$DEBSIGN_KEYID) else (cd "$dir"; dpkg-buildpackage -k$DEBSIGN_KEYID -rfakeroot -sa) fi done fi fi echo "Removing gosa snapshot..." if [ -z "$DEBIAN_PKG" ] then if [ "$NO_SVN" = "use" ] then for dir in $GOSA_DIR; do rm -rf "$dir" done fi else for dir in $GOSA_DIR $GOSA_SI_DIR $GOSA_PLUGIN_DIRS; do rm -rf "$dir" done if [ "$GOTO" = "use" ] then for dir in $GOTO_DIRs; do rm -rf "$dir" done fi fi