]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-find-requires-wrapper
- include --x-libraries=/usr/X11R6/%{_lib} in %configure macros
[packages/rpm.git] / rpm-find-requires-wrapper
1 #!/bin/sh
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
12 PERLOPT="--define=__perl_requires /bin/sh -c 'cat >/dev/null'"
13 PERLOPT2="--define=__perl_provides /bin/sh -c 'cat >/dev/null'"
14 PHPOPT="--define=__php_requires /bin/sh -c 'cat >/dev/null'"
15 PHPOPT2="--define=__php_provides /bin/sh -c 'cat >/dev/null'"
16 PROVARG=""
17 NOPROVFILES=""
18 NOPROV=""
19 noreqfiles=''
20 noreq=''
21 noreqdep=''
22 while [ $# -gt 0 ]; do
23         case "$1" in
24           --with-perl)
25                 PERLOPT=""
26                 PERLOPT2=""
27                 PROVARG="$PROVARG --with-perl"
28                 ;;
29           --with-php)
30                 PHPOPT=""
31                 PHPOPT2=""
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
62 if [ -r /etc/rpm/noautoreqfiles ]; then
63         for i in `cat /etc/rpm/noautoreqfiles | grep -v '^#'`; do
64                 noreqfiles="${noreqfiles}\|${buildroot}${i}"
65         done
66 fi
67
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
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)
85 tee ${FILES} | \
86         /usr/lib/rpm/find-provides-wrapper ${PROVARG} "${NOPROVFILES}" "${NOPROV}" \
87         > ${PROVS}
88
89 # rpmdeps output seems sorted, but resort it in case of long list split
90 grep -v -e "^\(${noreqfiles}\)\$" ${FILES} | tr '\n' '\0' | \
91         xargs -r -0 /usr/bin/rpmdeps "${PERLOPT}" "${PERLOPT2}" \
92                 "${PHPOPT}" "${PHPOPT2}" --requires | \
93         LC_ALL=C sort -u | grep -v -e "^\(${noreq}\)\$" | \
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
This page took 0.034346 seconds and 3 git commands to generate.