Index: head/astro/foxtrotgps/Makefile =================================================================== --- head/astro/foxtrotgps/Makefile +++ head/astro/foxtrotgps/Makefile @@ -3,7 +3,7 @@ PORTNAME= foxtrotgps PORTVERSION= 1.2.0 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= astro geography MASTER_SITES= http://www.foxtrotgps.org/releases/ Index: head/astro/foxtrotgps/files/patch-src_gps__functions.c =================================================================== --- head/astro/foxtrotgps/files/patch-src_gps__functions.c +++ head/astro/foxtrotgps/files/patch-src_gps__functions.c @@ -0,0 +1,32 @@ +--- src/gps_functions.c.orig 2020-03-05 17:21:38 UTC ++++ src/gps_functions.c +@@ -735,6 +735,11 @@ cb_gpsd_io_error(GIOChannel *src, GIOCondition conditi + } + + ++static double ++timespec_to_double(struct timespec ts) ++{ ++ return ((double)(ts.tv_sec) + ((double)(ts.tv_nsec) / 1e9)); ++} + + static gboolean + cb_gpsd_data(GIOChannel *src, GIOCondition condition, gpointer data) +@@ -744,7 +749,7 @@ cb_gpsd_data(GIOChannel *src, GIOCondition condition, + if (!libgps_initialized) + return FALSE; + +- ret = gps_read(&libgps_gpsdata); ++ ret = gps_read(&libgps_gpsdata, NULL, 0); + /* Note that gps_read() will never actually return 0 + (zero-length reads are converted internally to a -1 return, + since they mean that the connection to the daemon has closed), +@@ -755,7 +760,7 @@ cb_gpsd_data(GIOChannel *src, GIOCondition condition, + { + gpsdata->satellites_used = libgps_gpsdata.satellites_used; + gpsdata->hdop = libgps_gpsdata.dop.hdop; +- gpsdata->fix.time = libgps_gpsdata.fix.time; ++ gpsdata->fix.time = timespec_to_double(libgps_gpsdata.fix.time); + if (isnan(gpsdata->fix.time)) + { + gpsdata->fix.time = (time_t) 0; Index: head/astro/gpsd/Makefile =================================================================== --- head/astro/gpsd/Makefile +++ head/astro/gpsd/Makefile @@ -2,8 +2,7 @@ # $FreeBSD$ PORTNAME= gpsd -PORTVERSION= 3.17 -PORTREVISION= 1 +PORTVERSION= 3.20 CATEGORIES= astro geography MASTER_SITES= SAVANNAH @@ -13,12 +12,13 @@ LICENSE= BSD3CLAUSE LICENSE_FILE= ${WRKSRC}/COPYING -USES= cpe pathfix pkgconfig python:2.7 scons shebangfix +USES= cpe pathfix pkgconfig python:3.7 scons shebangfix CPE_VENDOR= gpsd_project USE_PYTHON= flavors +USE_LDCONFIG= yes USE_RC_SUBR= gpsd SHEBANG_FILES= *.py gps/*.py gegps xgps gpscat xgpsspeed gpsprof \ - gpsfake + gpsfake ubxtool zerk MAKE_ARGS= prefix="${PREFIX}" mandir="man" pkgconfig="libdata/pkgconfig" \ manbuild=no target_python="${PYTHON_CMD}" qt=no @@ -31,11 +31,11 @@ PASSTHROUGH PPS PROFILING RECONFIGURE RTCM104V2 RTCM104V3 \ SHMEXPORT SIRF SOCKEXPORT SUPERSTARII TIMING TNT TRIPMATE \ TSIP UBLOX USB X11 -OPTIONS_DEFAULT= AIVDM ASHTECH CPPBIND EARTHMATE EVERMORE FURY FV18 GARMIN \ - GARMINTXT GEOSTAR GPSCLOCK ITRAX NAVCOM NCURSES NETFEED \ - NMEA0183 NTP NTPSHM NTRIP OCEANSERVER ONCORE PASSTHROUGH \ - RECONFIGURE RTCM104V2 RTCM104V3 SHMEXPORT SIRF SOCKEXPORT \ - SUPERSTARII TIMING TNT TRIPMATE TSIP UBLOX USB X11 +OPTIONS_DEFAULT= AIVDM ASHTECH CPPBIND EARTHMATE EVERMORE FURY FV18 GARMIN \ + GARMINTXT GEOSTAR GPSCLOCK ITRAX NAVCOM NCURSES NETFEED \ + NMEA0183 NTP NTPSHM NTRIP OCEANSERVER ONCORE PASSTHROUGH \ + RECONFIGURE RTCM104V2 RTCM104V3 SHMEXPORT SIRF SOCKEXPORT \ + SUPERSTARII TIMING TNT TRIPMATE TSIP UBLOX USB X11 OPTIONS_SUB= yes AIVDM_DESC= Aivdm support @@ -134,10 +134,11 @@ RECONFIGURE_MAKE_ARGS_OFF= reconfigure=no CPPBIND_MAKE_ARGS_OFF= libgpsmm=no X11_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}cairo>=0:graphics/py-cairo@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}gobject3>=0:devel/py-gobject3@${PY_FLAVOR} -#X11_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}cairo>=0:graphics/py-cairo@${PY_FLAVOR} + ${PYTHON_PKGNAMEPREFIX}gobject3>=0:devel/py-gobject3@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}serial>=0:comms/py-serial@${PY_FLAVOR} X11_USES= gnome X11_USE= GNOME=gtk30 +X11_MAKE_ARGS_OFF= xgps=no # Build control PROFILING_MAKE_ARGS= profiling=yes @@ -151,5 +152,6 @@ -d ${PYTHONPREFIX_SITELIBDIR} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} && \ ${PYTHON_CMD} -O ${PYTHON_LIBDIR}/compileall.py \ -d ${PYTHONPREFIX_SITELIBDIR} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;}) + ${RM} -r ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/gps/__pycache__ .include Index: head/astro/gpsd/distinfo =================================================================== --- head/astro/gpsd/distinfo +++ head/astro/gpsd/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1516146278 -SHA256 (gpsd-3.17.tar.gz) = 68e0dbecfb5831997f8b3d6ba48aed812eb465d8c0089420ab68f9ce4d85e77a -SIZE (gpsd-3.17.tar.gz) = 8755304 +TIMESTAMP = 1581144632 +SHA256 (gpsd-3.20.tar.gz) = 172a7805068eacb815a3c5225436fcb0be46e7e49a5001a94034eac43df85e50 +SIZE (gpsd-3.20.tar.gz) = 3600835 Index: head/astro/gpsd/files/patch-SConstruct =================================================================== --- head/astro/gpsd/files/patch-SConstruct +++ head/astro/gpsd/files/patch-SConstruct @@ -0,0 +1,56 @@ +--- SConstruct.orig 2020-02-08 06:51:40 UTC ++++ SConstruct +@@ -1267,32 +1267,32 @@ else: + config.env['aiogps'] = True + + # check for pyserial +- try: +- imp.find_module('serial') +- announce("Python module serial (pyserial) found.") +- except ImportError: +- # no pycairo, don't build xgps, xgpsspeed +- announce("WARNING: Python module serial (pyserial) not found.") +- config.env['xgps'] = False ++ #try: ++ # imp.find_module('serial') ++ # announce("Python module serial (pyserial) found.") ++ #except ImportError: ++ # # no pycairo, don't build xgps, xgpsspeed ++ # announce("WARNING: Python module serial (pyserial) not found.") ++ # config.env['xgps'] = False + + if config.env['xgps']: + # check for pycairo +- try: +- imp.find_module('cairo') +- announce("Python module cairo (pycairo) found.") +- except ImportError: +- # no pycairo, don't build xgps, xgpsspeed +- announce("WARNING: Python module cairo (pycairo) not found.") +- config.env['xgps'] = False ++ #try: ++ # imp.find_module('cairo') ++ # announce("Python module cairo (pycairo) found.") ++ #except ImportError: ++ # # no pycairo, don't build xgps, xgpsspeed ++ # announce("WARNING: Python module cairo (pycairo) not found.") ++ # config.env['xgps'] = False + + # check for pygobject +- try: +- imp.find_module('gi') +- announce("Python module gi (pygobject) found.") +- except ImportError: +- # no pygobject, don't build xgps, xgpsspeed +- announce("WARNING: Python module gi (pygobject) not found.") +- config.env['xgps'] = False ++ #try: ++ # imp.find_module('gi') ++ # announce("Python module gi (pygobject) found.") ++ #except ImportError: ++ # # no pygobject, don't build xgps, xgpsspeed ++ # announce("WARNING: Python module gi (pygobject) not found.") ++ # config.env['xgps'] = False + + if not config.CheckPKG('gtk+-3.0'): + config.env['xgps'] = False Index: head/astro/gpsd/pkg-plist =================================================================== --- head/astro/gpsd/pkg-plist +++ head/astro/gpsd/pkg-plist @@ -8,16 +8,19 @@ %%NCURSES%%bin/gpsmon bin/gpspipe bin/gpsprof +bin/gpsrinex bin/gpxlogger bin/lcdgps %%PPS%%bin/ntpshmmon +bin/ubxtool %%X11%%bin/xgps %%X11%%bin/xgpsspeed +bin/zerk include/gps.h include/libgpsmm.h lib/libgps.so -lib/libgps.so.23 -lib/libgps.so.23.0.0 +lib/libgps.so.25 +lib/libgps.so.25.0.0 man/man1/cgps.1.gz man/man1/gegps.1.gz man/man1/gps.1.gz @@ -29,9 +32,12 @@ man/man1/gpsmon.1.gz man/man1/gpspipe.1.gz man/man1/gpsprof.1.gz +man/man1/gpsrinex.1.gz man/man1/gpxlogger.1.gz man/man1/lcdgps.1.gz man/man1/ntpshmmon.1.gz +man/man1/ubxtool.1.gz +man/man1/zerk.1.gz %%X11%%man/man1/xgps.1.gz %%X11%%man/man1/xgpsspeed.1.gz man/man3/libQgpsmm.3.gz @@ -44,22 +50,13 @@ man/man8/gpsinit.8.gz %%PYTHON_SITELIBDIR%%/%%PYTHON_EGGINFO%% %%PYTHON_SITELIBDIR%%/gps/__init__.py -%%PYTHON_SITELIBDIR%%/gps/__init__.pyc -%%PYTHON_SITELIBDIR%%/gps/__init__.pyo %%PYTHON_SITELIBDIR%%/gps/client.py -%%PYTHON_SITELIBDIR%%/gps/client.pyc -%%PYTHON_SITELIBDIR%%/gps/client.pyo -%%PYTHON_SITELIBDIR%%/gps/clienthelpers.so +%%PYTHON_SITELIBDIR%%/gps/clienthelpers.py %%PYTHON_SITELIBDIR%%/gps/fake.py -%%PYTHON_SITELIBDIR%%/gps/fake.pyc -%%PYTHON_SITELIBDIR%%/gps/fake.pyo %%PYTHON_SITELIBDIR%%/gps/gps.py -%%PYTHON_SITELIBDIR%%/gps/gps.pyc -%%PYTHON_SITELIBDIR%%/gps/gps.pyo %%PYTHON_SITELIBDIR%%/gps/misc.py -%%PYTHON_SITELIBDIR%%/gps/misc.pyc -%%PYTHON_SITELIBDIR%%/gps/misc.pyo %%PYTHON_SITELIBDIR%%/gps/packet.so +%%PYTHON_SITELIBDIR%%/gps/watch_options.py libdata/pkgconfig/libgps.pc sbin/gpsd sbin/gpsdctl Index: head/astro/gpxloggerd/Makefile =================================================================== --- head/astro/gpxloggerd/Makefile +++ head/astro/gpxloggerd/Makefile @@ -3,6 +3,7 @@ PORTNAME= gpxloggerd PORTVERSION= 0.2.3 +PORTREVISION= 1 CATEGORIES= astro USE_GITHUB= yes GH_ACCOUNT= glebius Index: head/astro/gpxloggerd/files/patch-gpxloggerd.c =================================================================== --- head/astro/gpxloggerd/files/patch-gpxloggerd.c +++ head/astro/gpxloggerd/files/patch-gpxloggerd.c @@ -0,0 +1,48 @@ +--- gpxloggerd.c.orig 2020-03-05 17:50:39 UTC ++++ gpxloggerd.c +@@ -114,7 +114,9 @@ print_fix(struct gps_data_t *gpsdata) + fix->latitude, fix->longitude); + if (!isnan(fix->altitude)) + fprintf(logfile, " %.f\n", fix->altitude); +- fprintf(logfile, " \n", unix_to_iso8601(fix->time, ++// See https://gitlab.com/gpsd/gpsd/-/blob/master/gps.h#L70 ++// Replaced by now_to_iso8601 ++ fprintf(logfile, " \n", now_to_iso8601( + tbuf, sizeof(tbuf))); + if (verbose) { + switch (fix->mode) { +@@ -171,6 +173,11 @@ opennewfile(char *template) + print_gpx_header(); + } + ++static double timespec_to_double(struct timespec ts) ++{ ++ return ((double)(ts.tv_sec) + ((double)(ts.tv_nsec) / 1e9)); ++} ++ + static void + process(struct gps_data_t *gpsdata) + { +@@ -189,10 +196,10 @@ process(struct gps_data_t *gpsdata) + return; + + move = 0; /* stupid old gcc */ +- t = (time_t )floor(fix->time); +- ot = (time_t )floor(ofix.time); ++ t = (time_t )floor(timespec_to_double(fix->time)); ++ ot = (time_t )floor(timespec_to_double(ofix.time)); + if (minbearing) +- pt = (time_t )floor(pfix.time); ++ pt = (time_t )floor(timespec_to_double(pfix.time)); + else + pt = ot; + +@@ -521,7 +528,7 @@ reopen: + if (FD_ISSET(signal_fd[0], &fds)) + process_signal(); + if (FD_ISSET(gpsdata.gps_fd, &fds)) { +- n = gps_read(&gpsdata); ++ n = gps_read(&gpsdata, NULL, 0); + if (n < 0) { + syslog(LOG_ERR, "gps_read(): %m, reopening"); + gps_close(&gpsdata); Index: head/comms/direwolf/Makefile =================================================================== --- head/comms/direwolf/Makefile +++ head/comms/direwolf/Makefile @@ -2,6 +2,7 @@ PORTNAME= direwolf DISTVERSION= 1.5 +PORTREVISION= 1 CATEGORIES= comms hamradio MAINTAINER= hamradio@FreeBSD.org Index: head/comms/direwolf/files/patch-dwgpsd.c =================================================================== --- head/comms/direwolf/files/patch-dwgpsd.c +++ head/comms/direwolf/files/patch-dwgpsd.c @@ -0,0 +1,34 @@ +--- dwgpsd.c.orig 2020-03-05 16:59:08 UTC ++++ dwgpsd.c +@@ -57,7 +57,10 @@ + // Debian bug report: direwolf (1.2-1) FTBFS with libgps22 as part of the gpsd transition (#803605): + // dwgps.c claims to only support GPSD_API_MAJOR_VERSION 5, but also builds successfully with + // GPSD_API_MAJOR_VERSION 6 provided by libgps22 when the attached patch is applied. +-#if GPSD_API_MAJOR_VERSION < 5 || GPSD_API_MAJOR_VERSION > 6 ++ ++// Also compatible with API 9 with conditional compilation later. ++ ++#if GPSD_API_MAJOR_VERSION < 5 || GPSD_API_MAJOR_VERSION > 9 + #error libgps API version might be incompatible. + #endif + +@@ -257,7 +260,19 @@ static void * read_gpsd_thread (void *arg) + /* Fall thru to read which should get error and bail out. */ + } + ++// https://github.com/wb2osz/direwolf/issues/196 ++// https://bugzilla.redhat.com/show_bug.cgi?id=1674812 ++ ++// gps_read has two new parameters in API version 7. ++// It looks like this could be used to obtain the JSON message from the daemon. ++// Specify NULL, instead of message buffer space, if this is not desired. ++// Why couldn't they add a new function instead of introducing incompatibility? ++ ++#if GPSD_API_MAJOR_VERSION >= 7 ++ if (gps_read (&gpsdata, NULL, 0) == -1) { ++#else + if (gps_read (&gpsdata) == -1) { ++#endif + text_color_set(DW_COLOR_ERROR); + + dw_printf ("------------------------------------------\n");