Browse Source

dracut-functions: additional symlinks for library files

rev_lib_symlinks: it's new
inst_library: creating additional symlinks for installed library files
master
Amadeusz Żołnowski 15 years ago committed by Harald Hoyer
parent
commit
a10a1416c1
  1. 35
      dracut-functions

35
dracut-functions

@ -226,11 +226,36 @@ inst_simple() { @@ -226,11 +226,36 @@ inst_simple() {
cp -pfL "$src" "${initdir}$target"
}

# find symlinks linked to given library file
# $1 = library file
# Function searches for symlinks by stripping version numbers appended to
# library filename, checks if it points to the same target and finally
# prints the list of symlinks to stdout.
#
# Example:
# rev_lib_symlinks libfoo.so.8.1
# output: libfoo.so.8 libfoo.so
# (Only if libfoo.so.8 and libfoo.so exists on host system.)
rev_lib_symlinks() {
[[ ! $1 ]] && return 0

local fn="$1" orig="$(readlink -f "$1")" links=''

[[ ${fn} =~ .*\.so\..* ]] || return 1

until [[ ${fn##*.} == so ]]; do
fn="${fn%.*}"
[[ -L ${fn} && $(readlink -f "${fn}") == ${orig} ]] && links+=" ${fn}"
done

echo ${links}
}

# Same as above, but specialized to handle dynamic libraries.
# It handles making symlinks according to how the original library
# is referenced.
inst_library() {
local src=$1 dest=${2:-$1}
local src=$1 dest=${2:-$1} lib reallib symlink
[[ -e $initdir$dest ]] && return 0
if [[ -L $src ]]; then
reallib=$(readlink -f "$src")
@ -241,6 +266,14 @@ inst_library() { @@ -241,6 +266,14 @@ inst_library() {
else
inst_simple "$src" "$dest"
fi

# Create additional symlinks. See rev_symlinks description.
for symlink in $(rev_lib_symlinks $src) $(rev_lib_symlinks $reallib); do
[[ ! -e $initdir$symlink ]] && {
dinfo "Creating extra symlink: $symlink"
inst_symlink $symlink
}
done
}

# find a binary. If we were not passed the full path directly,

Loading…
Cancel
Save