X-Git-Url: https://git.pld-linux.org/?a=blobdiff_plain;f=builder.sh;h=06d0795ae3ccad744d1bfdf3a1e2ca858b09ce9b;hb=733b3aa678143017e523ed6eb29224448511efd3;hp=92b0aa4190c19fba40588baf7b79b777bdfe6b64;hpb=c114fe6c70bd81677bd6cfeee8578245fecbf0ca;p=packages%2Frpm-build-tools.git diff --git a/builder.sh b/builder.sh index 92b0aa4..06d0795 100644 --- a/builder.sh +++ b/builder.sh @@ -3,11 +3,22 @@ # $Id$ # Exit codes: # 0 - succesful -# 1 - help dispayed +# 1 - help displayed # 2 - no spec file name in cmdl parameters # 3 - spec file not stored in repo # 4 - some source, patch or icon files not stored in repo # 5 - package build failed +# 6 - spec file with errors +# 7 - wrong source in /etc/poldek.conf + +# Notes (todo): +# - builder -u fetches current version first +# - tries to get new version from distfiles without new md5 +# - after fetching new version doesn't update md5 +# - doesn't get sources for specs with %include /usr/lib/rpm/macros.python +# when there's no rpm-pythonprov (rpm's fault, but it's ugly anyway) +# - as above with %include /usr/lib/rpm/macros.perl and no rpm-perlprov +# - when Icon: field is present, -5 and -a5 doesn't work VERSION="\ Build package utility from PLD CVS repository @@ -42,11 +53,11 @@ LOGDIR="" LOGDIROK="" LOGDIRFAIL="" LASTLOG_FILE="" -LTAG="" CHMOD="no" CHMOD_MODE="0444" RPMOPTS="" BCOND="" +GROUP_BCONDS="no" PATCHES="" SOURCES="" @@ -54,6 +65,7 @@ ICONS="" PACKAGE_RELEASE="" PACKAGE_VERSION="" PACKAGE_NAME="" +PROTOCOL="ftp" WGET_RETRIES=${MAX_WGET_RETRIES:-0} CVS_RETRIES=${MAX_CVS_RETRIES:-1000} @@ -61,14 +73,17 @@ CVSTAG="" RES_FILE="" CVS_SERVER="cvs.pld-linux.org" -DISTFILES_SERVER="ftp://distfiles.pld-linux.org" +DISTFILES_SERVER="://distfiles.pld-linux.org" DEF_NICE_LEVEL=0 FAIL_IF_NO_SOURCES="yes" -GETURI="wget --passive-ftp -c -nd -t$WGET_RETRIES --inet" -GETURI2="wget -c -nd -t$WGET_RETRIES --inet" +wget --help 2>&1 | grep -q ' \-\-inet ' && WGET_OPTS="$WGET_OPTS --inet" +wget --help 2>&1 | grep -q ' \-\-retry\-connrefused ' && WGET_OPTS="$WGET_OPTS --retry-connrefused" + +GETURI="wget --passive-ftp -c -nd -t$WGET_RETRIES $WGET_OPTS" +GETURI2="wget -c -nd -t$WGET_RETRIES $WGET_OPTS" GETLOCAL="cp -a" if (rpm --version 2>&1 | grep -q '4.0.[0-2]'); then @@ -79,6 +94,20 @@ else RPMBUILD="rpmbuild" fi +POLDEK_INDEX_DIR="`$RPM --eval %_rpmdir`/" +POLDEK_SOURCE="cvs" + +# Example grep cvs /etc/poldek.conf: +# source = cvs /home/users/yoshi/rpm/RPMS/ +if [ "$UPDATE_POLDEK_INDEXES" = "yes" ]; then + POLDEK_SOURCE_VALIDITY="`grep ${POLDEK_SOURCE} /etc/poldek.conf|grep -v ^#`" + if [ "${POLDEK_SOURCE_VALIDITY}" = "" ]; then + echo "Using improper source '${POLDEK_SOURCE}' in /etc/poldek.conf" + echo "Fix it and try to contiune" + exit 7 + fi +fi + if [ -f ~/etc/builderrc ]; then . ~/etc/builderrc elif [ -f ~/.builderrc ]; then @@ -96,16 +125,17 @@ Usage: builder [-D|--debug] [-V|--version] [-a|--as_anon] [-b|-ba|--build] [-bb|--build-binary] [-bs|--build-source] [-u|--try-upgrade] [{-B|--branch} ] [{-d|--cvsroot} ] [-g|--get] - [-h|--help] [{-l,--logtofile} ] [-m|--mr-proper] + [-h|--help] [--http] [{-l,--logtofile} ] [-m|--mr-proper] [-q|--quiet] [--date [-r ] [{-T--tag ] [-Tvs|--tag-version-stable] [-Tvn|--tag-version-nest] - [-Ts|--tag-stable] [-Tn|--tag-nest] [-Tv|--tag-version] + [-Ts|--tag-stable] [-Tn|--tag-nest] [-Tv|--tag-version] + [{-Tp|--tag-prefix} ] [-nu|--no-urls] [-v|--verbose] [--opts ] [--with/--without ] [--define ] [.spec] -5, --update-md5 - - update md5 comments in spec, implies -nd - -a5, --add-md5 - add md5 comments to URL sources, implies -nc -nd + - update md5 comments in spec, implies -nd -ncs + -a5, --add-md5 - add md5 comments to URL sources, implies -nc -nd -ncs -D, --debug - enable script debugging mode, -V, --version - output builder version -a, --as_anon - get files via pserver as cvs@$CVS_SERVER, @@ -125,9 +155,11 @@ Usage: builder [-D|--debug] [-V|--version] [-a|--as_anon] [-b|-ba|--build] - setup \$CVSROOT, --define - define a macro with value , + --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, + --http - use http instead of ftp, -l , --logtofile - log all to file, -m, --mr-proper - only remove all files related to spec file and @@ -152,6 +184,14 @@ Usage: builder [-D|--debug] [-V|--version] [-a|--as_anon] [-b|-ba|--build] -r , --cvstag - build package using resources from specified CVS tag, + -R, --fetch-build-requires + - fetch what is BuildRequired, + -RB, --remove-build-requires + - remove all you fetched with -R or --fetch-build-requires + remember, this option requires confirmation, + -FRB, --force-remove-build-requires + - remove all you fetched with -R or --fetch-build-requires + remember, this option works without confirmation, -T , --tag - add cvs tag for files, -Tvs, --tag-version-stable @@ -164,6 +204,8 @@ Usage: builder [-D|--debug] [-V|--version] [-a|--as_anon] [-b|-ba|--build] - add cvs tag NEST for files, -Tv, --tag-version - add cvs tag NAME-VERSION-RELESE for files, + -Tp, --tag-prefix + - add to NAME-VERSION-RELEASE tags, -v, --verbose - be verbose, -u, --try-upgrade - check version, and try to upgrade package @@ -172,13 +214,36 @@ Usage: builder [-D|--debug] [-V|--version] [-a|--as_anon] [-b|-ba|--build] -U, --update - refetch sources, don't use distfiles, and update md5 comments + -Upi, --update-poldek-indexes + - refresh or make poldek package index files. --with/--without - conditional build package depending on %_with_/%_without_ macro - switch + switch. + You may now use --with feat1 feat2 feat3 --without feat4 + feat5 --with feat6 constructions. " } +cache_rpm_dump () { + rpm_dump_cache=` + case "$RPMBUILD" in + rpm ) + rpm -bp --nodeps --define 'prep %dump' $BCOND $SPECFILE 2>&1 + ;; + rpmbuild ) + rpmbuild --nodigest --nosignature --define 'prep %dump' $BCOND $SPECFILE 2>&1 + ;; + esac` +} + +rpm_dump () { + if [ -z "$rpm_dump_cache" ] ; then + echo "internal error: cache_rpm_dump not called!" 1>&2 + fi + echo "$rpm_dump_cache" +} + parse_spec() { if [ -n "$DEBUG" ]; then @@ -187,14 +252,17 @@ parse_spec() fi cd $SPECS_DIR + + cache_rpm_dump + if [ "$NOSRCS" != "yes" ]; then - SOURCES="`$RPMBUILD -bs $BCOND --define 'prep %dump' $SPECFILE 2>&1 | awk '/SOURCEURL[0-9]+/ {print $3}'`" + SOURCES="`rpm_dump | awk '/SOURCEURL[0-9]+/ {print $3}'`" fi - if ($RPMBUILD -bs $BCOND --define 'prep %dump' $SPECFILE 2>&1 | grep -qEi ":.*nosource.*1"); then + if (rpm_dump | grep -qEi ":.*nosource.*1"); then FAIL_IF_NO_SOURCES="no" fi - PATCHES="`$RPMBUILD -bs $BCOND --define 'prep %dump' $SPECFILE 2>&1 | awk '/PATCHURL[0-9]+/ {print $3}'`" + PATCHES="`rpm_dump | awk '/PATCHURL[0-9]+/ {print $3}'`" ICONS="`awk '/^Icon:/ {print $2}' ${SPECFILE}`" PACKAGE_NAME="`$RPM -q --qf '%{NAME}\n' --specfile ${SPECFILE} 2> /dev/null | head -1`" PACKAGE_VERSION="`$RPM -q --qf '%{VERSION}\n' --specfile ${SPECFILE} 2> /dev/null| head -1`" @@ -229,15 +297,19 @@ Exit_error() case "$1" in "err_no_spec_in_cmdl" ) + remove_build_requires 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."; exit 3 ;; "err_no_source_in_repo" ) + remove_build_requires 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})"; exit 5 ;; esac @@ -296,7 +368,7 @@ get_spec() result=$? [ -n "$output" ] && echo "$output" if [ "$result" -ne "0" ]; then - if (echo "$output" | grep -qE "(Cannot connect to|connect to .* failed|Connection reset by peer|Connection timed out)") && [ "$retries_counter" -le "$CVS_RETRIES" ]; then + if (echo "$output" | grep -qE "(Cannot connect to|connect to .* failed|Connection reset by peer|Connection timed out|Unknown host)") && [ "$retries_counter" -le "$CVS_RETRIES" ]; then echo "Trying again [$SPECFILE]... ($retries_counter)" sleep 2 continue @@ -340,7 +412,7 @@ find_mirror(){ src_no () { cd $SPECS_DIR - $RPMBUILD -bs $BCOND --define 'prep %dump' $SPECFILE 2>&1 | \ + rpm_dump | \ grep "SOURCEURL[0-9]*[ ]*$1""[ ]*$" | \ sed -e 's/.*SOURCEURL\([0-9][0-9]*\).*/\1/' | \ head -1 | xargs @@ -372,7 +444,7 @@ src_md5 () distfiles_url () { - echo "$DISTFILES_SERVER/by-md5/$(src_md5 "$1" | sed -e 's|^\(.\)\(.\)|\1/\2/&|')/$(basename "$1")" + echo "$PROTOCOL$DISTFILES_SERVER/by-md5/$(src_md5 "$1" | sed -e 's|^\(.\)\(.\)|\1/\2/&|')/$(basename "$1")" } good_md5 () @@ -414,6 +486,15 @@ get_files() fi fi for i in $GET_FILES; do + if [ -n "$UPDATE5" ]; then + if [ -n "$ADD5" ]; then + [ `nourl $i` = "$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 if [ ! -f `nourl $i` ] || [ $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" @@ -426,20 +507,24 @@ get_files() fi target=$(nourl "$i") url=$(distfiles_url "$i") - if [ `echo $url | grep -E '^(\.|/)'` ] ; then + if [ `echo $url | grep -E '^(\.|/)'` ]; then ${GETLOCAL} $url $target else - if [ -z "$NOMIRRORS" ] ; then + FROM_DISTFILES=1 + if [ -z "$NOMIRRORS" ]; then url="`find_mirror "$url"`" fi ${GETURI} -O "$target" "$url" || \ if [ `echo $url | grep -E 'ftp://'` ]; then ${GETURI2} -O "$target" "$url" fi - test -s "$target" || rm -f "$target" + if ! test -s "$target"; then + rm -f "$target" + FROM_DISTFILES=0 + fi fi - elif [ -z "$(src_md5 "$i")" ] && \ - ( [ -z "$NOCVS" ] || echo $i | grep -qvE '(ftp|http|https)://' ); then + elif [ -z "$(src_md5 "$i")" -a "$NOCVS" != "yes" ]; then + # ( echo $i | grep -qvE '(ftp|http|https)://' ); -- if CVS should be used, but URLs preferred result=1 retries_counter=0 while [ "$result" != "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; do @@ -447,7 +532,7 @@ get_files() output=$(LC_ALL=C cvs $OPTIONS `nourl $i` 2>&1) result=$? [ -n "$output" ] && echo "$output" - 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 + if (echo "$output" | grep -qE "(Cannot connect to|connect to .* failed|Connection reset by peer|Connection timed out|Unknown host)") && [ "$result" -ne "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; then echo "Trying again [`nourl $i`]... ($retries_counter)" sleep 2 continue @@ -458,7 +543,7 @@ get_files() fi if [ -z "$NOURLS" ] && [ ! -f "`nourl $i`" -o -n "$UPDATE" ] && [ `echo $i | grep -E 'ftp://|http://|https://'` ]; then - if [ -z "$NOMIRRORS" ] ; then + if [ -z "$NOMIRRORS" ]; then im="`find_mirror "$i"`" else im="$i" @@ -487,6 +572,21 @@ get_files() $SPECS_DIR/$SPECFILE fi + if good_md5 "$i"; then + : + elif [ "$FROM_DISTFILES" = 1 ]; then + # wrong md5 from distfiles: remove the file and try again + # but only once ... + echo "MD5 sum mismatch. Trying full fetch." + FROM_DISTFILES=2 + rm -f $target + ${GETURI} -O "$target" "$url" || \ + if [ `echo $url | grep -E 'ftp://'` ]; then + ${GETURI2} -O "$target" "$url" + fi + test -s "$target" || rm -f "$target" + fi + if good_md5 "$i"; then : else @@ -516,9 +616,16 @@ tag_files() fi if [ -n "$1$2$3$4$5$6$7$8$9${10}" ]; then - echo $PACKAGE_VERSION - echo $PACKAGE_RELEASE - TAGVER=$PACKAGE_NAME-`echo $PACKAGE_VERSION | sed -e "s/\./\_/g" -e "s/@/#/g"`-`echo $PACKAGE_RELEASE | sed -e "s/\./\_/g" -e "s/@/#/g"` + echo "Version: $PACKAGE_VERSION" + echo "Release: $PACKAGE_RELEASE" + # Check whether first character of PACKAGE_NAME is legal for tag name + if [ -z "${PACKAGE_NAME##[_0-9]*}" -a -z "$TAG_PREFIX" ]; then + TAG_PREFIX=tag_ + fi + TAGVER=$TAG_PREFIX$PACKAGE_NAME-`echo $PACKAGE_VERSION | sed -e "s/\./\_/g" -e "s/@/#/g"`-`echo $PACKAGE_RELEASE | sed -e "s/\./\_/g" -e "s/@/#/g"` + # Remove #kernel.version_release from TAGVER because tagging sources + # could occur with different kernel-headers than kernel-headers used at build time. + TAGVER=$(echo "$TAGVER" | sed -e 's/#.*//g') if [ "$TAG_VERSION" = "yes" ]; then echo "CVS tag: $TAGVER" fi @@ -533,7 +640,9 @@ tag_files() cd $SOURCE_DIR for i in $TAG_FILES; do - if [ -f `nourl $i` ]; then + # don't tag non cvs files (ie. stored on distfiles) + [ "`nourl $i`" != "$i" ] && continue + if [ -f "`nourl $i`" ]; then if [ "$TAG_VERSION" = "yes" ]; then cvs $OPTIONS $TAGVER `nourl $i` fi @@ -604,7 +713,7 @@ build_package() if [ -n "$TRY_UPGRADE" ]; then - if [ -n "FLOAT_VERSION" ]; then + if [ -n "$FLOAT_VERSION" ]; then TNOTIFY=`./pldnotify.awk $SPECFILE -n` else TNOTIFY=`./pldnotify.awk $SPECFILE` @@ -646,17 +755,12 @@ build_package() BUILD_SWITCH="-bs --nodeps" ;; esac if [ -n "$LOGFILE" ]; then - if [ -n "$CVSTAG" ]; then - LTAG="r_`echo $CVSTAG|sed -e 's/\./_/g'`_" - else - LTAG="" - fi LOG=`eval echo $LOGFILE` if [ -n "$LASTLOG_FILE" ]; then echo "LASTLOG=$LOG" > $LASTLOG_FILE fi RES_FILE=~/tmp/$RPMBUILD-exit-status.$RANDOM - (nice -n ${DEF_NICE_LEVEL} time $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $BCOND $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG + (time nice -n ${DEF_NICE_LEVEL} $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $BCOND $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG RETVAL=`cat $RES_FILE` rm $RES_FILE if [ -n "$LOGDIROK" ] && [ -n "$LOGDIRFAIL" ]; then @@ -688,6 +792,178 @@ nourl() { echo "$@" | sed 's#\<\(ftp\|http\|https\|cvs\|svn\)://[^ ]*/##g' } + +set_bconds_values() +{ +AVAIL_BCONDS_WITHOUT="" +AVAIL_BCONDS_WITH="" +for opt in `$RPMBUILD --bcond $SPECFILE |grep ^_without_` +do + AVAIL_BCOND_WITHOUT=`echo $opt|sed -e "s/^_without_//g"` + if [ "`echo $BCOND|grep -- "--without $AVAIL_BCOND_WITHOUT"`" != "" ];then + AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT <$AVAIL_BCOND_WITHOUT>" + else + AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT $AVAIL_BCOND_WITHOUT" + fi +done + +for opt in `$RPMBUILD --bcond $SPECFILE |grep ^_with_` +do + AVAIL_BCOND_WITH=`echo $opt|sed -e "s/^_with_//g"` + if [ "`echo $BCOND|grep -- "--with $AVAIL_BCOND_WITH"`" != "" ];then + AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$AVAIL_BCOND_WITH>" + else + AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH $AVAIL_BCOND_WITH" + fi +done +} + +remove_build_requires() +{ + if [ "$INSTALLED_PACKAGES" != "" ]; then + case "$REMOVE_BUILD_REQUIRES" in + "force") + poldek --noask -e $INSTALLED_PACKAGES + ;; + "nice") + poldek --ask -e $INSTALLED_PACKAGES + ;; + *) + echo You may want to manually remove following BuildRequires fetched: + echo $INSTALLED_PACKAGES + echo Try poldek -e \`cat `pwd`/.${SPECFILE}_INSTALLED_PACKAGES\` + ;; + esac + fi +} + +display_bconds() +{ +if [ "$AVAIL_BCONDS_WITH" != "" ] || [ "$AVAIL_BCONDS_WITHOUT" != "" ]; then + echo -ne "We are going to build $SPECFILE with the following conditional flags:\n" + if [ "$BCOND" != "" ]; then + echo -ne "$BCOND" + else + echo -ne "No --with || --without conditions passed to $0!" + fi + echo -ne "\n\nfrom available:\n\n" + echo -ne "--with :\t$AVAIL_BCONDS_WITH\n--without:\t$AVAIL_BCONDS_WITHOUT\n\n" +fi +} + +fetch_build_requires() +{ +if [ "$FETCH_BUILD_REQUIRES" = "yes" ]; then + echo -ne "\nAll packages installed by fetch_build_requires() are written to:\n" + echo -ne "`pwd`/.${SPECFILE}_INSTALLED_PACKAGES\n" + echo -ne "\nIf anything fails, you may get rid of them by executing:\n" + echo "poldek -e \`cat `pwd`/.${SPECFILE}_INSTALLED_PACKAGES\`\n\n" + echo > `pwd`/.${SPECFILE}_INSTALLED_PACKAGES + for package_item in `cat $SPECFILE|grep -B100000 ^%changelog|grep -v ^#|grep BuildRequires|grep -v ^-|sed -e "s/^.*BuildRequires://g"|awk '{print $1}'|sed -e s,\(.*\),,g -e s,%{,,g` + do + package_item=`echo $package_item|sed -e s,rpmbuild,rpm-build,g` + GO="yes" + package=`basename "$package_item"|sed -e "s/}$//g"` + COND_ARCH_TST="`cat $SPECFILE|grep -B1 BuildRequires|grep -B1 $package|grep ifarch|sed -e "s/^.*ifarch//g"`" + mach=`uname -m` + + COND_TST=`cat $SPECFILE|grep BuildRequires|grep "$package"` + if [ "`echo $COND_TST|grep '^BuildRequires:'`" != "" ]; then + if [ "$COND_ARCH_TST" != "" ] && [ "`echo $COND_ARCH_TST|sed -e "s/i.86/ix86/g"`" != "`echo $mach|sed -e "s/i.86/ix86/g"`" ]; then + GO="yes" + fi + # bcond: + else + COND_NAME=`echo $COND_TST|sed -e s,:BuildRequires:.*$,,g` + GO="" + # %{without} + if [ "`echo $COND_TST|grep 'without_'`" != "" ]; then + COND_NAME=`echo $COND_NAME|sed -e s,^.*_without_,,g` + if [ "`echo $COND_TST|grep !`" != "" ]; then + COND_STATE="with" + else + COND_STATE="wout" + fi + if [ "`echo $AVAIL_BCONDS_WITHOUT|grep "<$COND_NAME>"`" != "" ]; then + COND_ARGV="wout" + else + COND_ARGV="with" + fi + # %{with} + elif [ "`echo $COND_TST|grep 'with_'`" != "" ]; then + COND_NAME=`echo $COND_NAME|sed -e s,^.*_with_,,g` + if [ "`echo $COND_TST|grep !`" != "" ]; then + COND_STATE="wout" + else + COND_STATE="with" + fi + if [ "`echo $AVAIL_BCONDS_WITH|grep "<$COND_NAME>"`" != "" ]; then + COND_ARGV="with" + else + COND_ARGV="wout" + fi + fi + RESULT="${COND_STATE}-${COND_ARGV}" + case "$RESULT" in + "with-wout" | "wout-with" ) + GO="" + ;; + "wout-wout" | "with-with" ) + GO="yes" + ;; + * ) + echo "Action '$RESULT' was not defined for package '$package_item'" + ;; + esac + + fi + + if [ "$GO" = "yes" ]; then + if [ "`rpm -q $package|sed -e "s/$package.*/$package/g"`" != "$package" ]; then + echo "Testing if $package has subrequirements..." + poldek -t -i $package --dumpn=".$package-req.txt" + for package_name in `cat ".$package-req.txt"|grep -v ^#` + do + if [ "$package_name" = "$package" ]; then + echo -ne "Installing BuildRequired package:\t$package_name\n" + poldek -i $package_name + else + echo -ne "Installing (sub)Required package:\t$package_name\n" + poldek -i $package_name + fi + case $? in + 1) + echo -ne "Package installation failed:\t$package_name\n" + # + # No i tutaj bym chcia³ zrobiæ sztuczn± inteligencjê, która spróbuje tego + # pakieta zbudowaæ. + # + NOT_INSTALLED_PACKAGES="$NOT_INSTALLED_PACKAGES $package_name" + ;; + 0) + INSTALLED_PACKAGES="$package_name $INSTALLED_PACKAGES" + echo $package_name >> `pwd`/.${SPECFILE}_INSTALLED_PACKAGES + ;; + esac + done + rm ".$package-req.txt" + else + echo "Package $package is already installed. BuildRequirement satisfied." + fi + fi + done + if [ "$NOT_INSTALLED_PACKAGES" != "" ]; then + echo "Nie uda³o siê zainstalowaæ nastêpuj±cych pakietów i ich zale¿no¶ci:" + for pkg in "$NOT_INSTALLED_PACKAGES" + do + echo $pkg + done + remove_build_requires + exit 1 + fi +fi +} + #--------------------------------------------- # main() @@ -701,12 +977,14 @@ while test $# -gt 0 ; do -5 | --update-md5 ) COMMAND="get"; NODIST="yes" + NOCVSSPEC="yes" UPDATE5="yes" shift ;; -a5 | --add-md5 ) COMMAND="get"; NODIST="yes" NOCVS="yes" + NOCVSSPEC="yes" UPDATE5="yes" ADD5="yes" shift ;; @@ -732,6 +1010,8 @@ while test $# -gt 0 ; do COMMAND="get"; shift ;; -h | --help ) COMMAND="usage"; shift ;; + --http ) + PROTOCOL="http"; shift ;; -l | --logtofile ) shift; LOGFILE="${1}"; shift ;; -ni| --nice ) @@ -755,13 +1035,36 @@ while test $# -gt 0 ; do --opts ) shift; RPMOPTS="${1}"; shift ;; --with | --without ) - BCOND="$BCOND $1 $2" ; shift 2 ;; + case $GROUP_BCONDS in + "yes") + COND=${1} + shift + while [ "`echo ${1}|grep ^-`" = "" ] && [ "`echo ${1}|grep spec`" = "" ] + do + BCOND="$BCOND $COND $1" + shift + done;; + "no") + BCOND="$BCOND $1 $2" ; shift 2 ;; + esac + ;; -q | --quiet ) QUIET="--quiet"; shift ;; --date ) CVSDATE="${2}"; shift 2 ;; -r | --cvstag ) shift; CVSTAG="${1}"; shift ;; + -R | --fetch-build-requires) + FETCH_BUILD_REQUIRES="yes" + #UPDATE_POLDEK_INDEXES="yes" + NOT_INSTALLED_PACKAGES= + shift ;; + -RB | --remove-build-requires) + REMOVE_BUILD_REQUIRES="nice" + shift ;; + -FRB | --force-remove-build-requires) + REMOVE_BUILD_REQUIRES="force" + shift ;; -Tvs | --tag-version-stable ) COMMAND="tag"; TAG="STABLE" @@ -787,6 +1090,9 @@ while test $# -gt 0 ; do TAG="" TAG_VERSION="yes" shift;; + -Tp | --tag-prefix ) + TAG_PREFIX="$2" + shift 2;; -T | --tag ) COMMAND="tag"; shift @@ -794,10 +1100,14 @@ while test $# -gt 0 ; do TAG_VERSION="no" shift;; -U | --update ) + COMMAND="get" UPDATE="yes" + NOCVSSPEC="yes" NODIST="yes" UPDATE5="yes" - COMMAND="get" + shift ;; + -Upi | --update-poldek-indexes ) + UPDATE_POLDEK_INDEXES="yes" shift ;; -u | --try-upgrade ) TRY_UPGRADE="1"; shift ;; @@ -812,6 +1122,10 @@ while test $# -gt 0 ; do shift 2 RPMOPTS="${RPMOPTS} --define \"${MACRO} ${VALUE}\"" ;; + --nodeps) + shift + RPMOPTS="${RPMOPTS} --nodeps" + ;; * ) SPECFILE="`basename ${1} .spec`.spec"; shift ;; esac @@ -827,6 +1141,9 @@ case "$COMMAND" in init_builder; if [ -n "$SPECFILE" ]; then get_spec; + set_bconds_values; + display_bconds; + fetch_build_requires; parse_spec; if [ -n "$FAIL_IF_CHANGED_BUT_NOT_BUMPED" ]; then @@ -848,6 +1165,11 @@ case "$COMMAND" in fi get_files "$SOURCES $PATCHES"; build_package; + if [ "$UPDATE_POLDEK_INDEXES" = "yes" ]; then + poldek --sn ${POLDEK_SOURCE} --mkidx="${POLDEK_INDEX_DIR}/packages.dir.gz" + poldek --sn ${POLDEK_SOURCE} --up + fi + remove_build_requires; else Exit_error err_no_spec_in_cmdl; fi @@ -893,6 +1215,13 @@ case "$COMMAND" in get_files $ICONS parse_spec; fi + # don't fetch sources from remote locations + new_SOURCES="" + for file in $SOURCES; do + [ "`nourl $file`" != "$file" ] && continue + new_SOURCES="$new_SOURCES $file" + done + SOURCES="$new_SOURCES" get_files $SOURCES $PATCHES; tag_files "$SOURCES $PATCHES $ICONS"; else @@ -907,5 +1236,4 @@ case "$COMMAND" in "version" ) echo "$VERSION";; esac - cd $__PWD