Files
patchelf/tests/set-rpath-library.sh
Michael Koloberdin ceafc00e88 tests: Do not exit on an expected failure code.
The comment in the code below the patched line
clearly suggests that it should go on in this case.
This condition occurs on Alpine Linux (musl-libc-based):
http://patchwork.alpinelinux.org/patch/2206/
2016-07-10 03:53:01 +03:00

59 lines
1.6 KiB
Bash
Executable File

#! /bin/sh -e
SCRATCH=scratch/$(basename $0 .sh)
if test "$(uname)" = FreeBSD; then
echo "skipping on FreeBSD"
exit 0
fi
rm -rf ${SCRATCH}
mkdir -p ${SCRATCH}
mkdir -p ${SCRATCH}/libsA
mkdir -p ${SCRATCH}/libsB
cp main-scoped ${SCRATCH}/
cp libfoo-scoped.so ${SCRATCH}/libsA/
cp libbar-scoped.so ${SCRATCH}/libsB/
oldRPath=$(../src/patchelf --print-rpath ${SCRATCH}/main-scoped)
if test -z "$oldRPath"; then oldRPath="/oops"; fi
../src/patchelf --set-rpath $oldRPath:$(pwd)/${SCRATCH}/libsA:$(pwd)/${SCRATCH}/libsB ${SCRATCH}/main-scoped
# "main" contains libbar in its RUNPATH, but that's ignored when
# resolving libfoo. So libfoo won't find libbar and this will fail.
exitCode=0
(cd ${SCRATCH} && ./main-scoped) || exitCode=$?
if test "$exitCode" = 46; then
echo "expected failure"
fi
# So set an RUNPATH on libfoo as well.
oldRPath=$(../src/patchelf --print-rpath ${SCRATCH}/libsA/libfoo-scoped.so)
if test -z "$oldRPath"; then oldRPath="/oops"; fi
../src/patchelf --set-rpath $oldRPath:$(pwd)/${SCRATCH}/libsB ${SCRATCH}/libsA/libfoo-scoped.so
exitCode=0
(cd ${SCRATCH} && ./main-scoped) || exitCode=$?
if test "$exitCode" != 46; then
echo "bad exit code!"
exit 1
fi
# Remove the libbar PATH from main using --shrink-rpath.
../src/patchelf --shrink-rpath ${SCRATCH}/main-scoped
if ../src/patchelf --print-rpath ${SCRATCH}/main-scoped | grep /libsB; then
echo "shrink failed"
exit 1
fi
# And it should still run.
exitCode=0
(cd ${SCRATCH} && ./main-scoped) || exitCode=$?
if test "$exitCode" != 46; then
echo "bad exit code!"
exit 1
fi