]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - builder.sh
- up
[packages/rpm-build-tools.git] / builder.sh
index 64e9d5148d4ea09f42196f7fbc2f796c3174c77c..c3c6c71b095e4f5b4ef487c8e70d51faaa61d506 100644 (file)
 #      100 - Unknown error (should not happen)
 
 # Notes (todo/bugs):
-# - builder -u fetches current version first (well that's okay, how you compare versions if you have no old spec?)
 # - when Icon: field is present, -5 and -a5 doesn't work
 # - builder -R skips installing BR if spec is not present before builder invocation (need to run builder twice)
 # - does not respect NoSource: X, and tries to cvs up such files [ example: VirtualBox-bin.spec and its Source0 ]
 # TODO:
 # - ability to do ./builder -bb foo.spec foo2.spec foo3.spec
-
-RCSID='$Id$'
-r=${RCSID#* * }
-rev=${r%% *}
+# - funny bug, if source-md5 is set then builder will download from distfiles even if there is no url present:
+#   Source10:  forwardfix.pl
+#   # Source10-md5:    8bf85f7368933a4e0cb4f875bac28733
+# - builder --help:
+#      basename: missing operand
+#      Try `basename --help' for more information.
+#      -- and the normal usage info --
+
+PROGRAM=${0##*/}
+APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
+RCSID='$Id$' r=${RCSID#* * } rev=${r%% *}
 VERSION="v0.35/$rev"
 VERSIONSTRING="\
 Build package utility from PLD Linux CVS repository
-$VERSION (C) 1999-2009 Free Penguins".
+$VERSION (C) 1999-2010 Free Penguins".
 
 PATH="/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin"
 
+# required rpm-build-macros
+RPM_MACROS_VER=1.534
+
 COMMAND="build"
 TARGET=""
 
@@ -87,7 +96,7 @@ BCOND=""
 GROUP_BCONDS="no"
 
 # create symlinks for tools in PACKAGE_DIR, see get_spec()
-SYMLINK_TOOLS="yes"
+SYMLINK_TOOLS="no"
 
 PATCHES=""
 SOURCES=""
@@ -202,6 +211,15 @@ else
        RPMBUILD="rpmbuild"
 fi
 
+#
+# sanity checks
+#
+if [ -d $HOME/rpm/SOURCES ]; then
+       echo "ERROR: ~/rpm/{SPECS,SOURCES} structure is obsolete" >&2
+       echo "ERROR: get rid of your ~/rpm/SOURCES" >&2
+       exit 1
+fi
+
 #
 # are we using cvs-nserver ?
 #
@@ -265,8 +283,8 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b|
                       them into src.rpm,
 --short-circuit     - short-circuit build
 -B, --branch        - add branch
--c, --clean         - clean all temporarily created files (in BUILD, SOURCES,
-                      SPECS and \$RPM_BUILD_ROOT and CVS/Entries) after rpmbuild commands.
+-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.
@@ -345,6 +363,8 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b|
 -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/
+--upgrade-version   - upgrade to specified version in try-upgrade
 --use-greed-sources
                     - try download source from tag head if don't find it in
                       current tag
@@ -358,6 +378,7 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b|
 --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>/
                       %_without_<feature> macro switch.  You may now use
@@ -375,20 +396,20 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b|
 depspecname() {
        local package="$1"
 
-       package=$(echo "$package" | sed -e '/perl(.*)/{s,perl(\(.*\)),perl-\1,;s,::,-,g}')
+       package=$(echo "$package" | sed -e '/perl(.*)/{s,perl(\(.*\)),perl-\1,;s,::,-,g};' -e 's/-\(devel\|static\)$//' )
        echo "$package"
 }
 
 update_shell_title() {
        [ -t 1 ] || return
        local len=${COLUMNS:-80}
-       local msg=$(echo "$*" | cut -c-$len)
+       local msg="$(echo "$*" | cut -c-$len)"
 
        if [ -n "$BE_VERBOSE" ]; then
                echo >&2 "$(date +%s.%N) $*"
        fi
 
-       if [ "x$TITLECHANGE" == "xyes" -o "x$TITLECHANGE" == "x" ]; then
+       if [ "x$TITLECHANGE" = "xyes" -o "x$TITLECHANGE" = "x" ]; then
                local pkg
                if [ -n "$PACKAGE_NAME" ]; then
                        pkg=${PACKAGE_NAME}-${PACKAGE_VERSION}-${PACKAGE_RELEASE}
@@ -438,16 +459,20 @@ minirpm() {
 %x8664 x86_64 amd64 ia32e
 %alt_kernel %{nil}
 %_alt_kernel %{nil}
-%requires_releq_kernel_up %{nil}
-%requires_releq_kernel_smp %{nil}
-%requires_releq_kernel %{nil}
+%bootstrap_release() %{1}
+%requires_releq_kernel_up(s:n:) %{nil}
+%requires_releq_kernel_smp(s:n:) %{nil}
+%requires_releq_kernel(s:n:) %{nil}
 %requires_releq() %{nil}
 %pyrequires_eq() %{nil}
 %requires_eq() %{nil}
 %requires_eq_to() %{nil}
-%releq_kernel_up ERROR
-%releq_kernel_smp ERROR
-%releq_kernel ERROR
+%requires_ge() %{nil}
+%requires_ge_to() %{nil}
+%requires_ge() %{nil}
+%releq_kernel_up(n:) ERROR
+%releq_kernel_smp(n:) ERROR
+%releq_kernel(n:) ERROR
 %kgcc_package ERROR
 %_fontsdir ERROR
 %ruby_version ERROR
@@ -480,6 +505,9 @@ minirpm() {
 %remove_etc_shells(p) %{p:<lua>}
 %lua_add_etc_shells()  %{nil}
 %lua_remove_etc_shells() %{nil}
+%required_jdk %{nil}
+%buildrequires_jdk %{nil}
+%pear_package_print_optionalpackages %{nil}
 EOF
        if [ "$NOINIT" = "yes" ] ; then
                cat >> $BUILDER_MACROS <<'EOF'
@@ -542,7 +570,7 @@ rpm_dump() {
 
 get_icons() {
        update_shell_title "get icons"
-       ICONS=$(awk '/^Icon:/ {print $2}' ${ASSUMED_NAME}/${SPECFILE})
+       ICONS=$(awk '/^Icon:/ {print $2}' $PACKAGE_DIR/${SPECFILE})
        if [ -z "$ICONS" ]; then
                return
        fi
@@ -662,8 +690,19 @@ init_builder() {
 
        if [ "$NOINIT" != "yes" ] ; then
                TOP_DIR=$(eval $RPM $RPMOPTS --eval '%{_topdir}')
-               REPO_DIR=$TOP_DIR/packages
-               PACKAGE_DIR=$TOP_DIR/packages/$ASSUMED_NAME
+
+               local macros_ver=$(rpm -E %?rpm_build_macros)
+               if [ -z "$macros_ver" ]; then
+                       REPO_DIR=$TOP_DIR/packages
+                       PACKAGE_DIR=$TOP_DIR/packages/$ASSUMED_NAME
+               else
+                       if awk "BEGIN{exit($macros_ver>=$RPM_MACROS_VER)}"; then
+                               echo >&2 "builder requires rpm-build-macros >= $RPM_MACROS_VER"
+                               exit 1
+                       fi
+                       REPO_DIR=$TOP_DIR
+                       PACKAGE_DIR=$REPO_DIR/$ASSUMED_NAME
+               fi
        else
                REPO_DIR="."
                PACKAGE_DIR="."
@@ -683,29 +722,45 @@ get_spec() {
 
        cd "$REPO_DIR"
        if [ ! -f "$ASSUMED_NAME/$SPECFILE" ]; then
-               SPECFILE="$(basename $SPECFILE .spec).spec"
+               # XXX: still needed?
+               SPECFILE=$(basename $SPECFILE)
        fi
-       if [ "$NOCVSSPEC" != "yes" ]; then
 
+       if [ "$NOCVSSPEC" != "yes" ]; then
                if [ ! -s CVS/Root -a "$NOCVSSPEC" != "yes" ]; then
                        echo "Warning: No CVS access defined - using local .spec file"
                        NOCVSSPEC="yes"
                fi
 
-               if [ -d "$ASSUMED_NAME" ]; then
+               if [ -d "$ASSUMED_NAME" -a -s "$ASSUMED_NAME/CVS/Root" ]; then
                        cvsup "$ASSUMED_NAME/$SPECFILE" || Exit_error err_no_spec_in_repo
                else
-                       cvsup -c -d $ASSUMED_NAME "packages/$ASSUMED_NAME/$SPECFILE" || Exit_error err_no_spec_in_repo
+                       cvsup -c -d $ASSUMED_NAME "packages/$ASSUMED_NAME/$SPECFILE" || {
+                               # softfail if new package, i.e not yet added to cvs
+                               [ ! -f "$ASSUMED_NAME/$SPECFILE" ] && Exit_error err_no_spec_in_repo
+                               echo "Warning: package not in CVS - assuming new package"
+                               NOCVSSPEC="yes"
+                               NOCVS="yes"
+                       }
 
                        # remove Entries.Static -- so 'cvs up' would update all files in a repo
-                       rm "$ASSUMED_NAME/CVS/Entries.Static"
+                       rm -f "$ASSUMED_NAME/CVS/Entries.Static"
                        cvsignore_df .cvsignore
 
+                       # add default log format to .cvsignore if it is relative to package dir
+                       if [ -n "$LOGFILE" -a "$LOGFILE" = "${LOGFILE##*/}" ]; then
+                               # substitute known "macros" to glob
+                               local logfile=$(echo "$LOGFILE" | sed -e 's,\$\(PACKAGE_NAME\|DATE\),*,g')
+                               if [ "$logfile" ]; then
+                                       cvsignore_df "$logfile"
+                               fi
+                       fi
+
                        # create symlinks for tools
                        if [ "$SYMLINK_TOOLS" != "no" ]; then
-                               for a in dropin md5 adapter builder {relup,compile,repackage,rsync}.sh; do
+                               for a in dropin md5 adapter builder {relup,compile,repackage,rsync,pearize}.sh pldnotify.awk; do
                                        [ -f $a ] || continue
-                                       ln -s ../$a $ASSUMED_NAME
+                                       ln -sf ../$a $ASSUMED_NAME
                                        cvsignore_df $a
                                done
                        fi
@@ -736,7 +791,7 @@ find_mirror() {
        local origin mirror name rest ol prefix
        while read origin mirror name rest; do
                # skip comments and empty lines
-               if [ -z "$origin" ] || [[ $origin == \#* ]]; then
+               if [ -z "$origin" ] || [ "${origin#\#}" != "$origin" ]; then
                        continue
                fi
                ol=$(echo -n "$origin" | wc -c)
@@ -786,7 +841,7 @@ src_md5() {
                fi
        fi
 
-       source_md5=`grep -i "#[         ]*Source$no-md5[        ]*:" $SPECFILE | sed -e 's/.*://'`
+       source_md5=`grep -i "^#[        ]*Source$no-md5[        ]*:" $SPECFILE | sed -e 's/.*://'`
        if [ -n "$source_md5" ]; then
                echo $source_md5
        else
@@ -796,7 +851,7 @@ src_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/.*://'`
+                       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
@@ -960,18 +1015,27 @@ update_md5() {
 }
 
 check_md5() {
+       local bad
        [ "$NO5" = "yes" ] && return
 
        update_shell_title "check md5"
 
        for i in "$@"; do
-               if good_md5 "$i" && good_size "$i"; then
-                       continue
+               bad=0
+               if ! good_md5 "$i"; then
+                       echo -n "MD5 sum mismatch."
+                       bad=1
+               fi
+               if ! good_size "$i"; then
+                       echo -n "0 sized file."
+                       bad=1
                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
+               if [ $bad -eq 1 ]; then
+                       echo " 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
 }
 
@@ -1073,6 +1137,7 @@ get_files() {
                                                                update_shell_title "${GETURI2%% *}: $url_attic"
                                                                ${GETURI2} ${OUTFILEOPT} "$target" "$url_attic"
                                                        fi
+                                                       test -s "$target" || rm -f "$target"
                                                fi
                                        fi
 
@@ -1104,6 +1169,7 @@ get_files() {
                                                update_shell_title "${GETURI2%% *}: $im"
                                                ${GETURI2} "$im" ${OUTFILEOPT} "$target"
                                        fi
+                                       test -s "$target" || rm -f "$target"
                                fi
 
                                if [ "$cvsup" = 1 ]; then
@@ -1345,41 +1411,89 @@ check_buildarch() {
        fi
 }
 
-build_package() {
-       update_shell_title "build_package"
-       if [ -n "$DEBUG" ]; then
-               set -x
-               set -v
-       fi
+# from relup.sh
+set_release() {
+       local specfile="$1"
+       local rel="$2"
+       local newrel="$3"
+       sed -i -e "
+               s/^\(%define[ \t]\+_\?rel[ \t]\+\)$rel\$/\1$newrel/
+               s/^\(Release:[ \t]\+\)$rel\$/\1$newrel/
+       " $specfile
+}
 
-       cd "$PACKAGE_DIR"
+set_version() {
+       local specfile="$1"
+       local ver="$2" subver=$ver
+       local newver="$3" newsubver=$newver
+
+       # try handling subver, everything that's not numeric-dotted in version
+       if grep -Eq '%define\s+subver' $specfile; then
+               subver=$(echo "$ver" | sed -re 's,^[0-9.]+,,')
+               ver=${ver%$subver}
+               newsubver=$(echo "$newver" | sed -re 's,^[0-9.]+,,')
+               newver=${newver%$newsubver}
+       fi
+       sed -i -e "
+               s/^\(%define[ \t]\+_\?ver[ \t]\+\)$ver\$/\1$newver/
+               s/^\(%define[ \t]\+subver[ \t]\+\)$subver\$/\1$newsubver/
+               s/^\(Version:[ \t]\+\)$ver\$/\1$newver/
+       " $specfile
+}
 
+try_upgrade() {
        if [ -n "$TRY_UPGRADE" ]; then
+               local TNOTIFY TNEWVER TOLDVER
                update_shell_title "build_package: try_upgrade"
-               if [ -n "$FLOAT_VERSION" ]; then
-                       TNOTIFY=$(./pldnotify.awk $SPECFILE -n) || exit 1
+
+               cd "$PACKAGE_DIR"
+               
+               if [ "$UPGRADE_VERSION" ]; then
+                       TNEWVER=$UPGRADE_VERSION
                else
-                       TNOTIFY=$(./pldnotify.awk $SPECFILE) || exit 1
-               fi
+                       if [ -n "$FLOAT_VERSION" ]; then
+                               TNOTIFY=$($APPDIR/pldnotify.awk ${BE_VERBOSE:+-vDEBUG=1} $SPECFILE -n) || exit 1
+                       else
+                               TNOTIFY=$($APPDIR/pldnotify.awk ${BE_VERBOSE:+-vDEBUG=1} $SPECFILE) || exit 1
+                       fi
+
+                       # pldnotify.awk does not set exit codes, but it has match for ERROR
+                       # in output which means so.
+                       if [[ "$TNOTIFY" = *ERROR* ]]; then
+                               echo >&2 "$TNOTIFY"
+                               exit 1
+                       fi
 
-               TNEWVER=$(echo $TNOTIFY | awk '{ match($4,/\[NEW\]/); print $5 }')
+                       TNEWVER=$(echo $TNOTIFY | awk '{ match($4,/\[NEW\]/); print $5 }')
+               fi
 
                if [ -n "$TNEWVER" ]; then
                        TOLDVER=`echo $TNOTIFY | awk '{ print $3; }'`
-                       echo "New version found, updating spec file to version " $TNEWVER
+                       echo "New version found, updating spec file from $TOLDVER to version $TNEWVER"
                        if [ "$REVERT_BROKEN_UPGRADE" = "yes" ]; then
                                cp -f $SPECFILE $SPECFILE.bak
                        fi
                        chmod +w $SPECFILE
-                       eval "perl -pi -e 's/Version:\t"$TOLDVER"/Version:\t"$TNEWVER"/gs' $SPECFILE"
-                       eval "perl -pi -e 's/Release:\t[1-9]{0,4}/Release:\t0.1/' $SPECFILE"
+                       set_release $SPECFILE $PACKAGE_RELEASE 1
+                       set_version $SPECFILE $PACKAGE_VERSION $TNEWVER
                        parse_spec
-                       NODIST="yes" get_files $SOURCES $PATCHES
-                       update_md5 $SOURCES
-
-                       unset TOLDVER TNEWVER TNOTIFY
+                       if [ "$PACKAGE_VERSION" != "$TNEWVER" ]; then
+                               echo >&2 "Upgrading version failed, you need to update spec yourself"
+                               exit 1
+                       fi
+                       return 1
                fi
        fi
+       return 0
+}
+
+build_package() {
+       update_shell_title "build_package"
+       if [ -n "$DEBUG" ]; then
+               set -x
+               set -v
+       fi
+
        cd "$PACKAGE_DIR"
 
        case "$COMMAND" in
@@ -1429,10 +1543,12 @@ build_package() {
        fi
        if [ "$RETVAL" -ne "0" ]; then
                if [ -n "$TRY_UPGRADE" ]; then
-                       echo "\n!!! Package with new version cannot be built automagically\n"
+                       echo "\nUpgrade package to new version failed."
                        if [ "$REVERT_BROKEN_UPGRADE" = "yes" ]; then
+                               echo "Restoring old spec file."
                                mv -f $SPECFILE.bak $SPECFILE
                        fi
+                       echo ""
                fi
                Exit_error err_build_fail
        fi
@@ -1515,7 +1631,7 @@ set_bconds_values() {
        AVAIL_BCONDS_WITHOUT=""
        AVAIL_BCONDS_WITH=""
 
-       if egrep -q '^# *_with' ${SPECFILE}; then
+       if grep -Eq '^# *_with' ${SPECFILE}; then
                echo >&2 "ERROR: This spec has old style bconds."
                exit 1
        fi
@@ -1534,19 +1650,25 @@ set_bconds_values() {
                case "$opt" in
                without_*)
                        bcond=${opt#without_}
-                       if [[ "$BCOND" = *--without?${bcond}* ]]; then
+                       case "$BCOND" in
+                       *--without?${bcond}*)
                                AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT <$bcond>"
-                       else
+                               ;;
+                       *)
                                AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT $bcond"
-                       fi
+                               ;;
+                       esac
                        ;;
                with_*)
                        bcond=${opt#with_}
-                       if [[ "$BCOND" = *--with?${bcond}* ]]; then
+                       case "$BCOND" in
+                       *--with?${bcond}*)
                                AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$bcond>"
-                       else
+                               ;;
+                       *)
                                AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH $bcond"
-                       fi
+                               ;;
+                       esac
                        ;;
                *)
                        echo >&2 "ERROR: unexpected '$opt' in set_bconds_values"
@@ -1596,15 +1718,15 @@ spawn_sub_builder() {
        update_shell_title "spawn_sub_builder $package_name"
 
        sub_builder_opts=''
-       if [ "${FETCH_BUILD_REQUIRES}" == "yes" ]; then
+       if [ "${FETCH_BUILD_REQUIRES}" = "yes" ]; then
                sub_builder_opts="${sub_builder_opts} -R"
        fi
-       if [ "${REMOVE_BUILD_REQUIRES}" == "nice" ]; then
+       if [ "${REMOVE_BUILD_REQUIRES}" = "nice" ]; then
                sub_builder_opts="${sub_builder_opts} -RB"
-       elif [ "${REMOVE_BUILD_REQUIRES}" == "force" ]; then
+       elif [ "${REMOVE_BUILD_REQUIRES}" = "force" ]; then
                sub_builder_opts="${sub_builder_opts} -FRB"
        fi
-       if [ "${UPDATE_POLDEK_INDEXES}" == "yes" ]; then
+       if [ "${UPDATE_POLDEK_INDEXES}" = "yes" ]; then
                sub_builder_opts="${sub_builder_opts} -Upi"
        fi
 
@@ -1633,19 +1755,24 @@ remove_build_requires() {
 display_bconds() {
        if [ "$AVAIL_BCONDS_WITH" -o "$AVAIL_BCONDS_WITHOUT" ]; then
                if [ "$BCOND" ]; then
-                       echo -ne "\nBuilding $SPECFILE with the following conditional flags:\n"
-                       echo -ne "$BCOND"
+                       echo ""
+                       echo "Building $SPECFILE with the following conditional flags:"
+                       echo -n "$BCOND"
                else
-                       echo -ne "\nNo conditional flags passed"
+                       echo ""
+                       echo "No conditional flags passed"
                fi
-               echo -ne "\n\nfrom available:\n"
-               echo -ne "--with   :\t$AVAIL_BCONDS_WITH\n--without:\t$AVAIL_BCONDS_WITHOUT\n\n"
+               echo ""
+               echo "from available:"
+               echo "--with   :\t$AVAIL_BCONDS_WITH"
+               echo "--without:\t$AVAIL_BCONDS_WITHOUT"
+               echo ""
        fi
 }
 
 display_branches() {
        if [ "$NOCVSSPEC" != "yes" ]; then
-               echo -ne "Available branches: "
+               echo -n "Available branches: "
                $CVS_COMMAND status -v "${SPECFILE}" | awk '!/Sticky Tag:/ && /\(branch:/ { print $1 } ' | xargs
        fi
 }
@@ -1741,10 +1868,12 @@ fetch_build_requires()
        fi
 
                # XXX is this ugliest code written in human history still needed?
-               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 "All packages installed by fetch_build_requires() are written to:"
+               echo "`pwd`/.${SPECFILE}_INSTALLED_PACKAGES"
+               echo ""
+               echo "If anything fails, you may get rid of them by executing:"
+               echo "poldek -e \`cat `pwd`/.${SPECFILE}_INSTALLED_PACKAGES\`"
+               echo ""
                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,perl\(,perl-,g -e s,::,-,g -e s,\(.*\),,g -e s,%{,,g -e s,},,g|grep -v OpenGL-devel|sed -e s,sh-utils,coreutils,g -e s,fileutils,coreutils,g -e s,textutils,coreutils,g -e s,kgcc_package,gcc,g -e s,\),,g)
                do
@@ -1817,11 +1946,11 @@ fetch_build_requires()
                                                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"
+                                                               echo "Installing BuildRequired package:\t$package_name"
                                                                update_shell_title "Installing BuildRequired package: ${package_name}"
                                                                install_required_packages $package
                                                        else
-                                                               echo -ne "Installing (sub)Required package:\t$package_name\n"
+                                                               echo "Installing (sub)Required package:\t$package_name"
                                                                update_shell_title "Installing (sub)Required package: ${package_name}"
                                                                install_required_packages $package_name
                                                        fi
@@ -1832,7 +1961,7 @@ fetch_build_requires()
                                                                        ;;
                                                                *)
                                                                        echo "Attempting to run spawn sub - builder..."
-                                                                       echo -ne "Package installation failed:\t$package_name\n"
+                                                                       echo "Package installation failed:\t$package_name"
                                                                        run_sub_builder $package_name
                                                                        if [ $? -eq 0 ]; then
                                                                                install_required_packages $package_name
@@ -1852,7 +1981,7 @@ fetch_build_requires()
                                                rm -f ".$package-req.txt"
                                        else
                                                echo "Attempting to run spawn sub - builder..."
-                                               echo -ne "Package installation failed:\t$package\n"
+                                               echo "Package installation failed:\t$package"
                                                run_sub_builder $package
                                                if [ $? -eq 0 ]; then
                                                        install_required_packages $package
@@ -1884,13 +2013,23 @@ fetch_build_requires()
 }
 
 init_rpm_dir() {
-       TOP_DIR=$(eval $RPM $RPMOPTS --eval '%{_topdir}')
-       CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot"
-
-       echo "Initialising rpm directories to $TOP_DIR from $CVSROOT"
-       mkdir -p $TOP_DIR/{RPMS,BUILD,SRPMS}
-       cd $TOP_DIR
-       $CVS_COMMAND -d $CVSROOT co packages/{.cvsignore,rpm.groups,dropin,mirrors,md5,adapter{,.awk},fetchsrc_request,builder,{relup,compile,repackage}.sh}
+       local CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot"
+       local TOP_DIR=$(eval $RPM $RPMOPTS --eval '%{_topdir}')
+       local rpmdir=$(eval $RPM $RPMOPTS --eval '%{_rpmdir}')
+       local buildir=$(eval $RPM $RPMOPTS --eval '%{_builddir}')
+       local srpmdir=$(eval $RPM $RPMOPTS --eval '%{_srcrpmdir}')
+       local tmp
+
+       echo "Initializing rpm directories to $TOP_DIR from $CVSROOT"
+       mkdir -p $TOP_DIR $rpmdir $buildir $srpmdir
+
+       # need to checkout to tmp dir or we can't name our topdir
+       tmp=$(TMPDIR= TEMPDIR= mktemp -p $TOP_DIR -d) || exit 1
+       cd $tmp
+       $CVS_COMMAND -d $CVSROOT co packages/{.cvsignore,rpm.groups,dropin,mirrors,md5,adapter{,.awk},fetchsrc_request,builder,{relup,compile,repackage}.sh,ci,civim}
+       cd -
+       mv $tmp/packages/* $TOP_DIR
+       rm -rf $tmp
 
        init_builder
 
@@ -1898,11 +2037,11 @@ init_rpm_dir() {
        echo "- run cvs co SPECS"
 
        echo "To checkout *all* packages:"
-       echo "- run cvs up -dP in $TOP_DIR/packages dir"
+       echo "- run cvs up -dP in $TOP_DIR dir"
 
        echo ""
        echo "To commit with your developer account:"
-       echo "- edit $TOP_DIR/packages/CVS/Root"
+       echo "- edit $TOP_DIR/CVS/Root"
 }
 
 get_greed_sources() {
@@ -1997,7 +2136,7 @@ while [ $# -gt 0 ]; do
                -B | --branch )
                        COMMAND="branch"; shift; TAG="${1}"; shift;;
                -c | --clean )
-                       CLEAN="--clean --rmspec --rmsource"; shift ;;
+                       CLEAN="--clean"; shift ;;
                -cf | --cvs-force )
                        CVS_FORCE="-F"; shift;;
                -d | --cvsroot )
@@ -2166,6 +2305,8 @@ while [ $# -gt 0 ]; do
                        shift;;
                -u | --try-upgrade )
                        TRY_UPGRADE="1"; shift ;;
+               --upgrade-version )
+                       shift; UPGRADE_VERSION="$1"; shift;;
                -un | --try-upgrade-with-float-version )
                        TRY_UPGRADE="1"; FLOAT_VERSION="1"; shift ;;
                -v | --verbose )
@@ -2199,6 +2340,10 @@ while [ $# -gt 0 ]; do
                        COMMAND="show_bcond_args"
                        shift
                        ;;
+               --show-avail-bconds)
+                       COMMAND="show_avail_bconds"
+                       shift
+                       ;;
                --nodeps)
                        shift
                        RPMOPTS="${RPMOPTS} --nodeps"
@@ -2210,20 +2355,21 @@ while [ $# -gt 0 ]; do
                        Exit_error err_invalid_cmdline "$1"
                        ;;
                *)
-                       SPECFILE="${1}"
+                       SPECFILE=${1%/}; shift
                        # check if specname was passed as specname:cvstag
                        if [ "${SPECFILE##*:}" != "${SPECFILE}" ]; then
                                CVSTAG="${SPECFILE##*:}"
                                SPECFILE="${SPECFILE%%:*}"
                        fi
+                       # always have SPECFILE ending with .spec extension
+                       SPECFILE=${SPECFILE%%.spec}.spec
                        ASSUMED_NAME=$(basename ${SPECFILE%%.spec})
-                       shift
        esac
 done
 
 [ -d "$ASSUMED_NAME" ] && CVS_ENTRIES="$ASSUMED_NAME/CVS/Entries" || CVS_ENTRIES="CVS/Entries"
 if [ -f "$CVS_ENTRIES" ] && [ -z "$CVSTAG" ]; then
-       CVSTAG=$(awk -vSPECFILE=$(basename ${SPECFILE%.spec}.spec) -F/ '$2 == SPECFILE && $6 ~ /^T/{print substr($6, 2)}' ${CVS_ENTRIES})
+       CVSTAG=$(awk -vSPECFILE=$(basename $SPECFILE) -F/ '$2 == SPECFILE && $6 ~ /^T/{print substr($6, 2)}' ${CVS_ENTRIES})
        if [ "$CVSTAG" ]; then
                echo >&2 "builder: Sticky tag $CVSTAG active. Use -r TAGNAME to override."
        fi
@@ -2276,6 +2422,33 @@ case "$COMMAND" in
                        set_bconds_values
                        echo "$BCOND"
                fi
+               ;;
+       "show_avail_bconds")
+               init_builder
+               if [ -n "$SPECFILE" ]; then
+                       get_spec > /dev/null
+                       parse_spec
+                       local bcond_avail=$(find_spec_bcond $SPECFILE)
+                       local opt bcond bconds
+                       for opt in $bcond_avail; do
+                               case "$opt" in
+                               without_*)
+                                       bcond=${opt#without_}
+                                       bconds="$bconds $bcond"
+                                       ;;
+                               with_*)
+                                       bcond=${opt#with_}
+                                       bconds="$bconds $bcond"
+                                       ;;
+                               *)
+                                       echo >&2 "ERROR: unexpected '$opt' in show_avail_bconds"
+                                       exit 1
+                                       ;;
+                               esac
+                       done
+                       echo $bconds
+               fi
+
                ;;
        "build" | "build-binary" | "build-source" | "build-prep" | "build-build" | "build-install" | "build-list")
                init_builder
@@ -2283,7 +2456,7 @@ case "$COMMAND" in
                        # display SMP make flags if set
                        smp_mflags=$(rpm -E %{?_smp_mflags})
                        if [ "$smp_mflags" ]; then
-                               echo >&2 "builder: SMP make flags are set to $smp_mflags"
+                               echo "builder: SMP make flags are set to $smp_mflags"
                        fi
 
                        get_spec
@@ -2326,8 +2499,17 @@ case "$COMMAND" in
                        if [ -n "$NOSOURCE0" ] ; then
                                SOURCES=`echo $SOURCES | xargs | sed -e 's/[^ ]*//'`
                        fi
-                       get_files $SOURCES $PATCHES
-                       check_md5 $SOURCES
+                       try_upgrade
+                       case $? in
+                               0)
+                                       get_files $SOURCES $PATCHES
+                                       check_md5 $SOURCES
+                                       ;;
+                               *)
+                                       NODIST="yes" get_files $SOURCES $PATCHES
+                                       update_md5 $SOURCES
+                                       ;;
+                       esac
                        build_package
                        if [ "$UPDATE_POLDEK_INDEXES" = "yes" -a "$COMMAND" != "build-prep" ]; then
                                run_poldek --sdir="${POLDEK_INDEX_DIR}" --mkidxz
This page took 0.08923 seconds and 4 git commands to generate.