The qemu_find_file method impl is rather crude with a variety of problems (detailed in commit message of first patch).
This series addresses those problems, making qemu_find_file much more flexible and able to be trivially extended to find any type of file, both in a (optionally relocated) install tree location and the local build tree. This is proposed as an alternative to https://lists.gnu.org/archive/html/qemu-devel/2022-06/msg02589.html avoiding the need to add many more meson rules to simulate results of 'make install' in the build dir. It has been tested as follows: mkdir -p build/quick cd build/quick ./configure --target-list=x86_64-softmmu --prefix=/usr make -j 8 install DESTDIR=`pwd`/../vroot Now running from build dir: $ ./build/local/qemu-system-x86_64 -vnc :1 -k fr -trace 'datadir*' -display sdl datadir_init default data dir /home/berrange/src/virt/qemu/build/local/../share/qemu icon dir /home/berrange/src/virt/qemu/build/local/../share/icons helper dir /home/berrange/src/virt/qemu/build/local/../libexec in build dir 1 datadir_load_file name bios-256k.bin location /home/berrange/src/virt/qemu/build/local/pc-bios/bios-256k.bin errno 0 datadir_load_file name bios-256k.bin location /home/berrange/src/virt/qemu/build/local/pc-bios/bios-256k.bin errno 0 datadir_load_file name kvmvapic.bin location /home/berrange/src/virt/qemu/build/local/pc-bios/kvmvapic.bin errno 0 datadir_load_file name vgabios-stdvga.bin location /home/berrange/src/virt/qemu/build/local/pc-bios/vgabios-stdvga.bin errno 0 datadir_load_file name efi-e1000.rom location /home/berrange/src/virt/qemu/build/local/pc-bios/efi-e1000.rom errno 0 datadir_load_file name 128x128/apps/qemu.png location /home/berrange/src/virt/qemu/build/local/ui/icons/128x128/apps/qemu.png errno 0 datadir_load_file name fr location /home/berrange/src/virt/qemu/build/local/ui/keymaps/fr errno 0 $ ./build/local/qemu-system-x86_64 -vnc :1 -k fr -trace 'datadir*' -display sdl -net bridge datadir_init default data dir /home/berrange/src/virt/qemu/build/local/../share/qemu icon dir /home/berrange/src/virt/qemu/build/local/../share/icons helper dir /home/berrange/src/virt/qemu/build/local/../libexec in build dir 1 datadir_load_file name qemu-bridge-helper location /home/berrange/src/virt/qemu/build/local/qemu-bridge-helper errno 0 Helper /home/berrange/src/virt/qemu/build/local/qemu-bridge-helper access denied by acl file And running from the (relocated) install dir: $ ./build/vroot/usr/bin/qemu-system-x86_64 -vnc :1 -k fr -trace 'datadir*' -display sdl datadir_init default data dir /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu icon dir /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/icons helper dir /home/berrange/src/virt/qemu/build/vroot/usr/bin/../libexec in build dir 0 datadir_load_file name bios-256k.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../qemu-firmware/bios-256k.bin errno 2 datadir_load_file name bios-256k.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu/bios-256k.bin errno 0 datadir_load_file name bios-256k.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../qemu-firmware/bios-256k.bin errno 2 datadir_load_file name bios-256k.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu/bios-256k.bin errno 0 datadir_load_file name kvmvapic.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../qemu-firmware/kvmvapic.bin errno 2 datadir_load_file name kvmvapic.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu/kvmvapic.bin errno 0 datadir_load_file name vgabios-stdvga.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../qemu-firmware/vgabios-stdvga.bin errno 2 datadir_load_file name vgabios-stdvga.bin location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu/vgabios-stdvga.bin errno 0 datadir_load_file name efi-e1000.rom location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../qemu-firmware/efi-e1000.rom errno 2 datadir_load_file name efi-e1000.rom location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu/efi-e1000.rom errno 0 datadir_load_file name 128x128/apps/qemu.png location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/icons/hicolor/128x128/apps/qemu.png errno 0 datadir_load_file name fr location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu/keymaps/fr errno 0 $ ./build/vroot/usr/bin/qemu-system-x86_64 -vnc :1 -k fr -trace 'datadir*' -display sdl -net bridge datadir_init default data dir /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/qemu icon dir /home/berrange/src/virt/qemu/build/vroot/usr/bin/../share/icons helper dir /home/berrange/src/virt/qemu/build/vroot/usr/bin/../libexec in build dir 0 datadir_load_file name qemu-bridge-helper location /home/berrange/src/virt/qemu/build/vroot/usr/bin/../libexec/qemu-bridge-helper errno 0 Helper /home/berrange/src/virt/qemu/build/vroot/usr/bin/../libexec/qemu-bridge-helper access denied by acl file These trace messages show it searching the correct paths to find the files in both installed and build root cases. NB, I've been unable to actually test the cocoa.m change since I lack macOS. Daniel P. Berrangé (4): softmmu: rewrite handling of qemu_find_file ui: move 'pc-bios/keymaps' to 'ui/keymaps' ui: find icons using qemu_find_file net: convert to use qemu_find_file to locate bridge helper configure | 1 + docs/conf.py | 4 +- include/net/net.h | 3 +- include/qemu/datadir.h | 8 +- net/tap.c | 5 +- pc-bios/meson.build | 1 - qemu-options.hx | 4 +- softmmu/datadir.c | 164 +++++++++++------- softmmu/trace-events | 5 +- softmmu/vl.c | 2 +- tests/qtest/fuzz/fuzz.c | 2 +- ui/cocoa.m | 3 +- ui/gtk.c | 3 +- .../apps/qemu.png} | Bin .../{qemu_16x16.png => 16x16/apps/qemu.png} | Bin .../{qemu_24x24.png => 24x24/apps/qemu.png} | Bin .../apps/qemu.png} | Bin .../{qemu_32x32.bmp => 32x32/apps/qemu.bmp} | Bin .../{qemu_32x32.png => 32x32/apps/qemu.png} | Bin .../{qemu_48x48.png => 48x48/apps/qemu.png} | Bin .../apps/qemu.png} | Bin .../{qemu_64x64.png => 64x64/apps/qemu.png} | Bin ui/icons/meson.build | 27 ++- ui/icons/{ => scalable/apps}/qemu.svg | 0 {pc-bios => ui}/keymaps/ar | 0 {pc-bios => ui}/keymaps/bepo | 0 {pc-bios => ui}/keymaps/cz | 0 {pc-bios => ui}/keymaps/da | 0 {pc-bios => ui}/keymaps/de | 0 {pc-bios => ui}/keymaps/de-ch | 0 {pc-bios => ui}/keymaps/en-gb | 0 {pc-bios => ui}/keymaps/en-us | 0 {pc-bios => ui}/keymaps/es | 0 {pc-bios => ui}/keymaps/et | 0 {pc-bios => ui}/keymaps/fi | 0 {pc-bios => ui}/keymaps/fo | 0 {pc-bios => ui}/keymaps/fr | 0 {pc-bios => ui}/keymaps/fr-be | 0 {pc-bios => ui}/keymaps/fr-ca | 0 {pc-bios => ui}/keymaps/fr-ch | 0 {pc-bios => ui}/keymaps/hr | 0 {pc-bios => ui}/keymaps/hu | 0 {pc-bios => ui}/keymaps/is | 0 {pc-bios => ui}/keymaps/it | 0 {pc-bios => ui}/keymaps/ja | 0 {pc-bios => ui}/keymaps/lt | 0 {pc-bios => ui}/keymaps/lv | 0 {pc-bios => ui}/keymaps/meson.build | 0 {pc-bios => ui}/keymaps/mk | 0 {pc-bios => ui}/keymaps/nl | 0 {pc-bios => ui}/keymaps/no | 0 {pc-bios => ui}/keymaps/pl | 0 {pc-bios => ui}/keymaps/pt | 0 {pc-bios => ui}/keymaps/pt-br | 0 {pc-bios => ui}/keymaps/ru | 0 {pc-bios => ui}/keymaps/sl | 0 {pc-bios => ui}/keymaps/sv | 0 {pc-bios => ui}/keymaps/th | 0 {pc-bios => ui}/keymaps/tr | 0 ui/meson.build | 1 + ui/sdl2.c | 5 +- 61 files changed, 152 insertions(+), 86 deletions(-) rename ui/icons/{qemu_128x128.png => 128x128/apps/qemu.png} (100%) rename ui/icons/{qemu_16x16.png => 16x16/apps/qemu.png} (100%) rename ui/icons/{qemu_24x24.png => 24x24/apps/qemu.png} (100%) rename ui/icons/{qemu_256x256.png => 256x256/apps/qemu.png} (100%) rename ui/icons/{qemu_32x32.bmp => 32x32/apps/qemu.bmp} (100%) rename ui/icons/{qemu_32x32.png => 32x32/apps/qemu.png} (100%) rename ui/icons/{qemu_48x48.png => 48x48/apps/qemu.png} (100%) rename ui/icons/{qemu_512x512.png => 512x512/apps/qemu.png} (100%) rename ui/icons/{qemu_64x64.png => 64x64/apps/qemu.png} (100%) rename ui/icons/{ => scalable/apps}/qemu.svg (100%) rename {pc-bios => ui}/keymaps/ar (100%) rename {pc-bios => ui}/keymaps/bepo (100%) rename {pc-bios => ui}/keymaps/cz (100%) rename {pc-bios => ui}/keymaps/da (100%) rename {pc-bios => ui}/keymaps/de (100%) rename {pc-bios => ui}/keymaps/de-ch (100%) rename {pc-bios => ui}/keymaps/en-gb (100%) rename {pc-bios => ui}/keymaps/en-us (100%) rename {pc-bios => ui}/keymaps/es (100%) rename {pc-bios => ui}/keymaps/et (100%) rename {pc-bios => ui}/keymaps/fi (100%) rename {pc-bios => ui}/keymaps/fo (100%) rename {pc-bios => ui}/keymaps/fr (100%) rename {pc-bios => ui}/keymaps/fr-be (100%) rename {pc-bios => ui}/keymaps/fr-ca (100%) rename {pc-bios => ui}/keymaps/fr-ch (100%) rename {pc-bios => ui}/keymaps/hr (100%) rename {pc-bios => ui}/keymaps/hu (100%) rename {pc-bios => ui}/keymaps/is (100%) rename {pc-bios => ui}/keymaps/it (100%) rename {pc-bios => ui}/keymaps/ja (100%) rename {pc-bios => ui}/keymaps/lt (100%) rename {pc-bios => ui}/keymaps/lv (100%) rename {pc-bios => ui}/keymaps/meson.build (100%) rename {pc-bios => ui}/keymaps/mk (100%) rename {pc-bios => ui}/keymaps/nl (100%) rename {pc-bios => ui}/keymaps/no (100%) rename {pc-bios => ui}/keymaps/pl (100%) rename {pc-bios => ui}/keymaps/pt (100%) rename {pc-bios => ui}/keymaps/pt-br (100%) rename {pc-bios => ui}/keymaps/ru (100%) rename {pc-bios => ui}/keymaps/sl (100%) rename {pc-bios => ui}/keymaps/sv (100%) rename {pc-bios => ui}/keymaps/th (100%) rename {pc-bios => ui}/keymaps/tr (100%) -- 2.36.1