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

Last change on this file 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
Line 
1#!/bin/bash
2# build script
3#
4# $Id: dassbuild.sh 809 2009-12-14 17:04:47Z joergs $
5#
6# builds RPM in an clean chroot build environment.
7# uses the Suse build script.
8#
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:
18# /etc/dassbuild.conf
19# lists the sources for the different distributions
20#
21# the rest is controlled by environment variables
22#
23# dassbuild.sh uses sudo. /etc/sudoers needs a line like:
24# %users ALL=(ALL) NOPASSWD: /usr/bin/dassbuild_wrapper.sh
25# for automatic building (create a symlink or copy the file,
26# see also the Variable BUILDSCRIPT and content of this script)
27#
28# return codes:
29# 0: success
30# 1: skipped (current RPM already in dest dir)
31# >1: error
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
38
39
40# set LANG to default (english)
41# required for SVN
42export LC_ALL=C
43
44CONFIG_FILE=/etc/dassbuild/dassbuild.conf
45BUILDSCRIPT=/usr/bin/dassbuild_wrapper.sh
46BUILD_CMD=/usr/bin/build
47
48#
49# setting build variables
50#
51BUILDUSER=$USER
52[ -z $DEST_DIR ] && DEST_DIR="/tmp/build.$BUILDUSER"
53BUILDTEMP=$DEST_DIR/buildsrc/
54
55[ -z "$BUILD_USES_SVN" ] && BUILD_USES_SVN="yes"
56[ -z "$BUILD_MODE" ] && BUILD_MODE="--clean"
57[ -z "$BUILD_DIST" ] && export BUILD_DIST="sles9-i386"
58[ -z "$BUILD_ROOT" ] && BUILD_ROOT="/var/tmp/buildsystem.$BUILDUSER.$BUILD_DIST"
59[ -z "$BUILD_PREPARE_SPEC" ] && BUILD_PREPARE_SPEC="no"
60
61BUILDVARS=$BUILDTEMP/build.vars
62
63#
64# create source archive file
65#
66dassbuild_prepare.sh $*
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
75
76
77
78if [ -r $CONFIG_FILE ]; then
79 source $CONFIG_FILE
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
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
95ERROR=0
96
97# Hier gehts los:
98
99if [ -z "$1" ]; then
100 # without parameter, we are in source directory
101 SPECFILE=$(ls *.spec | awk '{print $1}')
102 PACKAGE=$(sed -n -e 's/^Name:\W*//pi' <$SPECFILE | head -n 1)
103 # use Version from BUILDSRC,
104 # because it has been modified by svn_build_prepare
105 BUILDSRC_DIR=${BUILDTEMP}/src/${PACKAGE}
106 VERSION=$(sed -n -e 's/^Version:\W*//pi' <$BUILDSRC_DIR/$SPECFILE | head -n 1)
107elif [ -r "$1" ]; then
108 # parameter is src.rpm file
109 PACKAGE=`rpm -qp --qf "%{NAME}" $1`
110 VERSION=`rpm -qp --qf "%{VERSION}" $1`
111fi
112
113echo $PACKAGE $VERSION $BUILD_DIST $BUILD_MODE
114
115if [ -z "$PACKAGE" ]; then
116 echo "nothing to build found!"
117 exit 1
118fi
119
120
121
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"
133EOF
134
135# starting Suse build (as root)
136sudo $BUILDSCRIPT $BUILDVARS
137#rm -f $BUILDVARS
138
139
140
141mkdir -p ${DEST_DIR}/src
142# delete all old versions of this package
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
148
149if !(cp -a ${BUILD_ROOT}/usr/src/packages/SRPMS/${PACKAGE}-${VERSION}-*.src.rpm ${DEST_DIR}/src 2> /dev/null); then
150 ERROR=4
151fi
152
153mkdir -p ${DEST_DIR}/${BUILD_DIST}
154
155# if !(cp -a ${BUILD_ROOT}/usr/src/packages/RPMS/*/${PACKAGE}*${VERSION}-*.*.rpm ${DEST_DIR}/${BUILD_DIST} ); then
156# ERROR=8
157# fi
158
159# debug
160#set -x
161
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} \;
178fi
179
180echo
181if [ $ERROR -ne 0 ]; then
182
183 echo "ERROR $ERROR while building packet $PACKAGE";
184else
185 echo "Build of \"${PACKAGE}\" completed!"
186 echo "Packages can be found in ${DEST_DIR}"
187fi
188echo
189
190exit $ERROR
Note: See TracBrowser for help on using the repository browser.