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