Author: glen                         Date: Fri Dec  1 11:08:02 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- copied v0.17 from r1.467

---- Files affected:
SOURCES:
   builder (1.14 -> 1.15) 

---- Diffs:

================================================================
Index: SOURCES/builder
diff -u SOURCES/builder:1.14 SOURCES/builder:1.15
--- SOURCES/builder:1.14        Mon May 22 22:51:26 2006
+++ SOURCES/builder     Fri Dec  1 12:07:57 2006
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/ksh
 # -----------
 # $Id$
 # Exit codes:
@@ -22,7 +22,7 @@
 
 VERSION="\
 Build package utility from PLD Linux CVS repository
-v0.16 (C) 1999-2006 Free Penguins".
+v0.17 (C) 1999-2006 Free Penguins".
 PATH="/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin"
 
 COMMAND="build"
@@ -39,7 +39,6 @@
 NODIST=""
 NOINIT=""
 UPDATE=""
-UPDATE5=""
 ADD5=""
 NO5=""
 ALWAYS_CVSUP=${ALWAYS_CVSUP:-"yes"}
@@ -79,6 +78,7 @@
 
 CVSTAG=""
 RES_FILE=""
+CVS_FORCE=""
 
 CVS_SERVER="cvs.pld-linux.org"
 DISTFILES_SERVER="://distfiles.pld-linux.org"
@@ -92,6 +92,10 @@
 # let get_files skip over files which are present to get those damn files 
fetched
 SKIP_EXISTING_FILES="no"
 
+TRY_UPGRADE=""
+# should the specfile be restored if upgrade failed?
+REVERT_BROKEN_UPGRADE="yes"
+
 if [ -x /usr/bin/rpm-getdeps ]; then
        FETCH_BUILD_REQUIRES_RPMGETDEPS="yes"
 else
@@ -189,13 +193,11 @@
        if [ -n "$DEBUG" ]; then set -xv; fi
        echo "\
 Usage: builder [-D|--debug] [-V|--version] [-a|--as_anon] [-b|-ba|--build]
-
 [-bb|--build-binary] [-bs|--build-source] [-u|--try-upgrade]
