X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=builder.sh;h=2daade8e6eb278a629bd93cfdd854139488922b3;hb=7ec99798c543ac5f0761f9c2afbfb70f4f92890f;hp=870b1a855990ccf94cb2c1b1558bac5ad27f63c5;hpb=72b75eeccd04d86a0e7358c0f997fbc758a38e1f;p=packages%2Frpm-build-tools.git diff --git a/builder.sh b/builder.sh index 870b1a8..2daade8 100755 --- a/builder.sh +++ b/builder.sh @@ -38,7 +38,7 @@ 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-2016 Free Penguins". +$VERSION (C) 1999-2020 Free Penguins". CLEAN_PATH="/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin" @@ -114,8 +114,7 @@ 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} @@ -214,13 +213,8 @@ fi 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 @@ -275,16 +269,18 @@ download_axel() { } download_wget() { - local outfile=$1 url=$2 retval - 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 -c -nd -t$WGET_RETRIES $WGET_OPTS $IPOPT" - - ${GETURI} --passive-ftp -O "$outfile" "$url" + 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 -- ' --no-check-certificate ' && WGET_OPTS="$WGET_OPTS --no-check-certificate" + 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 @@ -479,6 +475,23 @@ Usage: builder [--all-branches] [-D|--debug] [-V|--version] [--short-version] [ " } +is_rpmorg() { + local v + + v=$(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; + ;; + esac +} + # create tempfile. as secure as possible tempfile() { local prefix=builder.$PACKAGE_NAME${1:+.$1} @@ -630,8 +643,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 @@ -694,7 +705,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() { @@ -990,7 +1007,7 @@ get_spec() { 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 GIT - 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/*' @@ -1050,15 +1067,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 @@ -1674,11 +1695,12 @@ build_package() { # 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 + unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_TESTING_PORCELAIN_COMMAND_LIST # fail if something still set env | grep ^GIT_ && Exit_error err_build_fail 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=$? @@ -1868,9 +1890,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 "$@" + LANG=C $POLDEK_CMD --noask --caplookup --uniq -ug "$@" } # install packages @@ -1881,7 +1903,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