[pacman-dev] [PATCH 2/2] makepkg: Search/Add real library names libdepend link to

Dave Reisner d at falconindy.com
Wed May 8 20:08:05 EDT 2013


On Thu, May 09, 2013 at 12:15:29AM +0300, Mohammad Alsaleh wrote:
>   Search library paths for libdepend. If found and its realpath is not
>   of the name scheme "libdepend.ver". Add the real library name to
>   depends.
> 
>   Coupled with code in the libprovides side, this is necessary as the
>   real library name is the one binaries depend on. And it is the one we
>   can obtain version/arch info from.
> 
> Signed-off-by: Mohammad Alsaleh <msal at tormail.org>
> ---
> 
>   Note: parsing library paths from `ldconfig -v` output is relatively
>   slow.
> 
>  scripts/makepkg.sh.in | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 7f4ee25..c4d0020 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -1680,6 +1680,25 @@ tidy_install() {
>  	fi
>  }
>  
> +extra_libdepends() {
> +	local d dfile extra_d extra_dfile
> +
> +	# Search library paths for libdepend.
> +	# If libdepend's file realpath has a different library name, add that name to depends
> +	for d in "${depends[@]}"; do
> +		if [[ $d = *.so ]]; then
> +			while read dfile; do
> +				extra_dfile="$(basename "$(realpath "$dfile")")"

realpath is not portable -- we can't use it. We have a canonicalize_path
function which should be used instead. Calling basename is also
unnecessary when a PE will suffice.

> +				if [[ "$extra_dfile" =~ \.so &&  "${extra_dfile%.so*}.so" != "$d"  ]]; then

regex isn't necessary here when a simple glob will suffice.

> +					extra_d="${extra_dfile%.so*}.so"
> +					depends+=("$extra_d")
> +					warning "$(gettext "Library %s added to %s")" "$extra_d" "'depends'"
> +				fi
> +			done < <(find $(ldconfig -v 2>/dev/null| grep '^/' | sed 's|:||') -type l -maxdepth 1  -name "$d" 2>/dev/null)

Does the flag exist on other libc implementations? Is it even
consistent? I'm extremely wary of parsing the output, especially like
this in conjunction with find.

> +		fi
> +	done
> +}
> +
>  find_libdepends() {
>  	local d sodepends;
>  
> @@ -1846,6 +1865,7 @@ write_pkginfo() {
>  	printf "size = %s\n" "$size"
>  	printf "arch = %s\n" "$pkgarch"
>  
> +	extra_libdepends
>  	extra_libprovides
>  	mapfile -t provides < <(find_libprovides)
>  	mapfile -t depends < <(find_libdepends)
> -- 
> 1.8.2.2
> 
> 


More information about the pacman-dev mailing list