
On Thu, Apr 27, 2023 at 11:28:36AM +0100, Daniel P. Berrangé wrote:
On Thu, Apr 27, 2023 at 12:00:59PM +0200, Andrea Bolognani wrote:
On Thu, Apr 27, 2023 at 11:50:05AM +0200, Michal Prívozník wrote:
But leaving meson aside, shouldn't we just use check_header() for every header file then? I mean, this fixes this particular instance of the problem, but can't we hit it again with say ifaddrs.h or any other header file on the list?
We could. The Meson documentation recommends not doing this, as check_header() is (understandably) slower than has_header().
I haven't tried to see how much slower we're actually talking... Maybe for the 20-ish headers that we care about, it wouldn't make a measurable difference? Especially since the results of the check are cached between Meson runs.
I tried testing:
diff --git a/meson.build b/meson.build index c15003ce02..3ae02ce4df 100644 --- a/meson.build +++ b/meson.build @@ -633,14 +633,14 @@ if host_machine.system() == 'freebsd' endif
foreach name : headers - if cc.has_header(name) + if cc.check_header(name) conf.set('WITH_@0@'.format(name.underscorify().to_upper()), 1) endif endforeach
# check for kernel header required by src/util/virnetdevbridge.c if host_machine.system() == 'linux' - if not cc.has_header('linux/sockios.h') + if not cc.check_header('linux/sockios.h') error('You must install kernel-headers in order to compile libvirt with QEMU or LXC support') endif endif
and could not measure any deterministic change in execution time before/after
I've just tried the same on a 4th generation low-voltage laptop CPU, with a patch that goes further and completely replaces all uses of has_header() with check_header(), and haven't been able to detect any meaningful change either. Let's go with the simpler and more reliable approach then :) -- Andrea Bolognani / Red Hat / Virtualization