Files
UnrealEngine/Engine/Source/ThirdParty/openexr/openexr-3.3.2/share/util/abi_checker.sh
2025-05-18 13:04:45 +08:00

110 lines
3.3 KiB
Bash

#! /bin/bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright Contributors to the OpenEXR Project.
buildtype=Debug
cflags="-ggdb3 -Og"
lib_names=(Iex IlmThread OpenEXRCore OpenEXR OpenEXRUtil)
libver_old=v3.1.7
sonames_old=(libIex-3_1_d.so.30.7.1 libIlmThread-3_1_d.so.30.7.1 libOpenEXRCore-3_1_d.so.30.7.1 libOpenEXRUtil-3_1_d.so.30.7.1 libOpenEXR-3_1_d.so.30.7.1)
libver_new=RB-3.1
sonames_new=(libIex-3_1_d.so.30.8.1 libIlmThread-3_1_d.so.30.8.1 libOpenEXRCore-3_1_d.so.30.8.1 libOpenEXRUtil-3_1_d.so.30.8.1 libOpenEXR-3_1_d.so.30.8.1)
srcdir=`pwd`
if [[ "$1" == distclean ]]; then
rm -rf abi_check
fi
mkdir -p abi_check
export PATH=${srcdir}/abi_check/bin:${PATH}
cd abi_check
if [[ ! -e bin/vtable-dumper ]]; then
mkdir -p src
cd src
git clone https://github.com/lvc/vtable-dumper
cd vtable-dumper
make
make install prefix=${srcdir}/abi_check
cd ${srcdir}/abi_check
fi
if [[ ! -e bin/abi-dumper ]]; then
mkdir -p src
cd src
git clone https://github.com/lvc/abi-dumper
cd abi-dumper
perl Makefile.pl -install --prefix=${srcdir}/abi_check
cd ${srcdir}/abi_check
fi
if [[ ! -e bin/abi-compliance-checker ]]; then
mkdir -p src
cd src
git clone https://github.com/lvc/abi-compliance-checker
cd abi-compliance-checker
perl Makefile.pl -install --prefix=${srcdir}/abi_check
cd ${srcdir}/abi_check
fi
builddir_v1=build.${libver_old}
builddir_v2=build.${libver_new}
instdir_v1=inst.${libver_old}
instdir_v2=inst.${libver_new}
if [[ "$1" == clean ]]; then
rm -rf ${builddir_v1}
rm -rf ${builddir_v2}
rm -rf ${instdir_v1}
rm -rf ${instdir_v2}
rm -rf abidumps
fi
curhash=`git branch --show-current`
if [[ "${curhash}" == "" ]]; then
curhash=`git rev-parse HEAD`
fi
if [[ ! -e ${instdir_v1} ]]; then
rm -rf ${builddir_v1}
git checkout ${libver_old} || exit 1
cmake -B ${builddir_v1} -S ${srcdir} -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=OFF -DCMAKE_C_FLAGS="${cflags}" -DCMAKE_CXX_FLAGS="${cflags}" -DCMAKE_INSTALL_PREFIX=${srcdir}/abi_check/${instdir_v1} || exit 1
ninja -C ${builddir_v1} install || exit 1
git checkout ${curhash}
fi
if [[ ! -e ${instdir_v2} ]]; then
rm -rf ${builddir_v2}
git checkout ${libver_new} || exit 1
cmake -B ${builddir_v2} -S ${srcdir} -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=OFF -DCMAKE_C_FLAGS="${cflags}" -DCMAKE_CXX_FLAGS="${cflags}" -DCMAKE_INSTALL_PREFIX=${srcdir}/abi_check/${instdir_v2} || exit 1
ninja -C ${builddir_v2} install || exit 1
git checkout ${curhash}
fi
len=${#lib_names[@]}
mkdir -p abidumps/${libver_old}
mkdir -p abidumps/${libver_new}
for (( i=0; i<$len; i++ ));
do
name=${lib_names[$i]}
echo "Processing ${name}"
abi-dumper ${instdir_v1}/lib/${sonames_old[$i]} -o abidumps/${libver_old}/ABI-${name}.dump -vnum ${libver_old} -skip-cxx -all-symbols
abi-dumper ${instdir_v2}/lib/${sonames_new[$i]} -o abidumps/${libver_new}/ABI-${name}.dump -vnum ${libver_new} -skip-cxx -all-symbols
abi-compliance-checker -l ${name} -d1 abidumps/${libver_old}/ABI-${name}.dump -v1 ${libver_old} -d2 abidumps/${libver_new}/ABI-${name}.dump -v2 ${libver_new}
done
echo "Reports should be at:"
for (( i=0; i<$len; i++ ));
do
name=${lib_names[$i]}
echo "${name}: file://${srcdir}/abi_check/compat_reports/${name}/${libver_old}_to_${libver_new}/compat_report.html"
done