meson.build | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
Check to make sure that we have inotify in libc, before looking for it
in libinotify.
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Daniel P. Berrange <berrange@redhat.com>
Cc: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Warner Losh <imp@bsdimp.com>
---
FreeBSD 15 and newer now has a native inotify implementation. Check for
it before checking for the wrapper libinotify library which is needed in
FreeBSD 14 and earlier. Make the check dependent on symbols, not host
version.
Separate series because it's really independent of the two other
patch series I have submitted and it is more important.
---
meson.build | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 2d114e9018..537f50283f 100644
--- a/meson.build
+++ b/meson.build
@@ -2662,13 +2662,15 @@ have_inotify_init = cc.has_header_symbol('sys/inotify.h', 'inotify_init')
have_inotify_init1 = cc.has_header_symbol('sys/inotify.h', 'inotify_init1')
inotify = not_found
if (have_inotify_init or have_inotify_init1) and host_os == 'freebsd'
- # libinotify-kqueue
- inotify = cc.find_library('inotify')
- if have_inotify_init
- have_inotify_init = inotify.found()
- endif
- if have_inotify_init1
- have_inotify_init1 = inotify.found()
+ if not cc.has_function('inotify_init') and not cc.has_function('inotify_init1')
+ inotify = cc.find_library('inotify')
+ # libinotify-kqueue
+ if have_inotify_init
+ have_inotify_init = inotify.found()
+ endif
+ if have_inotify_init1
+ have_inotify_init1 = inotify.found()
+ endif
endif
endif
config_host_data.set('CONFIG_INOTIFY', have_inotify_init)
---
base-commit: 0b91040d23dc8820724a60c811223b777f3bc6b7
change-id: 20260210-freebsd-inotify-8bd07b2c84d1
Best regards,
--
Warner Losh <imp@bsdimp.com>
On Tue, Feb 10, 2026 at 08:43:48AM -0700, Warner Losh wrote:
> Check to make sure that we have inotify in libc, before looking for it
> in libinotify.
>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> Cc: Daniel P. Berrange <berrange@redhat.com>
> Cc: Philippe Mathieu-Daudé <philmd@linaro.org>
> Signed-off-by: Warner Losh <imp@bsdimp.com>
> ---
> FreeBSD 15 and newer now has a native inotify implementation. Check for
> it before checking for the wrapper libinotify library which is needed in
> FreeBSD 14 and earlier. Make the check dependent on symbols, not host
> version.
>
> Separate series because it's really independent of the two other
> patch series I have submitted and it is more important.
> ---
> meson.build | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 2d114e9018..537f50283f 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2662,13 +2662,15 @@ have_inotify_init = cc.has_header_symbol('sys/inotify.h', 'inotify_init')
> have_inotify_init1 = cc.has_header_symbol('sys/inotify.h', 'inotify_init1')
> inotify = not_found
> if (have_inotify_init or have_inotify_init1) and host_os == 'freebsd'
> - # libinotify-kqueue
> - inotify = cc.find_library('inotify')
> - if have_inotify_init
> - have_inotify_init = inotify.found()
> - endif
> - if have_inotify_init1
> - have_inotify_init1 = inotify.found()
> + if not cc.has_function('inotify_init') and not cc.has_function('inotify_init1')
> + inotify = cc.find_library('inotify')
> + # libinotify-kqueue
> + if have_inotify_init
> + have_inotify_init = inotify.found()
> + endif
> + if have_inotify_init1
> + have_inotify_init1 = inotify.found()
> + endif
> endif
> endif
> config_host_data.set('CONFIG_INOTIFY', have_inotify_init)
So this ends up woth 'inotify == not_found' with either Linux,
or latest FreeBSD 15.
Over in util/meson.build though we have
freebsd_dep = []
if host_os == 'freebsd'
freebsd_dep = inotify
endif
util_ss.add(files('filemonitor-inotify.c'), freebsd_dep)
Which seems to be trying to avoid adding "not_found" to the dep list.
Either it is safe to add "not_found" to the dep list, and this code in
util/meson.build can be simplified to just:
util_ss.add(files('filemonitor-inotify.c'), [inotify])
or it is unsafe, and this code needs to be modified to look more like:
inotify_deps = []
if inotify.found()
inotify_deps = [inotify]
endif
util_ss.add(files('filemonitor-inotify.c'), inotify_deps)
Assuming you've tested your patch here successfully, then it seems like
the former case is valid, and we can simplify util/meson.dep to remove
the conditional ?
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
On Tue, Feb 10, 2026 at 8:54 AM Daniel P. Berrangé <berrange@redhat.com>
wrote:
> On Tue, Feb 10, 2026 at 08:43:48AM -0700, Warner Losh wrote:
> > Check to make sure that we have inotify in libc, before looking for it
> > in libinotify.
> >
> > Cc: Paolo Bonzini <pbonzini@redhat.com>
> > Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> > Cc: Daniel P. Berrange <berrange@redhat.com>
> > Cc: Philippe Mathieu-Daudé <philmd@linaro.org>
> > Signed-off-by: Warner Losh <imp@bsdimp.com>
> > ---
> > FreeBSD 15 and newer now has a native inotify implementation. Check for
> > it before checking for the wrapper libinotify library which is needed in
> > FreeBSD 14 and earlier. Make the check dependent on symbols, not host
> > version.
> >
> > Separate series because it's really independent of the two other
> > patch series I have submitted and it is more important.
> > ---
> > meson.build | 16 +++++++++-------
> > 1 file changed, 9 insertions(+), 7 deletions(-)
> >
> > diff --git a/meson.build b/meson.build
> > index 2d114e9018..537f50283f 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -2662,13 +2662,15 @@ have_inotify_init =
> cc.has_header_symbol('sys/inotify.h', 'inotify_init')
> > have_inotify_init1 = cc.has_header_symbol('sys/inotify.h',
> 'inotify_init1')
> > inotify = not_found
> > if (have_inotify_init or have_inotify_init1) and host_os == 'freebsd'
> > - # libinotify-kqueue
> > - inotify = cc.find_library('inotify')
> > - if have_inotify_init
> > - have_inotify_init = inotify.found()
> > - endif
> > - if have_inotify_init1
> > - have_inotify_init1 = inotify.found()
> > + if not cc.has_function('inotify_init') and not
> cc.has_function('inotify_init1')
> > + inotify = cc.find_library('inotify')
> > + # libinotify-kqueue
> > + if have_inotify_init
> > + have_inotify_init = inotify.found()
> > + endif
> > + if have_inotify_init1
> > + have_inotify_init1 = inotify.found()
> > + endif
> > endif
> > endif
> > config_host_data.set('CONFIG_INOTIFY', have_inotify_init)
>
> So this ends up woth 'inotify == not_found' with either Linux,
> or latest FreeBSD 15.
>
yes. And that turns out to be fine...
> Over in util/meson.build though we have
>
> freebsd_dep = []
> if host_os == 'freebsd'
> freebsd_dep = inotify
> endif
> util_ss.add(files('filemonitor-inotify.c'), freebsd_dep)
>
> Which seems to be trying to avoid adding "not_found" to the dep list.
>
> Either it is safe to add "not_found" to the dep list, and this code in
> util/meson.build can be simplified to just:
>
> util_ss.add(files('filemonitor-inotify.c'), [inotify])
>
I don't think we need the [] here. It works without them on both FreeBSD 14
and 15. I tested on FreeBSD 14 with and without libinotify installed as
well, and both work
> or it is unsafe, and this code needs to be modified to look more like:
>
> inotify_deps = []
> if inotify.found()
> inotify_deps = [inotify]
> endif
> util_ss.add(files('filemonitor-inotify.c'), inotify_deps)
>
>
> Assuming you've tested your patch here successfully, then it seems like
> the former case is valid, and we can simplify util/meson.dep to remove
> the conditional ?
>
That's a nice simplification. I've played around a bit to simplify things a
little
elsewhere as well. I'll send a v2 here in a few monites.
Warner
© 2016 - 2026 Red Hat, Inc.