-[{-B|--branch} <branch>] [{-d|--cvsroot} <cvsroot>] [-g|--get]
-[-h|--help] [--http] [{-l,--logtofile} <logfile>] [-m|--mr-proper]
-[-q|--quiet] [--date <yyyy-mm-dd> [-r <cvstag>] [{-T--tag <cvstag>]
-[-Tvs|--tag-version-stable] [-Tvn|--tag-version-nest]
-[-Ts|--tag-stable] [-Tn|--tag-nest] [-Tv|--tag-version]
+[{-cf|--cvs-force}] [{-B|--branch} <branch>] [{-d|--cvsroot} <cvsroot>]
+[-g|--get] [-h|--help] [--http] [{-l|--logtofile} <logfile>] [-m|--mr-proper]
+[-q|--quiet] [--date <yyyy-mm-dd> [-r <cvstag>] [{-T|--tag <cvstag>]
+[-Tvs|--tag-version-stable] [-Ts|--tag-stable] [-Tv|--tag-version]
 [{-Tp|--tag-prefix} <prefix>] [{-tt|--test-tag}]
 [-nu|--no-urls] [-v|--verbose] [--opts <rpm opts>] [--show-bconds]
 [--with/--without <feature>] [--define <macro> <value>] 
<package>[.spec][:cvstag]
@@ -220,6 +222,7 @@
 -B, --branch        - add branch
 -c, --clean         - clean all temporarily created files (in BUILD, SOURCES,
                       SPECS and \$RPM_BUILD_ROOT),
+-cf, --cvs-force       - use -F when tagging (useful when moving branches)
 -d <cvsroot>, --cvsroot <cvsroot>
                     - setup \$CVSROOT,
 --define <macro> <value>
@@ -250,6 +253,7 @@
 --date yyyy-mm-dd   - build package using resources from specified CVS date,
 -r <cvstag>, --cvstag <cvstag>
                     - build package using resources from specified CVS tag,
+-A                  - build package using CVS resources as any sticky 
tags/date/kopts being reset.
 -R, --fetch-build-requires
                     - fetch what is BuildRequired,
 -RB, --remove-build-requires
@@ -277,12 +281,8 @@
                     - add cvs tag <cvstag> for files,
 -Tvs, --tag-version-stable
                     - add cvs tags STABLE and NAME-VERSION-RELEASE for files,
--Tvn, --tag-version-nest
-                    - add cvs tags NEST and NAME-VERSION-RELEASE for files,
 -Ts, --tag-stable
                     - add cvs tag STABLE for files,
--Tn, --tag-nest
-                    - add cvs tag NEST for files,
 -Tv, --tag-version
                     - add cvs tag NAME-VERSION-RELEASE for files,
 -Tp, --tag-prefix <prefix>
@@ -302,6 +302,9 @@
                     - don't apply <patchnumber>
 --show-bconds       - show available conditional builds, which can be used
                     - with --with and/or --without switches.
+--show-bcond-args   - show active bconds, from ~/.bcondrc. this is used by
+                      ./repackage.sh script. in other words, the output is
+                      parseable by scripts.
 --with/--without <feature>
                     - conditional build package depending on %_with_<feature>/
                       %_without_<feature> macro switch.  You may now use
@@ -360,10 +363,10 @@
 }
 
 cache_rpm_dump () {
-        if [ -n "$DEBUG" ]; then
-                 set -x;
-                 set -v;
-        fi
+       if [ -n "$DEBUG" ]; then
+               set -x
+               set -v
+       fi
 
        update_shell_title "cache_rpm_dump"
        local rpm_dump
@@ -396,6 +399,8 @@
 %php_major_version ERROR
 %php_api_version ERROR
 %py_ver ERROR
+%perl_vendorarch ERROR
+%perl_vendorlib ERROR
 EOF
        case "$RPMBUILD" in
        rpm)
@@ -416,7 +421,7 @@
        if [ $? -gt 0 ]; then
                error=$(echo "$rpm_dump" | sed -ne '/^error:/,$p')
                echo "$error" >&2
-               Exit_error err_build_fail;
+               Exit_error err_build_fail
        fi
 
        # make small dump cache
@@ -432,7 +437,7 @@
 
 rpm_dump () {
        if [ -z "$rpm_dump_cache" ] ; then
-               echo "internal error: cache_rpm_dump not called!" 1>&2
+               echo "internal error: cache_rpm_dump not called! (missing 
%prep?)" 1>&2
        fi
        echo "$rpm_dump_cache"
 }
@@ -445,19 +450,19 @@
                return
        fi
 
-       rpm_dump_cache="kalasaba" NODIST="yes" UPDATE5= get_files $ICONS
+       rpm_dump_cache="kalasaba" NODIST="yes" get_files $ICONS
 }
 
 parse_spec()
 {
        update_shell_title "parsing specfile"
        if [ -n "$DEBUG" ]; then
-               set -x;
-               set -v;
+               set -x
+               set -v
        fi
 
        # icons are needed for successful spec parse
-       get_icons;
+       get_icons
 
        cd $SPECS_DIR
        cache_rpm_dump
@@ -499,8 +504,8 @@
 Exit_error()
 {
        if [ -n "$DEBUG" ]; then
-               set -x;
-               set -v;
+               set -x
+               set -v
        fi
 
        cd "$__PWD"
@@ -508,19 +513,19 @@
        case "$1" in
                "err_no_spec_in_cmdl" )
                        remove_build_requires
-                       echo "ERROR: spec file name not specified.";
+                       echo "ERROR: spec file name not specified."
                        exit 2 ;;
                "err_no_spec_in_repo" )
                        remove_build_requires
-                       echo "Error: spec file not stored in CVS repo.";
+                       echo "Error: spec file not stored in CVS repo."
                        exit 3 ;;
                "err_no_source_in_repo" )
                        remove_build_requires
-                       echo "Error: some source, patch or icon files not 
stored in CVS repo. ($2)";
+                       echo "Error: some source, patch or icon files not 
stored in CVS repo. ($2)"
                        exit 4 ;;
                "err_build_fail" )
                        remove_build_requires
