diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2008-05-28 12:29:23 (GMT) |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2008-05-28 12:29:23 (GMT) |
commit | dd00c212272e6871983421a480475becc3cdbd40 (patch) | |
tree | 10885e50c4b7783d516e271f7ac726cc9a0fb479 /tests/set-rpath-library.sh | |
parent | 36f96d03dba4a3bf19a3a228786aac5e69ea85d2 (diff) | |
download | patchelf-dd00c212272e6871983421a480475becc3cdbd40.zip patchelf-dd00c212272e6871983421a480475becc3cdbd40.tar.gz patchelf-dd00c212272e6871983421a480475becc3cdbd40.tar.bz2 |
* A test for setting the rpath on a library.
Diffstat (limited to 'tests/set-rpath-library.sh')
-rwxr-xr-x | tests/set-rpath-library.sh | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/set-rpath-library.sh b/tests/set-rpath-library.sh new file mode 100755 index 0000000..9800d0e --- /dev/null +++ b/tests/set-rpath-library.sh @@ -0,0 +1,57 @@ +#! /bin/sh -e + +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 --force-rpath --set-rpath $oldRPath:$(pwd)/scratch/libsA:$(pwd)/scratch/libsB scratch/main-scoped + +#oldRPath=$(../src/patchelf --print-rpath scratch/libsB/libbar.so) +#if test -z "$oldRPath"; then oldRPath="/oops"; fi +#../src/patchelf --set-rpath $oldRPath:$(pwd)/scratch/libsC scratch/libsB/libbar.so + +# "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" + exit 1 +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 |