https://github.com/vkmark/vkmark/blob/master/src/meson.build#L9 On Tue, Nov 30, 2021 at 10:53 AM Alexander Kanavin 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 > 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 >> wrote: >> >>> On Tue, 30 Nov 2021 at 18:20, Joel Winarske >>> 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 >>> >>