X-Git-Url: http://git.pld-linux.org/?p=packages%2Frpm-build-tools.git;a=blobdiff_plain;f=builder.sh;h=453625d7f15c6bfbfbecbb88308dc0c11d2d97ef;hp=df16b001e04707e85086e06bbe6a486f376120d5;hb=6c0815a;hpb=236af16ba628f36484ea445c842f13dcbd19a2b6 diff --git a/builder.sh b/builder.sh index df16b00..453625d 100755 --- a/builder.sh +++ b/builder.sh @@ -38,9 +38,10 @@ APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d") VERSION="v0.35" VERSIONSTRING="\ Build package utility from PLD Linux Packages repository -$VERSION (C) 1999-2015 Free Penguins". +$VERSION (C) 1999-2021 Free Penguins". -CLEAN_PATH="/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin" +# Clean PATH without /usr/local or user paths +CLEAN_PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" # required rpm-build-macros RPM_MACROS_VER=1.534 @@ -111,10 +112,10 @@ PACKAGE_VERSION="" PACKAGE_NAME="" ASSUMED_NAME="" PROTOCOL="http" +IPOPT="" # use lftp by default when available -USE_LFTP= -lftp --version > /dev/null 2>&1 && USE_LFTP=yes +test -z "${USE_LFTP+x}" && lftp --version > /dev/null 2>&1 && USE_LFTP=yes PARALLEL_DOWNLOADS=10 WGET_RETRIES=${MAX_WGET_RETRIES:-0} @@ -150,9 +151,13 @@ REVERT_BROKEN_UPGRADE="yes" if rpm --specsrpm 2>/dev/null; then FETCH_BUILD_REQUIRES_RPMSPECSRPM="yes" + FETCH_BUILD_REQUIRES_RPMSPEC_BINARY="no" FETCH_BUILD_REQUIRES_RPMGETDEPS="no" -else +elif [ -x /usr/bin/rpmspec ]; then FETCH_BUILD_REQUIRES_RPMSPECSRPM="no" + FETCH_BUILD_REQUIRES_RPMSPEC_BINARY="yes" + FETCH_BUILD_REQUIRES_RPMGETDEPS="no" +else if [ -x /usr/bin/rpm-getdeps ]; then FETCH_BUILD_REQUIRES_RPMGETDEPS="yes" else @@ -202,38 +207,19 @@ if [ "$SCHEDTOOL" = "auto" ]; then fi if [ -n "$USE_PROZILLA" ]; then - GETURI="proz --no-getch -r -P ./ -t$WGET_RETRIES $PROZILLA_OPTS" - GETURI2="$GETURI" - OUTFILEOPT="-O" + GETURI=download_proz elif [ -n "$USE_AXEL" ]; then - GETURI="axel -a $AXEL_OPTS" - GETURI2="$GETURI" - OUTFILEOPT="-o" + GETURI=download_axel 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" - wget --help 2>&1 | grep -q -- ' --retry-connrefused ' && WGET_OPTS="$WGET_OPTS --retry-connrefused" - wget --help 2>&1 | grep -q -- ' --no-iri ' && WGET_OPTS="$WGET_OPTS --no-iri" - 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" - OUTFILEOPT="-O" + GETURI=download_wget fi -GETLOCAL="cp -a" +GETLOCAL=${GETLOCAL:-cp -a} -if rpm --version 2>&1 | grep -q '4.0.[0-2]'; then - RPM="rpm" - RPMBUILD="rpm" -else - RPM="rpm" - RPMBUILD="rpmbuild" -fi +RPM="rpm" +RPMBUILD="rpmbuild" # # sanity checks @@ -269,12 +255,53 @@ run_poldek() { #--------------------------------------------- # functions +download_prozilla() { + local outfile=$1 url=$2 retval + + proz --no-getch -r -P ./ -t$WGET_RETRIES $PROZILLA_OPTS -O "$outfile" "$url" + retval=$? + + return $retval +} + +download_axel() { + local outfile=$1 url=$2 retval + + axel -a $AXEL_OPTS -o "$outfile" "$url" + retval=$? + + return $retval +} + +download_wget() { + local outfile=$1 url=$2 retval wget_help + if [ -z "${WGET_OPTS_SET+x}" ]; then + wget_help="$(wget --help 2>&1)" + echo "$wget_help" | grep -q -- ' --inet ' && WGET_OPTS="$WGET_OPTS --inet" + echo "$wget_help" | grep -q -- ' --retry-connrefused ' && WGET_OPTS="$WGET_OPTS --retry-connrefused" + echo "$wget_help" | grep -q -- ' --no-iri ' && WGET_OPTS="$WGET_OPTS --no-iri" + WGET_OPTS="-c -nd -t$WGET_RETRIES $WGET_OPTS --user-agent=$USER_AGENT $IPOPT --passive-ftp" + WGET_OPTS_SET=1 + fi + + wget $WGET_OPTS -O "$outfile" "$url" + retval=$? + if [ $retval -ne 0 ]; then + if [ "`echo $url | grep -E 'ftp://'`" ]; then + ${GETURI} -O "$outfile" "$url" + retval=$? + fi + fi + return $retval +} + download_lftp() { local outfile=$1 url=$2 retval tmpfile - # TODO: use mktemp - tmpfile=$outfile.tmp + tmpfile=$(tempfile) || exit 1 lftp -c " $([ "$DEBUG" = "yes" ] && echo "debug 5;") + $([ "$IPOPT" = "-4" ] && echo "set dns:order \"inet\";") + $([ "$IPOPT" = "-6" ] && echo "set dns:order \"inet6\";") set ssl:verify-certificate no; set net:max-retries $WGET_RETRIES; set http:user-agent \"$USER_AGENT\"; @@ -447,10 +474,31 @@ Usage: builder [--all-branches] [-D|--debug] [-V|--version] [--short-version] [ constructions. Set GROUP_BCONDS to yes to make use of it. --target , --target= - build for platform . ---init-rpm-dir - initialize ~/rpm directory structure +--init-rpm-dir, --init + - initialize ~/rpm directory structure " } +is_rpmorg() { + local v + + v=$(LC_ALL=C LANG=C rpm --version 2>&1) + v=${v#RPM version } # rpm 4 + v=${v#rpm \(RPM\) } # rpm 5 + + case "$v" in + 4.5|5.*) + return 1 + ;; + 4.*) + return 0; + ;; + *) + echo "ERROR: unsupported RPM version $v" >&2 + exit 1 + esac +} + # create tempfile. as secure as possible tempfile() { local prefix=builder.$PACKAGE_NAME${1:+.$1} @@ -483,7 +531,7 @@ insert_gitlog() { done > $gitlog # add link to full git logs - local giturl="http://git.pld-linux.org/?p=packages/$PACKAGE_NAME.git;a=log" + local giturl="http://git.pld-linux.org/?p=packages/${SPECFILE%.spec}.git;a=log" if [ -n "$CVSTAG" ]; then giturl="$giturl;h=$CVSTAG" fi @@ -548,13 +596,13 @@ depspecname() { s/apache\(EAPI\)-devel/apache-devel/ - s/db-devel/db5.3-devel/ + s/^db-devel/db5.3-devel/ s/libjpeg-devel/libjpeg-turbo-devel/ ' } update_shell_title() { - [ -t 1 ] || return + [ -t 2 ] || return local len=${COLUMNS:-80} local msg="$(echo "$*" | cut -c-$len)" @@ -602,8 +650,6 @@ set_spec_target() { # runs rpm with minimal macroset minirpm() { - safe_macrofiles=$(rpm $TARGET_SWITCH --showrc | awk -F: '/^macrofiles/ { gsub(/^macrofiles[ \t]+:/, "", $0); print $0 } ') - # TODO: move these to /usr/lib/rpm/macros cat > $BUILDER_MACROS <<'EOF' %x8664 x86_64 amd64 ia32e @@ -666,7 +712,13 @@ EOF %_sourcedir ./ EOF fi - eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1 + if ! is_rpmorg; then + local safe_macrofiles + safe_macrofiles=$(rpm $TARGET_SWITCH --showrc | awk -F: '/^macrofiles/ { gsub(/^macrofiles[ \t]+:/, "", $0); print $0 } ') + eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1 + else + eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --load "$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1 + fi } cache_rpm_dump() { @@ -805,7 +857,11 @@ Exit_error() { exit 2 ;; "err_no_spec_in_repo" ) remove_build_requires - echo >&2 "Error: spec file not stored in PLD repo." + echo >&2 "Error: spec file not stored in repository." + if [ -n "$2" ]; then + echo >&2 "Tried: $2" + fi + exit 3 ;; "err_no_source_in_repo" ) remove_build_requires @@ -918,10 +974,17 @@ create_git_repo() { fi [ -d "$ASSUMED_NAME/.git" ] || NEW_REPO=yes ssh $GIT_PUSH create ${ASSUMED_NAME} || Exit_error err_cvs_add_failed + ( + set -e git init - git remote add $REMOTE_PLD ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME}.git && \ - git remote set-url --push $REMOTE_PLD ssh://${GIT_PUSH}/${PACKAGES_DIR}/${ASSUMED_NAME} \ - || Exit_error err_remote_problem $REMOTE_PLD + git remote add $REMOTE_PLD ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME}.git + git remote set-url --push $REMOTE_PLD ssh://${GIT_PUSH}/${PACKAGES_DIR}/${ASSUMED_NAME} + + git config --local push.default current + git config --local branch.master.remote $REMOTE_PLD + git config --local branch.master.merge refs/heads/master + ) + test $? = 0 || Exit_error err_remote_problem $REMOTE_PLD } get_spec() { @@ -938,7 +1001,7 @@ get_spec() { if [ "$NOCVSSPEC" != "yes" ]; then if [ -z "$DEPTH" ]; then if [ -d "$PACKAGE_DIR/.git" ]; then - git fetch $REMOTE_PLD || Exit_error err_no_spec_in_repo + git fetch $IPOPT $REMOTE_PLD || Exit_error err_no_spec_in_repo elif [ "$ADD_PACKAGE_CVS" = "yes" ]; then if [ ! -r "$PACKAGE_DIR/$SPECFILE" ]; then echo "ERROR: No package to add ($PACKAGE_DIR/$SPECFILE)" >&2 @@ -948,13 +1011,16 @@ get_spec() { else ( unset GIT_WORK_TREE - git clone -o $REMOTE_PLD ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME}.git || { + git clone $IPOPT -o $REMOTE_PLD ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME}.git || { # softfail if new package, i.e not yet added to PLD rep [ ! -f "$PACKAGE_DIR/$SPECFILE" ] && Exit_error err_no_spec_in_repo - echo "Warning: package not in CVS - assuming new package" + echo "Warning: package not in Git - assuming new package" NOCVSSPEC="yes" } - git config --local --add "remote.$REMOTE_PLD.fetch" 'refs/notes/*:refs/notes/*' + git config --local --add "remote.$REMOTE_PLD.fetch" 'refs/notes/*:refs/notes/*' + git config --local --add "remote.$REMOTE_PLD.push" 'refs/notes/*:refs/notes/*' + git config --local --add "remote.$REMOTE_PLD.push" HEAD + git config --local push.default current git remote set-url --push $REMOTE_PLD ssh://${GIT_PUSH}/${PACKAGES_DIR}/${ASSUMED_NAME} ) fi @@ -965,7 +1031,10 @@ get_spec() { fi git init git remote add $REMOTE_PLD ${GIT_SERVER}/${PACKAGES_DIR}/${ASSUMED_NAME}.git - git config --local --add "remote.$REMOTE_PLD.fetch" 'refs/notes/*:refs/notes/*' + git config --local --add "remote.$REMOTE_PLD.fetch" 'refs/notes/*:refs/notes/*' + git config --local --add "remote.$REMOTE_PLD.push" 'refs/heads/*:refs/remotes/origin/*' + git config --local --add "remote.$REMOTE_PLD.push" HEAD + git config --local push.default current git remote set-url --push $REMOTE_PLD ssh://${GIT_PUSH}/${PACKAGES_DIR}/${ASSUMED_NAME} CVSTAG=${CVSTAG:-"master"} fi @@ -973,12 +1042,12 @@ get_spec() { if [ -z "$ALL_BRANCHES" ]; then refs="${CVSTAG}:remotes/${REMOTE_PLD}/${CVSTAG}" fi - git fetch $DEPTH $REMOTE_PLD $refs || { + git fetch $IPOPT $DEPTH $REMOTE_PLD $refs || { echo >&2 "Error: branch $CVSTAG does not exist" exit 3 } fi - git fetch $REMOTE_PLD 'refs/notes/*:refs/notes/*' + git fetch $IPOPT $REMOTE_PLD 'refs/notes/*:refs/notes/*' cvsignore_df .gitignore @@ -993,7 +1062,7 @@ get_spec() { # create symlinks for tools if [ "$SYMLINK_TOOLS" != "no" -a -d "$PACKAGE_DIR" ]; then - for a in dropin md5 adapter builder {relup,compile,repackage,rsync,pearize}.sh pldnotify.awk; do + for a in dropin md5 builder {relup,compile,repackage,rsync,pearize}.sh; do # skip tools that don't exist in top dir [ -f $a ] || continue # skip tools that already exist @@ -1005,15 +1074,19 @@ get_spec() { fi if [ -n "$CVSTAG" ]; then - if git rev-parse --verify -q "$CVSTAG"; then - git checkout "$CVSTAG" -- + if git rev-parse --verify -q "$CVSTAG" >/dev/null; then + # checkout only if differs, so this will not trash git reflog + if [ $(git rev-parse "$CVSTAG") != $(git rev-parse HEAD) ]; then + git checkout "$CVSTAG" -- + fi elif git rev-parse --verify -q "refs/remotes/${REMOTE_PLD}/$CVSTAG"; then git checkout -t "refs/remotes/${REMOTE_PLD}/$CVSTAG" > /dev/null fi if [ $(git rev-parse "$CVSTAG") != $(git rev-parse HEAD) ]; then Exit_error "err_no_checkut" "$CVSTAG" fi - git merge --ff-only '@{u}' + + git merge --ff-only '@{u}' git symbolic-ref -q HEAD > /dev/null && [ "$NOCVSSPEC" != "yes" ] && if [ -n "$CVSDATE" ]; then git checkout $(git rev-list -n1 --before="'$CVSDATE'" $CVSTAG) || exit 1 @@ -1021,7 +1094,7 @@ get_spec() { fi if [ ! -f "$PACKAGE_DIR/$SPECFILE" ]; then - Exit_error err_no_spec_in_repo + Exit_error err_no_spec_in_repo "$PACKAGE_DIR/$SPECFILE" fi if [ "$CHMOD" = "yes" -a -n "$SPECFILE" ]; then @@ -1144,7 +1217,7 @@ cvsignore_df() { if [ "$CVSIGNORE_DF" != "yes" ]; then return fi - cvsignore=${PACKAGE_DIR}/.gitignore + local cvsignore=${PACKAGE_DIR}/.git/info/exclude # add only if not yet there if ! awk -vf="$1" -vc=1 '$0 == f { c = 0 } END { exit c }' $cvsignore 2>/dev/null; then @@ -1315,11 +1388,7 @@ get_files() { uri="df: $uri" fi update_shell_title "${GETURI%% *}: $uri" - ${GETURI} ${OUTFILEOPT} "$target" "$url" || \ - if [ "`echo $url | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url" - ${GETURI2} ${OUTFILEOPT} "$target" "$url" - fi + ${GETURI} "$target" "$url" fi # is it empty file? @@ -1330,11 +1399,7 @@ get_files() { ${GETLOCAL} $url_attic $target else update_shell_title "${GETURI%% *}: $url_attic" - ${GETURI} ${OUTFILEOPT} "$target" "$url_attic" || \ - if [ "`echo $url_attic | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url_attic" - ${GETURI2} ${OUTFILEOPT} "$target" "$url_attic" - fi + ${GETURI} "$target" "$url_attic" test -s "$target" || rm -f "$target" fi fi @@ -1354,11 +1419,7 @@ get_files() { im="$i" fi update_shell_title "${GETURI%% *}: $im" - ${GETURI} ${OUTFILEOPT} "$target" "$im" || \ - if [ "`echo $im | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $im" - ${GETURI2} ${OUTFILEOPT} "$target" "$im" - fi + ${GETURI} "$target" "$im" test -s "$target" || rm -f "$target" fi @@ -1383,19 +1444,11 @@ get_files() { FROM_DISTFILES=2 rm -f $target update_shell_title "${GETURI%% *}: $url" - ${GETURI} ${OUTFILEOPT} "$target" "$url" || \ - if [ "`echo $url | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url" - ${GETURI2} ${OUTFILEOPT} "$target" "$url" - fi + ${GETURI} "$target" "$url" if [ ! -s "$target" ]; then rm -f "$target" update_shell_title "${GETURI%% *}: $url_attic" - ${GETURI} ${OUTFILEOPT} "$target" "$url_attic" || \ - if [ "`echo $url_attic | grep -E 'ftp://'`" ]; then - update_shell_title "${GETURI2%% *}: $url_attic" - ${GETURI2} ${OUTFILEOPT} "$target" "$url_attic" - fi + ${GETURI} "$target" "$url_attic" fi test -s "$target" || rm -f "$target" fi @@ -1479,7 +1532,7 @@ tag_files() { if tag_exist $_tag || [ -n "$CVS_FORCE" ]; then update_shell_title "tag sources: $_tag" git $OPTIONS $_tag || exit - git push $CVS_FORCE $REMOTE_PLD tag $_tag || Exit_error err_remote_problem $REMOTE_PLD + git push $IPOPT $CVS_FORCE $REMOTE_PLD tag $_tag || Exit_error err_remote_problem $REMOTE_PLD else echo "Tag $_tag already exists and points to the same commit" fi @@ -1565,12 +1618,12 @@ try_upgrade() { echo "Updating spec file to version $TNEWVER" else if [ -n "$FLOAT_VERSION" ]; then - TNOTIFY=$($APPDIR/pldnotify.awk ${BE_VERBOSE:+-vDEBUG=1} $SPECFILE -n) || exit 1 + TNOTIFY=$(pldnotify ${BE_VERBOSE:+-vDEBUG=1} $SPECFILE -n) || exit 1 else - TNOTIFY=$($APPDIR/pldnotify.awk ${BE_VERBOSE:+-vDEBUG=1} $SPECFILE) || exit 1 + TNOTIFY=$(pldnotify ${BE_VERBOSE:+-vDEBUG=1} $SPECFILE) || exit 1 fi - # pldnotify.awk does not set exit codes, but it has match for ERROR + # pldnotify does not set exit codes, but it has match for ERROR # in output which means so. if [[ "$TNOTIFY" = *ERROR* ]]; then echo >&2 "$TNOTIFY" @@ -1642,7 +1695,19 @@ build_package() { fi fi + # unset these, should not be exposed to builder shell! + unset GIT_WORK_TREE GIT_DIR + # these are set by jenkins + unset GIT_PREVIOUS_COMMIT GIT_URL GIT_PREVIOUS_SUCCESSFUL_COMMIT GIT_BRANCH GIT_COMMIT + # this may be set by user + unset GIT_SSH + # may be set by user + unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_TESTING_PORCELAIN_COMMAND_LIST GIT_EDITOR + # fail if something still set + env | grep ^GIT_ && Exit_error err_build_fail "One of GIT_* env variables is still set. The builder script needs to be updated to unset that variable. In the meantime, unset it manually." + local specdir=$(insert_gitlog $SPECFILE) + ulimit -c unlimited # FIXME: eval here is exactly why? PATH=$CLEAN_PATH eval teeboth "'$logfile'" ${TIME_COMMAND} ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $specdir/$SPECFILE retval=$? @@ -1766,7 +1831,7 @@ set_bconds_values() { without_*) bcond=${opt#without_} case "$BCOND" in - *--without?${bcond}*) + *--without?${bcond}\ *|*--without?${bcond}) AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT <$bcond>" ;; *) @@ -1777,7 +1842,7 @@ set_bconds_values() { with_*) bcond=${opt#with_} case "$BCOND" in - *--with?${bcond}*) + *--with?${bcond}\ *|*--with?${bcond}) AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$bcond>" ;; *) @@ -1832,9 +1897,9 @@ run_sub_builder() { # @return exit code from poldek # # this requires following sudo rules: -# - poldek --noask --caplookup -uG +# - poldek --noask --caplookup -ug poldek_install() { - LANG=C $POLDEK_CMD --noask --caplookup --uniq -uG "$@" + LC_ALL=C LANG=C $POLDEK_CMD --noask --caplookup --uniq -ug "$@" } # install packages @@ -1845,7 +1910,7 @@ install_packages() { # sync poldek indexes once per invocation if [ -z "$package_indexes_updated" ]; then update_shell_title "poldek: update indexes" - $POLDEK_CMD -q --update --upa + $POLDEK_CMD -q --update --upa --mo=nodesc package_indexes_updated=true fi @@ -1963,7 +2028,7 @@ _rpm_cnfl_check() { DEPS=$(cat) fi - LANG=C rpm -q --whatprovides $DEPS 2>/dev/null | awk '!/no package provides/ { print }' + LC_ALL=C LANG=C rpm -q --whatprovides $DEPS 2>/dev/null | awk '!/no package provides/ { print }' } # install deps via information from 'rpm-getdeps' or 'rpm --specsrpm' @@ -1971,12 +2036,16 @@ install_build_requires_rpmdeps() { local DEPS CNFL if [ "$FETCH_BUILD_REQUIRES_RPMGETDEPS" = "yes" ]; then # TODO: Conflicts list doesn't check versions - CNFL=$(rpm-getdeps $BCOND $SPECFILE 2> /dev/null | awk '/^\-/ { print $3 } ' | _rpm_cnfl_check | xargs) - DEPS=$(rpm-getdeps $BCOND $SPECFILE 2> /dev/null | awk '/^\+/ { print $3 } ' | _rpm_prov_check | xargs) + CNFL=$(eval rpm-getdeps $BCOND $RPMOPTS $SPECFILE 2> /dev/null | awk '/^\-/ { print $3 } ' | _rpm_cnfl_check | xargs) + DEPS=$(eval rpm-getdeps $BCOND $RPMOPTS $SPECFILE 2> /dev/null | awk '/^\+/ { print $3 } ' | _rpm_prov_check | xargs) + fi + if [ "$FETCH_BUILD_REQUIRES_RPMSPEC_BINARY" = "yes" ]; then + CNFL=$(eval rpmspec --query --conflicts $BCOND $RPMOPTS $SPECFILE 2> /dev/null | awk '{print $1}' | _rpm_cnfl_check | xargs); + DEPS=$(eval rpmspec --query --buildrequires $BCOND $RPMOPTS $SPECFILE 2> /dev/null | awk '{print $1}' | _rpm_prov_check | xargs); fi if [ "$FETCH_BUILD_REQUIRES_RPMSPECSRPM" = "yes" ]; then - CNFL=$(rpm -q --specsrpm --conflicts $BCOND $SPECFILE | awk '{print $1}' | _rpm_cnfl_check | xargs) - DEPS=$(rpm -q --specsrpm --requires $BCOND $SPECFILE | awk '{print $1}' | _rpm_prov_check | xargs) + CNFL=$(eval rpm -q --specsrpm --conflicts $BCOND $RPMOPTS $SPECFILE | awk '{print $1}' | _rpm_cnfl_check | xargs) + DEPS=$(eval rpm -q --specsrpm --requires $BCOND $RPMOPTS $SPECFILE | awk '{print $1}' | _rpm_prov_check | xargs) fi if [ -n "$CNFL" ]; then @@ -1997,7 +2066,7 @@ fetch_build_requires() fi update_shell_title "fetch build requires" - if [ "$FETCH_BUILD_REQUIRES_RPMGETDEPS" = "yes" ] || [ "$FETCH_BUILD_REQUIRES_RPMSPECSRPM" = "yes" ]; then + if [ "$FETCH_BUILD_REQUIRES_RPMGETDEPS" = "yes" ] || [ "$FETCH_BUILD_REQUIRES_RPMSPECSRPM" = "yes" ] || [ "$FETCH_BUILD_REQUIRES_RPMSPEC_BINARY" = "yes" ]; then install_build_requires_rpmdeps return fi @@ -2010,7 +2079,7 @@ init_repository() { local localrepo=$2 if [ ! -e $localrepo ]; then - git clone -o $REMOTE_PLD ${GIT_SERVER}/$remoterepo $localrepo + git clone $IPOPT -o $REMOTE_PLD ${GIT_SERVER}/$remoterepo $localrepo git --git-dir=$localrepo/.git remote set-url --push $REMOTE_PLD ssh://${GIT_PUSH}/$remoterepo fi } @@ -2029,7 +2098,7 @@ init_rpm_dir() { cd "$TOP_DIR" init_repository ${PACKAGES_DIR}/rpm-build-tools.git ../rpm-build-tools init_repository projects/$TEMPLATES ../$TEMPLATES - for a in adapter builder fetchsrc_request compile repackage; do + for a in builder fetchsrc_request compile repackage; do ln -sf ../rpm-build-tools/${a}.sh $a done for a in md5; do @@ -2066,9 +2135,7 @@ fi while [ $# -gt 0 ]; do case "${1}" in -4|-6) - # NOTE: we should be fetcher specific, like fille WGET_OPTS, but - # unfortunately $GETURI is already formed - GETURI="$GETURI $1" + IPOPT="${1}" shift ;; -5 | --update-md5) @@ -2130,11 +2197,11 @@ while [ $# -gt 0 ]; do --http ) PROTOCOL="http"; shift ;; -j) - RPMOPTS="${RPMOPTS} --define \"_smp_mflags -j$2\"" + RPMOPTS="${RPMOPTS} --define \"__jobs $2\"" shift 2 ;; -j[0-9]*) - RPMOPTS="${RPMOPTS} --define \"_smp_mflags $1\"" + RPMOPTS="${RPMOPTS} --define \"__jobs ${1#-j}\"" shift ;; -p) @@ -2296,7 +2363,7 @@ while [ $# -gt 0 ]; do -Upi | --update-poldek-indexes ) UPDATE_POLDEK_INDEXES="yes" shift ;; - --init-rpm-dir) + --init-rpm-dir|--init) COMMAND="init_rpm_dir" shift ;; -u | --try-upgrade ) @@ -2570,6 +2637,7 @@ case "$COMMAND" in fi get_files $SOURCES $PATCHES check_md5 $SOURCES + fetch_build_requires ;; "update_md5" ) init_builder