]> git.pld-linux.org Git - packages/rpm.git/commitdiff
- new dependency generators:
authorJakub Bogusz <qboosh@pld-linux.org>
Mon, 23 Jun 2003 21:37:30 +0000 (21:37 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
  - wrapping around rpmdeps, bringing _noauto* and package names deps back
  - now it's possible to use global noauto* (through /etc/rpm/noauto* files)
  - should work faster than old external generators with large file lists

Changed files:
    rpm-find-provides-wrapper -> 1.1
    rpm-find-requires-wrapper -> 1.1

rpm-find-provides-wrapper [new file with mode: 0644]
rpm-find-requires-wrapper [new file with mode: 0644]

diff --git a/rpm-find-provides-wrapper b/rpm-find-provides-wrapper
new file mode 100644 (file)
index 0000000..16bcdf6
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+cd `rpm --eval %{_builddir}`
+
+# _noauto* wrapper for builtin rpm Provides generator
+# requires:            /bin/sh, /usr/bin/rpmdeps, coreutils, findutils
+# input (stdin):       filenames (one per line)
+# output (stdout):     Provides list (one per line)
+
+# note that no large list is stored in shell variable - this was VERY slow
+
+ulimit -c 0
+
+noprovfiles=''
+if [ -r __rpm_noautoprovfiles ]; then
+       for i in `cat __rpm_noautoprovfiles`; do
+               noprovfiles="${noprovfiles}\|${i}"
+       done
+fi
+if [ -r /etc/rpm/noautoprovfiles ]; then
+       for i in `cat /etc/rpm/noautoprovfiles | grep -v '^#'`; do
+               noprovfiles="${noprovfiles}\|${i}"
+       done
+fi
+
+noprov=''
+if [ -r __rpm_noautoprov ]; then
+       for i in `cat __rpm_noautoprov`; do
+               noprov="${noprov}\|${i}"
+       done
+fi
+if [ -r /etc/rpm/noautoprov ]; then
+       for i in `cat /etc/rpm/noautoprov | grep -v '^#'`; do
+               noprov="${noprov}\|${i}"
+       done
+fi
+
+# rpmdeps output seems sorted, but resort it in case of long list split
+grep -v -e "^\(${noprovfiles}\)\$" | tr '\n' '\0' | \
+       xargs -r -0 /usr/bin/rpmdeps --provides | LC_ALL=C sort -u | \
+       grep -v -e "^\(${noprov}\)\$"
+
+exit 0
diff --git a/rpm-find-requires-wrapper b/rpm-find-requires-wrapper
new file mode 100644 (file)
index 0000000..253f38f
--- /dev/null
@@ -0,0 +1,70 @@
+#!/bin/sh
+cd `rpm --eval %{_builddir}`
+
+# _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
+
+noreqfiles=''
+if [ -r __rpm_noautoreqfiles ]; then
+       for i in `cat __rpm_noautoreqfiles`; do
+               noreqfiles="${noreqfiles}\|${i}"
+       done
+fi
+if [ -r /etc/rpm/noautoreqfiles ]; then
+       for i in `cat /etc/rpm/noautoreqfiles | grep -v '^#'`; do
+               noreqfiles="${noreqfiles}\|${i}"
+       done
+fi
+
+noreq=''
+if [ -r __rpm_noautoreq ]; then
+       for i in `cat __rpm_noautoreq`; do
+               noreq="${noreq}\|${i}"
+       done
+fi
+if [ -r /etc/rpm/noautoreq ]; then
+       for i in `cat /etc/rpm/noautoreq | grep -v '^#'`; do
+               noreq="${noreq}\|${i}"
+       done
+fi
+
+noreqdep=''
+if [ -r __rpm_noautoreqdep ]; then
+       for i in `cat __rpm_noautoreqdep`; do
+               noreqdep="${noreqdep}\|${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 > ${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 --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
This page took 0.054405 seconds and 4 git commands to generate.