autoPatchelfHook: Add addAutoPatchelfSearchPath
This function is useful if autoPatchelf is invoked during some of the phases of a build and allows to add arbitrary shared objects to the search path. So far the same functionality was in autoPatchelf itself, but not available as a separate function, so when adding shared objects to the dependency cache one would have to do so manually. The function also has the --no-recurse flag, which prevents recursing into subdirectories. Signed-off-by: aszlig <aszlig@nix.build>
This commit is contained in:
parent
503b41b9b2
commit
2faf905f98
@ -147,13 +147,38 @@ autoPatchelfFile() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
autoPatchelf() {
|
# Can be used to manually add additional directories with shared object files
|
||||||
|
# to be included for the next autoPatchelf invocation.
|
||||||
|
addAutoPatchelfSearchPath() {
|
||||||
local -a findOpts=()
|
local -a findOpts=()
|
||||||
|
|
||||||
|
# XXX: Somewhat similar to the one in the autoPatchelf function, maybe make
|
||||||
|
# it DRY someday...
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--) shift; break;;
|
--) shift; break;;
|
||||||
--no-recurse) shift; findOpts+=("-maxdepth" 1);;
|
--no-recurse) shift; findOpts+=("-maxdepth" 1);;
|
||||||
|
--*)
|
||||||
|
echo "addAutoPatchelfSearchPath: ERROR: Invalid command line" \
|
||||||
|
"argument: $1" >&2
|
||||||
|
return 1;;
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
cachedDependencies+=(
|
||||||
|
$(find "$@" "${findOpts[@]}" \! -type d \
|
||||||
|
\( -name '*.so' -o -name '*.so.*' \))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
autoPatchelf() {
|
||||||
|
local -a norecurse=
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--) shift; break;;
|
||||||
|
--no-recurse) shift; norecurse=1;;
|
||||||
--*)
|
--*)
|
||||||
echo "autoPatchelf: ERROR: Invalid command line" \
|
echo "autoPatchelf: ERROR: Invalid command line" \
|
||||||
"argument: $1" >&2
|
"argument: $1" >&2
|
||||||
@ -171,11 +196,7 @@ autoPatchelf() {
|
|||||||
|
|
||||||
# Add all shared objects of the current output path to the start of
|
# Add all shared objects of the current output path to the start of
|
||||||
# cachedDependencies so that it's choosen first in findDependency.
|
# cachedDependencies so that it's choosen first in findDependency.
|
||||||
cachedDependencies+=(
|
addAutoPatchelfSearchPath ${norecurse:+--no-recurse} -- "$@"
|
||||||
$(find "$@" "${findOpts[@]}" \! -type d \
|
|
||||||
\( -name '*.so' -o -name '*.so.*' \))
|
|
||||||
)
|
|
||||||
local elffile
|
|
||||||
|
|
||||||
# Here we actually have a subshell, which also means that
|
# Here we actually have a subshell, which also means that
|
||||||
# $cachedDependencies is final at this point, so whenever we want to run
|
# $cachedDependencies is final at this point, so whenever we want to run
|
||||||
@ -189,7 +210,7 @@ autoPatchelf() {
|
|||||||
LANG=C readelf -l "$file" | grep -q "^ *INTERP\\>" || continue
|
LANG=C readelf -l "$file" | grep -q "^ *INTERP\\>" || continue
|
||||||
fi
|
fi
|
||||||
autoPatchelfFile "$file"
|
autoPatchelfFile "$file"
|
||||||
done < <(find "$@" "${findOpts[@]}" -type f -print0)
|
done < <(find "$@" ${norecurse:+-maxdepth 1} -type f -print0)
|
||||||
}
|
}
|
||||||
|
|
||||||
# XXX: This should ultimately use fixupOutputHooks but we currently don't have
|
# XXX: This should ultimately use fixupOutputHooks but we currently don't have
|
||||||
|
Loading…
x
Reference in New Issue
Block a user