* [PATCH] dracut-functions: additional symlinks for library files
@ 2010-07-07 14:39 Amadeusz Żołnowski
2010-07-21 11:39 ` Harald Hoyer
0 siblings, 1 reply; 2+ messages in thread
From: Amadeusz Żołnowski @ 2010-07-07 14:39 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1: Type: text/plain, Size: 2032 bytes --]
rev_lib_symlinks: it's new
inst_library: creating additional symlinks for installed library files
---
dracut-functions | 35 ++++++++++++++++++++++++++++++++++-
1 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/dracut-functions b/dracut-functions
index 1f2528e..b9b4d43 100755
--- a/dracut-functions
+++ b/dracut-functions
@@ -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() {
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,
--
1.7.1
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] dracut-functions: additional symlinks for library files
2010-07-07 14:39 [PATCH] dracut-functions: additional symlinks for library files Amadeusz Żołnowski
@ 2010-07-21 11:39 ` Harald Hoyer
0 siblings, 0 replies; 2+ messages in thread
From: Harald Hoyer @ 2010-07-21 11:39 UTC (permalink / raw)
To: Amadeusz Żołnowski; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
pushed
On 07/07/2010 04:39 PM, Amadeusz Żołnowski wrote:
> rev_lib_symlinks: it's new
> inst_library: creating additional symlinks for installed library files
> ---
> dracut-functions | 35 ++++++++++++++++++++++++++++++++++-
> 1 files changed, 34 insertions(+), 1 deletions(-)
>
> diff --git a/dracut-functions b/dracut-functions
> index 1f2528e..b9b4d43 100755
> --- a/dracut-functions
> +++ b/dracut-functions
> @@ -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() {
> 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,
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-07-21 11:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-07 14:39 [PATCH] dracut-functions: additional symlinks for library files Amadeusz Żołnowski
2010-07-21 11:39 ` Harald Hoyer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox