On 16.06.2011 10:59, Allan McRae wrote:
> WTF is the comment "# 64" supposed to mean? 

That is an example content of the soarch variable below (someone
requested those once).

> I also would like
> documentation about why we need the [ -z "$sofile" ] test (reminder: needs 
> adjusted
> to double bracket format). 

Shared objects don't have to have a SONAME and I've noticed packages
that contain .so files without that field, for example libreoffice
(/usr/lib/libreoffice/basis3.4/program/libucbhelper4gcc3.so; there are
more).

> Also, why do we extract "soname" when that should be
> what was already given in the provides array?

It was needed before you changed the patch. I think you can remove it
now, but I don't know if it's possible that the soname and the file name
differ.

> +     local libprovides missing
> +     for p in ${provides[@]}; do
> +             missing=0
> +             case "$p" in
> +                     *.so)
> +                             filename=$(find "$pkgdir" -type f -name $p\*)
> +                             if [[ $filename ]]; then

find could return multiple files. For example Maemo's libcurl package
ships libcurl.so.3 and libcurl.so.4. Just use a for loop and get rid of
the [[ $filename ]] check since the loop won't run without files.

> +                                     # check if we really have a shared 
> object
> +                                     if LC_ALL=C readelf -h "$filename" 
> 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then
> +                                             # 64
> +                                             soarch=$(LC_ALL=C readelf -h 
> "$filename" | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p')
> +                                             # get the string binaries link 
> to: libfoo.so.1.2 -> libfoo.so.1
> +                                             sofile=$(LC_ALL=C readelf -d 
> "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p')
> +                                             [ -z "$sofile" ] && 
> sofile="${$filename##*/}"
> +
> +                                             # extract the library name: 
> libfoo.so
> +                                             soname="${sofile%%\.so\.*}.so"
> +                                             # extract the major version: 1
> +                                             soversion="${sofile##*\.so\.}"
> +
> +                                             libprovides=(${libprovides[@]} 
> "${soname}=${soversion}-${soarch}")
> +                                     else
> +                                             warning "$(gettext "Library 
> listed in %s is not a shared object: %s")" "'provides'" "$p"
> +                                             libprovides=(${libprovides[@]} 
> "$p")
> +                                     fi
> +                             else
> +                                     libprovides=(${libprovides[@]} "$p")
> +                                     missing=1
>                               fi
> -                     fi
> -    fi
> +                             ;;
> +                     *)
> +                             libprovides=(${libprovides[@]} "$p")
> +                             ;;
> +             esac
> +
> +             if (( missing )); then
> +                     warning "$(gettext "Can not find library listed in %s: 
> %s")" "'provides'" "$p"
> +             fi
>       done
> +
> +     echo ${libprovides[@]}
>  }

-- 
Florian Pritz

Attachment: signature.asc
Description: OpenPGP digital signature



Reply via email to