3 # _noauto* wrapper for builtin rpm Requires generator
4 # requires: /bin/sh, /usr/bin/rpmdeps, rpm, coreutils, findutils. mktemp
5 # input (stdin): filenames (one per line)
6 # output (stdout): Requires list (one per line)
8 # note that no large list is stored in shell variable - this was VERY slow
12 PERLOPT="--define=__perl_requires /bin/true"
13 PHPOPT="--define=__php_requires /bin/true"
20 while [ $# -gt 0 ]; do
24 PROVARG="$PROVARG --with-perl"
28 PROVARG="$PROVARG --with-php"
31 buildroot="${1#--buildroot=}"
41 for i in ${1#--noautoreqfiles=} ; do
42 noreqfiles="${noreqfiles}\|${buildroot}${i}"
46 for i in ${1#--noautoreq=} ; do
47 noreq="${noreq}\|${i}"
51 for i in ${1#--noautoreqdep=} ; do
52 noreqdep="${noreqdep}\|${i}"
58 if [ -r /etc/rpm/noautoreqfiles ]; then
59 for i in `cat /etc/rpm/noautoreqfiles | grep -v '^#'`; do
60 noreqfiles="${noreqfiles}\|${buildroot}${i}"
64 if [ -r /etc/rpm/noautoreq ]; then
65 for i in `cat /etc/rpm/noautoreq | grep -v '^#'`; do
66 noreq="${noreq}\|${i}"
70 if [ -r /etc/rpm/noautoreqdep ]; then
71 for i in `cat /etc/rpm/noautoreqdep | grep -v '^#'`; do
72 noreqdep="${noreqdep}\|${i}"
76 FILES=`mktemp ${TMPDIR:-/tmp}/.rpmfilesXXXXXX`
77 PROVS=`mktemp ${TMPDIR:-/tmp}/.rpmprovsXXXXXX`
78 REQS=`mktemp ${TMPDIR:-/tmp}/.rpmreqsXXXXXX`
80 # we must duplicate file list here (to remove Provides list from Requires)
82 /usr/lib/rpm/find-provides-wrapper ${PROVARG} "${NOPROVFILES}" "${NOPROV}" \
85 # rpmdeps output seems sorted, but resort it in case of long list split
86 grep -v -e "^\(${noreqfiles}\)\$" ${FILES} | tr '\n' '\0' | \
87 xargs -r -0 /usr/bin/rpmdeps "${PERLOPT}" "${PHPOPT}" --requires | \
88 LC_ALL=C sort -u | grep -v -e "^\(${noreq}\)\$" | \
89 LC_ALL=C comm -2 -3 - ${PROVS} | tee ${REQS}
91 # package names only for SONAMES, perl(module) and pear(module)
92 grep -e '.\+\.so\|perl(.\+)\|pear(.\+)' ${REQS} | \
93 grep -v -e "^\(${noreqdep}\)\$" | tr '\n' '\0' | \
94 LC_ALL=C xargs -r -0 -- rpm -q --whatprovides --qf '%{NAME}\n' 2>/dev/null | \
95 grep -v "no package provides" | LC_ALL=C sort -u
97 rm -f ${FILES} ${PROVS} ${REQS}