]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - builder.sh
- fix distfiles url (distfiles.pld-linux.org now)
[packages/rpm-build-tools.git] / builder.sh
CommitLineData
b054f772 1#!/bin/sh
33f5276d 2# -----------
25fa34fe 3# $Id$
33f5276d 4# Exit codes:
5# 0 - succesful
6# 1 - help dispayed
7# 2 - no spec file name in cmdl parameters
8# 3 - spec file not stored in repo
0ad50ce9 9# 4 - some source, patch or icon files not stored in repo
10# 5 - package build failed
5a491465 11
4003ad8c 12VERSION="\
13Build package utility from PLD CVS repository
6cb7df6d 14V 0.11 (C) 1999-2003 Free Penguins".
5a491465 15PATH="/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin"
a7af9862 16
b03f053b 17COMMAND="build"
18
bde1c404 19SPECFILE=""
d287305c 20BE_VERBOSE=""
4003ad8c 21QUIET=""
5dd89621 22CLEAN=""
7c2dd1b2 23DEBUG=""
cc97f1f3 24NOURLS=""
157dc315 25NOCVS=""
6fc910c7 26NOCVSSPEC=""
fc0e5bb5 27NODIST=""
b130abf2 28UPDATE=""
a9d9a79a 29UPDATE5=""
58947ded 30ALLWAYS_CVSUP=${ALLWAYS_CVSUP:-"yes"}
c61a8d10
AM
31if [ -s CVS/Root ]; then
32 CVSROOT=$(cat CVS/Root)
33else
34 CVSROOT=${CVSROOT:-""}
35fi
d6a75d60 36# Example: LOGFILE='../log.$PACKAGE_NAME'
37# Yes, you can use variable name! Note _single_ quotes!
38LOGFILE=''
00fcec7e 39
40LOGDIR=""
41LOGDIROK=""
42LOGDIRFAIL=""
43LASTLOG_FILE=""
44LTAG=""
d6a75d60 45CHMOD="yes"
46CHMOD_MODE="0444"
33a9d2d1 47RPMOPTS=""
6049c3d1 48BCOND=""
d287305c 49
50PATCHES=""
51SOURCES=""
7053d3fd 52ICONS=""
d287305c 53PACKAGE_RELEASE=""
54PACKAGE_VERSION=""
55PACKAGE_NAME=""
34c911e6 56WGET_RETRIES=${MAX_WGET_RETRIES:-0}
b92ecfc9 57CVS_RETRIES=${MAX_CVS_RETRIES:-1000}
5a491465 58
00fcec7e 59CVSTAG=""
60RES_FILE=""
61
62546902 62CVS_SERVER="cvs.pld-linux.org"
6cb7df6d 63DISTFILES_SERVER="ftp://distfiles.pld-linux.org"
ea15df77 64
3ae81a20 65DEF_NICE_LEVEL=0
66
c6a390a1
AM
67FAIL_IF_NO_SOURCES="yes"
68
8f7b338e 69GETURI="wget --passive-ftp -c -nd -t$WGET_RETRIES --inet"
70GETURI2="wget -c -nd -t$WGET_RETRIES --inet"
11f33a0c 71
7147050f
AM
72if (rpm --version 2>&1 | grep -q '4.0.[0-2]'); then
73 RPM="rpm"
74 RPMBUILD="rpm"
75else
76 RPM="rpm"
77 RPMBUILD="rpmbuild"
78fi
79
6eb44b93 80if [ -f ~/etc/builderrc ]; then
7922b3ec 81 . ~/etc/builderrc
6eb44b93 82elif [ -f ~/.builderrc ]; then
7922b3ec 83 . ~/.builderrc
5aa0ef93
AF
84fi
85
da946cd6 86#---------------------------------------------
87# functions
88
5a491465 89usage()
90{
7c2dd1b2 91 if [ -n "$DEBUG" ]; then set -xv; fi
92 echo "\
7922b3ec 93Usage: builder [-D|--debug] [-V|--version] [-a|--as_anon] [-b|-ba|--build]
81f85806 94
95 [-bb|--build-binary] [-bs|--build-source] [-u|--try-upgrade]
96 [{-B|--branch} <branch>] [{-d|--cvsroot} <cvsroot>] [-g|--get]
97 [-h|--help] [{-l,--logtofile} <logfile>] [-m|--mr-proper]
00fcec7e 98 [-q|--quiet] [--date <yyyy-mm-dd> [-r <cvstag>] [{-T--tag <cvstag>]
a2164135
MM
99 [-Tvs|--tag-version-stable] [-Tvn|--tag-version-nest]
100 [-Ts|--tag-stable] [-Tn|--tag-nest] [-Tv|--tag-version]
81f85806 101 [-nu|--no-urls] [-v|--verbose] [--opts <rpm opts>]
c9ff8825 102 [--with/--without <feature>] [--define <macro> <value>] <package>[.spec]
5a491465 103
a9d9a79a 104 -5 - update md5 comments in spec
a2a9c8df 105 -D, --debug - enable script debugging mode,
5a491465 106 -V, --version - output builder version
62546902 107 -a, --as_anon - get files via pserver as cvs@$CVS_SERVER,
79b2ec0e 108 -b, -ba,
cc97f1f3 109 --build - get all files from CVS repo or HTTP/FTP and build
5a491465 110 package from <package>.spec,
7922b3ec 111 -bb, --build-binary
112 - get all files from CVS repo or HTTP/FTP and build
79b2ec0e 113 binary only package from <package>.spec,
114 -bs,
cc97f1f3
SZ
115 --build-source - get all files from CVS repo or HTTP/FTP and only
116 pack them into src.rpm,
8ba5cdda 117 -B, --branch - add branch
7922b3ec 118 -c, --clean - clean all temporarily created files (in BUILD,
79b2ec0e 119 SOURCES, SPECS and \$RPM_BUILD_ROOT),
7922b3ec 120 -d <cvsroot>, --cvsroot <cvsroot>
121 - setup \$CVSROOT,
e7bdc1b4 122 --define <macro> <value>
81f85806 123 - define a macro <macro> with value <value>,
7922b3ec 124 -g, --get - get <package>.spec and all related files from
cc97f1f3 125 CVS repo or HTTP/FTP,
5a491465 126 -h, --help - this message,
7922b3ec 127 -l <logfile>, --logtofile <logfile>
128 - log all to file,
ff45a501 129 -m, --mr-proper - only remove all files related to spec file and
8bc51224 130 all work resources,
6fc910c7 131 -nc, --no-cvs - don't download sources from CVS, if source URL is
132 given,
133 -ncs, --no-cvs-specs
134 - don't check specs in CVS
fc0e5bb5
TP
135 -nd, --no-distfiles
136 - don't download from distfiles
4ca52257 137 -nm, --no-mirrors - don't download from mirror, if source URL is given,
157dc315 138 -nu, --no-urls - don't try to download from FTP/HTTP location,
0143ec80 139 -ns, --no-srcs - don't download Sources
fd2b5687 140 -ns0, --no-source0
0143ec80 141 - don't download Source0
7922b3ec 142 --opts <rpm opts>
143 - additional options for rpm
5a491465 144 -q, --quiet - be quiet,
448deaa0 145 --date yyyy-mm-dd
146 - build package using resources from specified CVS
147 date,
7922b3ec 148 -r <cvstag>, --cvstag <cvstag>
149 - build package using resources from specified CVS
67fcd1e4 150 tag,
7922b3ec 151 -T <cvstag> , --tag <cvstag>
152 - add cvs tag <cvstag> for files,
78ce14b3 153 -Tvs, --tag-version-stable
154 - add cvs tags STABLE and NAME-VERSION-RELESE for files,
a2164135
MM
155 -Tvn, --tag-version-nest
156 - add cvs tags NEST and NAME-VERSION-RELESE for files,
78ce14b3 157 -Ts, --tag-stable
158 - add cvs tag STABLE for files,
a2164135
MM
159 -Tn, --tag-nest
160 - add cvs tag NEST for files,
7922b3ec 161 -Tv, --tag-version
162 - add cvs tag NAME-VERSION-RELESE for files,
5a491465 163 -v, --verbose - be verbose,
81f85806 164 -u, --try-upgrade
165 - check version, and try to upgrade package
b130abf2
TP
166 -un, --try-upgrade-with-float-version
167 - as above, but allow float version
168 -U, --update
169 - refetch sources (makes sense with -nc -nd)
170 (CVS updates are controlled by ALLWAYS_CVSUP environment
171 variable, distfiles are checked against md5 sum)
d5787aec 172 --with/--without <feature>
81f85806 173 - conditional build package depending on
d5787aec 174 %_with_<feature>/%_without_<feature> macro
81f85806 175 switch
5a491465 176"
177}
178
59398507 179parse_spec()
180{
c3428d50 181 if [ -n "$DEBUG" ]; then
a7af9862 182 set -x;
183 set -v;
71d62f04 184 fi
7c2dd1b2 185
25fa34fe 186 cd $SPECS_DIR
72fb89b5 187 if [ "$NOSRCS" != "yes" ]; then
a7af9862 188 SOURCES="`$RPMBUILD -bp $BCOND --define 'prep %dump' $SPECFILE 2>&1 | awk '/SOURCEURL[0-9]+/ {print $3}'`"
72fb89b5 189 fi
7147050f 190 if ($RPMBUILD -bp $BCOND --define 'prep %dump' $SPECFILE 2>&1 | grep -qEi ":.*nosource.*1"); then
a7af9862 191 FAIL_IF_NO_SOURCES="no"
c6a390a1
AM
192 fi
193
7147050f 194 PATCHES="`$RPMBUILD -bp $BCOND --define 'prep %dump' $SPECFILE 2>&1 | awk '/PATCHURL[0-9]+/ {print $3}'`"
cc97f1f3 195 ICONS="`awk '/^Icon:/ {print $2}' ${SPECFILE}`"
7147050f
AM
196 PACKAGE_NAME="`$RPM -q --qf '%{NAME}\n' --specfile ${SPECFILE} 2> /dev/null | head -1`"
197 PACKAGE_VERSION="`$RPM -q --qf '%{VERSION}\n' --specfile ${SPECFILE} 2> /dev/null| head -1`"
198 PACKAGE_RELEASE="`$RPM -q --qf '%{RELEASE}\n' --specfile ${SPECFILE} 2> /dev/null | head -1`"
79379585 199
9e06e5c3 200 if [ -n "$BE_VERBOSE" ]; then
00fcec7e 201 echo "- Sources : `nourl $SOURCES`"
cc97f1f3 202 if [ -n "$PATCHES" ]; then
a7af9862 203 echo "- Patches : `nourl $PATCHES`"
cc97f1f3 204 else
a7af9862 205 echo "- Patches : *no patches needed*"
cc97f1f3 206 fi
7053d3fd 207 if [ -n "$ICONS" ]; then
a7af9862 208 echo "- Icon : `nourl $ICONS`"
a3df415f 209 else
a7af9862 210 echo "- Icon : *no package icon*"
a3df415f 211 fi
9e06e5c3 212 echo "- Name : $PACKAGE_NAME"
213 echo "- Version : $PACKAGE_VERSION"
39cbc282 214 echo "- Release : $PACKAGE_RELEASE"
d287305c 215 fi
33f5276d 216}
217
218Exit_error()
219{
00fcec7e 220 if [ -n "$DEBUG" ]; then
71d62f04 221 set -x;
00fcec7e 222 set -v;
71d62f04 223 fi
7c2dd1b2 224
33f5276d 225 cd $__PWD
226
4849ca8d 227 case "$1" in
33f5276d 228 "err_no_spec_in_cmdl" )
229 echo "ERROR: spec file name not specified.";
230 exit 2 ;;
231 "err_no_spec_in_repo" )
232 echo "Error: spec file not stored in CVS repo.";
233 exit 3 ;;
234 "err_no_source_in_repo" )
4849ca8d 235 echo "Error: some source, patch or icon files not stored in CVS repo. ($2)";
33f5276d 236 exit 4 ;;
237 "err_build_fail" )
298c753e 238 echo "Error: package build failed. (${2:-no more info})";
33f5276d 239 exit 5 ;;
240 esac
241}
bc8d444f 242
33f5276d 243init_builder()
244{
00fcec7e 245 if [ -n "$DEBUG" ]; then
71d62f04 246 set -x;
00fcec7e 247 set -v;
71d62f04 248 fi
7c2dd1b2 249
7147050f
AM
250 SOURCE_DIR="`$RPM --eval '%{_sourcedir}'`"
251 SPECS_DIR="`$RPM --eval '%{_specdir}'`"
bc8d444f 252
33f5276d 253 __PWD=`pwd`
59398507 254}
255
256get_spec()
257{
00fcec7e 258 if [ -n "$DEBUG" ]; then
71d62f04 259 set -x;
00fcec7e 260 set -v;
71d62f04 261 fi
7c2dd1b2 262
6fc910c7 263 if [ "$NOCVSSPEC" != "yes" ]; then
264 cd $SPECS_DIR
5644bf7e 265
6fc910c7 266 OPTIONS="up "
67fcd1e4 267
6fc910c7 268 if [ -n "$CVSROOT" ]; then
269 OPTIONS="-d $CVSROOT $OPTIONS"
270 else
271 if [ ! -s CVS/Root -a "$NOCVSSPEC" != "yes" ]; then
272 echo "warning: No cvs access defined - using local .spec file"
273 NOCVSSPEC="yes"
274 fi
275 fi
00fcec7e 276
72e08ca8 277 if [ -z "$CVSDATE" -a -z "$CVSTAG" ]; then
6fc910c7 278 OPTIONS="$OPTIONS -A"
72e08ca8
AM
279 else
280 if [ -n "$CVSDATE" ]; then
281 OPTIONS="$OPTIONS -D $CVSDATE"
282 fi
283 if [ -n "$CVSTAG" ]; then
284 OPTIONS="$OPTIONS -r $CVSTAG"
285 fi
6fc910c7 286 fi
33f5276d 287
b92ecfc9
AM
288 result=1
289 retries_counter=0
290 while [ "$result" != "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; do
291 retries_counter=$(( $retries_counter + 1 ))
292 output=$(LC_ALL=C cvs $OPTIONS $SPECFILE 2>&1)
293 result=$?
fef1dc85 294 [ -n "$output" ] && echo "$output"
b92ecfc9 295 if [ "$result" -ne "0" ]; then
67a44175 296 if (echo "$output" | grep -qE "(Cannot connect to|connect to .* failed|Connection reset by peer|Connection timed out)") && [ "$retries_counter" -le "$CVS_RETRIES" ]; then
ee004885 297 echo "Trying again [$SPECFILE]... ($retries_counter)"
96686ae5 298 sleep 2
b92ecfc9
AM
299 continue
300 fi
301 Exit_error err_no_spec_in_repo;
302 fi
303 done
33f5276d 304 fi
6fc910c7 305 if [ ! -f "$SPECFILE" ]; then
b857906d 306 Exit_error err_no_spec_in_repo;
6fc910c7 307 fi
a7af9862 308
d013b3df 309 if [ "$CHMOD" = "yes" -a -n "$SPECFILE" ]; then
7922b3ec 310 chmod $CHMOD_MODE $SPECFILE
5aa0ef93 311 fi
7c2dd1b2 312 unset OPTIONS
67da0368 313 grep -E -m 1 "^#.*Revision:.*Date" $SPECFILE
59398507 314}
315
4ca52257
JK
316find_mirror(){
317
318 cd "$SPECS_DIR"
00fcec7e 319 url="$1"
320 if [ ! -f "mirrors" ] ; then
321 cvs update mirrors >&2
4ca52257
JK
322 fi
323
324 IFS="|"
325 while read origin mirror name rest; do
00fcec7e 326 ol=`echo -n "$origin"|wc -c`
4ca52257
JK
327 prefix="`echo -n "$url" | head -c $ol`"
328 if [ "$prefix" = "$origin" ] ; then
6fc910c7 329 suffix="`echo "$url"|cut -b $ol-`"
330 echo -n "$mirror$suffix"
331 return 0
4ca52257
JK
332 fi
333 done < mirrors
334 echo "$url"
335}
336
00fcec7e 337src_no ()
338{
339 cd $SPECS_DIR
340 $RPMBUILD -bp $BCOND --define 'prep %dump' $SPECFILE 2>&1 | \
12b959d0 341 grep "SOURCEURL[0-9]*[ ]*$1""[ ]*$" | \
00fcec7e 342 sed -e 's/.*SOURCEURL\([0-9][0-9]*\).*/\1/' | \
343 xargs
344}
345
346src_md5 ()
347{
348 no=$(src_no "$1")
349 [ -z "$no" ] && return
350 cd $SPECS_DIR
351 grep -i "#[ ]*Source$no-md5[ ]*:" $SPECFILE | sed -e 's/.*://' | xargs
352}
353
354distfiles_url ()
355{
8963720e 356 echo "$DISTFILES_SERVER/by-md5/$(src_md5 "$1" | sed -e 's|^\(.\)\(.\)|\1/\2/&|')/$(basename "$1")"
00fcec7e 357}
358
25fa34fe 359get_files()
59398507 360{
25fa34fe
AM
361 GET_FILES="$@"
362
00fcec7e 363 if [ -n "$DEBUG" ]; then
71d62f04 364 set -x;
00fcec7e 365 set -v;
71d62f04 366 fi
7c2dd1b2 367
25fa34fe 368 if [ -n "$1$2$3$4$5$6$7$8$9${10}" ]; then
7053d3fd 369 cd $SOURCE_DIR
33f5276d 370
82c46005 371 OPTIONS="up "
7053d3fd 372 if [ -n "$CVSROOT" ]; then
c1e79fcd 373 OPTIONS="-d $CVSROOT $OPTIONS"
6fc910c7 374 else
375 if [ ! -s CVS/Root -a "$NOCVS" != "yes" ]; then
376 echo "warning: No cvs access defined for SOURCES"
377 NOCVS="yes"
378 fi
67fcd1e4 379 fi
72e08ca8
AM
380 if [ -z "$CVSDATE" -a -z "$CVSTAG" ]; then
381 OPTIONS="$OPTIONS -A"
382 else
383 if [ -n "$CVSDATE" ]; then
384 OPTIONS="$OPTIONS -D $CVSDATE"
385 fi
386 if [ -n "$CVSTAG" ]; then
387 OPTIONS="$OPTIONS -r $CVSTAG"
388 fi
389 fi
25fa34fe 390 for i in $GET_FILES; do
7922b3ec 391 if [ ! -f `nourl $i` ] || [ $ALLWAYS_CVSUP = "yes" ]; then
4a0bb672 392 if echo $i | grep -vE '(http|ftp|https|cvs|svn)://' | grep -qE '\.(gz|bz2)$']; then
6fc910c7 393 echo "Warning: no URL given for $i"
157dc315 394 fi
a7af9862 395
fc0e5bb5 396 if [ -n "$(src_md5 "$i")" ] && [ -z "$NODIST" ]; then
06b4f588 397 if [ "$(src_md5 "$i")" = "$(md5sum $(nourl "$i") 2> /dev/null | sed -e 's/ .*//')" ]; then
f67349b7 398 echo "$(nourl "$i") having proper md5sum already exists"
399 continue
400 fi
00fcec7e 401 target=$(nourl "$i")
402 url=$(distfiles_url "$i")
403 if [ -z "$NOMIRRORS" ] ; then
404 url="`find_mirror "$url"`"
405 fi
406 ${GETURI} -O "$target" "$url" || \
407 if [ `echo $url | grep -E 'ftp://'` ]; then
408 ${GETURI2} -O "$target" "$url"
409 fi
410 elif [ -z "$NOCVS" ]|| [ `echo $i | grep -vE '(ftp|http|https)://'` ]; then
b92ecfc9
AM
411 result=1
412 retries_counter=0
413 while [ "$result" != "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; do
414 retries_counter=$(( $retries_counter + 1 ))
415 output=$(LC_ALL=C cvs $OPTIONS `nourl $i` 2>&1)
416 result=$?
fef1dc85 417 [ -n "$output" ] && echo "$output"
67a44175 418 if (echo "$output" | grep -qE "(Cannot connect to|connect to .* failed|Connection reset by peer|Connection timed out)") && [ "$result" -ne "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; then
ee004885 419 echo "Trying again [`nourl $i`]... ($retries_counter)"
96686ae5 420 sleep 2
b92ecfc9 421 continue
711eb1e4
AM
422 else
423 break
b92ecfc9
AM
424 fi
425 done
157dc315 426 fi
a7af9862 427
b130abf2 428 if [ -z "$NOURLS" ] && [ ! -f "`nourl $i`" -o -n "$UPDATE" ] && [ `echo $i | grep -E 'ftp://|http://|https://'` ]; then
00fcec7e 429 if [ -z "$NOMIRRORS" ] ; then
6fc910c7 430 i="`find_mirror "$i"`"
431 fi
432 ${GETURI} "$i" || \
433 if [ `echo $i | grep -E 'ftp://'` ]; then ${GETURI2} "$i" ; fi
157dc315
SZ
434 fi
435
c6a390a1 436 if [ ! -f "`nourl $i`" -a "$FAIL_IF_NO_SOURCES" != "no" ]; then
6fc910c7 437 Exit_error err_no_source_in_repo $i;
a9d9a79a
TP
438 else
439 if [ -n "$UPDATE5" ] && [ `echo $i | grep -E 'ftp://|http://|https://'` ]; then
440 tmp_spec=`mktemp ${TMPDIR:-/tmp}/$SPECFILE.XXXXXX`
441 srcno=$(src_no $i)
06b4f588 442 md5=$(md5sum `echo $i | perl -ne '/.*\/(.*)/; print "$1\n"'` 2> /dev/null | cut -f1 -d' ')
a9d9a79a
TP
443 perl -ne 'print "# Source'$srcno'-md5: '$md5'\n" if /^Source'$srcno':[ ]*/;
444 print unless /^#[ ]*Source'$srcno'-md5:[ ]*/' < $SPECS_DIR/$SPECFILE > $tmp_spec
445 mv -f $tmp_spec $SPECS_DIR/$SPECFILE
446 fi
cc97f1f3 447 fi
3ae81a20 448 fi
cc97f1f3 449 done
a7af9862 450
5aa0ef93 451 if [ "$CHMOD" = "yes" ]; then
d013b3df
AM
452 CHMOD_FILES="`nourl $GET_FILES`"
453 if [ -n "$CHMOD_FILES" ]; then
6fc910c7 454 chmod $CHMOD_MODE $CHMOD_FILES
d013b3df 455 fi
5aa0ef93 456 fi
7c2dd1b2 457 unset OPTIONS
7053d3fd 458 fi
59398507 459}
460
1471f6d6 461tag_files()
462{
463 TAG_FILES="$@"
464
00fcec7e 465 if [ -n "$DEBUG" ]; then
1471f6d6 466 set -x;
00fcec7e 467 set -v;
1471f6d6 468 fi
469
470 if [ -n "$1$2$3$4$5$6$7$8$9${10}" ]; then
471 echo $PACKAGE_VERSION
472 echo $PACKAGE_RELEASE
b4fd0ec0 473 TAGVER=$PACKAGE_NAME-`echo $PACKAGE_VERSION | sed -e "s/\./\_/g" -e "s/@/#/g"`-`echo $PACKAGE_RELEASE | sed -e "s/\./\_/g" -e "s/@/#/g"`
01de2036
JB
474 if [ "$TAG_VERSION" = "yes" ]; then
475 echo "CVS tag: $TAGVER"
476 fi
477 if [ -n "$TAG" ]; then
478 echo "CVS tag: $TAG"
479 fi
1471f6d6 480
481 OPTIONS="tag -F"
482 if [ -n "$CVSROOT" ]; then
483 OPTIONS="-d $CVSROOT $OPTIONS"
484 fi
485
486 cd $SOURCE_DIR
487 for i in $TAG_FILES; do
488 if [ -f `nourl $i` ]; then
f02788de
JB
489 if [ "$TAG_VERSION" = "yes" ]; then
490 cvs $OPTIONS $TAGVER `nourl $i`
491 fi
492 if [ -n "$TAG" ]; then
493 cvs $OPTIONS $TAG `nourl $i`
494 fi
1471f6d6 495 else
4849ca8d 496 Exit_error err_no_source_in_repo $i
1471f6d6 497 fi
498 done
499
500 cd $SPECS_DIR
f02788de
JB
501 if [ "$TAG_VERSION" = "yes" ]; then
502 cvs $OPTIONS $TAGVER $SPECFILE
503 fi
504 if [ -n "$TAG" ]; then
505 cvs $OPTIONS $TAG $SPECFILE
506 fi
1471f6d6 507
508 unset OPTIONS
509 fi
510}
511
8ba5cdda
PG
512branch_files()
513{
a7af9862 514 TAG=$1
515 echo "CVS branch tag: $TAG"
516 shift;
8ba5cdda 517
a7af9862 518 TAG_FILES="$@"
8ba5cdda 519
a7af9862 520 if [ -n "$DEBUG" ]; then
521 set -x;
522 set -v;
523 fi
8ba5cdda 524
a7af9862 525 if [ -n "$1$2$3$4$5$6$7$8$9${10}" ]; then
526
527 OPTIONS="tag -b"
528 if [ -n "$CVSROOT" ]; then
529 OPTIONS="-d $CVSROOT $OPTIONS"
8ba5cdda 530 fi
a7af9862 531 cd $SOURCE_DIR
532 for i in $TAG_FILES; do
533 if [ -f `nourl $i` ]; then
534 cvs $OPTIONS $TAG `nourl $i`
535 else
536 Exit_error err_no_source_in_repo $i
537 fi
538 done
539 cd $SPECS_DIR
540 cvs $OPTIONS $TAG $SPECFILE
541
542 unset OPTIONS
543 fi
8ba5cdda
PG
544}
545
f308b816 546
547
59398507 548build_package()
549{
00fcec7e 550 if [ -n "$DEBUG" ]; then
7922b3ec 551 set -x;
00fcec7e 552 set -v;
71d62f04 553 fi
7c2dd1b2 554
33f5276d 555 cd $SPECS_DIR
3d97a432 556
00fcec7e 557 if [ -n "$TRY_UPGRADE" ]; then
a7af9862 558
559 if [ -n "FLOAT_VERSION" ]; then
560 TNOTIFY=`./pldnotify.awk $SPECFILE -n`
561 else
562 TNOTIFY=`./pldnotify.awk $SPECFILE`
563 fi
564
3d97a432 565 TNEWVER=`echo $TNOTIFY | awk '{ match($4,/\[NEW\]/); print $5 }'`
a7af9862 566
0096b1ae 567 if [ -n "$TNEWVER" ]; then
a7af9862 568
3d97a432 569 TOLDVER=`echo $TNOTIFY | awk '{ print $3; }'`
a7af9862 570
3d97a432 571 echo "New version found, updating spec file to version " $TNEWVER
a7af9862 572
3d97a432 573 cp -f $SPECFILE $SPECFILE.bak
a7af9862 574
3d97a432 575 chmod +w $SPECFILE
a7af9862 576
3d97a432
MK
577 eval "perl -pi -e 's/Version:\t"$TOLDVER"/Version:\t"$TNEWVER"/gs' $SPECFILE"
578 eval "perl -pi -e 's/Release:\t[1-9]{0,4}/Release:\t1/' $SPECFILE"
a7af9862 579
3d97a432 580 parse_spec;
a7af9862 581
3d97a432 582 get_files "$SOURCES $PATCHES";
a7af9862 583
3d97a432
MK
584 unset TOLDVER TNEWVER TNOTIFY
585 fi
00fcec7e 586
3d97a432
MK
587 fi
588
589
590 cd $SPECS_DIR
591
79b2ec0e 592 case "$COMMAND" in
593 build )
7922b3ec 594 BUILD_SWITCH="-ba" ;;
79b2ec0e 595 build-binary )
596 BUILD_SWITCH="-bb" ;;
597 build-source )
956d1492 598 BUILD_SWITCH="-bs --nodeps" ;;
79b2ec0e 599 esac
d6a75d60 600 if [ -n "$LOGFILE" ]; then
00fcec7e 601 if [ -n "$CVSTAG" ]; then
602 LTAG="r_`echo $CVSTAG|sed -e 's/\./_/g'`_"
603 else
604 LTAG=""
605 fi
972bd3c3 606 LOG=`eval echo $LOGFILE`
00fcec7e 607 if [ -n "$LASTLOG_FILE" ]; then
608 echo "LASTLOG=$LOG" > $LASTLOG_FILE
609 fi
610 RES_FILE=~/tmp/$RPMBUILD-exit-status.$RANDOM
611 (nice -n ${DEF_NICE_LEVEL} time $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $BCOND $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG
612 RETVAL=`cat $RES_FILE`
613 rm $RES_FILE
614 if [ -n "$LOGDIROK" ] && [ -n "$LOGDIRFAIL" ]; then
615 if [ "$RETVAL" -eq "0" ]; then
616 mv $LOG $LOGDIROK
617 else
618 mv $LOG $LOGDIRFAIL
619 fi
620 fi
d6a75d60 621 else
7147050f 622 eval nice -n ${DEF_NICE_LEVEL} $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $BCOND $SPECFILE
f308b816 623 RETVAL=$?
d6a75d60 624 fi
33f5276d 625
f308b816 626 if [ "$RETVAL" -ne "0" ]; then
a7af9862 627
00fcec7e 628 if [ -n "$TRY_UPGRADE" ]; then
3d97a432 629 echo "\n!!! Package with new version cannot be build automagically\n"
3d97a432 630 mv -f $SPECFILE.bak $SPECFILE
3d97a432 631 fi
a7af9862 632
33f5276d 633 Exit_error err_build_fail;
634 fi
a7af9862 635
79b2ec0e 636 unset BUILD_SWITCH
59398507 637}
638
cc97f1f3
SZ
639nourl()
640{
a7af9862 641 echo "$@" | sed 's#\<\(ftp\|http\|https\|cvs\|svn\)://[^ ]*/##g'
cc97f1f3 642}
da946cd6 643#---------------------------------------------
644# main()
645
ba877a00 646if [ "$#" = 0 ]; then
da946cd6 647 usage;
d764d255 648 exit 1
da946cd6 649fi
650
5a491465 651while test $# -gt 0 ; do
652 case "${1}" in
a9d9a79a
TP
653 -5 )
654 COMMAND="get";
655 NODIST="yes"
656 UPDATE5="yes"
657 shift ;;
7c2dd1b2 658 -D | --debug )
659 DEBUG="yes"; shift ;;
bde1c404 660 -V | --version )
4003ad8c 661 COMMAND="version"; shift ;;
bde1c404 662 -a | --as_anon )
62546902 663 CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot"; shift ;;
79b2ec0e 664 -b | -ba | --build )
4003ad8c 665 COMMAND="build"; shift ;;
79b2ec0e 666 -bb | --build-binary )
667 COMMAND="build-binary"; shift ;;
668 -bs | --build-source )
669 COMMAND="build-source"; shift ;;
8ba5cdda
PG
670 -B | --branch )
671 COMMAND="branch"; shift; TAG="${1}"; shift;;
5dd89621 672 -c | --clean )
673 CLEAN="--clean --rmspec --rmsource"; shift ;;
bde1c404 674 -d | --cvsroot )
4003ad8c 675 shift; CVSROOT="${1}"; shift ;;
bde1c404 676 -g | --get )
677 COMMAND="get"; shift ;;
678 -h | --help )
679 COMMAND="usage"; shift ;;
5a491465 680 -l | --logtofile )
4003ad8c 681 shift; LOGFILE="${1}"; shift ;;
3ae81a20 682 -ni| --nice )
683 shift; DEF_NICE_LEVEL=${1}; shift ;;
8bc51224 684 -m | --mr-proper )
685 COMMAND="mr-proper"; shift ;;
157dc315
SZ
686 -nc | --no-cvs )
687 NOCVS="yes"; shift ;;
37f54b4a 688 -ncs | --no-cvs-specs )
6fc910c7 689 NOCVSSPEC="yes"; shift ;;
fc0e5bb5
TP
690 -nd | --no-distfiles )
691 NODIST="yes"; shift ;;
4ca52257
JK
692 -nm | --no-mirrors )
693 NOMIRRORS="yes"; shift ;;
157dc315
SZ
694 -nu | --no-urls )
695 NOURLS="yes"; shift ;;
72fb89b5 696 -ns | --no-srcs )
697 NOSRCS="yes"; shift ;;
fd2b5687
MM
698 -ns0 | --no-source0 )
699 NOSOURCE0="yes"; shift ;;
33a9d2d1
SZ
700 --opts )
701 shift; RPMOPTS="${1}"; shift ;;
6049c3d1 702 --with | --without )
a2d6aca2 703 BCOND="$BCOND $1 $2" ; shift 2 ;;
bde1c404 704 -q | --quiet )
33f5276d 705 QUIET="--quiet"; shift ;;
448deaa0 706 --date )
707 CVSDATE="${2}"; shift 2 ;;
67fcd1e4 708 -r | --cvstag )
709 shift; CVSTAG="${1}"; shift ;;
78ce14b3 710 -Tvs | --tag-version-stable )
7922b3ec 711 COMMAND="tag";
78ce14b3 712 TAG="STABLE"
7922b3ec 713 TAG_VERSION="yes"
714 shift;;
a2164135 715 -Tvn | --tag-version-nest )
7922b3ec 716 COMMAND="tag";
a2164135 717 TAG="NEST"
7922b3ec 718 TAG_VERSION="yes"
719 shift;;
78ce14b3 720 -Ts | --tag-stable )
7922b3ec 721 COMMAND="tag";
78ce14b3 722 TAG="STABLE"
7922b3ec 723 TAG_VERSION="no"
724 shift;;
a2164135 725 -Tn | --tag-nest )
7922b3ec 726 COMMAND="tag";
a2164135 727 TAG="NEST"
7922b3ec 728 TAG_VERSION="no"
729 shift;;
730 -Tv | --tag-version )
731 COMMAND="tag";
f02788de 732 TAG=""
7922b3ec 733 TAG_VERSION="yes"
734 shift;;
1471f6d6 735 -T | --tag )
7922b3ec 736 COMMAND="tag";
737 shift
738 TAG="$1"
739 TAG_VERSION="no"
740 shift;;
b130abf2
TP
741 -U | --update )
742 UPDATE="yes"; shift ;;
0096b1ae 743 -u | --try-upgrade )
3d97a432 744 TRY_UPGRADE="1"; shift ;;
a7af9862 745 -un | --try-upgrade-with-float-version )
746 TRY_UPGRADE="1"; FLOAT_VERSION="1"; shift ;;
b130abf2
TP
747 -v | --verbose )
748 BE_VERBOSE="1"; shift ;;
c7ab67cf 749 --define)
c24b056c 750 shift
c7ab67cf
SZ
751 MACRO="${1}"
752 VALUE="${2}"
753 shift 2
754 RPMOPTS="${RPMOPTS} --define \"${MACRO} ${VALUE}\""
755 ;;
bde1c404 756 * )
0fc6e9ec 757 SPECFILE="`basename ${1} .spec`.spec"; shift ;;
5a491465 758 esac
759done
760
00fcec7e 761if [ -n "$DEBUG" ]; then
a7af9862 762 set -x;
00fcec7e 763 set -v;
71d62f04 764fi
7c2dd1b2 765
bde1c404 766case "$COMMAND" in
79b2ec0e 767 "build" | "build-binary" | "build-source" )
33f5276d 768 init_builder;
8a7fc6f7 769 if [ -n "$SPECFILE" ]; then
59398507 770 get_spec;
771 parse_spec;
298c753e
AM
772
773 if [ -n "$FAIL_IF_CHANGED_BUT_NOT_BUMPED" ]; then
b4fd0ec0 774 TAGVER=$PACKAGE_NAME-`echo $PACKAGE_VERSION | sed -e "s/\./\_/g" -e "s/@/#/g"`-`echo $PACKAGE_RELEASE | sed -e "s/\./\_/g" -e "s/@/#/g"`
298c753e 775 CURTAGREL=$(cvs status $SPECFILE | grep "Working revision:" | awk '{ print $3 }')
1f188001 776 TAGREL=$(cvs status -v $SPECFILE | grep -E "^[[:space:]]*${TAGVER}[[[:space:]]" | sed -e 's#.*(revision: ##g' -e 's#).*##g')
298c753e
AM
777
778 if [ -n "$TAGREL" -a "$TAGREL" != "$CURTAGREL" ]; then
779 Exit_error err_build_fail "not bumped ver-rel - was already used in rev $TAGREL"
780 fi
781 fi
782
25fa34fe 783 if [ -n "$ICONS" ]; then
bc441b0c 784 get_files $ICONS;
25fa34fe
AM
785 parse_spec;
786 fi
f9a62a6a 787 if [ -n "$NOSOURCE0" ] ; then
788 SOURCES=`echo $SOURCES | xargs | sed -e 's/[^ ]*//'`
789 fi
25fa34fe 790 get_files "$SOURCES $PATCHES";
59398507 791 build_package;
792 else
33f5276d 793 Exit_error err_no_spec_in_cmdl;
59398507 794 fi
795 ;;
8ba5cdda
PG
796 "branch" )
797 init_builder;
798 if [ -n "$SPECFILE" ]; then
799 get_spec;
800 parse_spec;
801 if [ -n "$ICONS" ]; then
802 get_files $ICONS
803 parse_spec;
804 fi
805 get_files $SOURCES $PATCHES;
806 branch_files $TAG "$SOURCES $PATCHES $ICONS";
807 else
808 Exit_error err_no_spec_in_cmdl;
809 fi
810 ;;
bde1c404 811 "get" )
33f5276d 812 init_builder;
8a7fc6f7 813 if [ -n "$SPECFILE" ]; then
59398507 814 get_spec;
815 parse_spec;
25fa34fe 816 if [ -n "$ICONS" ]; then
7922b3ec 817 get_files $ICONS
818 parse_spec;
25fa34fe 819 fi
fd2b5687
MM
820 if [ -n "$NOSOURCE0" ] ; then
821 SOURCES=`echo $SOURCES | xargs | sed -e 's/[^ ]*//'`
822 fi
bc441b0c 823 get_files $SOURCES $PATCHES
bde1c404 824 else
33f5276d 825 Exit_error err_no_spec_in_cmdl;
bde1c404 826 fi
827 ;;
1471f6d6 828 "tag" )
829 init_builder;
830 if [ -n "$SPECFILE" ]; then
831 get_spec;
832 parse_spec;
833 if [ -n "$ICONS" ]; then
7922b3ec 834 get_files $ICONS
835 parse_spec;
1471f6d6 836 fi
bc441b0c 837 get_files $SOURCES $PATCHES;
1471f6d6 838 tag_files "$SOURCES $PATCHES $ICONS";
839 else
840 Exit_error err_no_spec_in_cmdl;
841 fi
842 ;;
8bc51224 843 "mr-proper" )
7147050f 844 $RPM --clean --rmsource --rmspec --force --nodeps $SPECFILE
8bc51224 845 ;;
bde1c404 846 "usage" )
847 usage;;
4003ad8c 848 "version" )
849 echo "$VERSION";;
bde1c404 850esac
9e06e5c3 851
852cd $__PWD
This page took 0.239341 seconds and 4 git commands to generate.