From 6b8466dc7428da661c418fca36f3010acf287d75 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20Lisowski?= Date: Mon, 16 Jan 2012 14:54:20 +0100 Subject: [PATCH] - update from pld cvs --- builder.pld.cvs | 111 +++++++++++++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 38 deletions(-) diff --git a/builder.pld.cvs b/builder.pld.cvs index 04707d8..e57dfee 100755 --- a/builder.pld.cvs +++ b/builder.pld.cvs @@ -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 .spec, -bc - execute the %build phase of .spec, -bi - execute the %install phase of .spec --bl - execute the %files phase of .spec +-bl - execute the %files phase of .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 - setup \$CVSROOT, ---define - - define a macro with value , ---alt_kernel - - same as --define 'alt_kernel ' +--define - define a macro with value , +--alt_kernel - same as --define 'alt_kernel ' --nodeps - rpm won't check any dependences --g, --get - get .spec and all related files from CVS repo - or HTTP/FTP, --h, --help - this message, +-g, --get - get .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 , --logtofile - 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 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 - add to NAME-VERSION-RELEASE tags, -tt, --test-tag @@ -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 --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 - conditional build package depending on %_with_/ @@ -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 , --target= - - build for platform . ---init-rpm-dir - initialize ~/rpm directory structure + - build for 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 -- 2.44.0