[PATCH] freebsd: FreeBSD 15 has native inotify

Warner Losh posted 1 patch 11 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260210-freebsd-inotify-v1-1-009430118133@bsdimp.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>
There is a newer version of this series
meson.build | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
[PATCH] freebsd: FreeBSD 15 has native inotify
Posted by Warner Losh 11 hours ago
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>


Re: [PATCH] freebsd: FreeBSD 15 has native inotify
Posted by Daniel P. Berrangé 10 hours ago
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 :|


Re: [PATCH] freebsd: FreeBSD 15 has native inotify
Posted by Warner Losh 8 hours ago
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