-                       echo "Error: package build failed. (${2:-no more 
info})";
+                       echo "Error: package build failed. (${2:-no more info})"
                        exit 5 ;;
                "err_no_package_data" )
                        remove_build_requires
@@ -528,27 +533,27 @@
                        exit 6 ;;
                "err_tag_exists" )
                        remove_build_requires
-                       echo "Tag ${2} already exists (spec release: ${3}).";
+                       echo "Tag ${2} already exists (spec release: ${3})."
                        exit 9 ;;
                "err_fract_rel" )
                        remove_build_requires
-                       echo "Release ${2} not integer and not a snapshot.";
+                       echo "Release ${2} not integer and not a snapshot."
                        exit 10 ;;
                "err_branch_exists" )
                        remove_build_requires
-                       echo "Tree branch already exists (${2}).";
+                       echo "Tree branch already exists (${2})."
                        exit 11 ;;
 
        esac
-   echo "Unknown error."
-   exit 100
+       echo "Unknown error."
+       exit 100
 }
 
 init_builder()
 {
        if [ -n "$DEBUG" ]; then
-               set -x;
-               set -v;
+               set -x
+               set -v
        fi
 
        if [ "$NOINIT" != "yes" ] ; then
@@ -568,13 +573,13 @@
        update_shell_title "get_spec"
 
        if [ -n "$DEBUG" ]; then
-               set -x;
-               set -v;
+               set -x
+               set -v
        fi
 
        cd "$SPECS_DIR"
        if [ ! -f "$SPECFILE" ]; then
-               SPECFILE="`basename $SPECFILE .spec`.spec";
+               SPECFILE="`basename $SPECFILE .spec`.spec"
        fi
        if [ "$NOCVSSPEC" != "yes" ]; then
 
@@ -587,7 +592,7 @@
        fi
 
        if [ ! -f "$SPECFILE" ]; then
-               Exit_error err_no_spec_in_repo;
+               Exit_error err_no_spec_in_repo
        fi
 
        if [ "$CHMOD" = "yes" -a -n "$SPECFILE" ]; then
@@ -625,6 +630,7 @@
        echo "$url"
 }
 
+# Warning: unpredictable results if same URL used twice
 src_no ()
 {
        cd $SPECS_DIR
@@ -634,38 +640,44 @@
        head -n 1 | xargs
 }
 
-src_md5 ()
+src_md5()
 {
-       [ X"$NO5" = X"yes" ] && return
+       [ "$NO5" = "yes" ] && return
        no=$(src_no "$1")
        [ -z "$no" ] && return
        cd $SPECS_DIR
-       spec_rev=$(grep $SPECFILE CVS/Entries 2>/dev/null | sed -e 
s:/$SPECFILE/:: -e s:/.*::)
-       if [ -z "$spec_rev" ]; then
-               spec_rev="$(head -n 1 $SPECFILE | sed -e 's/.*\$Revision: 
\([0-9.]*\).*/\1/')"
-       fi
-       spec="$SPECFILE[0-9.,]*,$(echo $spec_rev | sed 's/\./\\./g')"
-       md5=$(grep -s -v '^#' additional-md5sums | \
-       grep -E "[      ]$(basename "$1")[      ]+${spec}([     ,]|\$)" | \
-       sed -e 's/^\([0-9a-f]\{32\}\).*/\1/' | \
-       grep -E '^[0-9a-f]{32}$')
-       if [ X"$md5" = X"" ] ; then
-               source_md5=`grep -i "#[         ]*Source$no-md5[        ]*:" 
$SPECFILE | sed -e 's/.*://'`
-               if [ ! -z "$source_md5" ] ; then
-                       echo $source_md5;
-               else
-                       # we have empty SourceX-md5, but it is still possible
-                       # that we have NoSourceX-md5 AND NoSource: X
-                       nosource_md5=`grep -i "#[        ]*NoSource$no-md5[     
 ]*:" $SPECFILE | sed -e 's/.*://'`
-                       if [ ! -z "$nosource_md5" -a ! X"`grep -i "^NoSource:[  
 ]*$no$" $SPECFILE`" = X"" ] ; then
-                               echo $nosource_md5;
-                       fi;
-               fi;
+       local md5
+
+       if [ -f additional-md5sums ]; then
+               local spec_rev=$(grep $SPECFILE CVS/Entries 2>/dev/null | sed 
-e s:/$SPECFILE/:: -e s:/.*::)
+               if [ -z "$spec_rev" ]; then
+                       spec_rev="$(head -n 1 $SPECFILE | sed -e 
's/.*\$Revision: \([0-9.]*\).*/\1/')"
+               fi
+               local spec="$SPECFILE[0-9.,]*,$(echo $spec_rev | sed 
's/\./\\./g')"
+               md5=$(grep -s -v '^#' additional-md5sums | \
+               grep -E "[      ]$(basename "$1")[      ]+${spec}([     ,]|\$)" 
| \
+               sed -e 's/^\([0-9a-f]\{32\}\).*/\1/' | \
+               grep -E '^[0-9a-f]{32}$')
+
+               if [ "$md5" ]; then
+                       if [ $(echo "$md5" | wc -l) != 1 ] ; then
+                               echo "$SPECFILE: more then one entry in 
additional-md5sums for $1" 1>&2
+                       fi
+                       echo "$md5" | tail -n 1
+                       return
+               fi
+       fi
+
+       source_md5=`grep -i "#[         ]*Source$no-md5[        ]*:" $SPECFILE 
| sed -e 's/.*://'`
+       if [ -n "$source_md5" ]; then
+               echo $source_md5
        else
