#!/bin/sh # _noauto* wrapper for builtin rpm Requires generator # requires: /bin/sh, /usr/bin/rpmdeps, rpm, coreutils, findutils. mktemp # input (stdin): filenames (one per line) # output (stdout): Requires list (one per line) # note that no large list is stored in shell variable - this was VERY slow ulimit -c 0 PERLOPT="--define=__perl_requires /bin/sh -c 'cat >/dev/null'" PERLOPT2="--define=__perl_provides /bin/sh -c 'cat >/dev/null'" PHPOPT="--define=__php_requires /bin/sh -c 'cat >/dev/null'" PHPOPT2="--define=__php_provides /bin/sh -c 'cat >/dev/null'" PROVARG="" NOPROVFILES="" NOPROV="" noreqfiles='' noreq='' noreqdep='' while [ $# -gt 0 ]; do case "$1" in --with-perl) PERLOPT="" PERLOPT2="" PROVARG="$PROVARG --with-perl" ;; --with-php) PHPOPT="" PHPOPT2="" PROVARG="$PROVARG --with-php" ;; --buildroot=*) buildroot="${1#--buildroot=}" PROVARG="$PROVARG $1" ;; --noautoprovfiles=*) NOPROVFILES="$1" ;; --noautoprov=*) NOPROV="$1" ;; --noautoreqfiles=*) for i in ${1#--noautoreqfiles=} ; do noreqfiles="${noreqfiles}\|${buildroot}${i}" done ;; --noautoreq=*) for i in ${1#--noautoreq=} ; do noreq="${noreq}\|${i}" done ;; --noautoreqdep=*) for i in ${1#--noautoreqdep=} ; do noreqdep="${noreqdep}\|${i}" done esac shift done if [ -r /etc/rpm/noautoreqfiles ]; then for i in `cat /etc/rpm/noautoreqfiles | grep -v '^#'`; do noreqfiles="${noreqfiles}\|${buildroot}${i}" done fi if [ -r /etc/rpm/noautoreq ]; then for i in `cat /etc/rpm/noautoreq | grep -v '^#'`; do noreq="${noreq}\|${i}" done fi if [ -r /etc/rpm/noautoreqdep ]; then for i in `cat /etc/rpm/noautoreqdep | grep -v '^#'`; do noreqdep="${noreqdep}\|${i}" done fi FILES=`mktemp ${TMPDIR:-/tmp}/.rpmfilesXXXXXX` PROVS=`mktemp ${TMPDIR:-/tmp}/.rpmprovsXXXXXX` REQS=`mktemp ${TMPDIR:-/tmp}/.rpmreqsXXXXXX` # we must duplicate file list here (to remove Provides list from Requires) tee ${FILES} | \ /usr/lib/rpm/find-provides-wrapper ${PROVARG} "${NOPROVFILES}" "${NOPROV}" \ > ${PROVS} # rpmdeps output seems sorted, but resort it in case of long list split grep -v -e "^\(${noreqfiles}\)\$" ${FILES} | tr '\n' '\0' | \ xargs -r -0 /usr/bin/rpmdeps "${PERLOPT}" "${PERLOPT2}" \ "${PHPOPT}" "${PHPOPT2}" --requires | \ LC_ALL=C sort -u | grep -v -e "^\(${noreq}\)\$" | \ LC_ALL=C comm -2 -3 - ${PROVS} | tee ${REQS} # package names only for SONAMES, perl(module) and pear(module) grep -e '.\+\.so\|perl(.\+)\|pear(.\+)' ${REQS} | \ grep -v -e "^\(${noreqdep}\)\$" | tr '\n' '\0' | \ LC_ALL=C xargs -r -0 -- rpm -q --whatprovides --qf '%{NAME}\n' 2>/dev/null | \ grep -v "no package provides" | LC_ALL=C sort -u rm -f ${FILES} ${PROVS} ${REQS} exit 0