X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=builder.sh;h=8a04f7c8bb5a2ff8766ab41265d8cdd80c2a158f;hb=8271f9dc0e96f20680102e6e9620595841642070;hp=99d0335b77f46ebd5a6701550b26c2eba1f61c8b;hpb=5b5e5f7f8e9d285064b02a69c6b3f23c3f706bab;p=packages%2Frpm-build-tools.git diff --git a/builder.sh b/builder.sh index 99d0335..8a04f7c 100644 --- a/builder.sh +++ b/builder.sh @@ -1,4 +1,8 @@ #!/bin/ksh +# +# This program is free software, distributed under the terms of +# the GNU General Public License Version 2. +# # ----------- # Exit codes: # 0 - succesful @@ -22,7 +26,7 @@ RCSID='$Id$' r=${RCSID#* * } rev=${r%% *} -VERSION="v0.18/$rev" +VERSION="v0.20/$rev" VERSIONSTRING="\ Build package utility from PLD Linux CVS repository $VERSION (C) 1999-2007 Free Penguins". @@ -42,11 +46,19 @@ NOCVS="" NOCVSSPEC="" NODIST="" NOINIT="" +PREFMIRRORS="" UPDATE="" ADD5="" NO5="" ALWAYS_CVSUP=${ALWAYS_CVSUP:-"yes"} CVSROOT="" +GREEDSRC="" + +# use rpm 4.4.6+ digest format instead of comments if non-zero +USEDIGEST= + +# user agent when fetching files +USER_AGENT="PLD/Builder($VERSION)" # It can be used i.e. in log file naming. # See LOGFILE example. @@ -76,6 +88,7 @@ ICONS="" PACKAGE_RELEASE="" PACKAGE_VERSION="" PACKAGE_NAME="" +ASSUMED_NAME="" PROTOCOL="ftp" WGET_RETRIES=${MAX_WGET_RETRIES:-0} CVS_RETRIES=${MAX_CVS_RETRIES:-1000} @@ -127,8 +140,10 @@ fi SU_SUDO="" if [ -n "$HOME_ETC" ]; then USER_CFG="$HOME_ETC/.builderrc" + BUILDER_MACROS="$HOME_ETC/.builder-rpmmacros" else USER_CFG=~/.builderrc + BUILDER_MACROS=~/.builder-rpmmacros fi [ -f "$USER_CFG" ] && . "$USER_CFG" @@ -153,6 +168,7 @@ 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" wget --help 2>&1 | grep -q -- ' --retry-connrefused ' && WGET_OPTS="$WGET_OPTS --retry-connrefused" + WGET_OPTS="$WGET_OPTS --user-agent=$USER_AGENT" GETURI="wget --passive-ftp -c -nd -t$WGET_RETRIES $WGET_OPTS" GETURI2="wget -c -nd -t$WGET_RETRIES $WGET_OPTS" @@ -202,7 +218,7 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b| [-g|--get] [-h|--help] [--http] [{-l|--logtofile} ] [-m|--mr-proper] [-q|--quiet] [--date [-r ] [{-T|--tag ] [-Tvs|--tag-version-stable] [-Ts|--tag-stable] [-Tv|--tag-version] -[{-Tp|--tag-prefix} ] [{-tt|--test-tag}] +[{-Tp|--tag-prefix} ] [{-tt|--test-tag}] [--use-greed-sources] [-nu|--no-urls] [-v|--verbose] [--opts ] [--short-circuit] [--show-bconds] [--with/--without ] [--define ] [.spec][:cvstag] @@ -228,12 +244,17 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b| --short-circuit - short-circuit build -B, --branch - add branch -c, --clean - clean all temporarily created files (in BUILD, SOURCES, - SPECS and \$RPM_BUILD_ROOT), + SPECS and \$RPM_BUILD_ROOT and CVS/Entries) after rpmbuild commands. +-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 ' --nodeps - rpm won't check any dependences -g, --get - get .spec and all related files from CVS repo or HTTP/FTP, @@ -241,8 +262,6 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b| --http - use http instead of ftp, -l , --logtofile - log all to file, --m, --mr-proper - only remove all files related to spec file and all work - resources, -nc, --no-cvs - don't download sources from CVS, if source URL is given, -ncs, --no-cvs-specs - don't check specs in CVS @@ -252,6 +271,7 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b| -ns, --no-srcs - don't download Sources -ns0, --no-source0 - don't download Source0 -nn, --no-net - don't download anything from the net +-pm, --prefer-mirrors - prefer mirrors (if any) over distfiles for SOURCES --no-init - don't initialize builder paths (SPECS and SOURCES) -ske, --skip-existing-files - skip existing files in get_files @@ -272,6 +292,7 @@ Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b| -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 -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 @@ -302,6 +323,9 @@ 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 +--use-greed-sources + - try download source from tag head if don't find it in + current tag -U, --update - refetch sources, don't use distfiles, and update md5 comments -Upi, --update-poldek-indexes - refresh or make poldek package index files. @@ -378,18 +402,20 @@ minirpm() { safe_macrofiles=$(rpm --showrc | awk -F: '/^macrofiles/ { gsub(/^macrofiles[ \t]+:/, "", $0); gsub(/:.*macros.build:/, ":", $0); print $0 } ') # TODO: move these to /usr/lib/rpm/macros - cat > .builder-rpmmacros <<'EOF' + cat > $BUILDER_MACROS <<'EOF' %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} %requires_releq() %{nil} %pyrequires_eq() %{nil} %requires_eq() %{nil} %requires_eq_to() %{nil} %releq_kernel_up ERROR %releq_kernel_smp ERROR +%releq_kernel ERROR %kgcc_package ERROR %_fontsdir ERROR %ruby_version ERROR @@ -398,6 +424,10 @@ minirpm() { %__php_api_requires() %{nil} %php_major_version ERROR %php_api_version ERROR +%requires_xorg_xserver_extension %{nil} +%requires_xorg_xserver_xinput %{nil} +%requires_xorg_xserver_font %{nil} +%requires_xorg_xserver_videodrv %{nil} %py_ver ERROR %perl_vendorarch ERROR %perl_vendorlib ERROR @@ -416,12 +446,12 @@ minirpm() { %{nil} EOF if [ "$NOINIT" = "yes" ] ; then - cat >> .builder-rpmmacros <<'EOF' + cat >> $BUILDER_MACROS <<'EOF' %_specdir ./ %_sourcedir ./ EOF fi - eval $RPMBUILD --macros "$safe_macrofiles:.builder-rpmmacros" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $TARGET_SWITCH $* 2>&1 + eval $RPMBUILD --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $TARGET_SWITCH $* 2>&1 } cache_rpm_dump() { @@ -491,7 +521,7 @@ parse_spec() # icons are needed for successful spec parse get_icons - cd $SPECS_DIR + cd $SPEC_DIR cache_rpm_dump if [ "$NOSRCS" != "yes" ]; then @@ -508,6 +538,10 @@ parse_spec() PACKAGE_VERSION=$(rpm_dump | awk '$2 == "PACKAGE_VERSION" { print $3; exit}') PACKAGE_RELEASE=$(rpm_dump | awk '$2 == "PACKAGE_RELEASE" { print $3; exit}') + if [ "$PACKAGE_NAME" != "$ASSUMED_NAME" ]; then + echo >&2 "WARNING! Spec name ($ASSUMED_NAME) does not agree with package name ($PACKAGE_NAME)" + fi + if [ -n "$BE_VERBOSE" ]; then echo "- Sources : `nourl $SOURCES`" if [ -n "$PATCHES" ]; then @@ -590,11 +624,15 @@ init_builder() fi if [ "$NOINIT" != "yes" ] ; then - SOURCE_DIR="`eval $RPM $RPMOPTS --eval '%{_sourcedir}'`" - SPECS_DIR="`eval $RPM $RPMOPTS --eval '%{_specdir}'`" + local extra + if [ "$ASSUMED_NAME" ]; then + extra="--define 'name $ASSUMED_NAME'" + fi + SOURCE_DIR="`eval $RPM $RPMOPTS $extra --eval '%{_sourcedir}'`" + SPEC_DIR="`eval $RPM $RPMOPTS $extra --eval '%{_specdir}'`" else SOURCE_DIR="." - SPECS_DIR="." + SPEC_DIR="." fi __PWD="`pwd`" @@ -610,7 +648,7 @@ get_spec() set -v fi - cd "$SPECS_DIR" + cd "$SPEC_DIR" if [ ! -f "$SPECFILE" ]; then SPECFILE="`basename $SPECFILE .spec`.spec" fi @@ -639,7 +677,7 @@ get_spec() find_mirror() { - cd "$SPECS_DIR" + cd "$SPEC_DIR" local url="$1" if [ ! -f "mirrors" -a "$NOCVSSPEC" != "yes" ] ; then cvs update mirrors >&2 @@ -666,7 +704,7 @@ find_mirror() # Warning: unpredictable results if same URL used twice src_no () { - cd $SPECS_DIR + cd $SPEC_DIR rpm_dump | \ grep "SOURCEURL[0-9]*[ ]*$1""[ ]*$" | \ sed -e 's/.*SOURCEURL\([0-9][0-9]*\).*/\1/' | \ @@ -678,7 +716,7 @@ src_md5() [ "$NO5" = "yes" ] && return no=$(src_no "$1") [ -z "$no" ] && return - cd $SPECS_DIR + cd $SPEC_DIR local md5 if [ -f additional-md5sums ]; then @@ -705,11 +743,16 @@ src_md5() if [ -n "$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 [ -n "$nosource_md5" -a -n "`grep -i "^NoSource:[ ]*$no$" $SPECFILE`" ] ; then - echo $nosource_md5 + source_md5=`grep -i "BuildRequires:[ ]*digest(%SOURCE$no)[ ]*=" $SPECFILE | sed -e 's/.*=//'` + if [ -n "$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 [ -n "$nosource_md5" -a -n "`grep -i "^NoSource:[ ]*$no$" $SPECFILE`" ] ; then + echo $nosource_md5 + fi fi fi } @@ -830,9 +873,10 @@ update_md5() 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 + grep -qiE '^#[ ]*Source'$srcno'-md5[ ]*:' $SPEC_DIR/$SPECFILE && continue + grep -qiE '^BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $SPEC_DIR/$SPECFILE && continue else - grep -qiE '^#[ ]*Source'$srcno'-md5[ ]*:' $SPECS_DIR/$SPECFILE || continue + grep -qiE '^#[ ]*Source'$srcno'-md5[ ]*:' $SPEC_DIR/$SPECFILE || grep -qiE '^BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $SPEC_DIR/$SPECFILE || continue fi if [ ! -f "$fp" ] || [ $ALWAYS_CVSUP = "yes" ]; then need_files="$need_files $i" @@ -848,19 +892,24 @@ update_md5() for i in "$@"; do local fp=$(nourl "$i") local srcno=$(src_no "$i") - local md5=$(grep -iE '^#[ ]*(No)?Source'$srcno'-md5[ ]*:' $SPECS_DIR/$SPECFILE ) + local md5=$(grep -iE '^#[ ]*(No)?Source'$srcno'-md5[ ]*:' $SPEC_DIR/$SPECFILE ) + if [ -z "$md5"]; then + md5=$(grep -iE '^[ ]*BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $SPEC_DIR/$SPECFILE ) + fi if [ -n "$ADD5" ] && is_url $i || [ -n "$md5" ]; then - local tag="Source$srcno-md5" + local tag="# Source$srcno-md5:\t" if [[ "$md5" == *NoSource* ]]; then - tag="NoSource$srcno-md5" + tag="# NoSource$srcno-md5:\t" + elif [ -n "$USEDIGEST" ]; then + tag="BuildRequires:\tdigest(%SOURCE$srcno) = " 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+/; + print unless (/^\s*#\s*(No)?Source'$srcno'-md5\s*:/i or /^\s*BuildRequires:\s*digest\(%SOURCE'$srcno'\)/i); + print "'"$tag$md5"'\n" if /^Source'$srcno'\s*:\s+/; ' \ - $SPECS_DIR/$SPECFILE + $SPEC_DIR/$SPECFILE fi done } @@ -929,9 +978,9 @@ get_files() fi target="$fp" - # prefer mirror over distfiles if there's mirror + # optionally prefer mirror over distfiles if there's mirror # TODO: build url list and then try each url from the list - if [ -z "$NOMIRRORS" ] && im=$(find_mirror "$i") && [ "$im" != "$i" ]; then + if [ -n "$PREFMIRRORS" ] && [ -z "$NOMIRRORS" ] && im=$(find_mirror "$i") && [ "$im" != "$i" ]; then url="$im" else url=$(distfiles_url "$i") @@ -1020,7 +1069,11 @@ get_files() # 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 + if [ -n "GREEDSRC" ]; then + get_greed_sources $i + else + Exit_error err_no_source_in_repo $i + fi fi # we check md5 here just only to refetch immediately @@ -1124,6 +1177,8 @@ tag_files() local fp=`nourl "$i"` if [ -f "$fp" ]; then tag_files="$tag_files $fp" + elif [ -n "GREEDSRC" ]; then + get_greed_sources $i else Exit_error err_no_source_in_repo $i fi @@ -1132,15 +1187,22 @@ tag_files() if [ "$tag_files" ]; then if [ "$TAG_VERSION" = "yes" ]; then update_shell_title "tag sources: $TAGVER" + printf "Tagging %d files\n" $(echo $tag_files | wc -w) cvs $OPTIONS $TAGVER $tag_files || exit fi if [ -n "$TAG" ]; then update_shell_title "tag sources: $TAG" - cvs $OPTIONS $TAG $tag_files || exit + + while [ "$tag_files" ]; do + local chunk=$(echo $tag_files | tr ' ' '\n' | head -n 100) + printf "Tagging %d files\n" $(echo $chunk | wc -w) + cvs $OPTIONS $TAG $chunk || exit + tag_files=$(echo $tag_files | tr ' ' '\n' | tail +101) + done fi fi - cd "$SPECS_DIR" + cd "$SPEC_DIR" if [ "$TAG_VERSION" = "yes" ]; then update_shell_title "tag spec: $TAGVER" cvs $OPTIONS $TAGVER $SPECFILE || exit @@ -1174,6 +1236,8 @@ branch_files() local fp=`nourl "$i"` if [ -f "$fp" ]; then tag_files="$tag_files $fp" + elif [ -n "GREEDSRC" ]; then + get_greed_sources $i else Exit_error err_no_source_in_repo $i fi @@ -1182,7 +1246,7 @@ branch_files() cvs $OPTIONS $TAG $tag_files || exit fi - cd "$SPECS_DIR" + cd "$SPEC_DIR" cvs $OPTIONS $TAG $SPECFILE || exit } @@ -1208,7 +1272,7 @@ build_package() set -v fi - cd "$SPECS_DIR" + cd "$SPEC_DIR" if [ -n "$TRY_UPGRADE" ]; then update_shell_title "build_package: try_upgrade" @@ -1236,7 +1300,7 @@ build_package() unset TOLDVER TNEWVER TNOTIFY fi fi - cd "$SPECS_DIR" + cd "$SPEC_DIR" case "$COMMAND" in build ) @@ -1489,12 +1553,12 @@ run_sub_builder() parent_spec_name='' # Istnieje taki spec? ${package}.spec - if [ -f "${SPECS_DIR}/${package}.spec" ]; then + if [ -f "${SPEC_DIR}/${package}.spec" ]; then parent_spec_name=${package}.spec - elif [ -f "${SPECS_DIR}/`echo ${package_name} | sed -e s,-devel.*,,g -e s,-static,,g`.spec" ]; then + elif [ -f "${SPEC_DIR}/`echo ${package_name} | sed -e s,-devel.*,,g -e s,-static,,g`.spec" ]; then parent_spec_name="`echo ${package_name} | sed -e s,-devel.*,,g -e s,-static,,g`.spec" else - for provides_line in `grep ^Provides:.*$package ${SPECS_DIR} -R` + for provides_line in `grep ^Provides:.*$package ${SPEC_DIR} -R` do echo $provides_line done @@ -1524,7 +1588,7 @@ spawn_sub_builder() sub_builder_opts="${sub_builder_opts} -Upi" fi - cd "${SPECS_DIR}" + cd "${SPEC_DIR}" ./builder ${sub_builder_opts} "$@" } @@ -1612,37 +1676,39 @@ fetch_build_requires() if [ "${FETCH_BUILD_REQUIRES}" = "yes" ]; then update_shell_title "fetch build requires" if [ "$FETCH_BUILD_REQUIRES_RPMGETDEPS" = "yes" ]; then - local CONF=$(rpm-getdeps $BCOND $SPECFILE 2> /dev/null | awk '/^\-/ { print $3 } ' | _rpm_cnfl_check | xargs) + # TODO: Conflicts list doesn't check versions + local CNFL=$(rpm-getdeps $BCOND $SPECFILE 2> /dev/null | awk '/^\-/ { print $3 } ' | _rpm_cnfl_check | xargs) local DEPS=$(rpm-getdeps $BCOND $SPECFILE 2> /dev/null | awk '/^\+/ { print $3 } ' | _rpm_prov_check | xargs) - update_shell_title "poldek: update indexes" - if [ -n "$CONF" ] || [ -n "$DEPS" ]; then + if [ -n "$CNFL" ] || [ -n "$DEPS" ]; then + echo "fetch builderequires: install [$DEPS]; remove [$CNFL]" + update_shell_title "poldek: install [$DEPS]; remove [$CNFL]" $SU_SUDO /usr/bin/poldek -q --update || $SU_SUDO /usr/bin/poldek -q --upa fi - if [ -n "$CONF" ]; then - update_shell_title "uninstall conflicting packages: $CONF" - echo "Trying to uninstall conflicting packages ($CONF):" - $SU_SUDO /usr/bin/poldek --noask --nofollow -ev $CONF + if [ -n "$CNFL" ]; then + update_shell_title "uninstall conflicting packages: $CNFL" + echo "Trying to uninstall conflicting packages ($CNFL):" + $SU_SUDO /usr/bin/poldek --noask --nofollow -ev $CNFL fi - while [ "$DEPS" ]; do - update_shell_title "install deps: $DEPS" - echo "Trying to install dependencies ($DEPS):" - local log=.${SPECFILE}_poldek.log - $SU_SUDO /usr/bin/poldek --caplookup -uGq $DEPS | tee $log - failed=$(awk -F: '/^error:/{print $2}' $log) - rm -f $log - local ok - if [ -n "$failed" ]; then - for package in $failed; do - # FIXME: sanitise, deps could be not .spec files - spawn_sub_builder -bb $package && ok="$ok $package" - done - DEPS="$ok" - else - DEPS="" - fi - done + while [ "$DEPS" ]; do + update_shell_title "install deps: $DEPS" + echo "Trying to install dependencies ($DEPS):" + local log=.${SPECFILE}_poldek.log + $SU_SUDO /usr/bin/poldek --caplookup -uGq $DEPS | tee $log + failed=$(awk -F: '/^error:/{print $2}' $log) + rm -f $log + local ok + if [ -n "$failed" ]; then + for package in $failed; do + # FIXME: sanitise, deps could be not .spec files + spawn_sub_builder -bb $package && ok="$ok $package" + done + DEPS="$ok" + else + DEPS="" + fi + done return fi @@ -1801,15 +1867,58 @@ init_rpm_dir() { init_builder echo "To checkout *all* .spec files:" - echo "- remove $SPECS_DIR/CVS/Entries.Static" - echo "- run cvs up in $SPECS_DIR dir" + echo "- remove $SPEC_DIR/CVS/Entries.Static" + echo "- run cvs up in $SPEC_DIR dir" echo "" echo "To commit with your developer account:" - echo "- edit $SPECS_DIR/CVS/Root" + echo "- edit $SPEC_DIR/CVS/Root" echo "- edit $SOURCE_DIR/CVS/Root" } +get_greed_sources() { + CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot" + if [ -n "BE_VERBOSE" ]; then + echo "Try greed download: $1 from: $CVSROOT" + fi + cvs -d $CVSROOT get SOURCES/$1 + if [ $? != 0 ]; then + Exit_error err_no_source_in_repo $1 + fi + +} + +# remove entries from CVS/Entries +cvs_entry_remove() { + local cvsdir="$1"; shift + if [ ! -d "$cvsdir" ]; then + echo >&2 "cvs_entry_remove: $cvsdir is not a directory" + exit 1 + fi + + for file in "$@"; do + rm -f $cvsdir/CVS/Entries.new || return 1 + awk -ve="${file##*/}" -F/ '$2 != e {print}' $cvsdir/CVS/Entries > $cvsdir/CVS/Entries.new || return 1 + mv -f $cvsdir/CVS/Entries.new $cvsdir/CVS/Entries || return 1 + done + return 0 +} + +mr_proper() { + init_builder + NOCVSSPEC="yes" + DONT_PRINT_REVISION="yes" + get_spec + parse_spec + + # remove from CVS/Entries + cvs_entry_remove $SPEC_DIR $SPECFILE + cvs_entry_remove $SOURCE_DIR $SOURCES $PATCHES + + # remove spec and sources + $RPMBUILD --clean --rmsource --rmspec --nodeps $SPECFILE +} + #--------------------------------------------- # main() @@ -1902,6 +2011,9 @@ while [ $# -gt 0 ]; do NOSRCS="yes" ALWAYS_CVSUP="no" shift;; + -pm | --prefer-mirrors ) + PREFMIRRORS="yes" + shift;; --no-init ) NOINIT="yes" shift;; @@ -1952,6 +2064,9 @@ while [ $# -gt 0 ]; do -FRB | --force-remove-build-requires) REMOVE_BUILD_REQUIRES="force" shift ;; + -sc | --sources-cvs) + COMMAND="list-sources-cvs" + shift ;; -sd | --sources-distfiles) COMMAND="list-sources-distfiles" shift ;; @@ -2009,6 +2124,9 @@ while [ $# -gt 0 ]; do --init-rpm-dir) COMMAND="init_rpm_dir" shift ;; + --use-greed-sources ) + GREEDSRC="1" + shift;; -u | --try-upgrade ) TRY_UPGRADE="1"; shift ;; -un | --try-upgrade-with-float-version ) @@ -2027,6 +2145,11 @@ while [ $# -gt 0 ]; do RPMOPTS="${RPMOPTS} --define \"${MACRO} ${VALUE}\"" fi ;; + --alt_kernel) + shift + RPMOPTS="${RPMOPTS} --define \"alt_kernel $1\"" + shift + ;; --short-circuit) RPMBUILDOPTS="${RPMBUILDOPTS} --short-circuit" shift @@ -2056,6 +2179,7 @@ while [ $# -gt 0 ]; do CVSTAG="${SPECFILE##*:}" SPECFILE="${SPECFILE%%:*}" fi + ASSUMED_NAME="$(basename ${SPECFILE%%.spec})" shift esac done @@ -2132,7 +2256,7 @@ case "$COMMAND" in # ./builder -bs test.spec -r AC-branch -Tp auto-ac- -tt if [ -n "$TEST_TAG" ]; then # - do not allow utf8 encoded specs on AC-branch - if [ "$CVSTAG" = "AC-branch" ]; then + if [ "$CVSTAG" = "AC-branch-disabled" ]; then local t t=$(grep '^Summary(.*\.UTF-8):' $SPECFILE) if [ "$t" ]; then @@ -2244,7 +2368,7 @@ case "$COMMAND" in fi ;; "mr-proper" ) - $RPM --clean --rmsource --rmspec --force --nodeps $SPECFILE + mr_proper ;; "list-sources-files" ) init_builder @@ -2301,6 +2425,18 @@ case "$COMMAND" in fi done ;; + "list-sources-cvs" ) + init_builder +# NOCVSSPEC="yes" + DONT_PRINT_REVISION="yes" + get_spec + parse_spec + for SAP in $SOURCES $PATCHES; do + if [ -z "$(src_md5 "$SAP")" ]; then + echo $SAP | awk '{gsub(/.*\//,"") ; print}' + fi + done + ;; "init_rpm_dir") init_rpm_dir ;;