commit 23101ae1ad4cc371be703164468bca7a44ea3093 Author: MSVSphere Packaging Team Date: Fri Oct 25 15:03:05 2024 +0300 import gpsd-3.25-16.el10 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d3add13 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/gpsd-3.25.tar.gz +SOURCES/scons-4.6.0.tar.gz diff --git a/.gpsd.metadata b/.gpsd.metadata new file mode 100644 index 0000000..f482eef --- /dev/null +++ b/.gpsd.metadata @@ -0,0 +1,2 @@ +81965943f81484da80d8adb0547572fe9f0e8ebc SOURCES/gpsd-3.25.tar.gz +189734458616309055eeaf7e65dd461e3c756869 SOURCES/scons-4.6.0.tar.gz diff --git a/SOURCES/gpsd-busywait.patch b/SOURCES/gpsd-busywait.patch new file mode 100644 index 0000000..784cfd3 --- /dev/null +++ b/SOURCES/gpsd-busywait.patch @@ -0,0 +1,84 @@ +commit e5ba7aa2af74fd22ebbd5c4a6624edcf983863de +Author: Michal Schmidt +Date: Fri Aug 4 16:53:01 2023 +0200 + + gps/gps.py.in: no busy-waiting when reading from gpsd socket + + ubxtool keeps one CPU 100% busy while it waits for data to read from the + gpsd socket. Running it under strace showed that it calls select() with + zero timeout in a loop: + + ... + 11:02:34.049629 pselect6(4, [3], [], [], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) + 11:02:34.049649 pselect6(4, [3], [], [], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) + 11:02:34.049670 pselect6(4, [3], [], [], {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout) + ... + + The busy waiting can be eliminated by passing the actual timeout value + to select(). In the reading loop in gps.py, the remaining time can be + easily calculated and passed as the argument to the self.ser.waiting() + function (which is basically a select() wrapper). + + Fixing this problem exposed a bug in how the received bytes are decoded. + decode_func may not consume all input at once. Consumable input may be + left in self.out until decode_func returns zero, indicating that it + could not process any more input. So decode_func must be called in a + loop each time a buffer is received from the socket. The busy waiting + was hiding this issue, because decode_func was being called all the + time. + + The "elif self.input_is_device:" branch probably needs similar + treatment, but I am testing only the gpsd usecase. + +diff --git a/gps/gps.py.in b/gps/gps.py.in +index 623a750a0..14d7707ab 100644 +--- a/gps/gps.py.in ++++ b/gps/gps.py.in +@@ -384,10 +384,11 @@ class gps_io(object): + if self.gpsd_host is not None: + # gpsd input + start = monotonic() +- while (monotonic() - start) < input_wait: ++ remaining_time = input_wait ++ while remaining_time > 0: + # First priority is to be sure the input buffer is read. + # This is to prevent input buffer overuns +- if 0 < self.ser.waiting(): ++ if 0 < self.ser.waiting(remaining_time): + # We have serial input waiting, get it + # No timeout possible + # RTCM3 JSON can be over 4.4k long, so go big +@@ -397,17 +398,22 @@ class gps_io(object): + raw_fd.write(polybytes(new_out)) + self.out += new_out + +- consumed = decode_func(self.out) +- # TODO: the decoder shall return a some current +- # statement_identifier # to fill last_statement_identifier +- last_statement_identifier = None +- # +- self.out = self.out[consumed:] +- if ((expect_statement_identifier and +- (expect_statement_identifier == +- last_statement_identifier))): +- # Got what we were waiting for. Done? +- ret_code = 0 ++ while True: ++ consumed = decode_func(self.out) ++ if consumed == 0: ++ break ++ # TODO: the decoder shall return a some current ++ # statement_identifier # to fill last_statement_identifier ++ last_statement_identifier = None ++ # ++ self.out = self.out[consumed:] ++ if ((expect_statement_identifier and ++ (expect_statement_identifier == ++ last_statement_identifier))): ++ # Got what we were waiting for. Done? ++ ret_code = 0 ++ ++ remaining_time = start + input_wait - monotonic() + + elif self.input_is_device: + # input is a serial device diff --git a/SOURCES/gpsd-ipv6.patch b/SOURCES/gpsd-ipv6.patch new file mode 100644 index 0000000..ade8abb --- /dev/null +++ b/SOURCES/gpsd-ipv6.patch @@ -0,0 +1,356 @@ +commit 5c080c35fc3d981172a5e4af34d0d92854a5433a +Author: Miroslav Lichvar +Date: Tue Jul 25 11:01:14 2023 +0200 + + libgps/netlib.c: Rework enabling non-block and make binding configurable. + + Instead of accepting SOCK_NONBLOCK as flags in netlib_connectsock1() + specify if the non-blocking mode should be enabled after or before + connect(). + + Also add a boolean parameter to the function to select between connect() + and bind() instead of hardcoding it for TCP vs UDP, which will allow + connecting to UDP ports in gps2udp. + +diff --git a/gpsd/libgpsd_core.c b/gpsd/libgpsd_core.c +index 47ee5d57e..341e8b80c 100644 +--- a/gpsd/libgpsd_core.c ++++ b/gpsd/libgpsd_core.c +@@ -561,7 +561,6 @@ int gpsd_open(struct gps_device_t *session) + char server[GPS_PATH_MAX], *host, *port, *device; + socket_t dsock; + char addrbuf[50]; // INET6_ADDRSTRLEN +- int sock_opt; + + session->sourcetype = SOURCE_TCP; + (void)strlcpy(server, session->gpsdata.dev.path + 6, sizeof(server)); +@@ -576,15 +575,9 @@ int gpsd_open(struct gps_device_t *session) + GPSD_LOG(LOG_PROG, &session->context->errout, + "CORE: opening TCP feed at %s, port %s.\n", host, + port); +-#if defined(SOCK_NONBLOCK) +- sock_opt = SOCK_NONBLOCK; +-#else +- // macOS has no SOCK_NONBLOCK +- sock_opt = 0; +-#endif + // open non-blocking + dsock = netlib_connectsock1(AF_UNSPEC, host, port, "tcp", +- sock_opt, addrbuf, sizeof(addrbuf)); ++ 1, false, addrbuf, sizeof(addrbuf)); + if (0 > dsock) { + GPSD_LOG(LOG_ERROR, &session->context->errout, + "CORE: TCP %s IP %s, open error %s(%d).\n", +@@ -614,7 +607,8 @@ int gpsd_open(struct gps_device_t *session) + GPSD_LOG(LOG_PROG, &session->context->errout, + "CORE: opening UDP feed at %s, port %s.\n", host, + port); +- if (0 > (dsock = netlib_connectsock(AF_UNSPEC, host, port, "udp"))) { ++ if (0 > (dsock = netlib_connectsock1(AF_UNSPEC, host, port, "udp", ++ 0, true, NULL, 0))) { + GPSD_LOG(LOG_ERROR, &session->context->errout, + "CORE: UDP device open error %s(%d).\n", + netlib_errstr(dsock), dsock); +diff --git a/gpsd/net_ntrip.c b/gpsd/net_ntrip.c +index 8241995ae..d89bdc1f9 100644 +--- a/gpsd/net_ntrip.c ++++ b/gpsd/net_ntrip.c +@@ -856,7 +856,8 @@ static int ntrip_reconnect(struct gps_device_t *device) + device->gpsdata.dev.path); + dsock = netlib_connectsock1(AF_UNSPEC, device->ntrip.stream.host, + device->ntrip.stream.port, +- "tcp", SOCK_NONBLOCK, addrbuf, sizeof(addrbuf)); ++ "tcp", 1, false, ++ addrbuf, sizeof(addrbuf)); + device->gpsdata.gps_fd = dsock; + // nonblocking means we have the fd, but the connection is not + // finished yet. Connection may fail, later. +diff --git a/include/gpsd.h b/include/gpsd.h +index 0f6b731eb..2f3260c1e 100644 +--- a/include/gpsd.h ++++ b/include/gpsd.h +@@ -1002,7 +1002,7 @@ extern void gpsd_clear_data(struct gps_device_t *); + extern socket_t netlib_connectsock(int, const char *, const char *, + const char *); + extern socket_t netlib_connectsock1(int, const char *, const char *, +- const char *, int, ++ const char *, int, bool, + char *, size_t); + // end FIXME + extern socket_t netlib_localsocket(const char *, int); +diff --git a/libgps/netlib.c b/libgps/netlib.c +index e4e763025..5f553fe10 100644 +--- a/libgps/netlib.c ++++ b/libgps/netlib.c +@@ -55,8 +55,10 @@ + * host - host to connect to + * service -- aka port + * protocol +- * flags -- can be SOCK_NONBLOCK for non-blocking connect +- * Note: macOS does not have SOCK_NONBLOCK ++ * nonblock -- 1 sets the socket as non-blocking before connect() if ++ * SOCK_NONBLOCK is supported, ++ * >1 sets the socket as non-blocking after connect() ++ * bind_me -- call bind() on the socket instead of connect() + * addrbuf -- 50 char buf to put string of IP address conencting + * INET6_ADDRSTRLEN + * addrbuf_sz -- sizeof(adddrbuf) +@@ -70,16 +72,15 @@ + * less than zero on error (NL_*) + */ + socket_t netlib_connectsock1(int af, const char *host, const char *service, +- const char *protocol, int flags, ++ const char *protocol, int nonblock, bool bind_me, + char *addrbuf, size_t addrbuf_sz) + { + struct protoent *ppe; + struct addrinfo hints; + struct addrinfo *result = NULL; + struct addrinfo *rp; +- int ret, type, proto, one; ++ int ret, flags, type, proto, one; + socket_t s; +- bool bind_me; + + if (NULL != addrbuf) { + addrbuf[0] = '\0'; +@@ -97,9 +98,6 @@ socket_t netlib_connectsock1(int af, const char *host, const char *service, + return NL_NOPROTO; + } + +- /* we probably ought to pass this in as an explicit flag argument */ +- bind_me = (SOCK_DGRAM == type); +- + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = af; + hints.ai_socktype = type; +@@ -107,6 +105,15 @@ socket_t netlib_connectsock1(int af, const char *host, const char *service, + if (bind_me) { + hints.ai_flags = AI_PASSIVE; + } ++#if defined(SOCK_NONBLOCK) ++ flags = nonblock == 1 ? SOCK_NONBLOCK : 0; ++#else ++ // macOS has no SOCK_NONBLOCK ++ flags = 0; ++ if (nonblock == 1) ++ nonblock = 2; ++#endif ++ + // FIXME: need a way to bypass these DNS calls if host is an IP. + if ((ret = getaddrinfo(host, service, &hints, &result))) { + // result is unchanged on error, so we need to have set it to NULL +@@ -219,13 +226,15 @@ socket_t netlib_connectsock1(int af, const char *host, const char *service, + sizeof(one)); + } + +- // set socket to noblocking ++ if (nonblock > 1) { ++ // set socket to noblocking + #ifdef HAVE_FCNTL +- (void)fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK); ++ (void)fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK); + #elif defined(HAVE_WINSOCK2_H) +- u_long one1 = 1; +- (void)ioctlsocket(s, FIONBIO, &one1); ++ u_long one1 = 1; ++ (void)ioctlsocket(s, FIONBIO, &one1); + #endif ++ } + return s; + } + +@@ -235,7 +244,7 @@ socket_t netlib_connectsock1(int af, const char *host, const char *service, + socket_t netlib_connectsock(int af, const char *host, const char *service, + const char *protocol) + { +- return netlib_connectsock1(af, host, service, protocol, 0, NULL, 0); ++ return netlib_connectsock1(af, host, service, protocol, 2, false, NULL, 0); + } + + // Convert NL_* error code to a string + +commit fd6682a6ffd0a5d4d640839422274b582ba38e72 +Author: Miroslav Lichvar +Date: Tue Jul 25 11:08:19 2023 +0200 + + clients/gps2udp.c: Switch to netlib_connectsock1(). + + Use netlib_connectsock1() to avoid using obsolete gethostbyname() and + support IPv6. + +diff --git a/clients/gps2udp.c b/clients/gps2udp.c +index 2d9c6033d..541054d8f 100644 +--- a/clients/gps2udp.c ++++ b/clients/gps2udp.c +@@ -21,7 +21,6 @@ + #ifdef HAVE_GETOPT_LONG + #include // for getopt_long() + #endif +-#include /* for gethostbyname() */ + #include + #include + #include +@@ -50,7 +49,6 @@ static struct gps_data_t gpsdata; + + /* UDP socket variables */ + #define MAX_UDP_DEST 5 +-static struct sockaddr_in remote[MAX_UDP_DEST]; + static int sock[MAX_UDP_DEST]; + static int udpchannel; + +@@ -128,12 +126,10 @@ static int send_udp(char *nmeastring, size_t ind) + + // send message on udp channel + for (channel=0; channel < udpchannel; channel ++) { +- ssize_t status = sendto(sock[channel], +- buffer, +- ind, +- 0, +- (struct sockaddr *)&remote[channel], +- (int)sizeof(remote)); ++ ssize_t status = send(sock[channel], ++ buffer, ++ ind, ++ 0); + if (status < (ssize_t)ind) { + (void)fprintf(stderr, "gps2udp: failed to send [%s] \n", + buffer); +@@ -152,9 +148,6 @@ static int open_udp(char **hostport) + for (channel = 0; channel < udpchannel; channel++) { + char *hostname = NULL; + char *portname = NULL; +- char *endptr = NULL; +- int portnum; +- struct hostent *hp; + + if (NULL == hostport[channel]) { + // pacify coverity +@@ -171,32 +164,13 @@ static int open_udp(char **hostport) + return -1; + } + +- errno = 0; +- portnum = (int)strtol(portname, &endptr, 10); +- if (1 > portnum || 65535 < portnum || '\0' != *endptr || 0 != errno) { +- (void)fprintf(stderr, "gps2udp: syntax is [-u hostname:port] " +- "[%s] is not a valid port number\n", portname); +- return -1; +- } +- +- sock[channel]= socket(AF_INET, SOCK_DGRAM, 0); ++ sock[channel] = netlib_connectsock1(AF_UNSPEC, hostname, portname, "udp", ++ 0, false, NULL, 0); + if (0 > sock[channel]) { +- (void)fprintf(stderr, "gps2udp: error creating UDP socket\n"); ++ (void)fprintf(stderr, "gps2udp: error creating UDP socket: %s\n", ++ netlib_errstr(sock[channel])); + return -1; + } +- +- remote[channel].sin_family = (sa_family_t)AF_INET; +- hp = gethostbyname(hostname); +- if (NULL == hp) { +- (void)fprintf(stderr, +- "gps2udp: syntax is [-u hostname:port] [%s]" +- " is not a valid hostname\n", +- hostname); +- return -1; +- } +- +- memcpy( &remote[channel].sin_addr, hp->h_addr_list[0], hp->h_length); +- remote[channel].sin_port = htons((in_port_t)portnum); + } + return 0; + } + +commit 749be8acce27f16d74ba727f4819f3e49602882a +Author: Miroslav Lichvar +Date: Tue Jul 25 11:10:39 2023 +0200 + + clients/lcdgps.c: Switch to netlib_connectsock1(). + + Use netlib_connectsock1() to avoid using obsolete gethostbyname() and + support IPv6. + +diff --git a/clients/lcdgps.c b/clients/lcdgps.c +index 7d0ee6bc8..b311882b0 100644 +--- a/clients/lcdgps.c ++++ b/clients/lcdgps.c +@@ -21,11 +21,12 @@ + */ + + #define LCDDHOST "localhost" +-#define LCDDPORT 13666 ++#define LCDDPORT "13666" + + #define CLIMB 3 + + #include "../include/gpsd_config.h" /* must be before all includes */ ++#include "../include/gpsd.h" + + #include + #include +@@ -33,7 +34,6 @@ + #include // for getopt_long() + #endif + #include +-#include /* for gethostbyname() */ + #include + #include + #include +@@ -259,9 +259,6 @@ static void usage( char *prog) + + int main(int argc, char *argv[]) + { +- int rc; +- struct sockaddr_in localAddr, servAddr; +- struct hostent *h; + const char *optstring = "?hl:su:V"; + int n; + #ifdef HAVE_GETOPT_LONG +@@ -390,41 +387,10 @@ int main(int argc, char *argv[]) + } + + /* Connect to LCDd */ +- h = gethostbyname(LCDDHOST); +- if (h==NULL) { +- printf("%s: unknown host '%s'\n",argv[0],LCDDHOST); +- exit(EXIT_FAILURE); +- } +- +- servAddr.sin_family = h->h_addrtype; +- memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); +- servAddr.sin_port = htons(LCDDPORT); +- +- /* create socket */ +- sd = socket(AF_INET, SOCK_STREAM, 0); +- if (BAD_SOCKET(sd)) { +- perror("cannot open socket "); +- exit(EXIT_FAILURE); +- } +- +- /* bind any port number */ +- localAddr.sin_family = AF_INET; +- localAddr.sin_addr.s_addr = htonl(INADDR_ANY); +- localAddr.sin_port = htons(0); +- +- /* coverity[uninit_use_in_call] */ +- rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr)); +- if (rc == -1) { +- printf("%s: cannot bind port TCP %d\n",argv[0],LCDDPORT); +- perror("error "); +- exit(EXIT_FAILURE); +- } ++ sd = netlib_connectsock1(AF_UNSPEC, LCDDHOST, LCDDPORT, "tcp", 0, false, NULL, 0); ++ if (0 > sd) { + +- /* connect to server */ +- /* coverity[uninit_use_in_call] */ +- rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr)); +- if (rc == -1) { +- perror("cannot connect "); ++ (void)fprintf(stderr, "lcdgps: cannot connect: %s\n", netlib_errstr(sd)); + exit(EXIT_FAILURE); + } + diff --git a/SOURCES/gpsd-scanfixes.patch b/SOURCES/gpsd-scanfixes.patch new file mode 100644 index 0000000..67cca18 --- /dev/null +++ b/SOURCES/gpsd-scanfixes.patch @@ -0,0 +1,188 @@ +commit 651d505d2b075b9bd87729d2d5d155c29c03fbc1 +Author: Miroslav Lichvar +Date: Mon Jul 31 15:46:16 2023 +0200 + + devtools/tablegen.py: Fix typo in structname. + +diff --git a/devtools/tablegen.py b/devtools/tablegen.py +index 7851fceca..3feb64b9e 100755 +--- a/devtools/tablegen.py ++++ b/devtools/tablegen.py +@@ -129,7 +129,7 @@ def make_driver_code(wfp): + continue + offset = offsets[i].split('-')[0] + if arrayname: +- target = "%s.%s[i].%s" % (structnme, arrayname, name) ++ target = "%s.%s[i].%s" % (structname, arrayname, name) + offset = "a + " + offset + else: + target = "%s.%s" % (structname, name) + +commit db2a00f7ee4e66ee57ff66e84cec664444c26d8f +Author: Miroslav Lichvar +Date: Mon Jul 31 15:47:10 2023 +0200 + + gpsd/net_dgpsip.c: Fix socket check. + +diff --git a/gpsd/net_dgpsip.c b/gpsd/net_dgpsip.c +index d6e123b67..8e218ba41 100644 +--- a/gpsd/net_dgpsip.c ++++ b/gpsd/net_dgpsip.c +@@ -42,7 +42,7 @@ socket_t dgpsip_open(struct gps_device_t *device, const char *dgpsserver) + } + + dsock = netlib_connectsock(AF_UNSPEC, dgpsserver, dgpsport, "tcp"); +- if (0 <= dsock) { ++ if (0 > dsock) { + GPSD_LOG(LOG_ERROR, &device->context->errout, + "DGPS: can't connect to DGPS server %s, netlib error %s(%d).\n", + dgpsserver, netlib_errstr(dsock), dsock); + +commit 60bc3595dbb74f8904037ad64b2a0820c408996b +Author: Miroslav Lichvar +Date: Mon Jul 31 15:50:32 2023 +0200 + + clients/gpsdebuginfo: Fix issues reported by shellcheck. + +diff --git a/clients/gpsdebuginfo b/clients/gpsdebuginfo +index fa970dad9..38a1540b2 100755 +--- a/clients/gpsdebuginfo ++++ b/clients/gpsdebuginfo +@@ -7,7 +7,7 @@ exec 2>&1 + + # print what we do + set -x +-if [ 0 != $(id -u) ]; then ++if [ 0 != "$(id -u)" ]; then + echo "Please run as root" + exit 1 + fi +@@ -63,9 +63,9 @@ ls -l /dev/pps* /dev/tty[ASTU]* /dev/gps* + if command -v lsusb; then + lsusb + fi +-echo PYTHONPATH $PYTHONPATH ++echo PYTHONPATH "$PYTHONPATH" + if command -v gpscat; then +- head -n 1 `command -v gpscat` ++ head -n 1 "$(command -v gpscat)" + fi + if command -v python; then + python -V + +commit e12265d591f07a50d6de54af83ae6246326460ef +Author: Miroslav Lichvar +Date: Mon Jul 31 15:50:58 2023 +0200 + + gpsinit: Fix issues reported by shellcheck. + +diff --git a/gpsinit b/gpsinit +index 5c14f3374..8fc6c92ec 100755 +--- a/gpsinit ++++ b/gpsinit +@@ -6,26 +6,23 @@ + # SPDX-License-Identifier: BSD-2-clause + # + +-speed=38400 + net=0 + + version() + { +- echo `basename $0`" : Version v0.21"; ++ echo "$(basename "$0") : Version v0.21"; + } + + usage() + { + version; echo; +- echo "usage :" `basename $0` "[-n ] [-s ] []"; +- echo " :" `basename $0` "-V"; +- echo " :" `basename $0` "-h"; ++ echo "usage : $(basename "$0") [-n ] []"; ++ echo " : $(basename "$0") -V"; ++ echo " : $(basename "$0") -h"; + echo " Options include:"; + echo " -? = Print this help message and exit."; + echo " -h = Print this help message and exit."; + echo " -n = CAN network number, 0 if not given."; +- echo " -s = Speed of the slcan hardware port, 38400 if not given."; +- echo " = Needed for some slcan modules only."; + echo " -V = Print version of this script and exit."; + echo " can_module_name = One out of plx_pci, esd_usb2, usb_8dev, vcan, slcan, beaglebone."; + echo " interface_name = The interface, the SLCAN module is connected to, i.e. /dev/ttyS0 or /dev/ttyUSB0."; +@@ -34,19 +31,19 @@ usage() + } + + # -v for version is deprecated 2020 +-while getopts :n:s:vh opt ++while getopts :n:s:vVh opt + do + case ${opt} in + h) usage; exit 0;; + n) net=${OPTARG};; +- s) speed=${OPTARG};; ++ s) ;; # unused + \?) usage; exit 1;; + v) version; exit 0;; + V) version; exit 0;; + esac + done + +-shift $((${OPTIND} - 1)) ++shift $((OPTIND - 1)) + + candevice=$1 + +@@ -54,38 +51,38 @@ case ${candevice} in + plx_pci) + # For the SJA1000 based PCI or PCI-Express CAN interface + modprobe plx_pci; +- ip link set can${net} type can tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1; +- ip link set can${net} up;; ++ ip link set "can${net}" type can tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1; ++ ip link set "can${net}" up;; + esd_usb2) + # For an esd usb/2 CAN interface + modprobe esd_usb2; +- ip link set can${net} type can tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1; +- ip link set can${net} up;; ++ ip link set "can${net}" type can tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1; ++ ip link set "can${net}" up;; + usb_8dev) + # For an 8devices usb2can CAN interface + modprobe usb_8dev; +- ip link set can${net} type can tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1; +- ip link set can${net} up;; ++ ip link set "can${net}" type can tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1; ++ ip link set "can${net}" up;; + vcan) + # With this setup, CAN frames can be injected into vcan0 by a test + modprobe vcan; + ip link add type vcan; +- ip link set vcan${net} up;; ++ ip link set "vcan${net}" up;; + slcan) + # For a serial line CAN device + # No support for devices, that need a setup of the baudrate yet + device=${2:-/dev/ttyUSB0}; + modprobe slcan; +- slcan_attach -f -s5 -o ${device}; +- slcand `basename ${device}`; +- ip link set slcan${net} up;; ++ slcan_attach -f -s5 -o "${device}"; ++ slcand "$(basename "${device}")"; ++ ip link set "slcan${net}" up;; + beaglebone) + # For CAN interface on a BeagleBone + # The d_can driver is part of the kernel +- ip link set can${net} type can bitrate 250000 sjw 1; +- ip link set can${net} up;; ++ ip link set "can${net}" type can bitrate 250000 sjw 1; ++ ip link set "can${net}" up;; + *) +- echo `basename ${0}` ": invalid CAN interface ${1} net${net} device ${2:-(none)}" ++ echo "$(basename "$0") : invalid CAN interface ${1} net${net} device ${2:-(none)}" + echo; + usage; + exit 1 diff --git a/SOURCES/gpsd-sconsflags.patch b/SOURCES/gpsd-sconsflags.patch new file mode 100644 index 0000000..5c6b25f --- /dev/null +++ b/SOURCES/gpsd-sconsflags.patch @@ -0,0 +1,22 @@ +diff -up gpsd-3.25/SConscript.sconsflags gpsd-3.25/SConscript +--- gpsd-3.25/SConscript.sconsflags 2024-04-22 15:14:25.672775265 +0200 ++++ gpsd-3.25/SConscript 2024-04-22 15:18:33.935960954 +0200 +@@ -619,12 +619,15 @@ for i in ["ARFLAGS", + "SHLINKFLAGS", + ]: + if i in os.environ: +- env.MergeFlags(Split(os.getenv(i))) ++ t = i ++ if t == "LDFLAGS": ++ t = "LINKFLAGS" ++ env.MergeFlags({t: Split(os.getenv(i))}) + + +-# Keep scan-build options in the environment ++# Keep scan-build and rpm options in the environment + for key, value in os.environ.items(): +- if key.startswith('CCC_'): ++ if key.startswith('CCC_') or key.startswith('RPM_'): + env.Append(ENV={key: value}) + + # Placeholder so we can kluge together something like VPATH builds. diff --git a/SOURCES/gpsd.sysconfig b/SOURCES/gpsd.sysconfig new file mode 100644 index 0000000..2d840c0 --- /dev/null +++ b/SOURCES/gpsd.sysconfig @@ -0,0 +1,4 @@ +# Options for gpsd, including serial devices +OPTIONS="" +# Set to 'true' to add USB devices automatically via udev +USBAUTO="true" diff --git a/SPECS/gpsd.spec b/SPECS/gpsd.spec new file mode 100644 index 0000000..b1ac8a2 --- /dev/null +++ b/SPECS/gpsd.spec @@ -0,0 +1,830 @@ +%if 0%{?rhel} >= 10 +# libgps ABI changes too frequently to be provided for other applications +%global with_libs 0 +%global with_qt 0 +%else +%global with_libs 1 +%global with_qt 1 +%endif + +%global scons_ver 4.6.0 +%global scons python3 scons-%{scons_ver}/scripts/scons.py +%global note1 The Red Hat support for this package is limited. See +%global note2 https://access.redhat.com/support/policy/gpsd-support for more details. + +Name: gpsd +Version: 3.25 +Release: 16%{?dist} +Epoch: 1 +Summary: Service daemon for mediating access to a GPS + +License: BSD-2-Clause +URL: https://gpsd.gitlab.io/gpsd/index.html +Source0: https://download-mirror.savannah.gnu.org/releases/gpsd/%{name}-%{version}.tar.gz +# used only for building +Source1: https://github.com/SCons/scons/archive/%{scons_ver}/scons-%{scons_ver}.tar.gz +Source11: gpsd.sysconfig + +# add missing IPv6 support +Patch1: gpsd-ipv6.patch +# fix some issues reported by coverity and shellcheck +Patch2: gpsd-scanfixes.patch +# fix busy wait when reading from gpsd socket +Patch3: gpsd-busywait.patch +# don't ignore unrecognized options in CFLAGS/LDFLAGS +Patch4: gpsd-sconsflags.patch + +BuildRequires: gcc +BuildRequires: dbus-devel +BuildRequires: ncurses-devel +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: gtk3-devel +BuildRequires: python3-gobject +BuildRequires: python3-cairo +BuildRequires: python3-pyserial +BuildRequires: desktop-file-utils +BuildRequires: bluez-libs-devel +BuildRequires: pps-tools-devel +BuildRequires: systemd-rpm-macros +%if %{with_qt} +BuildRequires: gcc-c++ +BuildRequires: qt-devel +%endif +BuildRequires: libusb1-devel + +Requires: udev +%{?systemd_requires} + +%if !%{with_libs} +Obsoletes: gpsd-libs < %{epoch}:%{version}-%{release} +Obsoletes: gpsd-devel < %{epoch}:%{version}-%{release} +%endif + +Obsoletes: gpsd-minimal + +%description +gpsd is a service daemon that mediates access to a GPS sensor +connected to the host computer by serial or USB interface, making its +data on the location/course/velocity of the sensor available to be +queried on TCP port 2947 of the host computer. With gpsd, multiple +GPS client applications (such as navigational and war-driving software) +can share access to a GPS without contention or loss of data. Also, +gpsd responds to queries with a format that is substantially easier to +parse than NMEA 0183. + +%if %{with_libs} +%package libs +Summary: Client libraries in C for talking to a running gpsd or GPS + +%description libs +This package contains the gpsd libraries that manage access +to a GPS for applications. + +%package devel +Summary: Development files for the gpsd library +Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} + +%description devel +This package provides C header files for the gpsd shared libraries that +manage access to a GPS for applications +%endif + +%if %{with_qt} +%package qt +Summary: C++/Qt5 bindings for the gpsd library +%if %{with_libs} +Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} +%endif + +%description qt +This package provide C++ and Qt bindings for use with the libgps library from +gpsd. + +%package qt-devel +Summary: Development files for the C++/Qt5 bindings for the gpsd library +Requires: %{name}-qt%{?_isa} = %{epoch}:%{version}-%{release} + +%description qt-devel +This package provides the development files for the C++ and Qt bindings for use +with the libgps library from gpsd. +%endif + +%package -n python3-%{name} +Summary: Python libraries and modules for use with gpsd +%if %{with_libs} +Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} +%endif +Requires: python3-pyserial +%{?python_provide:%python_provide python3-%{name}} + +%description -n python3-%{name} +This package contains the python3 modules that manage access to a GPS for +applications. + +%package clients +Summary: Clients for gpsd +Requires: python3-%{name} = %{epoch}:%{version}-%{release} +%if %{with_libs} +Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} +%endif +Obsoletes: gpsd-minimal-clients + +%description clients +This package contains various clients using gpsd. + +%package xclients +Summary: Graphical clients for gpsd +Requires: python3-%{name} = %{epoch}:%{version}-%{release} +Requires: python3-cairo +Requires: python3-gobject +Requires: gtk3 +# subpackage split +Conflicts: gpsd-clients < 1:3.25-6 + +%description xclients +This package contains X clients using gpsd. + +%prep +%setup -q -a 1 +%patch -P 1 -p1 -b .ipv6 +%patch -P 2 -p1 -b .scanfixes +%patch -P 3 -p1 -b .busywait +%patch -P 4 -p1 -b .sconsflags + +# add note to man pages about limited support +sed -i ':a;$!{N;ba};s|\(\.SH "[^"]*"\)|.SH "NOTE"\n%{note1}\n%{note2}\n\1|3' \ + man/*.{1,8} + +# don't try reloading systemd when installing in the build root +sed -i 's|systemctl daemon-reload|true|' SConscript + +iconv -f iso8859-1 -t utf8 NEWS > NEWS_ && mv NEWS_ NEWS + +%build +export CCFLAGS="%{optflags}" +# scons ignores LDFLAGS. LINKFLAGS partially work (some flags like +# -spec=... are filtered) +export LINKFLAGS="%{__global_ldflags}" + +# breaks with %%{_smp_mflags} +%{scons} \ + dbus_export=yes \ + systemd=yes \ +%if %{with_qt} + qt=yes \ +%else + qt=no \ +%endif + debug=yes \ + leapfetch=no \ + manbuild=no \ + prefix="" \ + sysconfdif=%{_sysconfdir} \ + bindir=%{_bindir} \ + includedir=%{_includedir} \ + libdir=%{_libdir} \ + sbindir=%{_sbindir} \ + mandir=%{_mandir} \ + mibdir=%{_docdir}/gpsd \ + docdir=%{_docdir}/gpsd \ + pkgconfigdir=%{_libdir}/pkgconfig \ + icondir=%{_datadir}/gpsd \ + udevdir=$(dirname %{_udevrulesdir}) \ + unitdir=%{_unitdir} \ + target_python=python3 \ + python_shebang=%{python3} \ + python_libdir=%{python3_sitearch} \ + build + +%install +# avoid rebuilding +export CCFLAGS="%{optflags}" +export LINKFLAGS="%{__global_ldflags}" + +DESTDIR=%{buildroot} %{scons} install systemd_install udev-install + +# use the old name for udev rules +mv %{buildroot}%{_udevrulesdir}/{25,99}-gpsd.rules + +install -d -m 0755 %{buildroot}%{_sysconfdir}/sysconfig +install -p -m 0644 %{SOURCE11} \ + %{buildroot}%{_sysconfdir}/sysconfig/gpsd + +# Install the .desktop files +desktop-file-install \ + --dir %{buildroot}%{_datadir}/applications \ + gpsd-%{version}/packaging/X11/xgps.desktop +desktop-file-install \ + --dir %{buildroot}%{_datadir}/applications \ + gpsd-%{version}/packaging/X11/xgpsspeed.desktop + +# Missed in scons install +install -p -m 0755 gpsinit %{buildroot}%{_sbindir} + +# Remove shebang and fix permissions +sed -i '/^#!.*python/d' %{buildroot}%{python3_sitearch}/gps/{aio,}gps.py +chmod 644 %{buildroot}%{python3_sitearch}/gps/gps.py + +rm -f %{buildroot}%{_libdir}/libgpsdpacket.so + +# Remove unpackaged files +%if !%{with_libs} +rm -f %{buildroot}%{_libdir}/lib{gps*.so,gps.so.*} +rm -rf %{buildroot}%{_libdir}/pkgconfig +rm -rf %{buildroot}%{_includedir} +rm -rf %{buildroot}%{_mandir}/man{3,5} +%endif +%if !%{with_qt} +rm -f %{buildroot}%{_libdir}/libQgpsmm* \ + %{buildroot}%{_libdir}/pkgconfig/Qgpsmm* \ + %{buildroot}%{_mandir}/man3/libQgpsmm.3* +%endif +rm -rf %{buildroot}%{_docdir}/gpsd + +%post +%systemd_post gpsd.service gpsd.socket + +%preun +%systemd_preun gpsd.service gpsd.socket + +%postun +# Don't restart the service +%systemd_postun gpsd.service gpsd.socket + +%if %{with_libs} +%ldconfig_scriptlets libs +%endif + +%if %{with_qt} +%ldconfig_scriptlets qt +%endif + +%files +%doc README.adoc NEWS +%license COPYING +%config(noreplace) %{_sysconfdir}/sysconfig/%{name} +%{_sbindir}/gpsd +%{_sbindir}/gpsdctl +%{_sbindir}/gpsinit +%{_bindir}/gpsmon +%{_bindir}/gpsctl +%{_bindir}/ntpshmmon +%{_bindir}/ppscheck +%{_unitdir}/gpsd.service +%{_unitdir}/gpsd.socket +%{_unitdir}/gpsdctl@.service +%{_udevrulesdir}/*.rules +%{_mandir}/man8/gpsd.8* +%{_mandir}/man8/gpsdctl.8* +%{_mandir}/man8/gpsinit.8* +%{_mandir}/man8/ppscheck.8* +%{_mandir}/man1/gpsmon.1* +%{_mandir}/man1/gpsctl.1* +%{_mandir}/man1/ntpshmmon.1* + +%if %{with_libs} +%files libs +%{_libdir}/libgps.so.30* + +%files devel +%doc TODO HACKING +%{_libdir}/libgps.so +%{_libdir}/pkgconfig/libgps.pc +%{_includedir}/gps.h +%{_includedir}/libgpsmm.h +%{_mandir}/man3/libgps.3* +%{_mandir}/man3/libgpsmm.3* +%{_mandir}/man5/gpsd_json.5* +%endif + +%if %{with_qt} +%files qt +%{_libdir}/libQgpsmm.so.30* + +%files qt-devel +%{_libdir}/libQgpsmm.so +%{_libdir}/libQgpsmm.prl +%{_libdir}/pkgconfig/Qgpsmm.pc +%{_mandir}/man3/libQgpsmm.3* +%endif + +%files -n python3-%{name} +%license COPYING +%{_libdir}/libgpsdpacket.so* +%{python3_sitearch}/gps* + +%files clients +%{_bindir}/cgps +%{_bindir}/gegps +%{_bindir}/gps2udp +%{_bindir}/gpscat +%{_bindir}/gpscsv +%{_bindir}/gpsdebuginfo +%{_bindir}/gpsdecode +%{_bindir}/gpspipe +%{_bindir}/gpsplot +%{_bindir}/gpsprof +%{_bindir}/gpsrinex +%{_bindir}/gpssnmp +%{_bindir}/gpssubframe +%{_bindir}/gpxlogger +%{_bindir}/lcdgps +%{_bindir}/gpsfake +%{_bindir}/ubxtool +%{_bindir}/zerk +%{_mandir}/man1/gegps.1* +%{_mandir}/man1/gps.1* +%{_mandir}/man1/gps2udp.1* +%{_mandir}/man1/gpscsv.1* +%{_mandir}/man1/gpsdebuginfo.1* +%{_mandir}/man1/gpsdecode.1* +%{_mandir}/man1/gpspipe.1* +%{_mandir}/man1/gpsplot.1* +%{_mandir}/man1/gpsprof.1* +%{_mandir}/man1/gpsrinex.1* +%{_mandir}/man1/gpssnmp.1* +%{_mandir}/man1/gpssubframe.1* +%{_mandir}/man1/gpxlogger.1* +%{_mandir}/man1/lcdgps.1* +%{_mandir}/man1/cgps.1* +%{_mandir}/man1/gpscat.1* +%{_mandir}/man1/gpsfake.1* +%{_mandir}/man1/ubxtool.1* +%{_mandir}/man1/zerk.1* + +%files xclients +%{_bindir}/xgps +%{_bindir}/xgpsspeed +%{_datadir}/applications/*.desktop +%dir %{_datadir}/gpsd +%{_datadir}/gpsd/gpsd-logo.png +%{_mandir}/man1/xgps.1* +%{_mandir}/man1/xgpsspeed.1* + +%changelog +* Mon Jun 24 2024 Troy Dawson - 1:3.25-16 +- Bump release for June 2024 mass rebuild + +* Thu Apr 25 2024 Miroslav Lichvar - 1:3.25-15 +- fix icon path in desktop files (RHEL-34158) +- replace gpsd-minimal conflicts with obsoletes (RHEL-33651) + +* Tue Apr 23 2024 Miroslav Lichvar - 1:3.25-14 +- fix annobin coverage (RHEL-33496) +- add conflicts for gpsd-minimal (RHEL-33651) +- drop compat subpackage (RHEL-33651) + +* Tue Apr 16 2024 Miroslav Lichvar - 1:3.25-13 +- fix dependencies for build without libs + +* Mon Apr 15 2024 Miroslav Lichvar - 1:3.25-12 +- rebuild + +* Tue Feb 20 2024 Miroslav Lichvar - 1:3.25-11 +- internalize scons (RHEL-14750) +- add missing IPv6 support +- add note about limited Red Hat support +- drop unneeded API-compatibility patch +- fix busy wait when reading from gpsd socket +- fix some issues reported by coverity and shellcheck + +* Wed Jan 24 2024 Fedora Release Engineering - 1:3.25-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Fedora Release Engineering - 1:3.25-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Oct 03 2023 Miroslav Lichvar - 1:3.25-8 +- disable libs and devel subpackages on RHEL +- don't require libs in main package + +* Thu Jul 20 2023 Fedora Release Engineering - 1:3.25-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Mon Jul 17 2023 Miroslav Lichvar - 1:3.25-6 +- split X clients to separate subpackage +- add missing dependencies for python clients +- add explicit gcc dependency +- drop xmlto from build dependencies +- enable libusb1-devel on s390x +- fix qt build option +- fix spec indentation + +* Thu Jun 15 2023 Python Maint - 1:3.25-5 +- Rebuilt for Python 3.12 + +* Thu May 11 2023 Miroslav Lichvar - 1:3.25-4 +- convert NEWS to UTF-8 +- remove shebang in python module files and fix permissions +- remove unnecessary .so symlink +- update URL + +* Sun Mar 12 2023 Tim Orling - 1:3.25-3 +- migrated to SPDX license + +* Thu Jan 19 2023 Fedora Release Engineering - 1:3.25-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jan 11 2023 Miroslav Lichvar - 1:3.25-1 +- update to 3.25 + +* Thu Jul 21 2022 Fedora Release Engineering - 1:3.24-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 13 2022 Python Maint - 1:3.24-2 +- Rebuilt for Python 3.11 + +* Wed May 04 2022 Miroslav Lichvar - 1:3.24-1 +- update to 3.24 + +* Sat Feb 12 2022 Jeff Law - 1:3.23.1-3 +- Re-enable LTO + +* Thu Jan 20 2022 Fedora Release Engineering - 1:3.23.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Sep 27 2021 Miroslav Lichvar - 1:3.23.1-1 +- update to 3.23.1 +- add old status names to gps.h for compatibility + +* Wed Aug 11 2021 Miroslav Lichvar - 1:3.23-1 +- update to 3.23 + +* Wed Aug 11 2021 Miroslav Lichvar - 1:3.22-5 +- fix handling of GPS weeks after 2180 (#1989379) + +* Thu Jul 22 2021 Fedora Release Engineering - 1:3.22-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 1:3.22-3 +- Rebuilt for Python 3.10 + +* Tue Jan 26 2021 Fedora Release Engineering - 1:3.22-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Jan 12 2021 Miroslav Lichvar - 1:3.22-1 +- update to 3.22 +- keep all python modules in python subpackage +- move gpsprof to clients subpackage +- disable LTO on aarch64 + +* Tue Jul 28 2020 Fedora Release Engineering - 1:3.20-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jun 18 2020 Miroslav Lichvar - 1:3.20-1 +- update to 3.20 + +* Tue May 26 2020 Miro Hrončok - 1:3.19-6 +- Rebuilt for Python 3.9 + +* Mon Feb 03 2020 Miroslav Lichvar - 1:3.19-5 +- fix missing epoch in dependencies (#1797370) + +* Fri Jan 31 2020 Dan Horák - 1:3.19-2 +- all Requires must use Epoch too + +* Tue Jan 28 2020 Miroslav Lichvar - 1:3.19-1 +- revert to 3.19 (#1787784) + +* Tue Jan 21 2020 Fabian Affolter - 3.20-2 +- Update to latest upstream release 3.20 + +* Thu Oct 03 2019 Miro Hrončok - 3.19-4 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Mon Aug 19 2019 Miro Hrončok - 3.19-3 +- Rebuilt for Python 3.8 + +* Thu Jul 25 2019 Fedora Release Engineering - 3.19-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 02 2019 Miroslav Lichvar - 3.19-1 +- update to 3.19 +- fix systemd scriptlet (#1716467) + +* Fri Feb 01 2019 Fedora Release Engineering - 3.18.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Oct 24 2018 Miroslav Lichvar - 3.18.1-1 +- update to 3.18.1 + +* Tue Oct 09 2018 Miroslav Lichvar - 3.18-3 +- fix paths in systemd unit files + +* Tue Oct 09 2018 Miroslav Lichvar - 3.18-2 +- use python3 scons and fix build requirements for xgps + +* Thu Oct 04 2018 Miroslav Lichvar - 3.18-1 +- update to 3.18 +- drop python2 subpackage (#1633793) + +* Fri Jul 13 2018 Fedora Release Engineering - 3.17-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 3.17-4 +- Rebuilt for Python 3.7 + +* Wed Feb 07 2018 Fedora Release Engineering - 3.17-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 30 2018 Miroslav Lichvar - 3.17-2 +- use macro for systemd scriptlet dependencies +- use macro for ldconfig scriptlets + +* Fri Sep 08 2017 Troy Curtis, Jr - 3.17-1 +- Update to 3.17 +- Build both python2 and python3 files and install into separate subpackages +- Add Qt5 subpackage + +* Wed Aug 02 2017 Fedora Release Engineering - 3.16-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 3.16-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 3.16-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Jul 19 2016 Fedora Release Engineering - 3.16-3 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed Feb 03 2016 Fedora Release Engineering - 3.16-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jan 11 2016 Miroslav Lichvar - 3.16-1 +- update to 3.16 + +* Wed Jun 17 2015 Fedora Release Engineering - 3.15-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Jun 05 2015 Miroslav Lichvar - 3.15-1 +- update to 3.15 + +* Tue Apr 21 2015 Miroslav Lichvar - 3.14-1 +- update to 3.14 + +* Fri Mar 06 2015 Rex Dieter 3.13-2 +- track library sonames and api files closer, so bumps aren't a surprise + +* Mon Mar 02 2015 Miroslav Lichvar - 3.13-1 +- update to 3.13 + +* Mon Aug 25 2014 Miroslav Lichvar - 3.11-1 +- update to 3.11 + +* Sat Aug 16 2014 Fedora Release Engineering - 3.10-6.20140524gitd6b65b +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Jul 02 2014 Miroslav Lichvar - 3.10-5.20140524gitd6b65b +- update to 20140524gitd6b65b +- fix PPS with large offsets +- set gpsd revision string to include package revision + +* Sat Jun 07 2014 Fedora Release Engineering - 3.10-4.20140127gitf2753b +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Feb 20 2014 Miroslav Lichvar - 3.10-3.20140127gitf2753b +- update to 20140127gitf2753b +- replace udev hotplug script with gpsdctl service (#909563) +- add dependency on gpsd.socket to gpsd.service +- reenable dbus export + +* Fri Dec 20 2013 Miroslav Lichvar - 3.10-2 +- use systemd socket activation (#909563) +- don't use -n in default gpsd service options +- update gpsd service file + +* Mon Nov 25 2013 Miroslav Lichvar - 3.10-1 +- update to 3.10 +- move udev rules from /etc to /usr/lib (#971851) +- enable hardened build (#1000643) +- drop also supplementary groups when dropping privileges +- set time stamp in chrony SOCK sample correctly +- remove RPATH from all files +- don't package INSTALL file + +* Sat Aug 03 2013 Fedora Release Engineering - 3.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu May 02 2013 Miroslav Lichvar - 3.9-1 +- update to 3.9 +- move files from /lib + +* Wed Feb 27 2013 Miroslav Lichvar - 3.8-1 +- update to 3.8 +- use systemd macros (#850135) +- don't set vendor for desktop files +- make some dependencies arch-specific +- remove obsolete macros + +* Thu Feb 14 2013 Fedora Release Engineering - 3.5-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Thu Jul 19 2012 Fedora Release Engineering - 3.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Apr 30 2012 Miroslav Lichvar - 3.5-1 +- update to 3.5 + +* Thu Jan 26 2012 Miroslav Lichvar - 3.4-1 +- update to 3.4 + +* Fri Jan 13 2012 Fedora Release Engineering - 3.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Mon Oct 31 2011 Miroslav Lichvar - 3.3-1 +- update to 3.3 + +* Mon Aug 29 2011 Miroslav Lichvar - 3.1-1 +- update to 3.1 + +* Tue Aug 23 2011 Miroslav Lichvar - 3.0-1 +- update to 3.0 +- enable PPSAPI support +- fix PPS without -N +- change service type to simple +- start after chrony +- fix permissions of systemd unit file +- fix ldconfig scriptlets +- package client-howto.txt + +* Tue Jul 26 2011 Miroslav Lichvar - 2.95-7 +- make -libs subpackage (#663124) +- replace SysV initscript with systemd service (#717419) +- explicitly set USBAUTO=true in sysconfig file + +* Tue Feb 08 2011 Fedora Release Engineering - 2.95-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Sep 29 2010 jkeating - 2.95-5 +- Rebuilt for gcc bug 634757 + +* Tue Sep 14 2010 Miroslav Lichvar - 2.95-4 +- don't crash in gpscat when started without arguments (#633117) + +* Fri Aug 27 2010 Dan Horák - 2.95-3 +- no USB on s390(x) + +* Wed Jul 21 2010 David Malcolm - 2.95-2 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Thu Jul 15 2010 Miroslav Lichvar - 2.95-1 +- update to 2.95 +- add /usr/sbin to PATH in gpsd.hotplug.wrapper +- pass sysconfig variables to gpsd started from udev +- enable libusb support + +* Thu May 06 2010 Miroslav Lichvar - 2.94-1 +- update to 2.94 (#556642) + +* Tue Mar 02 2010 Miroslav Lichvar - 2.39-7 +- don't use deprecated SYSFS{} in udev rules (#569089) +- fix init script LSB compliance + +* Mon Feb 15 2010 Miroslav Lichvar - 2.39-6 +- fix linking with --no-add-needed (#564662) +- use %%global macro instead of %%define + +* Wed Aug 12 2009 Marek Mahut - 2.39-5 +- RHBZ#505588: gpsd has a broken initscript that fails to launch daemon + +* Fri Jul 24 2009 Fedora Release Engineering - 2.39-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Mar 31 2009 Tom "spot" Callaway - 2.39-3 +- some of the gpsd client bits went into gpsdclient.h, but that file wasn't getting installed + specifically, viking needs that header to build. + +* Wed Mar 25 2009 Douglas E. Warner - 2.39-2 +- adding patch to try to fix parallel make errors + +* Thu Mar 19 2009 Douglas E. Warner - 2.39-1 +- updating to 2.39 +- fixed potential core dump in C client handling of "K" responses +- Made device hotplugging work again; had been broken by changes in udev +- Introduced major and minor API version symbols into the public interfaces +- The sirfmon utility is gone, replaced by gpsmon which does the same job + for multiple GPS types +- Fixed a two-year old error in NMEA parsing that nobody noticed because its + only effect was to trash VDOP values from GSA sentences, and gpsd computes + those with an internal error model when they look wonky +- cgpxlogger has been merged into gpxlogger +- Speed-setting commands now allow parity and stop-bit setting if the GPS + chipset and adaptor can support it +- Specfile and other packaging paraphenalia now live in a packaging + subdirectory +- rtcmdecode becomes gpsdecode and can now de-armor and dump AIDVM packets +- The client library now work correctly in locales where the decimal separator + is not a period + +* Mon Mar 16 2009 Douglas E. Warner - 2.38-1 +- updating to 2.38 +- creating init script and sysconfig files +- migrating hotplug rules to udev + hotplug wrapper script from svn r5147 +- updating pyexecdir patch +- fixing udev rule subsystem match +- Regression test load for RoyalTek RGM3800 and Blumax GPS-009 added +- Scaling on E error-estimate fields fixed to match O +- Listen on localhost only by default to avoid security problems; this can be + overridden with the -G command-line option +- The packet-state machine can now recognize RTCM3 packets, though support is + not yet complete +- Added support for ublox5 and mkt-3301 devices +- Add a wrapper around gpsd_hexdump to save CPU +- Lots of little fixes to various packet parsers +- Always keep the device open: "-n" is not optional any more +- xgpsspeed no longer depends on Motif +- gpsctl can now ship arbitrary payloads to a device; + It's possible to send binary through the control channel with the + new "&" command +- Experimental new driver for Novatel SuperStarII +- The 'g' mode switch command now requires, and returns, 'rtcm104v2' rather + than 'rtcm104'; this is design forward for when RTCM104v2 is fully working + +* Tue Feb 24 2009 Fedora Release Engineering - 2.37-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 2.37-3 +- Rebuild for Python 2.6 + +* Wed Mar 19 2008 Douglas E. Warner - 2.37-2 +- moving gpspacket.so python lib to main package + +* Wed Feb 27 2008 Douglas E. Warner - 2.37-1 +- update to 2.37 +- removed install-gpsd_config.h.patch +- installed pkgconfig files in devel package +- added patch to install python modules in sitearch +- removing rpath from inclucded libtool +- moving X11 app-defaults to datadir +- using macros for commands in install; using install instead of cp and mkdir +- cleaning up spaces/tabs for rpmlint + +* Tue Feb 19 2008 Fedora Release Engineering - 2.34-9 +- Autorebuild for GCC 4.3 + +* Sun Aug 19 2007 Matthew Truch - 2.34-8 +- Patch Makefile to also install gpsd_config.h as needed by + libgpsmm.h. Redhat BZ 253433. + +* Sat Jun 30 2007 Matthew Truch - 2.34-7 +- Make sure the logo is actually included (via the spec file). + I need to wake up before I try even trivial updates. + +* Sat Jun 30 2007 Matthew Truch - 2.34-6 +- Learn how to use search and replace (aka fix all instances of + gpsd-logo.png spelled incorrectly as gspd-logo.png). + +* Sat Jun 30 2007 Matthew Truch - 2.34-5 +- Fix desktop file and logo file name. + +* Sat Jun 30 2007 Matthew Truch - 2.34-4 +- Include icon for .desktop files per BZ 241428 + +* Tue Mar 20 2007 Michael Schwendt - 2.34-3 +- Bump release for FE5 -> Fedora 7 upgrade path. + +* Tue Feb 27 2007 Matthew Truch - 2.34-2 +- BR python-devel instead of python to make it build. + +* Tue Feb 27 2007 Matthew Truch - 2.34-1 +- Upgrade to 2.34. +- Get rid of %%makeinstall (which was never needed). +- Possibly fix hotplug issuses (BZ 219750). +- Use %%python_sitelib for python site-files stuff. + +* Sat Dec 9 2006 Matthew Truch - 2.33-6 +- Rebuild to pull in new version of python. + +* Tue Sep 26 2006 Matthew Truch - 2.33-5 +- Remove openmotif requirment, and switch to lesstif. + +* Mon Aug 28 2006 Matthew Truch - 2.33-4 +- Bump release for rebuild in prep. for FC6. + +* Thu Jul 20 2006 Matthew Truch - 2.33-3 +- Actually, was a missing BR glib-dbus-devel. Ooops. + +* Thu Jul 20 2006 Matthew Truch - 2.33-2 +- Missing BR glib-devel + +* Thu Jul 20 2006 Matthew Truch - 2.33-1 +- Update to version 2.33 + +* Wed Apr 19 2006 Matthew Truch - 2.32-5 +- Don't --enable-tnt in build as it causes some gpses to not work + properly with sattelite view mode. See bugzilla bug 189220. + +* Thu Apr 13 2006 Matthew Truch - 2.32-4 +- Add dbus-glib to BuildRequires as needed for build. + +* Sun Apr 9 2006 Matthew Truch - 2.32-3 +- Include xmlto and python in buildrequires so things build right. +- Don't package static library file. + +* Wed Apr 5 2006 Matthew Truch - 2.32-2 +- Use ye olde %%{?dist} tag. + +* Wed Apr 5 2006 Matthew Truch - 2.32-1 +- Initial Fedora Extras specfile