2003-03-27 Roland McGrath <roland@redhat.com>
authorRoland McGrath <roland@gnu.org>
Thu, 27 Mar 2003 22:48:49 +0000 (22:48 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 27 Mar 2003 22:48:49 +0000 (22:48 +0000)
* scripts/rpm2dynsym.sh: New file.
* Makefile (distribute): Add it.

Makefile
scripts/rpm2dynsym.sh [new file with mode: 0755]

index d09792c..2ddc01e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -283,7 +283,9 @@ distribute  :=      README README.libm INSTALL FAQ FAQ.in NOTES NEWS BUGS   \
                            gen-sorted.awk abi-versions.awk abilist.awk \
                            firstversions.awk documented.sh cpp         \
                            output-format.sed gen-as-const.awk          \
-                           merge-abilist.awk extract-abilist.awk)      \
+                           merge-abilist.awk extract-abilist.awk       \
+                           rpm2dynsym.sh                               \
+                           )
                $(wildcard abilist/*.abilist)
 
 distribute := $(strip $(distribute))
diff --git a/scripts/rpm2dynsym.sh b/scripts/rpm2dynsym.sh
new file mode 100755 (executable)
index 0000000..ce3fc40
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# This script takes rpm package files, finds *.so.N files in them,
+# and runs objdump --dynamic-syms on them.  The arguments are rpm file
+# names.  For each rpm, it creates an output file with the name
+# "NAME-VERSION-RELEASE.ARCH.dynsym", the variable parts being extracted
+# from the rpm's headers (not its file name).  Each file contains the
+# collected objdump output for all the *.so.N files in the corresponding rpm.
+# This can be processed with abilist.awk or sent to someone who will do that.
+# This does not do a lot of error-checking, so you should always watch stderr
+# and sanity-check the resulting output files.
+
+RPM=${RPM:-rpm}
+RPM2CPIO=${RPM2CPIO:-rpm2cpio}
+CPIO=${CPIO:-cpio}
+OBJDUMP=${OBJDUMP:-objdump}
+
+unpackdir=/tmp/rpm2dynsym$$
+trap 'rm -rf $unpackdir' 0 1 2 15
+
+for rpm; do
+  name=`$RPM -qp $rpm --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'`
+  mkdir $unpackdir || exit
+  $RPM2CPIO "$rpm" | {
+    cd $unpackdir
+    $CPIO -i -d --no-absolute-filenames -uv '*.so.*' '*.so' 2>&1 |
+    while read file b; do
+      test x"$b" = x || break
+      case "$file" in
+      *.so.[0-9]*) $OBJDUMP --dynamic-syms $file ;;
+      esac
+    done
+  } > $name.dynsym
+  echo wrote $name.dynsym for $rpm
+  rm -rf $unpackdir
+done