source: trunk/technical/common/build/svn_build_prepare.sh@ 720

Last change on this file since 720 was 720, checked in by joergs, on Oct 2, 2008 at 2:30:13 PM

tools for using the openSUSE build server

  • Property svn:executable set to *
File size: 4.5 KB
Line 
1#!/bin/bash
2
3# build prepare script
4
5# $Id$
6
7BUILDUSER=$USER
8[ -z $DEST_DIR ] && DEST_DIR="/tmp/build.$BUILDUSER"
9BUILDTEMP=$DEST_DIR/buildsrc/
10
11
12if [ -z "$1" ]; then
13 # without parameter, we are in source directory
14 SPECFILE=$(ls *.spec | awk '{print $1}')
15 PACKAGE=$(sed -n -e 's/^Name:\W*//pi' <$SPECFILE)
16 VERSION=$(sed -n -e 's/^Version:\W*//pi' <$SPECFILE)
17elif [ -r "$1" ]; then
18 # parameter is src.rpm file
19 PACKAGE=`rpm -qp --qf "%{NAME}" $1`
20 VERSION=`rpm -qp --qf "%{VERSION}" $1`
21fi
22
23
24if [ -z "$PACKAGE" ]; then
25 echo "nothing to build found!"
26 exit 1
27fi
28
29rm -rf ${BUILDTEMP}/src/${PACKAGE}
30mkdir -p ${BUILDTEMP}/src/${PACKAGE}
31
32
33if [ "$1" ]; then
34 EXPECTED_DEST_RPM_FILENAME=${DEST_DIR}/${BUILD_DIST}/`echo $1 | sed 's/\.src\./.*./'`
35 if [ -f $EXPECTED_DEST_RPM_FILENAME ]; then
36 echo
37 echo "Build of \"${PACKAGE}\" unnecessary. Current RPM already at " $EXPECTED_DEST_RPM_FILENAME
38 echo
39 exit 1
40 else
41 cp -a "$1" ${BUILDTEMP}/src/${PACKAGE}
42 cd ${BUILDTEMP}/src/${PACKAGE}; rpm2cpio $1 | cpio -i
43 fi
44else
45 cp -a $SPECFILE ${BUILDTEMP}/src/${PACKAGE}
46
47 # uses Subversion (svn) to generate more information for the RPM
48 if [ "$BUILD_USES_SVN" = "yes" ]; then
49 echo "receiving subversion information ..."
50 # set RELEASE number (last modification in this directory)
51 # requires subversion (but connection to server isn't neccessary)
52 SVN_BUILD_RELEASE=$(unset LANG; svn info . | sed -n 's/^Last Changed Rev: \([0-9]*\)/\1/p')
53 # in case of local modification a "m" is added to the release number
54 SVN_BUILD_MODIFIED=$(svn status -v | grep "^ *M" | wc -l)
55 # checks if a file is commited,
56 # but update on its directory is not performed
57 SVN_LAST_MODIFICATION=$(svn status -v | sed -n 's/^ *[0-9]* *\([0-9]*\) .*/\1/p' | sort -n | tail -1)
58 if [ $SVN_BUILD_MODIFIED -gt 0 ]; then
59 SVN_BUILD_RELEASE=${SVN_BUILD_RELEASE}m
60 elif [ $SVN_LAST_MODIFICATION -ne $SVN_BUILD_RELEASE ]; then
61 SVN_BUILD_RELEASE=${SVN_BUILD_RELEASE}p
62 else # check if RPM has been build already
63 EXPECTED_DEST_RPM_FILENAME=${DEST_DIR}/${BUILD_DIST}/${PACKAGE}-${VERSION}-${SVN_BUILD_RELEASE}.*.rpm
64 if [ -f $EXPECTED_DEST_RPM_FILENAME ]; then
65 echo
66 echo "Build of \"${PACKAGE}\" unnecessary. Current RPM already at " $EXPECTED_DEST_RPM_FILENAME
67 echo
68 exit 1
69 fi
70 fi
71 if [ "$SVN_BUILD_RELEASE" ]; then
72 sed "s/^Release:.*/Release: $SVN_BUILD_RELEASE/ig" $SPECFILE > ${BUILDTEMP}/src/${PACKAGE}/$SPECFILE
73 fi
74 echo "SVN_BUILD_RELEASE: $SVN_BUILD_RELEASE"
75
76 # changelog header
77 DATE=`unset LANG; date +"%a %b %d %Y"`
78 echo -e "* $DATE -\n" > Changes
79 echo "- Subversion status:" >> Changes
80 # additional infos for the Changes file (see if everything is checked in)
81 svn status -v | grep -v '^? ' >> Changes
82 echo >> Changes
83 echo "- ChangeLog:" >> Changes
84 # requires connection to the subversion server
85 svn log -v . > ChangeLog.new && mv ChangeLog.new ChangeLog
86 cat ChangeLog >> Changes
87
88 # if there is no changelog section in the spec file,
89 # also append the Changes there
90 if ! grep -q -i "%changelog" $SPECFILE ; then
91 # paste "Changes" into SPEC file.
92 echo "%changelog" >> ${BUILDTEMP}/src/${PACKAGE}/$SPECFILE
93 # without trailing *, except for the initial
94 echo -n "*" >> ${BUILDTEMP}/src/${PACKAGE}/$SPECFILE
95 cat Changes | sed 's/\(^[\*]\+\)//g' >> ${BUILDTEMP}/src/${PACKAGE}/$SPECFILE
96 fi
97 fi
98 # just make sure, that the Changes file exist
99 touch Changes
100
101 # if "SOURCES" file exist, create tar file on the fly
102 if [ -r "SOURCES" ]; then
103 # create a tar file from the sources
104 tar cvjf ${BUILDTEMP}/src/${PACKAGE}/$PACKAGE-$VERSION.tar.bz2 --files-from SOURCES --exclude .svn --exclude "*~"
105
106 elif [ -r "SPECSOURCES" ]; then
107 # SPECSOURCES has to list the files
108 # that are referenced in the .spec file
109 # these files are copied to the build environment
110 cp -av `cat SPECSOURCES` ${BUILDTEMP}/src/${PACKAGE}
111
112 else
113 # legacy method:
114 # call the existing Makefile
115 # to generate a tar file
116 test -e Makefile && make
117 TARFILE=$(ls *.tar.[gb]z*| awk '{print $1}')
118 cp -av $TARFILE ${BUILDTEMP}/src/${PACKAGE}
119 fi
120fi
Note: See TracBrowser for help on using the repository browser.