-               if [ $(echo "$md5" | wc -l) != 1 ] ; then
-                       echo "$SPECFILE: more then one entry in 
additional-md5sums for $1" 1>&2
+               # we have empty SourceX-md5, but it is still possible
+               # that we have NoSourceX-md5 AND NoSource: X
+               nosource_md5=`grep -i "#[        ]*NoSource$no-md5[      ]*:" 
$SPECFILE | sed -e 's/.*://'`
+               if [ -n "$nosource_md5" -a -n "`grep -i "^NoSource:[     
]*$no$" $SPECFILE`" ] ; then
+                       echo $nosource_md5
                fi
-               echo "$md5" | tail -n 1
        fi
 }
 
@@ -752,13 +764,96 @@
        return $result
 }
 
+# returns true if "$1" is ftp, http or https protocol url
+is_url()
+{
+       case "$1" in
+       ftp://*|http://*|https://*)
+               return 0
+       ;;
+       esac
+       return 1
+}
+
+update_md5()
+{
+       if [ $# -eq 0 ]; then
+               return
+       fi
+
+       update_shell_title "update md5"
+       if [ -n "$DEBUG" ]; then
+               set -x
+               set -v
+       fi
+
+       cd "$SOURCE_DIR"
+
+       # pass 1: check files to be fetched
+       local todo
+       local need_files
+       for i in "$@"; do
+               local fp=$(nourl "$i")
+               local srcno=$(src_no "$i")
+               if [ -n "$ADD5" ]; then
+                       [ "$fp" = "$i" ] && continue # FIXME what is this check 
doing?
+                       grep -qiE '^#[  ]*Source'$srcno'-md5[   ]*:' 
$SPECS_DIR/$SPECFILE && continue
+               else
+                       grep -qiE '^#[  ]*Source'$srcno'-md5[   ]*:' 
$SPECS_DIR/$SPECFILE || continue
+               fi
+               if [ ! -f "$fp" ] || [ $ALWAYS_CVSUP = "yes" ]; then
+                       need_files="$need_files $i"
+               fi
+       done
+
+       # pass 1a: get needed files
+       if [ "$need_files" ]; then
+               get_files $need_files
+       fi
+
+       # pass 2: proceed with md5 adding or updating
+       for i in "$@"; do
+               local fp=$(nourl "$i")
+               local srcno=$(src_no "$i")
+               local md5=$(grep -iE '^#[       ]*(No)?Source'$srcno'-md5[      
]*:' $SPECS_DIR/$SPECFILE )
+               if [ -n "$ADD5" ] && is_url $i || [ -n "$md5" ]; then
+                       local tag="Source$srcno-md5"
+                       if [[ "$md5" == *NoSource* ]]; then
+                               tag="NoSource$srcno-md5"
+                       fi
+                       md5=$(md5sum "$fp" | cut -f1 -d' ')
+                       echo "Updating $tag ($md5: $fp)."
+                       perl -i -ne '
+                               print unless 
/^\s*#\s*(No)?Source'$srcno'-md5\s*:/i;
+                               print "# '$tag':\t'$md5'\n" if 
/^Source'$srcno'\s*:\s+/;
+                       ' \
+                       $SPECS_DIR/$SPECFILE
+               fi
+       done
+}
+
+check_md5()
+{
+       update_shell_title "check md5"
+
+       for i in "$@"; do
+               if good_md5 "$i" && good_size "$i"; then
+                       continue
+               fi
+
+               echo "MD5 sum mismatch or 0 size.  Use -U to refetch sources,"
+               echo "or -5 to update md5 sums, if you're sure files are 
correct."
+               Exit_error err_no_source_in_repo $i
+       done
+}
+
 get_files()
 {
        update_shell_title "get_files"
 
        if [ -n "$DEBUG" ]; then
-               set -x;
-               set -v;
+               set -x
+               set -v
        fi
 
        if [ $# -gt 0 ]; then
@@ -777,33 +872,34 @@
                        SHELL_TITLE_PREFIX="get_files[$nc/$#]"
                        update_shell_title "$i"
                        local fp=`nourl "$i"`
-                       if [ -f "$fp" ] && [ "$SKIP_EXISTING_FILES" = "yes" ]; 
then
+                       if [ "$SKIP_EXISTING_FILES" = "yes" ] && [ -f "$fp" ]; 
then
                                continue
                        fi
-                       if [ -n "$UPDATE5" ]; then
-                               if [ -n "$ADD5" ]; then
-                                       [ "$fp" = "$i" ] && continue
-                                       grep -qiE '^#[  ]*Source'$(src_no 
$i)'-md5[     ]*:' $SPECS_DIR/$SPECFILE && continue
-                               else
-                                       grep -qiE '^#[  ]*Source'$(src_no 
$i)'-md5[     ]*:' $SPECS_DIR/$SPECFILE || continue
-                               fi
-                       fi
+
                        FROM_DISTFILES=0
+                       local srcmd5=$(src_md5 "$i")
+
+                       # we know if source/patch is present in cvs/distfiles
+                       # - has md5 (in distfiles)
+                       # - in cvs... ideas?
+
+                       # CHECK: local file didn't exist or always cvs up 
(first) requested.
                        if [ ! -f "$fp" ] || [ $ALWAYS_CVSUP = "yes" ]; then
                                if echo $i | grep -vE 
'(http|ftp|https|cvs|svn)://' | grep -qE '\.(gz|bz2)$']; then
                                        echo "Warning: no URL given for $i"
                                fi
 
-                               if [ -z "$NODIST" ] && [ -n "$(src_md5 "$i")" 
]; then
+                               if [ -z "$NODIST" ] && [ -n "$srcmd5" ]; then
                                        if good_md5 "$i" && good_size "$i"; then
-                                               echo "$(nourl "$i") having 
proper md5sum already exists"
+                                               echo "$fp having proper md5sum 
already exists"
                                                continue
                                        fi
                                        target="$fp"
                                        url=$(distfiles_url "$i")
                                        url_attic=$(distfiles_attic_url "$i")
                                        FROM_DISTFILES=1
-                                       if [ "`echo $url | grep -E '^(\.|/)'`" 
]; then
+                                       # is $url local file?
+                                       if [[ "$url" = [./]* ]]; then
                                                update_shell_title 
"${GETLOCAL%% *}: $url"
                                                ${GETLOCAL} $url $target
                                        else
@@ -817,7 +913,9 @@
                                                        ${GETURI2} 
${OUTFILEOPT} "$target" "$url"
                                                fi
                                        fi
-                                       if ! test -s "$target"; then
+
+                                       # is it empty file?
+                                       if [ ! -s "$target" ]; then
                                                rm -f "$target"
                                                if [ `echo $url_attic | grep -E 
'^(\.|/)'` ]; then
                                                        update_shell_title 
"${GETLOCAL%% *}: $url_attic"
@@ -834,13 +932,14 @@
                                                        fi
                                                fi
                                        fi
-                                       if test -s "$target"; then
+
+                                       if [ -s "$target" ]; then
                                                cvsignore_df $target
                                        else
                                                rm -f "$target"
                                                FROM_DISTFILES=0
                                        fi
-                               elif [ "$NOCVS" != "yes" -a -z "$(src_md5 
"$i")" ]; then
+                               elif [ "$NOCVS" != "yes" -a -z "$srcmd5" ]; then
                                        if [ $# -gt 1 ]; then
                                                get_files_cvs="$get_files_cvs 
$fp"
                                                update_shell_title "$fp (will 
cvs up later)"
@@ -869,24 +968,13 @@
                                fi
 
                        fi
-                       srcno=$(src_no $i)
+
+                       # the md5 check must be moved elsewhere as if we've 
called from update_md5 the md5 is wrong.
                        if [ ! -f "$fp" -a "$FAIL_IF_NO_SOURCES" != "no" ]; then
-                               Exit_error err_no_source_in_repo $i;
-                       elif [ -n "$UPDATE5" ] && \
-                               ( ( [ -n "$ADD5" ] && echo $i | grep -q -E 
'ftp://|http://|https://' && \
-                               [ -z "$(grep -E -i '^NoSource[  ]*:[    
]*'$i'([        ]|$)' $SPECS_DIR/$SPECFILE)" ] ) || \
-                               grep -q -i -E '^#[      ]*source'$(src_no 
$i)'-md5[     ]*:' $SPECS_DIR/$SPECFILE )
-                       then
-                               echo "Updating source-$srcno md5."
-                               md5=$(md5sum "$fp" | cut -f1 -d' ')
-                               perl -i -ne '
-                               print unless /^\s*#\s*Source'$srcno'-md5\s*:/i;
-                               print "# Source'$srcno'-md5:\t'$md5'\n"
-                               if /^Source'$srcno'\s*:\s+/;
-                               ' \
-                               $SPECS_DIR/$SPECFILE
+                               Exit_error err_no_source_in_repo $i
                        fi
 
+                       # we check md5 here just only to refetch immediately
                        if good_md5 "$i" && good_size "$i"; then
                                :
                        elif [ "$FROM_DISTFILES" = 1 ]; then
@@ -901,7 +989,7 @@
                                        update_shell_title "${GETURI2%% *}: 
$url"
                                        ${GETURI2} ${OUTFILEOPT} "$target" 
"$url"
                                fi
-                               if ! test -s "$target"; then
+                               if [ ! -s "$target" ]; then
                                        rm -f "$target"
                                        update_shell_title "${GETURI%% *}: 
$url_attic"
                                        ${GETURI} ${OUTFILEOPT} "$target" 
"$url_attic" || \
@@ -912,14 +1000,6 @@
                                fi
                                test -s "$target" || rm -f "$target"
                        fi
-
-                       if good_md5 "$i" && good_size "$i" ; then
-                               :
-                       else
-                               echo "MD5 sum mismatch or 0 size.  Use -U to 
refetch sources,"
-                               echo "or -5 to update md5 sums, if you're sure 
files are correct."
-                               Exit_error err_no_source_in_repo $i
-                       fi
                done
                SHELL_TITLE_PREFIX=""
 
@@ -938,8 +1018,8 @@
 
 make_tagver() {
        if [ -n "$DEBUG" ]; then
-               set -x;
-               set -v;
+               set -x
+               set -v
        fi
 
        # Check whether first character of PACKAGE_NAME is legal for tag name
@@ -958,54 +1038,59 @@
        TAG_FILES="$@"
 
        if [ -n "$DEBUG" ]; then
-               set -x;
-               set -v;
+               set -x
+               set -v
        fi
 
-       if [ -n "$1$2$3$4$5$6$7$8$9${10}" ]; then
-               echo "Version: $PACKAGE_VERSION"
-               echo "Release: $PACKAGE_RELEASE"
+       echo "Version: $PACKAGE_VERSION"
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/builder?r1=1.14&r2=1.15&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to