I am seeing in mesonbuild/dependencies/pkgconfig.py

        sysroot = environment.properties[for_machine].get_sys_root()
        if sysroot:
            env['PKG_CONFIG_SYSROOT_DIR'] = sysroo

So we probably need to ensure this 'sys_root' is correctly set, and then
things will simply work?

Alex

On Tue, 30 Nov 2021 at 20:15, Joel Winarske <joel.winar...@gmail.com> wrote:

> https://github.com/vkmark/vkmark/blob/master/src/meson.build#L9
>
> On Tue, Nov 30, 2021 at 10:53 AM Alexander Kanavin <alex.kana...@gmail.com>
> wrote:
>
>> I do not quite understand the use case. What is being done with the full
>> path to the header?
>>
>> Alex
>>
>> On Tue, 30 Nov 2021 at 19:26, Joel Winarske <joel.winar...@gmail.com>
>> wrote:
>>
>>> This pattern works to get the absolute path of the header:
>>>
>>> Yocto
>>>
>>>     EXTRA_OEMESON += "--prefix ${STAGING_DIR_TARGET}/usr"
>>>
>>> Meson
>>>
>>>     vulkan_dep = dependency('vulkan')
>>>     vulkan_hpp = join_paths([
>>>         vulkan_dep.get_pkgconfig_variable('includedir', define_variable:
>>> ['prefix', get_option('prefix')]),
>>>         'vulkan',
>>>         'vulkan.hpp'
>>>         ])
>>>
>>> Implementation in build/meson-log.txt
>>>
>>> Called
>>> `/b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/rpi4/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot-native/usr/bin/pkg-config
>>> --define-variable=prefix=/b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/rpi4/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot/usr
>>> --variable=includedir vulkan` -> 0
>>>
>>>
>>> One would expect the following meson to work if STAGING_DIR_TARGET were
>>> set, as that's how pkg-config works:
>>>
>>>     vulkan_dep = dependency('vulkan')
>>>     vulkan_hpp = join_paths([
>>>         vulkan_dep.get_pkgconfig_variable('includedir'),
>>>         'vulkan',
>>>         'vulkan.hpp'
>>>         ])
>>>
>>> This will always return /usr/include/vulkan/vulkan.hpp regardless of
>>> PKG_CONFIG_SYSROOT_DIR value.  With PKG_CONFIG_SYSROOT_DIR set, it should
>>> be /usr/include/vulkan/vulkan.hpp with prepend of PKG_CONFIG_SYSROOT_DIR
>>> value.
>>>
>>>
>>> Sandbox testing of pkg-config
>>>
>>>     $ export
>>> STAGING_DIR_TARGET=/b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/raspberrypi4-64/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot
>>>     $ PKG_CONFIG_SYSROOT_DIR=$STAGING_DIR_TARGET pkg-config
>>> --define-variable=prefix=/opt --variable=includedir vulkan
>>>
>>> /b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/raspberrypi4-64/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot/opt/include
>>>
>>>
>>> meson.cross
>>>
>>> Setting sys_root in the properties section of meson.cross (patching
>>> meson.bbclass) indirectly sets PKG_CONFIG_SYSROOT_DIR.  The setting of
>>> sys_root is present in nativesdk_meson*.bb, not meson*.bb.
>>>
>>> The issue for meson is that they are not passing the
>>> PKG_CONFIG_SYSROOT_DIR variable to the shell that launches pkg-config.
>>>
>>> My proposed work around (this email thread) would fix the behavior.  I
>>> believe the proper fix is for meson to address upstream.  Still waiting on
>>> a response from them: https://github.com/mesonbuild/meson/issues/9674
>>>
>>>
>>> Joel
>>>
>>> On Tue, Nov 30, 2021 at 9:49 AM Alexander Kanavin <
>>> alex.kana...@gmail.com> wrote:
>>>
>>>> On Tue, 30 Nov 2021 at 18:20, Joel Winarske <joel.winar...@gmail.com>
>>>> wrote:
>>>>
>>>>> Meson does not expose PKG_CONFIG_SYSROOT_DIR to the pkg-config process.
>>>>>
>>>>> Currently meson.cross as generated in meson.bbclass points directly to
>>>>> the pkg-config executable (no wrapper script).
>>>>>
>>>>> PKG_CONFIG_SYSROOT_DIR behaves like a simple string prepend to all
>>>>> package config variable queries.  So if you want to determine the absolute
>>>>> path of a variable in .pc you set PKG_CONFIG_SYSROOT_DIR and make your
>>>>> query.  Currently this is not possible with Yocto+Meson.
>>>>>
>>>>> I think a simple wrapper script would resolve this.  This is from
>>>>> https://autotools.io/pkgconfig/cross-compiling.html:
>>>>>
>>>>> #!/bin/sh
>>>>>
>>>>> SYSROOT=/build/root
>>>>>
>>>>> export PKG_CONFIG_PATH=
>>>>> export 
>>>>> PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig
>>>>> export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
>>>>>
>>>>> exec pkg-config "$@"
>>>>>
>>>>>
>>>>> The wrapper script would be generated per recipe via meson.bbclass,
>>>>> meson.cross would then reference this wrapper instead of the pkg-config
>>>>> executable.
>>>>>
>>>>> Thoughts?
>>>>>
>>>>
>>>> I don't think this is correct. Meson's way of doing things is that you
>>>> are not supposed to get the include/library paths directly from pkg-config,
>>>> but rather use
>>>> https://mesonbuild.com/Reference-manual_functions.html#dependency and
>>>> meson will take care of any needed prefixes to the paths.
>>>>
>>>> For the custom variables defined in .pc that happen to contain paths,
>>>> PKG_CONFIG_SYSROOT_DIR has no effect at all, so you need to manually
>>>> prepend it anyway everywhere where they're used. pkg-config does not know
>>>> what variable is a path and what isn't.
>>>>
>>>> Alex
>>>>
>>>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#158990): 
https://lists.openembedded.org/g/openembedded-core/message/158990
Mute This Topic: https://lists.openembedded.org/mt/87407703/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to