#!/bin/bash # wxabicheck # # a crappy little script to check abi btwn wxGTK versions tmpdir=${HOME}/tmp pkgdir=$(portageq pkgdir) if [[ $# -ne 2 ]]; then echo "Usage: $0 oldversion newversion" exit 1 fi # TODO check if these versions even exist, we gave two arguments, etc oldversion=$1 newversion=$2 # Gentoo bits - build a package for both versions FEATURES="-test" emerge --onlydeps -abkv =wxGTK-${oldversion} [[ $? -ne 0 ]] && exit 1 emerge -aBv =wxGTK-${oldversion} [[ $? -ne 0 ]] && exit 1 FEATURES="-test" emerge --onlydeps -abkv =wxGTK-${newversion} [[ $? -ne 0 ]] && exit 1 emerge -aBv =wxGTK-${newversion} [[ $? -ne 0 ]] && exit 1 [[ ! -d ${tmpdir} ]] && mkdir -p "${tmpdir}" for version in ${oldversion} ${newversion}; do mkdir -p "${tmpdir}"/${version} cp "${pkgdir}"/x11-libs/wxGTK-${version}.tbz2 "${tmpdir}"/${version} pushd "${tmpdir}"/${version} > /dev/null tar xf wxGTK-${version}.tbz2 2> /dev/null # file listing find ./usr -print > "${tmpdir}"/${version}.files sed -i -e "s:${version}:wxabicheck:g" "${tmpdir}"/${version}.files # symbol listing pushd "${tmpdir}"/${version}/usr/lib64 > /dev/null for i in *.so; do nm -D --defined-only $i \ | cut -c18- \ | sort \ > "${tmpdir}"/${version}/${i}.symbols nm -D --defined-only -C $i \ | cut -c18- \ | sort \ > "${tmpdir}"/${version}/${i}.symbols-demangled done popd > /dev/null for i in *.symbols-demangled; do grep '^[A-Z].' ${i} \ | sort \ > ${i}-global done popd > /dev/null done pushd "${tmpdir}" > /dev/null echo echo "File Diff" echo "---------" echo diff -U0 ${oldversion}.files ${newversion}.files \ | grep -v '^@@ .* @@$' \ | colordiff #diff -U0 ${oldversion}.files ${newversion}.files > files.diff echo echo "Symbol Diff" echo "-----------" echo for i in $(find . -name *-global -print | cut -d/ -f3 | sort | uniq); do echo ${i//.symbols-demangled-global/} diff -U0 ${oldversion}/"${i}" ${newversion}/"${i}" \ | grep -v '^@@ .* @@$' \ | colordiff echo done popd > /dev/null