source: dassbuild/trunk/usr/bin/dassbuild.sh@ 962

Last change on this file since 962 was 809, checked in by joergs, on Dec 14, 2009 at 6:04:47 PM

bugfix: causes errors if a spec file contains more than one Name or Version tag

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 4.7 KB
RevLine 
[690]1#!/bin/bash
[694]2# build script
3#
[675]4# $Id: dassbuild.sh 809 2009-12-14 17:04:47Z joergs $
[585]5#
[694]6# builds RPM in an clean chroot build environment.
7# uses the Suse build script.
[682]8#
[694]9# without parameter, it checks the directory for the files
10# SOURCES or SPECSOURCES.
11# The files definied in there are copied to the
12# build system.
13#
14# when used with parameter,
15# this parameter is expected to be a source rpm
16#
17# config file:
[750]18# /etc/dassbuild.conf
[694]19# lists the sources for the different distributions
20#
21# the rest is controlled by environment variables
22#
[750]23# dassbuild.sh uses sudo. /etc/sudoers needs a line like:
24# %users ALL=(ALL) NOPASSWD: /usr/bin/dassbuild_wrapper.sh
[733]25# for automatic building (create a symlink or copy the file,
26# see also the Variable BUILDSCRIPT and content of this script)
[695]27#
28# return codes:
29# 0: success
30# 1: skipped (current RPM already in dest dir)
31# >1: error
[696]32#
33# RPM releases are set
34# to the svn version number of the project directory.
35# Modifiers are:
36# m: release + local modifications
37# p: release + submited modifications. svn update project directory is needed
[585]38
[695]39
[733]40# set LANG to default (english)
41# required for SVN
42export LC_ALL=C
[696]43
[755]44CONFIG_FILE=/etc/dassbuild/dassbuild.conf
[750]45BUILDSCRIPT=/usr/bin/dassbuild_wrapper.sh
[735]46BUILD_CMD=/usr/bin/build
[744]47
48#
49# setting build variables
50#
[585]51BUILDUSER=$USER
[744]52[ -z $DEST_DIR ] && DEST_DIR="/tmp/build.$BUILDUSER"
53BUILDTEMP=$DEST_DIR/buildsrc/
[585]54
[744]55[ -z "$BUILD_USES_SVN" ] && BUILD_USES_SVN="yes"
[714]56[ -z "$BUILD_MODE" ] && BUILD_MODE="--clean"
[744]57[ -z "$BUILD_DIST" ] && export BUILD_DIST="sles9-i386"
58[ -z "$BUILD_ROOT" ] && BUILD_ROOT="/var/tmp/buildsystem.$BUILDUSER.$BUILD_DIST"
[586]59[ -z "$BUILD_PREPARE_SPEC" ] && BUILD_PREPARE_SPEC="no"
[585]60
[733]61BUILDVARS=$BUILDTEMP/build.vars
[585]62
[744]63#
64# create source archive file
65#
[750]66dassbuild_prepare.sh $*
[744]67RT=$?
68if [ $RT -eq 1 ]; then
69 echo "nothing more to do"
70 exit 0
71elif [ $RT -gt 1 ]; then
72 echo "error: failed to prepare sources"
73 exit 1
74fi
[682]75
76
77
[668]78if [ -r $CONFIG_FILE ]; then
79 source $CONFIG_FILE
[718]80 MOD_BUILD_DIST=`sed "s/[-+.]/_/g" <<< $BUILD_DIST`
81 echo MOD_BUILD_DIST: $MOD_BUILD_DIST
82 eval BUILD_RPMS_TEST=\$BUILD_RPMS_$MOD_BUILD_DIST
83
[668]84 if [ "$BUILD_RPMS_TEST" ]; then
85 if [ "$BUILD_RPMS" ]; then
86 BUILD_RPMS=$BUILD_RPMS:$BUILD_RPMS_TEST
87 else
88 BUILD_RPMS=$BUILD_RPMS_TEST
89 fi
90 fi
91fi
92
93echo BUILD_RPMS: $BUILD_RPMS
94
[619]95ERROR=0
[585]96
[621]97# Hier gehts los:
[620]98
99if [ -z "$1" ]; then
[744]100 # without parameter, we are in source directory
101 SPECFILE=$(ls *.spec | awk '{print $1}')
[809]102 PACKAGE=$(sed -n -e 's/^Name:\W*//pi' <$SPECFILE | head -n 1)
[744]103 # use Version from BUILDSRC,
104 # because it has been modified by svn_build_prepare
105 BUILDSRC_DIR=${BUILDTEMP}/src/${PACKAGE}
[809]106 VERSION=$(sed -n -e 's/^Version:\W*//pi' <$BUILDSRC_DIR/$SPECFILE | head -n 1)
[715]107elif [ -r "$1" ]; then
[744]108 # parameter is src.rpm file
109 PACKAGE=`rpm -qp --qf "%{NAME}" $1`
110 VERSION=`rpm -qp --qf "%{VERSION}" $1`
[620]111fi
112
[622]113echo $PACKAGE $VERSION $BUILD_DIST $BUILD_MODE
[585]114
[715]115if [ -z "$PACKAGE" ]; then
116 echo "nothing to build found!"
117 exit 1
118fi
119
120
121
[733]122# create file for buildvars (see $BUILDSCRIPT)
123cat > $BUILDVARS <<EOF
124# Variables for build-Prozess (export is needed in buildscript)
125BUILD_ROOT=$BUILD_ROOT
126BUILD_DIST=$BUILD_DIST
127BUILD_RPMS=${DEST_DIR}/${BUILD_DIST}:$BUILD_RPMS
128
129# Variables for execute the build-proggy
130BUILD_MODE="$BUILD_MODE"
131BUILD_PLACE=${BUILDTEMP}/src/${PACKAGE}
132EXTRA_RPMS="$EXTRA_RPMS"
[585]133EOF
[681]134
[734]135# starting Suse build (as root)
[733]136sudo $BUILDSCRIPT $BUILDVARS
137#rm -f $BUILDVARS
[668]138
[733]139
140
[585]141mkdir -p ${DEST_DIR}/src
[620]142# delete all old versions of this package
[695]143for i in ${DEST_DIR}/src/${PACKAGE}-*.src.rpm; do
144 if [ -f $i -a ${PACKAGE} = "`rpm -qp --qf "%{NAME}\n" $i`" ]; then
145 rm $i
146 fi
147done
[682]148
[668]149if !(cp -a ${BUILD_ROOT}/usr/src/packages/SRPMS/${PACKAGE}-${VERSION}-*.src.rpm ${DEST_DIR}/src 2> /dev/null); then
[695]150 ERROR=4
[619]151fi
[585]152
[619]153mkdir -p ${DEST_DIR}/${BUILD_DIST}
[682]154
[808]155# if !(cp -a ${BUILD_ROOT}/usr/src/packages/RPMS/*/${PACKAGE}*${VERSION}-*.*.rpm ${DEST_DIR}/${BUILD_DIST} ); then
156# ERROR=8
157# fi
158
[809]159# debug
160#set -x
161
[808]162# check, if RPM with correct name and version is generated
163if [ -z "`find ${BUILD_ROOT}/usr/src/packages/RPMS/ -name \"${PACKAGE}*${VERSION}-*.rpm\" 2>/dev/null`" ]; then
164 ERROR=8
165else
166 # delete all old versions of this package
167 for i in ${DEST_DIR}/${BUILD_DIST}/${PACKAGE}-*.rpm; do
168 if [ -f $i -a ${PACKAGE} = "`rpm -qp --qf "%{NAME}\n" $i`" ]; then
169 rm $i
170 fi
171 done
172
173 # copy ALL RPMs,
174 # not only the one, that includes the target name.
175 # this is done,
176 # because some source RPMs results the multiple RPMs
177 find ${BUILD_ROOT}/usr/src/packages/RPMS/ -name "*.rpm" -exec cp -a {} ${DEST_DIR}/${BUILD_DIST} \;
[591]178fi
179
[694]180echo
[619]181if [ $ERROR -ne 0 ]; then
[694]182
[809]183 echo "ERROR $ERROR while building packet $PACKAGE";
[619]184else
[694]185 echo "Build of \"${PACKAGE}\" completed!"
[619]186 echo "Packages can be found in ${DEST_DIR}"
[591]187fi
[694]188echo
[585]189
[619]190exit $ERROR
Note: See TracBrowser for help on using the repository browser.