]>
Commit | Line | Data |
---|---|---|
0b3acdf9 | 1 | #!/bin/sh |
0b3acdf9 JB |
2 | |
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) | |
7 | ||
8 | # note that no large list is stored in shell variable - this was VERY slow | |
9 | ||
10 | ulimit -c 0 | |
11 | ||
1cee2a54 | 12 | PERLOPT="--define=__perl_requires /bin/sh -c 'cat >/dev/null'" |
e3197275 | 13 | PERLOPT2="--define=__perl_provides /bin/sh -c 'cat >/dev/null'" |
1cee2a54 | 14 | PHPOPT="--define=__php_requires /bin/sh -c 'cat >/dev/null'" |
e3197275 | 15 | PHPOPT2="--define=__php_provides /bin/sh -c 'cat >/dev/null'" |
0ad25a07 JB |
16 | PROVARG="" |
17 | NOPROVFILES="" | |
18 | NOPROV="" | |
0b3acdf9 | 19 | noreqfiles='' |
0ad25a07 JB |
20 | noreq='' |
21 | noreqdep='' | |
22 | while [ $# -gt 0 ]; do | |
23 | case "$1" in | |
24 | --with-perl) | |
25 | PERLOPT="" | |
e3197275 | 26 | PERLOPT2="" |
0ad25a07 JB |
27 | PROVARG="$PROVARG --with-perl" |
28 | ;; | |
29 | --with-php) | |
30 | PHPOPT="" | |
e3197275 | 31 | PHPOPT2="" |
0ad25a07 JB |
32 | PROVARG="$PROVARG --with-php" |
33 | ;; | |
34 | --buildroot=*) | |
35 | buildroot="${1#--buildroot=}" | |
36 | PROVARG="$PROVARG $1" | |
37 | ;; | |
38 | --noautoprovfiles=*) | |
39 | NOPROVFILES="$1" | |
40 | ;; | |
41 | --noautoprov=*) | |
42 | NOPROV="$1" | |
43 | ;; | |
44 | --noautoreqfiles=*) | |
45 | for i in ${1#--noautoreqfiles=} ; do | |
46 | noreqfiles="${noreqfiles}\|${buildroot}${i}" | |
47 | done | |
48 | ;; | |
49 | --noautoreq=*) | |
50 | for i in ${1#--noautoreq=} ; do | |
51 | noreq="${noreq}\|${i}" | |
52 | done | |
53 | ;; | |
54 | --noautoreqdep=*) | |
55 | for i in ${1#--noautoreqdep=} ; do | |
56 | noreqdep="${noreqdep}\|${i}" | |
57 | done | |
58 | esac | |
59 | shift | |
60 | done | |
61 | ||
0b3acdf9 JB |
62 | if [ -r /etc/rpm/noautoreqfiles ]; then |
63 | for i in `cat /etc/rpm/noautoreqfiles | grep -v '^#'`; do | |
0ad25a07 | 64 | noreqfiles="${noreqfiles}\|${buildroot}${i}" |
0b3acdf9 JB |
65 | done |
66 | fi | |
67 | ||
0b3acdf9 JB |
68 | if [ -r /etc/rpm/noautoreq ]; then |
69 | for i in `cat /etc/rpm/noautoreq | grep -v '^#'`; do | |
70 | noreq="${noreq}\|${i}" | |
71 | done | |
72 | fi | |
73 | ||
0b3acdf9 JB |
74 | if [ -r /etc/rpm/noautoreqdep ]; then |
75 | for i in `cat /etc/rpm/noautoreqdep | grep -v '^#'`; do | |
76 | noreqdep="${noreqdep}\|${i}" | |
77 | done | |
78 | fi | |
79 | ||
80 | FILES=`mktemp ${TMPDIR:-/tmp}/.rpmfilesXXXXXX` | |
81 | PROVS=`mktemp ${TMPDIR:-/tmp}/.rpmprovsXXXXXX` | |
82 | REQS=`mktemp ${TMPDIR:-/tmp}/.rpmreqsXXXXXX` | |
83 | ||
84 | # we must duplicate file list here (to remove Provides list from Requires) | |
0ad25a07 JB |
85 | tee ${FILES} | \ |
86 | /usr/lib/rpm/find-provides-wrapper ${PROVARG} "${NOPROVFILES}" "${NOPROV}" \ | |
87 | > ${PROVS} | |
0b3acdf9 JB |
88 | |
89 | # rpmdeps output seems sorted, but resort it in case of long list split | |
90 | grep -v -e "^\(${noreqfiles}\)\$" ${FILES} | tr '\n' '\0' | \ | |
e3197275 JB |
91 | xargs -r -0 /usr/bin/rpmdeps "${PERLOPT}" "${PERLOPT2}" \ |
92 | "${PHPOPT}" "${PHPOPT2}" --requires | \ | |
0ad25a07 | 93 | LC_ALL=C sort -u | grep -v -e "^\(${noreq}\)\$" | \ |
0b3acdf9 JB |
94 | LC_ALL=C comm -2 -3 - ${PROVS} | tee ${REQS} |
95 | ||
96 | # package names only for SONAMES, perl(module) and pear(module) | |
97 | grep -e '.\+\.so\|perl(.\+)\|pear(.\+)' ${REQS} | \ | |
98 | grep -v -e "^\(${noreqdep}\)\$" | tr '\n' '\0' | \ | |
99 | LC_ALL=C xargs -r -0 -- rpm -q --whatprovides --qf '%{NAME}\n' 2>/dev/null | \ | |
100 | grep -v "no package provides" | LC_ALL=C sort -u | |
101 | ||
102 | rm -f ${FILES} ${PROVS} ${REQS} | |
103 | ||
104 | exit 0 |