[OE-core] [PATCH v3] insane.bbclass: add library dir sanity check

Richard Purdie richard.purdie at linuxfoundation.org
Fri Sep 14 11:40:40 UTC 2012


On Fri, 2012-09-14 at 12:50 +0300, Radu Moisan wrote:
> Check in ${PKGD} for libraries in other locations
> then ${libdir}. Trigger a warning if so.
> 
> [Yocto #2038]
> 
> Signed-off-by: Radu Moisan <radu.moisan at intel.com>
> ---
>  meta/classes/insane.bbclass |   18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
> index e74eb3f..d748c26 100644
> --- a/meta/classes/insane.bbclass
> +++ b/meta/classes/insane.bbclass
> @@ -212,6 +212,18 @@ def package_qa_check_staticdev(path, name, d, elf, messages):
>          messages.append("non -staticdev package contains static .a library: %s path '%s'" % \
>                   (name, package_qa_clean_path(path,d)))
>  
> +def package_qa_check_libdir(path,libdir):
> +    """
> +    Check in path for libraries in other locations then libdir. Trigger a warning if so.
> +    """
> +    import re
> +    lib_re = re.compile("^.*\.(so)")
> +    for root, dirs, files in os.walk(path):
> +        if libdir not in root:
> +            for file in files:
> +                if lib_re.match(file):
> +                    bb.warn("Found library in wrong location: %s" % os.path.join(root,file))

This is heading in the right direction but this needs to be something
like:

messages = []
for ...:
    ...
    messages.append("Found library in wrong location: %s" % os.path.join(root,file))
if messages:
    package_qa_handle_error("libdir", "\n".join(messages), d)

so that it checks ERROR_QA for libdir and is either a warning or is
fatal.

Pattern wise, this needs to look for \lib.*\.so or ${exec_prefix}\lib.*
\.so and then check it doesn't start with ${base_libdir}/ or ${libdir}/
respectively.

>      """
> @@ -688,6 +700,12 @@ python do_package_qa () {
>              rdepends_sane = False
>  
> 
> +    ml = d.getVar("MLPREFIX", True) or ""
> +    if ml:
> +        pkgd = d.getVar('PKGD', True)
> +        libdir = d.getVar("libdir", True)
> +        package_qa_check_libdir(pkgd,libdir)
> +

With the above changes, this doesn't need to be multilib specific. It
will likely show more warnings on multilib builds at least.

I'd also appreciate a list of failures on a world mulitlib build (you
should be able to set that away in the background and generate it) to
see how widespread any problems might be.

Cheers,

Richard






More information about the Openembedded-core mailing list