#!/bin/sh # # This script builds a component # # Parameters: # $1: target distribution # $2: target directory # $3: SVN location (trunk, tags, branches) # $4: component name # $5: source version # $6: package release # $7: branch identifier # # Environment variable that don't have to be defined anymore # default values are set if not # by the calling script # # SVN_URL SVN_USER SVN_PASS # Set vars to get from anonymous svn as a default SVN_URL=${SVN_URL:-svn://scm.fusionforge.org/fusionforge} SVN_USER=${SVN_USER:-nouser} SVN_PASS=${SVN_PASS:-nopass} echo "SVN_URL=$SVN_URL" echo "SVN_USER=$SVN_USER" echo "SVN_PASS=$SVN_PASS" # # Source functions # . `dirname $0`/functions # # Binaries # BIN_BASENAME="" BIN_CHMOD="/bin/chmod" BIN_ECHO="/bin/echo" BIN_MKDIR="/bin/mkdir" BIN_RM="/bin/rm" BIN_SVN="/usr/bin/svn" BIN_BUILD="" # # Parameters # TARGET_DIR="" SVN_LOCATION="" SVN_COMPONENT="" SVN_VERSION="" SVN_RELEASE="" SVN_BRANCH="" TARGET_DIST="" # # Internal variables # EXIT=0 TMP_DIR="" SVN_PATH_PACKAGE="" VERSION="" # # Main script # $BIN_ECHO "Preparing to build component '$4'" if [ $EXIT -eq 0 ] ; then check_svn_parameters case "$1" in rpm) BIN_BASENAME="/bin/basename" BIN_BUILD="build" ;; deb) BIN_BASENAME="/usr/bin/basename" BIN_BUILD="build_deb" ;; *) $BIN_ECHO "-> target distribution '$1' is not supported (rpm or deb are supported)" EXIT=1 esac if [ ! -x $BIN_BASENAME ] ; then $BIN_ECHO "-> Binary '$BIN_BASENAME' is missing" EXIT=1 fi if [ -z "$2" ] ; then $BIN_ECHO "-> Target directory parameter is missing" EXIT=1 else if [ -d $2 ] ; then TARGET_DIR=$2 else $BIN_ECHO "-> Target directory '$2' does not exist" EXIT=1 fi fi if [ -z "$3" ] ; then $BIN_ECHO "-> SVN location parameter is missing (trunk, tags or branches)" EXIT=1 else if [ "$3" != "trunk" -a "$3" != "tags" -a "$3" != "branches" ] ; then $BIN_ECHO "-> SVN location '$3' is not supported (trunk, tags or branches)" EXIT=1 else SVN_LOCATION=$3 fi fi if [ -z "$4" ] ; then $BIN_ECHO "-> SVN component parameter is missing" EXIT=1 else SVN_COMPONENT=$4 fi if [ -z "$5" ] ; then if [ "$SVN_LOCATION" = "tags" -o "$SVN_LOCATION" = "branches" ] ; then $BIN_ECHO "-> SVN version parameter is missing" EXIT=1 fi else SVN_VERSION=$5 fi if [ -z "$6" ] ; then if [ "$SVN_LOCATION" = "tags" -o "$SVN_LOCATION" = "branches" ] ; then $BIN_ECHO "-> SVN release parameter is missing" EXIT=1 fi else SVN_RELEASE=$6 fi if [ -z "$7" ] ; then if [ "$SVN_LOCATION" = "branches" ] ; then $BIN_ECHO "-> SVN branch parameter is missing" EXIT=1 fi else SVN_BRANCH=$7 fi if [ ! -x $BIN_SVN ] ; then $BIN_ECHO "-> Binary '$BIN_SVN' is missing" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then case "$SVN_LOCATION" in trunk) SVN_PATH_PACKAGE="trunk/component/$SVN_COMPONENT/package" ;; tags) SVN_PATH_PACKAGE="tags/component/$SVN_COMPONENT/package/$SVN_VERSION-$SVN_RELEASE" ;; branches) SVN_PATH_PACKAGE="branches/component/$SVN_COMPONENT/package/$SVN_VERSION-$SVN_RELEASE-$SVN_BRANCH" ;; *) $BIN_ECHO "-> SVN location '$SVN_LOCATION' is not supported" EXIT=1 esac fi if [ $EXIT -eq 0 ] ; then TMP_DIR="$TARGET_DIR/`$BIN_BASENAME $0`" if [ -d $TMP_DIR ] ; then $BIN_ECHO "-> Directory '$TMP_DIR' already exists" EXIT=1 else $BIN_MKDIR -p $TMP_DIR/package if [ ! -d $TMP_DIR/package ] ; then $BIN_ECHO "-> Error while creating directory '$TMP_DIR/package'" EXIT=1 fi fi fi if [ $EXIT -eq 0 ] ; then pushd $TMP_DIR/package >> /dev/null 2>&1 $BIN_SVN checkout --username $SVN_USER --password $SVN_PASS $SVN_URL/$SVN_PATH_PACKAGE . >> /dev/null 2>&1 if [ $? -ne 0 ] ; then $BIN_ECHO "-> Error while checkouting URL '$SVN_URL/$SVN_PATH_PACKAGE'" EXIT=1 fi popd >> /dev/null 2>&1 fi if [ $EXIT -eq 0 ] ; then if [ ! -e $TMP_DIR/package/config ] ; then $BIN_ECHO "-> The package configuration file '$TMP_DIR/package/config' is missing" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then . $TMP_DIR/package/config if [ -z "$VERSION" ] ; then VERSION="1.0" fi fi if [ $EXIT -eq 0 ] ; then $BIN_MKDIR -p $TMP_DIR/packaging if [ ! -d $TMP_DIR/packaging ] ; then $BIN_ECHO "-> Error while creating directory '$TMP_DIR/packaging'" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then pushd $TMP_DIR/packaging >> /dev/null 2>&1 #$BIN_SVN checkout --username $SVN_USER --password $SVN_PASS $SVN_URL/tags/packaging/$VERSION/component . >> /dev/null 2>&1 $BIN_SVN checkout --username $SVN_USER --password $SVN_PASS $SVN_URL/trunk/packaging/component . >> /dev/null 2>&1 if [ $? -ne 0 ] ; then #$BIN_ECHO "-> Error while checkouting URL '$SVN_URL/tags/packaging/$VERSION/component'" $BIN_ECHO "-> Error while checkouting URL '$SVN_URL/trunk/packaging/component'" EXIT=1 fi popd >> /dev/null 2>&1 fi if [ $EXIT -eq 0 ] ; then if [ ! -e $TMP_DIR/packaging/$BIN_BUILD ] ; then $BIN_ECHO "-> File '$TMP_DIR/packaging/build' is missing" EXIT=1 fi fi if [ $EXIT -eq 0 ] ; then $BIN_ECHO "-> OK" $BIN_CHMOD 755 $TMP_DIR/packaging/$BIN_BUILD $TMP_DIR/packaging/$BIN_BUILD "$TARGET_DIR" "$SVN_LOCATION" "$SVN_COMPONENT" "$SVN_VERSION" "$SVN_RELEASE" "$SVN_BRANCH" if [ $? -ne 0 ] ; then EXIT=1 fi fi if [ -n "$TMP_DIR" -a "$TMP_DIR" != "/" ] ; then $BIN_RM -rf $TMP_DIR fi exit $EXIT