]> TLD Linux GIT Repositories - packages/rpm-build-tools.git/commitdiff
- update from pld cvs
authorMichał Lisowski <lisu@tld-linux.org>
Mon, 16 Jan 2012 13:54:20 +0000 (14:54 +0100)
committerMichał Lisowski <lisu@tld-linux.org>
Mon, 16 Jan 2012 13:54:20 +0000 (14:54 +0100)
builder.pld.cvs

index 04707d8fba516f375806d03de56bcbda8e88b62a..e57dfee09e706772f2f30b1544d681cfe852ea4c 100755 (executable)
@@ -34,7 +34,7 @@
 
 PROGRAM=${0##*/}
 APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
-RCSID='$Id: builder,v 1.649 2011/07/14 07:31:59 arekm Exp $' r=${RCSID#* * } rev=${r%% *}
+RCSID='$Id: builder,v 1.669 2011/12/10 16:18:35 glen Exp $' r=${RCSID#* * } rev=${r%% *}
 VERSION="v0.35/$rev"
 VERSIONSTRING="\
 Build package utility from PLD Linux Packages repository
@@ -76,6 +76,9 @@ USER_AGENT="PLD/Builder($VERSION)"
 # See LOGFILE example.
 DATE=`date +%Y-%m-%d_%H-%M-%S`
 
+# target arch, can also be used for log file naming
+TARGET=$(rpm -E %{_target})
+
 # Example: LOGFILE='../log.$PACKAGE_NAME'
 # Example: LOGFILE='../LOGS/log.$PACKAGE_NAME.$DATE'
 # Example: LOGFILE='$PACKAGE_NAME/$PACKAGE_NAME.$DATE.log'
@@ -106,6 +109,11 @@ PACKAGE_VERSION=""
 PACKAGE_NAME=""
 ASSUMED_NAME=""
 PROTOCOL="http"
+
+# use lftp by default when available
+USE_LFTP=
+lftp --version > /dev/null 2>&1 && USE_LFTP=yes
+
 WGET_RETRIES=${MAX_WGET_RETRIES:-0}
 
 CVS_COMMAND=${CVS_COMMAND:-cvs}
@@ -190,6 +198,10 @@ elif [ -n "$USE_AXEL" ]; then
        GETURI="axel -a $AXEL_OPTS"
        GETURI2="$GETURI"
        OUTFILEOPT="-o"
+elif [ -n "$USE_LFTP" ]; then
+       GETURI=download_lftp
+       GETURI2=$GETURI
+       OUTFILEOPT=""
 else
        wget --help 2>&1 | grep -q -- ' --no-check-certificate ' && WGET_OPTS="$WGET_OPTS --no-check-certificate"
        wget --help 2>&1 | grep -q -- ' --inet ' && WGET_OPTS="$WGET_OPTS --inet"
@@ -203,7 +215,7 @@ fi
 
 GETLOCAL="cp -a"
 
-if (rpm --version 2>&1 | grep -q '4.0.[0-2]'); then
+if rpm --version 2>&1 | grep -q '4.0.[0-2]'; then
        RPM="rpm"
        RPMBUILD="rpm"
 else
@@ -249,6 +261,27 @@ run_poldek() {
 #---------------------------------------------
 # functions
 
+download_lftp() {
+       local outfile=$1 url=$2 retval tmpfile
+       # TODO: use mktemp
+       tmpfile=$outfile.tmp
+       lftp -c "
+               $([ "$DEBUG" = "yes" ] && echo "debug 5;")
+               set ssl:verify-certificate no;
+               set net:max-retries $WGET_RETRIES;
+               set http:user-agent \"$USER_AGENT\";
+               pget -n 10 -c \"$url\" -o \"$tmpfile\"
+       "
+
+       retval=$?
+       if [ $retval -eq 0 ]; then
+               mv -f "$tmpfile" "$outfile"
+       else
+               rm -f "$tmpfile"
+       fi
+       return $retval
+}
+
 usage() {
        if [ -n "$DEBUG" ]; then set -xv; fi
        echo "\
@@ -281,34 +314,29 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a
 -bp, --build-prep   - execute the %prep phase of <package>.spec,
 -bc                 - execute the %build phase of <package>.spec,
 -bi                 - execute the %install phase of <package>.spec
--bl                                    - execute the %files phase of <package>.spec
+-bl                 - execute the %files phase of <package>.spec
 -bs, --build-source - get all files from CVS repo or HTTP/FTP and only pack
                       them into src.rpm,
 --short-circuit     - short-circuit build
 -B, --branch        - add branch
 -c, --clean         - clean all temporarily created files (in BUILD\$RPM_BUILD_ROOT) after rpmbuild commands.
                       may be used with building process.
--m, --mr-proper     - clean all temporarily created files (in BUILD, SOURCES,
-                                         SPECS and \$RPM_BUILD_ROOT and CVS/Entries). Doesn't run
-                                         any rpm building.
--cf, --cvs-force       - use -F when tagging (useful when moving branches)
+-m, --mr-proper     - clean all temporarily created files (in BUILD, SOURCES, SPECS and \$RPM_BUILD_ROOT
+                      and CVS/Entries). Doesn't run any rpm building.
+-cf, --cvs-force    - use -F when tagging (useful when moving branches)
 -d <cvsroot>, --cvsroot <cvsroot>
                     - setup \$CVSROOT,
---define <macro> <value>
-                    - define a macro <macro> with value <value>,
---alt_kernel <kernel>
-                    - same as --define 'alt_kernel <kernel>'
+--define <macro> <value> - define a macro <macro> with value <value>,
+--alt_kernel <kernel> - same as --define 'alt_kernel <kernel>'
 --nodeps            - rpm won't check any dependences
--g, --get           - get <package>.spec and all related files from CVS repo
-                      or HTTP/FTP,
--h, --help          - this message,
+-g, --get           - get <package>.spec and all related files from CVS repo or HTTP/FTP
+-h, --help          - this message
 -jN, -j N           - set %_smp_mflags to propagate concurrent jobs
 --ftp, --http       - use ftp or http protocol to access distfiles server
 -l <logfile>, --logtofile <logfile>
                     - log all to file,
 -nc, --no-cvs       - don't download sources from CVS, if source URL is given,
--ncs, --no-cvs-specs
-                    - don't check specs in CVS
+-ncs, --no-cvs-specs - don't check specs in CVS
 -nd, --no-distfiles - don't download from distfiles
 -nm, --no-mirrors   - don't download from mirror, if source URL is given,
 -nu, --no-urls      - don't try to download from FTP/HTTP location,
@@ -336,7 +364,7 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a
 -sd, --source-distfiles - list sources available from distfiles (intended for offline
                       operations; does not work when Icon field is present
                       but icon file is absent),
--sc, --source-cvs - list sources available from CVS
+-sc, --source-cvs   - list sources available from CVS
 -sdp, --source-distfiles-paths - list sources available from distfiles -
                       paths relative to distfiles directory (intended for offline
                       operations; does not work when Icon field is present
@@ -353,10 +381,8 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a
                     - add cvs tag <cvstag> for files,
 -Tvs, --tag-version-stable
                     - add cvs tags STABLE and NAME-VERSION-RELEASE for files,
--Ts, --tag-stable
-                    - add cvs tag STABLE for files,
--Tv, --tag-version
-                    - add cvs tag NAME-VERSION-RELEASE for files,
+-Ts, --tag-stable   - add cvs tag STABLE for files,
+-Tv, --tag-version  - add cvs tag NAME-VERSION-RELEASE for files,
 -Tp, --tag-prefix <prefix>
                     - add <prefix> to NAME-VERSION-RELEASE tags,
 -tt, --test-tag <prefix>
@@ -367,7 +393,7 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a
 -u, --try-upgrade   - check version, and try to upgrade package
 -un, --try-upgrade-with-float-version
                     - as above, but allow float version
-                                       php-pear-Services_Digg/
+                      php-pear-Services_Digg/
 --upgrade-version   - upgrade to specified version in try-upgrade
 --use-greed-sources
                     - try download source from tag head if don't find it in
@@ -381,9 +407,8 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a
                     - abort instead of applying patch <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.
+--show-bcond-args   - show active bconds, from ~/.bcondrc. this is used by ./repackage.sh script.
+                      In other words, the output is parseable by scripts.
 --show-avail-bconds - show available bconds
 --with/--without <feature>
                     - conditional build package depending on %_with_<feature>/
@@ -391,8 +416,8 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [--as_anon] [-a|--a
                       --with feat1 feat2 feat3 --without feat4 feat5 --with feat6
                       constructions. Set GROUP_BCONDS to yes to make use of it.
 --target <platform>, --target=<platform>
-                     - build for platform <platform>.
---init-rpm-dir       - initialize ~/rpm directory structure
+                    - build for platform <platform>.
+--init-rpm-dir      - initialize ~/rpm directory structure
 "
 }
 
@@ -602,7 +627,7 @@ parse_spec() {
        cd $PACKAGE_DIR
        cache_rpm_dump
 
-       if (rpm_dump | grep -qEi ":.*nosource.*1"); then
+       if rpm_dump | grep -qEi ":.*nosource.*1"; then
                FAIL_IF_NO_SOURCES="no"
        fi
 
@@ -742,7 +767,7 @@ get_spec() {
 
        if [ "$NOCVSSPEC" != "yes" ]; then
                if [ ! -s CVS/Root -a "$NOCVSSPEC" != "yes" ]; then
-                       echo "Warning: No CVS access defined - using local .spec file"
+                       echo "Warning: No CVS access defined in $(pwd)- using local .spec file"
                        NOCVSSPEC="yes"
                fi
 
@@ -784,8 +809,11 @@ get_spec() {
                # create symlinks for tools
                if [ "$SYMLINK_TOOLS" != "no" ]; then
                        for a in dropin md5 adapter builder {relup,compile,repackage,rsync,pearize}.sh pldnotify.awk; do
+                               # skip tools that don't exist in top dir
                                [ -f $a ] || continue
-                               ln -sf ../$a $ASSUMED_NAME
+                               # skip tools that already exist
+                               [ -f $ASSUMED_NAME/$a ] && continue
+                               ln -s ../$a $ASSUMED_NAME
                                cvsignore_df $a
                        done
                fi
@@ -833,7 +861,7 @@ find_mirror() {
 src_no() {
        local file="$1"
        # escape some regexp characters if part of file name
-       file=$(echo "$file" | sed -e 's#\([\+\*\.]\)#\\\1#g')
+       file=$(echo "$file" | sed -e 's#\([\+\*\.\&\#\?]\)#\\\1#g')
        cd $PACKAGE_DIR
        rpm_dump | \
        grep -E "(SOURCE|PATCH)URL[0-9]*[       ]*${file}""[    ]*$" | \
@@ -1039,7 +1067,7 @@ update_md5() {
                if [ -n "$ADD5" ] && is_url $i || [ -n "$md5" ]; then
                        local tag="# $srcno-md5:\t"
                        if [[ "$md5" == *NoSource* ]]; then
-                               tag="# NoSource$srcno-md5:\t"
+                               tag="# No$srcno-md5:\t"
                        elif [ -n "$USEDIGEST" ]; then
                                tag="BuildRequires:\tdigest(%SOURCE$srcno) = "
                        fi
@@ -1204,10 +1232,10 @@ get_files() {
                                                im="$i"
                                        fi
                                        update_shell_title "${GETURI%% *}: $im"
-                                       ${GETURI} "$im" ${OUTFILEOPT} "$target" || \
+                                       ${GETURI} ${OUTFILEOPT} "$target" "$im" || \
                                        if [ "`echo $im | grep -E 'ftp://'`" ]; then
                                                update_shell_title "${GETURI2%% *}: $im"
-                                               ${GETURI2} "$im" ${OUTFILEOPT} "$target"
+                                               ${GETURI2} ${OUTFILEOPT} "$target" "$im"
                                        fi
                                        test -s "$target" || rm -f "$target"
                                fi
@@ -1307,10 +1335,13 @@ is_tag_a_branch() {
                return 0;
        fi
 
-       TAG=$1
+       local _TAG=$1
+       # escape some regexp characters if part of TAG
+       _TAG=$(echo "$_TAG" | sed -e 's#\([\+\*\.]\)#\\\1#g')
+
 
        cd "$PACKAGE_DIR"
-       $CVS_COMMAND status -v $SPECFILE | grep -Eiq "${TAG}.+(branch: [0-9.]+)"
+       $CVS_COMMAND status -v $SPECFILE | grep -Eiq "${_TAG}.+(branch: [0-9.]+)"
        return $?
 }
 
@@ -1625,7 +1656,7 @@ process_bcondrc() {
        # w32codec-installer license_agreement
        # php +mysqli
        # ---
-       if ([ -f $HOME/.bcondrc ] || ([ -n $HOME_ETC ] && [ -f $HOME_ETC/.bcondrc ])); then
+       if [ -f $HOME/.bcondrc ] || ([ -n $HOME_ETC ] && [ -f $HOME_ETC/.bcondrc ]); then
                :
        else
                return
@@ -2119,11 +2150,13 @@ mr_proper() {
        get_spec
        parse_spec
 
+       local builddir=$(eval $RPM $RPMOPTS --eval '%{_builddir}')
+       
        # remove from CVS/Entries
        cvs_entry_remove $PACKAGE_DIR $SPECFILE $SOURCES $PATCHES
 
        # remove spec and sources
-       $RPMBUILD --clean --rmsource --rmspec --nodeps --define "_specdir $PACKAGE_DIR" --define "_sourcedir $PACKAGE_DIR" $SPECFILE
+       $RPMBUILD --clean --rmsource --rmspec --nodeps --define "_specdir $PACKAGE_DIR" --define "_sourcedir $PACKAGE_DIR" --define "_builddir $builddir" $SPECFILE
 }
 
 #---------------------------------------------
@@ -2546,6 +2579,8 @@ case "$COMMAND" in
                # ./builder -bs test.spec -r AC-branch -Tp auto-ac- -tt
                if [ -n "$TEST_TAG" ]; then
                        local TAGVER=`make_tagver`
+                       # escape some regexp characters if part of TAGVER
+                       TAGVER=$(echo "$TAGVER" | sed -e 's#\([\+\*\.]\)#\\\1#g')
                        echo "Searching for tag $TAGVER..."
                        TAGREL=$($CVS_COMMAND status -v $SPECFILE | grep -E "^[[:space:]]*${TAGVER}[[[:space:]]" | sed -e 's#.*(revision: ##g' -e 's#).*##g')
                        if [ -n "$TAGREL" ]; then