#!/bin/sh # Test if $ORIGIN works correctly with symlinks (BZ 25263) # Copyright (C) 2025 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # You should have received a copy of the GNU Lesser General Public # License along with the GNU C Library; if not, see # . set -e objpfx=$1 test_wrapper_env=$2 run_program_env=$3 library_path=$4 test_program=$5 test_library=$6 cleanup() { # Move the binary and library back to build directory mv $tmpdir/sub/$test_program ${objpfx}elf mv $tmpdir/sub/$test_library ${objpfx}elf rm -rf $tmpdir } tmpdir=$(mktemp -d "${objpfx}elf/tst-origin.XXXXXXXXXX") trap cleanup 0 mkdir ${tmpdir}/sub # Remove the dependency from $library_path mv ${objpfx}elf/$test_program $tmpdir/sub mv ${objpfx}elf/$test_library $tmpdir/sub cd ${tmpdir} ln -s sub/$test_program $test_program ${test_wrapper_env} \ ${run_program_env} \ ${objpfx}elf/ld.so --library-path "$library_path" \ ./$test_program 2>&1 && rc=0 || rc=$? # Also check if ldd resolves the dependency LD_TRACE_LOADED_OBJECTS=1 \ ${objpfx}elf/ld.so --library-path "$library_path" \ ./$test_program 2>&1 | grep 'not found' && rc=1 || rc=0 exit $rc