#!/bin/sh -e export LC_ALL=C [ $# = 2 ] || pod2usage --exit=2 "$0" rpm1="$1" rpm2="$2" dir1= dir2= cleanup() { local rc=$? trap - EXIT rm -rf $dir1 $dir2 exit $rc } trap cleanup EXIT HUP INT QUIT PIPE TERM dir1=`mktemp -d -t rpmsymver.XXXXXXXX` dir2=`mktemp -d -t rpmsymver.XXXXXXXX` rpm -qp --provides "$rpm1" >$dir1/provides rpm -qp --provides "$rpm2" >$dir2/provides awk '$1~/^lib.*[.]so[^(]*$/{print$1}' $dir1/provides |sort -u >$dir1/libraries awk '$1~/^lib.*[.]so[^(]*$/{print$1}' $dir2/provides |sort -u >$dir2/libraries workdir=$dir1 comm -12 $dir1/libraries $dir2/libraries >$workdir/common [ -s $workdir/common ] || { echo "$rpm1: no common libraries with $rpm2" >&2; exit 0; } rpm2cpio "$rpm1" |(cd $dir1; cpio -idmu --quiet) rpm2cpio "$rpm2" |(cd $dir2; cpio -idmu --quiet) while read -r lib; do lib1="$(find $dir1 -name "$lib" |head -1)" lib2="$(find $dir2 -name "$lib" |head -1)" [ -f "$lib1" ] || { echo "lib=$lib lib1=$lib1" >&2; exit 1; } [ -f "$lib2" ] || { echo "lib=$lib lib2=$lib2" >&2; exit 1; } nm -D "$lib1" |awk 'NF==3{print$2,$3}' |sort -u >"$lib1".sym nm -D "$lib2" |awk 'NF==3{print$2,$3}' |sort -u >"$lib2".sym diff -U1 "$lib1".sym "$lib2".sym >$workdir/diff || [ $? = 1 ] sed -e "s@$dir1@${rpm1##*/}@g" \ -e "s@$dir2@${rpm2##*/}@g" $workdir/diff done <$workdir/common : <<'__EOF__' =head1 NAME rpmsymver - compare symbol versioning =head1 SYNOPSIS B I I =cut __EOF__