From 28f0cffdb6ad04969731c86c1bac58181b331368 Mon Sep 17 00:00:00 2001 From: Tommy van der Vorst Date: Fri, 7 Feb 2025 16:40:53 +0100 Subject: [PATCH] chore(fs): build kqueue instead of fsevents watcher on iOS (#9950) ### Purpose On iOS, the FSEvents API for watching files (also used on macOS) is not available, but `kqueue` is. This PR ensures `kqueue` support is built on iOS instead of the FSEvents based watcher implementation. Before this PR, you could already use the `kqueue` build option to force its usage. Unfortunately `gomobile`, the tool that I use to build Syncthing for iOS and macOS for Synctrain, does not support setting different build flags for iOS and macOS (unless I build separately for each, which is a bit of a hassle because XCode nonsense). I am assuming there are good reasons to support FSEvents even though `kqueue` is also available on macOS (but I'm not sure why?). I do know FSEvents has been working fine for me on macOS so it seems best to use FSEvents on macOS and kqueue on iOS. Note that this also requires https://github.com/syncthing/notify/pull/4 to be merged in `synchting/notify` (until that is done, this PR will fail to build on iOS due to `notify` still trying to link to `fsevents` stuff when the `kqueue` build flag is not set). ### Testing I compiled both `syncthing/notify` and syncthing with this PR applied, and used that to successfully build the Synctrain iOS app, which after this PR works fine and should follow up file changes a bit quicker. ### Screenshots n/a ### Documentation n/a ## Authorship Your name and email will be added automatically to the AUTHORS file based on the commit metadata. --------- Co-authored-by: Jakob Borg --- go.mod | 2 +- go.sum | 4 ++-- lib/fs/basicfs_watch.go | 3 +-- lib/fs/basicfs_watch_eventtypes_kqueue.go | 4 ++-- lib/fs/basicfs_watch_notkqueue.go | 4 ++-- lib/fs/basicfs_watch_unsupported.go | 4 ++-- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 9c3500a0d..8d1ff468d 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( github.com/rabbitmq/amqp091-go v1.10.0 github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 github.com/shirou/gopsutil/v4 v4.25.1 - github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2 + github.com/syncthing/notify v0.0.0-20250207082249-f0fa8f99c2bc github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d github.com/thejerf/suture/v4 v4.0.6 github.com/urfave/cli v1.22.16 diff --git a/go.sum b/go.sum index ff407cef5..32a2688f6 100644 --- a/go.sum +++ b/go.sum @@ -227,8 +227,8 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2 h1:F4snRP//nIuTTW9LYEzVH4HVwDG9T3M4t8y/2nqMbiY= -github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2/go.mod h1:J0q59IWjLtpRIJulohwqEZvjzwOfTEPp8SVhDJl+y0Y= +github.com/syncthing/notify v0.0.0-20250207082249-f0fa8f99c2bc h1:xc3UfSFlH/X5hRw3h21RF6WXnRUYKmGRx06FEaVxfkM= +github.com/syncthing/notify v0.0.0-20250207082249-f0fa8f99c2bc/go.mod h1:J0q59IWjLtpRIJulohwqEZvjzwOfTEPp8SVhDJl+y0Y= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/thejerf/suture/v4 v4.0.6 h1:QsuCEsCqb03xF9tPAsWAj8QOAJBgQI1c0VqJNaingg8= diff --git a/lib/fs/basicfs_watch.go b/lib/fs/basicfs_watch.go index ab275270a..bf20c6439 100644 --- a/lib/fs/basicfs_watch.go +++ b/lib/fs/basicfs_watch.go @@ -4,12 +4,11 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. -//go:build !(solaris && !cgo) && !(darwin && !cgo) && !(darwin && kqueue) && !(android && amd64) && !ios +//go:build !(solaris && !cgo) && !(darwin && !cgo) && !(darwin && kqueue) && !(android && amd64) // +build !solaris cgo // +build !darwin cgo // +build !darwin !kqueue // +build !android !amd64 -// +build !ios package fs diff --git a/lib/fs/basicfs_watch_eventtypes_kqueue.go b/lib/fs/basicfs_watch_eventtypes_kqueue.go index c8e34dfd6..2232af79d 100644 --- a/lib/fs/basicfs_watch_eventtypes_kqueue.go +++ b/lib/fs/basicfs_watch_eventtypes_kqueue.go @@ -4,8 +4,8 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. -//go:build dragonfly || freebsd || netbsd || openbsd -// +build dragonfly freebsd netbsd openbsd +//go:build dragonfly || freebsd || netbsd || openbsd || ios || kqueue +// +build dragonfly freebsd netbsd openbsd ios kqueue package fs diff --git a/lib/fs/basicfs_watch_notkqueue.go b/lib/fs/basicfs_watch_notkqueue.go index 7d529cc27..de90c80cb 100644 --- a/lib/fs/basicfs_watch_notkqueue.go +++ b/lib/fs/basicfs_watch_notkqueue.go @@ -4,8 +4,8 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. -//go:build !dragonfly && !freebsd && !netbsd && !openbsd -// +build !dragonfly,!freebsd,!netbsd,!openbsd +//go:build !dragonfly && !freebsd && !netbsd && !openbsd && !kqueue && !ios +// +build !dragonfly,!freebsd,!netbsd,!openbsd,!kqueue,!ios package fs diff --git a/lib/fs/basicfs_watch_unsupported.go b/lib/fs/basicfs_watch_unsupported.go index 4d10dc71a..b1126a52a 100644 --- a/lib/fs/basicfs_watch_unsupported.go +++ b/lib/fs/basicfs_watch_unsupported.go @@ -4,8 +4,8 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. -//go:build (solaris && !cgo) || (darwin && !cgo) || (android && amd64) || ios || (darwin && kqueue) -// +build solaris,!cgo darwin,!cgo android,amd64 ios darwin,kqueue +//go:build (solaris && !cgo) || (darwin && !cgo) || (android && amd64) || (darwin && kqueue) +// +build solaris,!cgo darwin,!cgo android,amd64 darwin,kqueue package fs