From 5b335808007400cd888e155ece5110b3af63069d Mon Sep 17 00:00:00 2001 From: Piraty Date: Sun, 15 Jun 2025 23:03:40 +0200 Subject: [PATCH] gpsd: update to 3.26.1. drop unused asciidoc, tarball ships with manpages Fixes: #55388 --- common/shlibs | 4 +- ...ile-and-dumpfile-options-for-gpsprof.patch | 36 +++++++ ...0002-devel-gpsdfake-fix-for-Python-3.patch | 96 +++++++++++++++++++ ...03-gpsd-gpsd.c-Fix-empty-gst-in-POLL.patch | 72 ++++++++++++++ ...ix-output-of-empty-magnetic-variance.patch | 35 +++++++ srcpkgs/gpsd/patches/fix-ncurses.patch | 20 ---- srcpkgs/gpsd/template | 8 +- 7 files changed, 245 insertions(+), 26 deletions(-) create mode 100644 srcpkgs/gpsd/patches/0001-Fix-the-logfile-and-dumpfile-options-for-gpsprof.patch create mode 100644 srcpkgs/gpsd/patches/0002-devel-gpsdfake-fix-for-Python-3.patch create mode 100644 srcpkgs/gpsd/patches/0003-gpsd-gpsd.c-Fix-empty-gst-in-POLL.patch create mode 100644 srcpkgs/gpsd/patches/0004-clients-cgps.c-Fix-output-of-empty-magnetic-variance.patch delete mode 100644 srcpkgs/gpsd/patches/fix-ncurses.patch diff --git a/common/shlibs b/common/shlibs index c4f835e4c04..02405e11dde 100644 --- a/common/shlibs +++ b/common/shlibs @@ -95,7 +95,7 @@ libpanelw.so.6 ncurses-libs-5.8_1 ignore libmenuw.so.6 ncurses-libs-5.8_1 ignore libobjc.so.4 libobjc-4.7.3_12 libgomp.so.1 libgomp-4.4.0_1 -libgps.so.29 gpsd-3.23_1 +libgps.so.31 gpsd-3.26.1_1 libmagic.so.1 libmagic-5.12_1 libbluetooth.so.3 libbluetooth-4.58_1 libwmf-0.2.so.7 libwmf-0.2.8.4_1 @@ -449,7 +449,7 @@ libdex-1.so.1 libdex-0.2.0_1 libmpeg2.so.0 libmpeg2-0.5.1_1 libmpeg2convert.so.0 libmpeg2-0.5.1_1 libmng.so.2 libmng-2.0.2_1 -libQgpsmm.so.29 gpsd-qt-3.23_1 +libQgpsmm.so.31 gpsd-qt-3.26.1_1 libsysfs.so.2 libsysfs-2.1.0_1 libsensors.so.5 libsensors-3.5.0_1 libcap-ng.so.0 libcap-ng-0.6.2_1 diff --git a/srcpkgs/gpsd/patches/0001-Fix-the-logfile-and-dumpfile-options-for-gpsprof.patch b/srcpkgs/gpsd/patches/0001-Fix-the-logfile-and-dumpfile-options-for-gpsprof.patch new file mode 100644 index 00000000000..a6b4d1ddb1c --- /dev/null +++ b/srcpkgs/gpsd/patches/0001-Fix-the-logfile-and-dumpfile-options-for-gpsprof.patch @@ -0,0 +1,36 @@ +From bad9973b8e73e9e2cc0af2555edc9c8a0855d203 Mon Sep 17 00:00:00 2001 +From: Richard Lindsley +Date: Fri, 23 May 2025 18:48:57 -0700 +Subject: [PATCH] Fix the --logfile and --dumpfile options for gpsprof + +The open() function requires that the "encoding" argument is a str or +None. +--- + clients/gpsprof.py.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/clients/gpsprof.py.in b/clients/gpsprof.py.in +index 935bb4052..0c809a985 100644 +--- a/clients/gpsprof.py.in ++++ b/clients/gpsprof.py.in +@@ -1208,7 +1208,7 @@ if __name__ == '__main__': + options = parser.parse_args() + + if options.logfile: +- options.logfp = open(options.logfile, "w", encoding=ascii) ++ options.logfp = open(options.logfile, "w", encoding="ascii") + else: + options.logfp = None + +@@ -1255,7 +1255,7 @@ if __name__ == '__main__': + plot.postprocess() + # Save the timing data (only) for post-analysis if required. + if options.dumpfile: +- with open(options.dumpfile, "w", encoding=ascii) as fp: ++ with open(options.dumpfile, "w", encoding="ascii") as fp: + fp.write(plot.dump()) + if options.logfp: + options.logfp.close() +-- +2.49.0 + diff --git a/srcpkgs/gpsd/patches/0002-devel-gpsdfake-fix-for-Python-3.patch b/srcpkgs/gpsd/patches/0002-devel-gpsdfake-fix-for-Python-3.patch new file mode 100644 index 00000000000..cde42f69e1f --- /dev/null +++ b/srcpkgs/gpsd/patches/0002-devel-gpsdfake-fix-for-Python-3.patch @@ -0,0 +1,96 @@ +From 8a01cdbf710c91d3db1d7c2c30f5c048e2331a09 Mon Sep 17 00:00:00 2001 +From: James Browning +Date: Thu, 5 Jun 2025 15:42:28 -0700 +Subject: [PATCH] devel/gpsdfake: fix for Python 3 + +Handle errors better in gpsdfake + +Print empty line on ctrl + c +Print message on socket errors +--- + devtools/gpsdfake | 52 +++++++++++++++++++++++++++++------------------ + 1 file changed, 32 insertions(+), 20 deletions(-) + +diff --git a/devtools/gpsdfake b/devtools/gpsdfake +index 6a2e7ff51..a4744ba1c 100644 +--- a/devtools/gpsdfake ++++ b/devtools/gpsdfake +@@ -3,26 +3,36 @@ + """ + gpsdfake - a fake gpsd server that spews specified data at gpsd clients. + """ ++from __future__ import print_function ++import socket ++try: ++ import socketserver ++except: ++ import SocketServer as socketserver # until the true death of Python 2 ++import sys ++import time + +-import sys, SocketServer +- +-class FakeHandler(SocketServer.BaseRequestHandler): ++class FakeHandler(socketserver.BaseRequestHandler): + "Instantiated once per connection to the server." + def handle(self): +- global lines +- # self.request is the TCP socket connected to the client +- # Read the client's ?WATCH request. +- self.data = self.request.recv(1024).strip() +- # We'd like to send a fake banner to the client on startup, +- # but there's no (documented) method for that. We settle +- # for shipping on first request. +- self.request.send('{"class":"VERSION",' +- '"version":"gpsdfake","rev":"gpsdfake",' +- '"proto_major":3,"proto_minor":1}\r\n') +- # Perpetually resend the data we have specified +- while True: +- for line in lines: +- self.request.send(line) ++ try: ++ global lines ++ # self.request is the TCP socket connected to the client ++ # Read the client's ?WATCH request. ++ self.data = self.request.recv(1024).strip() ++ # We'd like to send a fake banner to the client on startup, ++ # but there's no (documented) method for that. We settle ++ # for shipping on first request. ++ self.request.send(b'{"class":"VERSION",' ++ b'"version":"gpsdfake-3","rev":"3",' ++ b'"proto_major":3,"proto_minor":1}\r\n') ++ # Perpetually resend the data we have specified ++ while True: ++ for line in lines: ++ self.request.send(line) ++ time.sleep(0.5) ++ except Exception: ++ pass + + if __name__ == "__main__": + (HOST, PORT) = "localhost", 2947 +@@ -32,16 +42,18 @@ if __name__ == "__main__": + sys.stderr.write("gpsdfake: requires a file argument.\n") + sys.exit(1) + +- lines = open(sys.argv[1]).readlines() ++ lines = open(sys.argv[1], 'rb').readlines() + + # Create the server, binding to localhost on port 2947 +- server = SocketServer.TCPServer((HOST, PORT), FakeHandler) ++ server = socketserver.TCPServer((HOST, PORT), FakeHandler) + + # Activate the server; this will keep running until you + # interrupt the program with Ctrl-C + server.serve_forever() + except KeyboardInterrupt: +- pass ++ print() ++ except socket.error as e: ++ print(e.args[1]) + sys.exit(0) + + # The following sets edit modes for GNU EMACS +-- +2.49.0 + diff --git a/srcpkgs/gpsd/patches/0003-gpsd-gpsd.c-Fix-empty-gst-in-POLL.patch b/srcpkgs/gpsd/patches/0003-gpsd-gpsd.c-Fix-empty-gst-in-POLL.patch new file mode 100644 index 00000000000..06c1526e089 --- /dev/null +++ b/srcpkgs/gpsd/patches/0003-gpsd-gpsd.c-Fix-empty-gst-in-POLL.patch @@ -0,0 +1,72 @@ +From 3185c5790c3e7e31c6cc80174940f0385cba2617 Mon Sep 17 00:00:00 2001 +From: "Gary E. Miller" +Date: Thu, 5 Jun 2025 17:40:56 -0700 +Subject: [PATCH] gpsd/gpsd.c: Fix empty gst[,] in POLL. + +Fix issue 336. +--- + gpsd/gpsd.c | 30 ++++++++++++++++++++++-------- + 1 file changed, 22 insertions(+), 8 deletions(-) + +diff --git a/gpsd/gpsd.c b/gpsd/gpsd.c +index de32bb241..102247abf 100644 +--- a/gpsd/gpsd.c ++++ b/gpsd/gpsd.c +@@ -1555,10 +1555,15 @@ static void handle_request(struct subscriber_t *sub, const char *buf, + for (devp = devices; devp < devices + MAX_DEVICES; devp++) { + if (allocated_device(devp) && subscribed(sub, devp)) { + if (0 != (devp->observed & GPS_TYPEMASK)) { ++ size_t rlen = strnlen(reply, replylen); ++ + json_tpv_dump(NAVDATA_SET, devp, &sub->policy, +- reply + strnlen(reply, replylen), +- replylen - strnlen(reply, replylen)); ++ reply + rlen, replylen - rlen); + rstrip(reply, replylen); ++ if (strnlen(reply, replylen) == rlen) { ++ // no data ++ continue; ++ } + (void)strlcat(reply, ",", replylen); + } + } +@@ -1568,10 +1573,15 @@ static void handle_request(struct subscriber_t *sub, const char *buf, + for (devp = devices; devp < devices + MAX_DEVICES; devp++) { + if (allocated_device(devp) && subscribed(sub, devp)) { + if (0 != (devp->observed & GPS_TYPEMASK)) { +- json_noise_dump(&devp->gpsdata, +- reply + strnlen(reply, replylen), +- replylen - strnlen(reply, replylen)); ++ size_t rlen = strnlen(reply, replylen); ++ ++ json_noise_dump(&devp->gpsdata, reply + rlen, ++ replylen - rlen); + rstrip(reply, replylen); ++ if (strnlen(reply, replylen) == rlen) { ++ // no data ++ continue; ++ } + (void)strlcat(reply, ",", replylen); + } + } +@@ -1581,10 +1591,14 @@ static void handle_request(struct subscriber_t *sub, const char *buf, + for (devp = devices; devp < devices + MAX_DEVICES; devp++) { + if (allocated_device(devp) && subscribed(sub, devp)) { + if (0 != (devp->observed & GPS_TYPEMASK)) { +- json_sky_dump(devp, +- reply + strnlen(reply, replylen), +- replylen - strnlen(reply, replylen)); ++ size_t rlen = strnlen(reply, replylen); ++ ++ json_sky_dump(devp, reply + rlen, replylen - rlen); + rstrip(reply, replylen); ++ if (strnlen(reply, replylen) == rlen) { ++ // no data ++ continue; ++ } + (void)strlcat(reply, ",", replylen); + } + } +-- +2.49.0 + diff --git a/srcpkgs/gpsd/patches/0004-clients-cgps.c-Fix-output-of-empty-magnetic-variance.patch b/srcpkgs/gpsd/patches/0004-clients-cgps.c-Fix-output-of-empty-magnetic-variance.patch new file mode 100644 index 00000000000..4094bc95f49 --- /dev/null +++ b/srcpkgs/gpsd/patches/0004-clients-cgps.c-Fix-output-of-empty-magnetic-variance.patch @@ -0,0 +1,35 @@ +From 4286d9dd7217db38c54a516dc95a06884a459e1d Mon Sep 17 00:00:00 2001 +From: "Gary E. Miller" +Date: Wed, 25 Jun 2025 19:17:12 -0700 +Subject: [PATCH] clients/cgps.c: Fix output of empty magnetic variance. + +Was overrunning the window. +--- + clients/cgps.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/clients/cgps.c b/clients/cgps.c +index b0a043801..3bed0c698 100644 +--- a/clients/cgps.c ++++ b/clients/cgps.c +@@ -1056,7 +1056,7 @@ static void update_gps_panel(struct gps_data_t *gpsdata, char *message, + gpsdata->fix.magnetic_track); + } + if (0 == isfinite(gpsdata->fix.magnetic_var)) { +- (void)strlcat(scr, " ", sizeof(scr)); ++ (void)strlcpy(buf2, "n/a", sizeof(buf2)); + } else { + (void)snprintf(buf2, sizeof(buf2), "%6.1f", + gpsdata->fix.magnetic_var); +@@ -1066,7 +1066,7 @@ static void update_gps_panel(struct gps_data_t *gpsdata, char *message, + (void)strlcpy(buf2, "n/a", sizeof(buf2)); + } + (void)mvwprintw(datawin, row++, DATAWIN_DESC_OFFSET, +- "Track %-14s %6s,%6s deg", mag_str, buf1, buf2); ++ "Track %-14.14s %6.6s,%6.6s deg", mag_str, buf1, buf2); + + // Fill in the rate of climb. + if (0 == isfinite(gpsdata->fix.climb)) { +-- +2.50.0 + diff --git a/srcpkgs/gpsd/patches/fix-ncurses.patch b/srcpkgs/gpsd/patches/fix-ncurses.patch deleted file mode 100644 index 5ebeb00ff8e..00000000000 --- a/srcpkgs/gpsd/patches/fix-ncurses.patch +++ /dev/null @@ -1,20 +0,0 @@ -Upstream supports ncursesw but doesn't properly detect it. Let's do things the -right way and allow optional clients to be built. - -https://gitlab.com/gpsd/gpsd/-/merge_requests/295 - -diff --git a/SConscript b/SConscript -index 345ead71550069f8fe976fab3f529f56b9e59e2b..e9c22358e0834404b1f1cfbbb1a0fca3ff58b658 100644 ---- a/SConscript -+++ b/SConscript -@@ -1023,6 +1023,10 @@ if not cleaning and not helping: - ncurseslibs = pkg_config('ncurses', rpath_hack=True) - if config.CheckPKG('tinfo'): - ncurseslibs += pkg_config('tinfo', rpath_hack=True) -+ elif config.CheckPKG('ncursesw'): -+ ncurseslibs = pkg_config('ncursesw', rpath_hack=True) -+ if config.CheckPKG('tinfo'): -+ ncurseslibs += pkg_config('tinfo', rpath_hack=True) - # It's not yet known whether rpath_hack is appropriate for - # ncurses5-config. - elif WhereIs('ncurses5-config'): diff --git a/srcpkgs/gpsd/template b/srcpkgs/gpsd/template index 3ec368c5d6e..d838956e327 100644 --- a/srcpkgs/gpsd/template +++ b/srcpkgs/gpsd/template @@ -1,13 +1,13 @@ # Template file for 'gpsd' pkgname=gpsd -version=3.24 -revision=4 +version=3.26.1 +revision=1 build_style=scons make_build_args="dbus_export=0 gpsd_user=gpsd gpsd_group=gpsd sbindir=/usr/bin CC=${CC} qt_versioned=5" make_install_args="$make_build_args" hostmakedepends="pkg-config bc python3-pyserial python3-setuptools libxslt - xmlto asciidoc" + xmlto" makedepends="eudev-libudev-devel ntp libusb-devel ncurses-devel gtk+3-devel pps-tools-devel libcap-devel libbluetooth-devel qt5-devel" short_desc="GPS/AIS receiver monitoring daemon" @@ -16,7 +16,7 @@ license="BSD-3-Clause" homepage="https://gpsd.gitlab.io/gpsd/" changelog="https://gpsd.gitlab.io/gpsd/NEWS" distfiles="https://download-mirror.savannah.gnu.org/releases/gpsd/gpsd-${version}.tar.xz" -checksum=dab45874c6da0ac604e3553b79fc228c25d6e71a32310a3467fb3bd9974e3755 +checksum=45c0d4779324bd59a47cfcb7ac57180d2dbdf418603d398a079392dabf1f740c python_version=3 # Must be same version as scons system_accounts="gpsd"