* [ptxdist] [PATCH v2] gpsd: version bump 3.19 -> 3.20
@ 2020-02-09 16:59 Ladislav Michl
0 siblings, 0 replies; only message in thread
From: Ladislav Michl @ 2020-02-09 16:59 UTC (permalink / raw)
To: ptxdist
gpsd-3.20 removed a few config options, so remove them from KConfig.
As gpsd project does not do bugfix releases, pick build fixes
from git.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
Changes:
-v2: add patches from gpsd git... :-/
...Fix-python-binding-cross-compilation.patch | 96 ----------
patches/gpsd-3.19/series | 5 -
...ce-custom-CheckSizeOf-with-standard-.patch | 74 ++++++++
...s-install-xpgs-xgpsspeed-programs-ma.patch | 148 +++++++++++++++
...s-install-xgps-.-Only-test-if-deps-f.patch | 108 +++++++++++
...sizeof-time_t-test-when-cross-compil.patch | 39 ++++
...ix-merging-and-using-of-python-flags.patch | 45 +++++
| 52 ++++++
...emove-redundant-CheckCompilerDefines.patch | 67 +++++++
...thonValue-and-CheckPKG-were-using-wr.patch | 44 +++++
...ruct-Fix-GetPythonValue-for-python-3.patch | 57 ++++++
...move-more-checks-into-GetPythonValue.patch | 98 ++++++++++
...-target-python-version-not-scons-pyt.patch | 32 ++++
...ify-GetPythonValue-.-It-now-caches-p.patch | 174 ++++++++++++++++++
...3-SConstruct-fix-polystr-for-python2.patch | 34 ++++
...arget_python-when-constructing-exten.patch | 36 ++++
...truct-Search-for-ncursesw-pkgconfig.patch} | 8 +-
...SConstruct-HACK-use-target-INCLUDEPY.patch | 25 +++
patches/gpsd-3.20/series | 20 ++
rules/gpsd.in | 28 +--
rules/gpsd.make | 21 +--
21 files changed, 1066 insertions(+), 145 deletions(-)
delete mode 100644 patches/gpsd-3.19/0002-Fix-python-binding-cross-compilation.patch
delete mode 100644 patches/gpsd-3.19/series
create mode 100644 patches/gpsd-3.20/0001-SConstruct-replace-custom-CheckSizeOf-with-standard-.patch
create mode 100644 patches/gpsd-3.20/0002-SConstruct-Always-install-xpgs-xgpsspeed-programs-ma.patch
create mode 100644 patches/gpsd-3.20/0003-SConstruct-Always-install-xgps-.-Only-test-if-deps-f.patch
create mode 100644 patches/gpsd-3.20/0004-SConstruct-Skip-sizeof-time_t-test-when-cross-compil.patch
create mode 100644 patches/gpsd-3.20/0005-Fix-merging-and-using-of-python-flags.patch
create mode 100644 patches/gpsd-3.20/0006-SConstruct-Remove-redundant-CheckHeaderDefines.patch
create mode 100644 patches/gpsd-3.20/0007-SConstruct-remove-redundant-CheckCompilerDefines.patch
create mode 100644 patches/gpsd-3.20/0008-SConstruct-GetPythonValue-and-CheckPKG-were-using-wr.patch
create mode 100644 patches/gpsd-3.20/0009-SConstruct-Fix-GetPythonValue-for-python-3.patch
create mode 100644 patches/gpsd-3.20/0010-SConstruct-move-more-checks-into-GetPythonValue.patch
create mode 100644 patches/gpsd-3.20/0011-SConstruct-Check-target-python-version-not-scons-pyt.patch
create mode 100644 patches/gpsd-3.20/0012-SConstruct-Simplify-GetPythonValue-.-It-now-caches-p.patch
create mode 100644 patches/gpsd-3.20/0013-SConstruct-fix-polystr-for-python2.patch
create mode 100644 patches/gpsd-3.20/0100-SConstruct-Use-target_python-when-constructing-exten.patch
rename patches/{gpsd-3.19/0001-Search-for-ncursesw-pkgconfig.patch => gpsd-3.20/0101-SConstruct-Search-for-ncursesw-pkgconfig.patch} (79%)
create mode 100644 patches/gpsd-3.20/0102-SConstruct-HACK-use-target-INCLUDEPY.patch
create mode 100644 patches/gpsd-3.20/series
diff --git a/patches/gpsd-3.19/0002-Fix-python-binding-cross-compilation.patch b/patches/gpsd-3.19/0002-Fix-python-binding-cross-compilation.patch
deleted file mode 100644
index 94a4810f6..000000000
--- a/patches/gpsd-3.19/0002-Fix-python-binding-cross-compilation.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From: Ladislav Michl <ladis@linux-mips.org>
-Date: Wed, 30 Oct 2019 11:47:28 +0100
-Subject: [PATCH] Fix python binding cross-compilation
-
----
- SConstruct | 48 +++++++++++++++++++++---------------------------
- 1 file changed, 21 insertions(+), 27 deletions(-)
-
-diff --git a/SConstruct b/SConstruct
-index 7bd5b08f2a46..4895b659ba49 100644
---- a/SConstruct
-+++ b/SConstruct
-@@ -440,6 +440,10 @@ def announce(msg):
- if not env.GetOption("silent"):
- print(msg)
-
-+if env['sysroot']:
-+ sysroot = env['sysroot']
-+else:
-+ sysroot = ''
-
- # DESTDIR environment variable means user prefix the installation root.
- DESTDIR = os.environ.get('DESTDIR', '')
-@@ -454,12 +458,6 @@ def installdir(dir, add_destdir=True):
- wrapped.replace("/usr/lib/systemd", "/lib/systemd")
- return wrapped
-
--
--# Honor the specified installation prefix in link paths.
--if env["sysroot"]:
-- env.Prepend(LIBPATH=[env["sysroot"] + installdir('libdir',
-- add_destdir=False)])
--
- # Give deheader a way to set compiler flags
- if 'MORECFLAGS' in os.environ:
- env.Append(CFLAGS=Split(os.environ['MORECFLAGS']))
-@@ -513,11 +511,6 @@ if env['target']:
- for (name, toolname) in devenv:
- env[name] = env['target'] + '-' + toolname
-
--if env['sysroot']:
-- env.MergeFlags({"CFLAGS": ["--sysroot=%s" % env['sysroot']]})
-- env.MergeFlags({"LINKFLAGS": ["--sysroot=%s" % env['sysroot']]})
--
--
- # Build help
- def cmp(a, b):
- return (a > b) - (a < b)
-@@ -1156,22 +1149,23 @@ if helping:
-
- else:
-
-- if config.env['python'] and config.env['target_python']:
-- try:
-- config.CheckProg
-- except AttributeError: # Older scons versions don't have CheckProg
-- target_python_path = config.env['target_python']
-- else:
-- target_python_path = config.CheckProg(config.env['target_python'])
-- if not target_python_path:
-- announce("Target Python doesn't exist - disabling Python.")
-- config.env['python'] = False
- if config.env['python']:
-- # Maximize consistency by using the reported sys.executable
-- target_python_path = config.GetPythonValue('exe path',
-- 'import sys',
-- 'sys.executable',
-- brief=cleaning)
-+ if config.env['target_python']:
-+ try:
-+ config.CheckProg
-+ except AttributeError: # Older scons versions don't have CheckProg
-+ target_python_path = config.env['target_python']
-+ else:
-+ target_python_path = config.CheckProg(config.env['target_python'])
-+ if not target_python_path:
-+ announce("Target Python doesn't exist - disabling Python.")
-+ config.env['python'] = False
-+ else:
-+ # Maximize consistency by using the reported sys.executable
-+ target_python_path = config.GetPythonValue('exe path',
-+ 'import sys',
-+ 'sys.executable',
-+ brief=cleaning)
- if config.env['python_libdir']:
- python_libdir = config.env['python_libdir']
- else:
-@@ -1674,7 +1668,7 @@ else:
- LINK=ldshared,
- SHLIBPREFIX="",
- SHLIBSUFFIX=python_config['SO'],
-- CPPPATH=[python_config['INCLUDEPY']],
-+ CPPPATH=sysroot + python_config['INCLUDEPY'],
- CPPFLAGS=python_config['OPT'],
- CFLAGS=python_config['BASECFLAGS'],
- CXXFLAGS=python_config['BASECFLAGS'])
diff --git a/patches/gpsd-3.19/series b/patches/gpsd-3.19/series
deleted file mode 100644
index 32349387e..000000000
--- a/patches/gpsd-3.19/series
+++ /dev/null
@@ -1,5 +0,0 @@
-# generated by git-ptx-patches
-#tag:base --start-number 1
-0001-Search-for-ncursesw-pkgconfig.patch
-0002-Fix-python-binding-cross-compilation.patch
-# a402ea49345e59dc5c9f5487c0ce65c6 - git-ptx-patches magic
diff --git a/patches/gpsd-3.20/0001-SConstruct-replace-custom-CheckSizeOf-with-standard-.patch b/patches/gpsd-3.20/0001-SConstruct-replace-custom-CheckSizeOf-with-standard-.patch
new file mode 100644
index 000000000..0d5771bbe
--- /dev/null
+++ b/patches/gpsd-3.20/0001-SConstruct-replace-custom-CheckSizeOf-with-standard-.patch
@@ -0,0 +1,74 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Fri, 3 Jan 2020 16:15:53 -0800
+Subject: [PATCH] SConstruct: replace custom CheckSizeOf() with standard
+ CheckTypeSize()
+
+---
+ SConstruct | 40 ++--------------------------------------
+ 1 file changed, 2 insertions(+), 38 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 33e0ff32665c..bd008207011d 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -597,42 +597,6 @@ def CheckHeaderDefines(context, file, define):
+ return ret
+
+
+-def CheckSizeOf(context, type):
+- """Check sizeof 'type'"""
+- context.Message('Checking size of ' + type + '... ')
+-
+- program = """
+-#include <stdlib.h>
+-#include <stdio.h>
+-
+-/*
+- * The CheckSizeOf function does not have a way for the caller to
+- * specify header files to be included to provide the type being
+- * checked. As a workaround until that is remedied, include the
+- * header required for time_t, which is the sole current use of this
+- * function.
+- */
+-#include <time.h>
+-
+-int main() {
+- printf("%d", (int)sizeof(""" + type + """));
+- return 0;
+-}
+-"""
+-
+- # compile it
+- ret = context.TryCompile(program, '.c')
+- if 0 == ret:
+- announce('ERROR: TryCompile failed\n')
+- # fall back to sizeof(time_t) is 8
+- return '8'
+-
+- # run it
+- ret = context.TryRun(program, '.c')
+- context.Result(ret[0])
+- return ret[1]
+-
+-
+ def CheckCompilerDefines(context, define):
+ context.Message('Checking if compiler supplies %s... ' % (define,))
+ ret = context.TryLink("""
+@@ -708,7 +672,6 @@ config = Configure(env, custom_tests={
+ 'CheckCompilerOption': CheckCompilerOption,
+ 'CheckHeaderDefines': CheckHeaderDefines,
+ 'CheckPKG': CheckPKG,
+- 'CheckSizeOf': CheckSizeOf,
+ 'CheckXsltproc': CheckXsltproc,
+ 'GetPythonValue': GetPythonValue,
+ })
+@@ -1043,7 +1006,8 @@ else:
+ confdefs.append("/* #undef HAVE_%s_H */\n"
+ % hdr.replace("/", "_").upper())
+
+- sizeof_time_t = config.CheckSizeOf("time_t")
++ sizeof_time_t = config.CheckTypeSize('time_t',
++ includes='#include <time.h>\n')
+ confdefs.append("#define SIZEOF_TIME_T %s\n" % sizeof_time_t)
+ announce("sizeof(time_t) is %s" % sizeof_time_t)
+ if 4 >= int(sizeof_time_t):
diff --git a/patches/gpsd-3.20/0002-SConstruct-Always-install-xpgs-xgpsspeed-programs-ma.patch b/patches/gpsd-3.20/0002-SConstruct-Always-install-xpgs-xgpsspeed-programs-ma.patch
new file mode 100644
index 000000000..5800867b8
--- /dev/null
+++ b/patches/gpsd-3.20/0002-SConstruct-Always-install-xpgs-xgpsspeed-programs-ma.patch
@@ -0,0 +1,148 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Mon, 6 Jan 2020 12:29:10 -0800
+Subject: [PATCH] SConstruct: Always install xpgs/xgpsspeed programs, man
+ pages.
+
+Now the xgps/xgpsspeed dependencies are tested at build time but not
+mandatory. The dependencies need to be installed for the programs to
+run.
+---
+ SConstruct | 75 ++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 31 insertions(+), 44 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index bd008207011d..cfd1c4164337 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1179,15 +1179,13 @@ def polystr(o):
+
+
+ if helping:
+-
+ # If helping just get usable config info from the local Python
+ target_python_path = ''
+ py_config_text = str(eval(PYTHON_CONFIG_CALL))
+ python_libdir = str(eval(PYTHON_LIBDIR_CALL))
+
+-else:
+-
+- if config.env['python'] and config.env['target_python']:
++elif config.env['python']:
++ if config.env['target_python']:
+ try:
+ config.CheckProg
+ except AttributeError: # Older scons versions don't have CheckProg
+@@ -1197,6 +1195,7 @@ else:
+ if not target_python_path:
+ announce("Target Python doesn't exist - disabling Python.")
+ config.env['python'] = False
++
+ if config.env['python']:
+ # Maximize consistency by using the reported sys.executable
+ target_python_path = config.GetPythonValue('exe path',
+@@ -1235,41 +1234,36 @@ else:
+ imp.find_module('serial')
+ announce("Python module serial (pyserial) found.")
+ except ImportError:
+- # no pycairo, don't build xgps, xgpsspeed
++ # no pyserial, used by ubxtool and zerk
+ 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
+-
+- # 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
++ # check for pycairo
++ try:
++ imp.find_module('cairo')
++ announce("Python module cairo (pycairo) found.")
++ except ImportError:
++ # no pycairo, used by xgps, xgpsspeed
++ announce("WARNING: Python module cairo (pycairo) not found.")
+
+- if not config.CheckPKG('gtk+-3.0'):
+- config.env['xgps'] = False
++ # check for pygobject
++ try:
++ imp.find_module('gi')
++ announce("Python module gi (pygobject) found.")
++ except ImportError:
++ # no pycairo, used by xgps, xgpsspeed
++ announce("WARNING: Python module gi (pygobject) not found.")
+
++ # gtk+ needed by pygobject
++ config.CheckPKG('gtk+-3.0')
+
+-if config.env['python']: # May have been turned off by error
+- config.env['PYTHON'] = polystr(target_python_path)
+- # For regress-driver
+- config.env['ENV']['PYTHON'] = polystr(target_python_path)
+- py_config_vars = ast.literal_eval(py_config_text.decode())
+- py_config_vars = [[] if x is None else x for x in py_config_vars]
+- python_config = dict(zip(PYTHON_CONFIG_NAMES, py_config_vars))
+- announce(python_config)
++ config.env['PYTHON'] = polystr(target_python_path)
++ # For regress-driver
++ config.env['ENV']['PYTHON'] = polystr(target_python_path)
++ py_config_vars = ast.literal_eval(py_config_text.decode())
++ py_config_vars = [[] if x is None else x for x in py_config_vars]
++ python_config = dict(zip(PYTHON_CONFIG_NAMES, py_config_vars))
++ # debug
++ # announce(python_config)
+
+
+ env = config.Finish()
+@@ -1664,15 +1658,13 @@ else:
+ "man/gpsfake.1": "man/gpsfake.xml",
+ "man/gpsprof.1": "man/gpsprof.xml",
+ "man/ubxtool.1": "man/ubxtool.xml",
++ "man/xgps.1": "man/gps.xml",
++ "man/xgpsspeed.1": "man/gps.xml",
+ "man/zerk.1": "man/zerk.xml",
+ }
+
+ if env['xgps']:
+ python_progs.extend(["xgps", "xgpsspeed"])
+- python_manpages.update({
+- "man/xgps.1": "man/gps.xml",
+- "man/xgpsspeed.1": "man/gps.xml",
+- })
+ else:
+ announce("WARNING: xgps and xgpsspeed will not be installed")
+
+@@ -1961,11 +1953,6 @@ if tiocmiwait:
+ })
+
+ all_manpages = list(base_manpages.keys())
+-other_manpages = [
+- "man/gegps.1",
+- "man/xgps.1",
+- "man/xgpsspeed.1",
+- ]
+
+ if python_manpages:
+ all_manpages += list(python_manpages.keys())
+@@ -2701,7 +2688,7 @@ Utility('udev-test', '', ['$SRCDIR/gpsd -N -n -F /var/run/gpsd.sock -D 5', ])
+ # Dummy target for cleaning misc files
+ clean_misc = env.Alias('clean-misc')
+ # Since manpage targets are disabled in clean mode, we cover them here
+-env.Clean(clean_misc, all_manpages + other_manpages)
++env.Clean(clean_misc, all_manpages)
+ # Clean compiled Python
+ env.Clean(clean_misc,
+ glob.glob('*.pyc') + glob.glob('gps/*.pyc') +
diff --git a/patches/gpsd-3.20/0003-SConstruct-Always-install-xgps-.-Only-test-if-deps-f.patch b/patches/gpsd-3.20/0003-SConstruct-Always-install-xgps-.-Only-test-if-deps-f.patch
new file mode 100644
index 000000000..a05f411be
--- /dev/null
+++ b/patches/gpsd-3.20/0003-SConstruct-Always-install-xgps-.-Only-test-if-deps-f.patch
@@ -0,0 +1,108 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Mon, 6 Jan 2020 14:30:58 -0800
+Subject: [PATCH] SConstruct: Always install xgps*. Only test if deps found.
+
+Now no build time deps for xgps*. Just runtime deps.
+---
+ SConstruct | 35 +++++++++++++++++++++++++----------
+ 1 file changed, 25 insertions(+), 10 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index cfd1c4164337..7b4a63f817f9 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1178,11 +1178,15 @@ def polystr(o):
+ raise ValueError
+
+
++# flag that we have xgps* dependencies, so xgps* should run OK
++config.env['xgps_deps'] = False
++
+ if helping:
+ # If helping just get usable config info from the local Python
+ target_python_path = ''
+ py_config_text = str(eval(PYTHON_CONFIG_CALL))
+ python_libdir = str(eval(PYTHON_LIBDIR_CALL))
++ config.env['xgps_deps'] = False
+
+ elif config.env['python']:
+ if config.env['target_python']:
+@@ -1237,12 +1241,14 @@ elif config.env['python']:
+ # no pyserial, used by ubxtool and zerk
+ announce("WARNING: Python module serial (pyserial) not found.")
+
++ config.env['xgps_deps'] = True
+ # check for pycairo
+ try:
+ imp.find_module('cairo')
+ announce("Python module cairo (pycairo) found.")
+ except ImportError:
+ # no pycairo, used by xgps, xgpsspeed
++ config.env['xgps_deps'] = False
+ announce("WARNING: Python module cairo (pycairo) not found.")
+
+ # check for pygobject
+@@ -1251,10 +1257,17 @@ elif config.env['python']:
+ announce("Python module gi (pygobject) found.")
+ except ImportError:
+ # no pycairo, used by xgps, xgpsspeed
++ config.env['xgps_deps'] = False
+ announce("WARNING: Python module gi (pygobject) not found.")
+
+ # gtk+ needed by pygobject
+- config.CheckPKG('gtk+-3.0')
++ if not config.CheckPKG('gtk+-3.0'):
++ config.env['xgps_deps'] = False
++ announce("WARNING: gtk+-3.0 nnot found.")
++
++ if not env['xgps']:
++ # xgps* turned off by option
++ config.env['xgps_deps'] = False
+
+ config.env['PYTHON'] = polystr(target_python_path)
+ # For regress-driver
+@@ -1634,7 +1647,14 @@ if not env['python']:
+ python_targets = []
+ else:
+ # installed python programs
+- python_progs = ["gegps", "gpscat", "gpsfake", "gpsprof", "ubxtool", "zerk"]
++ python_progs = ["gegps",
++ "gpscat",
++ "gpsfake",
++ "gpsprof",
++ "ubxtool",
++ "xgps",
++ "xgpsspeed",
++ "zerk"]
+ python_deps = {'gpscat': 'packet'}
+
+ # python misc helpers and stuff
+@@ -1663,11 +1683,6 @@ else:
+ "man/zerk.1": "man/zerk.xml",
+ }
+
+- if env['xgps']:
+- python_progs.extend(["xgps", "xgpsspeed"])
+- else:
+- announce("WARNING: xgps and xgpsspeed will not be installed")
+-
+ # Glob() has to be run after all buildable objects defined
+ python_modules = Glob('gps/*.py', strings=True)
+
+@@ -2410,13 +2425,13 @@ method_regress = UtilityWithHerald(
+ '$SRCDIR/tests/test_packet -c >/dev/null', ])
+
+ # Test the xgps/xgpsspeed dependencies
+-if not env['python'] or not env['xgps']:
+- test_xgps_deps = None
+-else:
++if env['xgps_deps']:
+ test_xgps_deps = UtilityWithHerald(
+ 'Testing xgps/xgpsspeed dependencies (since xgps=yes)...',
+ 'test-xgps-deps', [], [
+ '$PYTHON $SRCDIR/test_xgps_deps.py'])
++else:
++ test_xgps_deps = None
+
+ # Run a valgrind audit on the daemon - not in normal tests
+ valgrind_audit = Utility('valgrind-audit', [
diff --git a/patches/gpsd-3.20/0004-SConstruct-Skip-sizeof-time_t-test-when-cross-compil.patch b/patches/gpsd-3.20/0004-SConstruct-Skip-sizeof-time_t-test-when-cross-compil.patch
new file mode 100644
index 000000000..9f9c0cd69
--- /dev/null
+++ b/patches/gpsd-3.20/0004-SConstruct-Skip-sizeof-time_t-test-when-cross-compil.patch
@@ -0,0 +1,39 @@
+From: Jeffery To <jeffery.to@gmail.com>
+Date: Fri, 17 Jan 2020 06:09:33 +0800
+Subject: [PATCH] SConstruct: Skip sizeof(time_t) test when cross-compiling
+
+Fixes #48.
+---
+ SConstruct | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 7b4a63f817f9..bf682a03e087 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1006,12 +1006,20 @@ else:
+ confdefs.append("/* #undef HAVE_%s_H */\n"
+ % hdr.replace("/", "_").upper())
+
+- sizeof_time_t = config.CheckTypeSize('time_t',
+- includes='#include <time.h>\n')
++ if not env['target']:
++ sizeof_time_t = config.CheckTypeSize('time_t',
++ includes='#include <time.h>\n')
++ if 0 < sizeof_time_t:
++ announce("sizeof(time_t) is %s" % sizeof_time_t)
++ if 4 >= sizeof_time_t:
++ announce("WARNING: time_t is too small. It will fail in 2038")
++ else:
++ announce("WARNING: could not get sizeof(time_t)")
++ sizeof_time_t = 8
++ else:
++ announce("Not checking sizeof(time_t) when cross-compiling")
++ sizeof_time_t = 8
+ confdefs.append("#define SIZEOF_TIME_T %s\n" % sizeof_time_t)
+- announce("sizeof(time_t) is %s" % sizeof_time_t)
+- if 4 >= int(sizeof_time_t):
+- announce("WARNING: time_t is too small. It will fail in 2038")
+
+ # check function after libraries, because some function require libraries
+ # for example clock_gettime() require librt on Linux glibc < 2.17
diff --git a/patches/gpsd-3.20/0005-Fix-merging-and-using-of-python-flags.patch b/patches/gpsd-3.20/0005-Fix-merging-and-using-of-python-flags.patch
new file mode 100644
index 000000000..e4139f66c
--- /dev/null
+++ b/patches/gpsd-3.20/0005-Fix-merging-and-using-of-python-flags.patch
@@ -0,0 +1,45 @@
+From: Bernd Zeimetz <bernd@bzed.de>
+Date: Sat, 17 Aug 2019 01:27:08 +0200
+Subject: [PATCH] Fix merging and using of python *flags.
+
+As follow-up for d0e0864c2802860ff561fe0b39939b63d38b8c70,
+also fix the handling of python build flags.
+---
+ SConstruct | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index bf682a03e087..d71dfab48db3 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1169,7 +1169,7 @@ else:
+
+ PYTHON_LIBDIR_CALL = 'sysconfig.get_python_lib()'
+
+-PYTHON_CONFIG_NAMES = ['CC', 'CXX', 'OPT', 'BASECFLAGS',
++PYTHON_CONFIG_NAMES = ['CC', 'CXX', 'OPT', 'CFLAGS',
+ 'CCSHARED', 'LDSHARED', 'SO', 'INCLUDEPY', 'LDFLAGS']
+ PYTHON_CONFIG_QUOTED = ["'%s'" % s for s in PYTHON_CONFIG_NAMES]
+ PYTHON_CONFIG_CALL = ('sysconfig.get_config_vars(%s)'
+@@ -1753,14 +1753,17 @@ else:
+ ldshared = ldshared.replace('-fPIE', '')
+ ldshared = ldshared.replace('-pie', '')
+ python_env.Replace(SHLINKFLAGS=[],
+- LDFLAGS=python_config['LDFLAGS'],
++ LDFLAGS=[],
+ LINK=ldshared,
+ SHLIBPREFIX="",
+ SHLIBSUFFIX=python_config['SO'],
+ CPPPATH=[python_config['INCLUDEPY']],
+- CPPFLAGS=python_config['OPT'],
+- CFLAGS=python_config['BASECFLAGS'],
+- CXXFLAGS=python_config['BASECFLAGS'])
++ CPPFLAGS=[],
++ CFLAGS=[],
++ CXXFLAGS=[])
++
++ for flag in ['CFLAGS','LDFLAGS','OPT']:
++ python_env.MergeFlags(Split(python_config[flag]))
+
+ python_objects = {}
+ python_compiled_libs = {}
diff --git a/patches/gpsd-3.20/0006-SConstruct-Remove-redundant-CheckHeaderDefines.patch b/patches/gpsd-3.20/0006-SConstruct-Remove-redundant-CheckHeaderDefines.patch
new file mode 100644
index 000000000..a1519a723
--- /dev/null
+++ b/patches/gpsd-3.20/0006-SConstruct-Remove-redundant-CheckHeaderDefines.patch
@@ -0,0 +1,52 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Wed, 8 Jan 2020 14:56:58 -0800
+Subject: [PATCH] SConstruct: Remove redundant CheckHeaderDefines()
+
+---
+ SConstruct | 19 +------------------
+ 1 file changed, 1 insertion(+), 18 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index d71dfab48db3..1a0463f67a41 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -581,22 +581,6 @@ def CheckCompilerOption(context, option):
+ return ret
+
+
+-def CheckHeaderDefines(context, file, define):
+- context.Message('Checking if %s supplies %s... ' % (file, define))
+- ret = context.TryLink("""
+- #include <%s>
+- #ifndef %s
+- #error %s is not defined
+- #endif
+- int main(int argc, char **argv) {
+- (void) argc; (void) argv;
+- return 0;
+- }
+- """ % (file, define, define), '.c')
+- context.Result(ret)
+- return ret
+-
+-
+ def CheckCompilerDefines(context, define):
+ context.Message('Checking if compiler supplies %s... ' % (define,))
+ ret = context.TryLink("""
+@@ -670,7 +654,6 @@ config = Configure(env, custom_tests={
+ 'CheckC11': CheckC11,
+ 'CheckCompilerDefines': CheckCompilerDefines,
+ 'CheckCompilerOption': CheckCompilerOption,
+- 'CheckHeaderDefines': CheckHeaderDefines,
+ 'CheckPKG': CheckPKG,
+ 'CheckXsltproc': CheckXsltproc,
+ 'GetPythonValue': GetPythonValue,
+@@ -1046,7 +1029,7 @@ else:
+ if config.env["magic_hat"]:
+ announce("Forcing magic_hat=no since RFC2783 API is unavailable")
+ config.env["magic_hat"] = False
+- tiocmiwait = config.CheckHeaderDefines("sys/ioctl.h", "TIOCMIWAIT")
++ tiocmiwait = config.CheckDeclaration("TIOCMIWAIT", "#include <sys/ioctl.h>")
+ if not tiocmiwait and not kpps:
+ announce("Neither TIOCMIWAIT nor RFC2783 API is available)")
+ if config.env["timeservice"]:
diff --git a/patches/gpsd-3.20/0007-SConstruct-remove-redundant-CheckCompilerDefines.patch b/patches/gpsd-3.20/0007-SConstruct-remove-redundant-CheckCompilerDefines.patch
new file mode 100644
index 000000000..c99949f6a
--- /dev/null
+++ b/patches/gpsd-3.20/0007-SConstruct-remove-redundant-CheckCompilerDefines.patch
@@ -0,0 +1,67 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Wed, 8 Jan 2020 15:25:10 -0800
+Subject: [PATCH] SConstruct: remove redundant CheckCompilerDefines()
+
+Built in CheckDeclaration() works fine.
+---
+ SConstruct | 25 ++++---------------------
+ 1 file changed, 4 insertions(+), 21 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 1a0463f67a41..ea87d9204e60 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -581,23 +581,7 @@ def CheckCompilerOption(context, option):
+ return ret
+
+
+-def CheckCompilerDefines(context, define):
+- context.Message('Checking if compiler supplies %s... ' % (define,))
+- ret = context.TryLink("""
+- #ifndef %s
+- #error %s is not defined
+- #endif
+- int main(int argc, char **argv) {
+- (void) argc; (void) argv;
+- return 0;
+- }
+- """ % (define, define), '.c')
+- context.Result(ret)
+- return ret
+-
+ # Check if this compiler is C11 or better
+-
+-
+ def CheckC11(context):
+ context.Message('Checking if compiler is C11... ')
+ ret = context.TryLink("""
+@@ -652,7 +636,6 @@ env.Prepend(LIBPATH=[os.path.realpath(os.curdir)])
+ # CheckXsltproc works, but result is incorrectly saved as "no"
+ config = Configure(env, custom_tests={
+ 'CheckC11': CheckC11,
+- 'CheckCompilerDefines': CheckCompilerDefines,
+ 'CheckCompilerOption': CheckCompilerOption,
+ 'CheckPKG': CheckPKG,
+ 'CheckXsltproc': CheckXsltproc,
+@@ -926,7 +909,7 @@ else:
+ # check for C11 or better, and __STDC__NO_ATOMICS__ is not defined
+ # before looking for stdatomic.h
+ if ((config.CheckC11() and
+- not config.CheckCompilerDefines("__STDC_NO_ATOMICS__") and
++ not config.CheckDeclaration("__STDC_NO_ATOMICS__") and
+ config.CheckHeader("stdatomic.h"))):
+ confdefs.append("#define HAVE_STDATOMIC_H 1\n")
+ else:
+@@ -940,9 +923,9 @@ else:
+
+ # endian.h is required for rtcm104v2 unless the compiler defines
+ # __ORDER_BIG_ENDIAN__, __ORDER_LITTLE_ENDIAN__ and __BYTE_ORDER__
+- if config.CheckCompilerDefines("__ORDER_BIG_ENDIAN__") \
+- and config.CheckCompilerDefines("__ORDER_LITTLE_ENDIAN__") \
+- and config.CheckCompilerDefines("__BYTE_ORDER__"):
++ if ((config.CheckDeclaration("__ORDER_BIG_ENDIAN__") and
++ config.CheckDeclaration("__ORDER_LITTLE_ENDIAN__") and
++ config.CheckDeclaration("__BYTE_ORDER__"))):
+ confdefs.append("#define HAVE_BUILTIN_ENDIANNESS 1\n")
+ confdefs.append("/* #undef HAVE_ENDIAN_H */\n")
+ confdefs.append("/* #undef HAVE_SYS_ENDIAN_H */\n")
diff --git a/patches/gpsd-3.20/0008-SConstruct-GetPythonValue-and-CheckPKG-were-using-wr.patch b/patches/gpsd-3.20/0008-SConstruct-GetPythonValue-and-CheckPKG-were-using-wr.patch
new file mode 100644
index 000000000..4db5abd2c
--- /dev/null
+++ b/patches/gpsd-3.20/0008-SConstruct-GetPythonValue-and-CheckPKG-were-using-wr.patch
@@ -0,0 +1,44 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Wed, 8 Jan 2020 15:46:03 -0800
+Subject: [PATCH] SConstruct: GetPythonValue() and CheckPKG were using wrong
+ env.
+
+---
+ SConstruct | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index ea87d9204e60..fc5ab39bfad6 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -524,7 +524,7 @@ values can be listed with 'scons -h'.
+ def CheckPKG(context, name):
+ context.Message('Checking pkg-config for %s... ' % name)
+ ret = context.TryAction('%s --exists \'%s\''
+- % (env['PKG_CONFIG'], name))[0]
++ % (context.env['PKG_CONFIG'], name))[0]
+ context.Result(ret)
+ return ret
+
+@@ -599,8 +599,11 @@ def CheckC11(context):
+
+ def GetPythonValue(context, name, imp, expr, brief=False):
+ context.Message('Obtaining Python %s... ' % name)
++
++ # what is this about?
+ context.sconf.cached = 0 # Avoid bogus "(cached)"
+- if not env['target_python']:
++
++ if not context.env['target_python']:
+ status, value = 0, str(eval(expr))
+ else:
+ command = [target_python_path, '-c', '%s; print(%s)' % (imp, expr)]
+@@ -615,7 +618,7 @@ def GetPythonValue(context, name, imp, expr, brief=False):
+ announce('Python command "%s" failed - disabling Python.\n'
+ 'Python components will NOT be installed' %
+ command[2])
+- env['python'] = False
++ context.env['python'] = False
+ context.Result('failed' if status else 'ok' if brief else value)
+ return value
+
diff --git a/patches/gpsd-3.20/0009-SConstruct-Fix-GetPythonValue-for-python-3.patch b/patches/gpsd-3.20/0009-SConstruct-Fix-GetPythonValue-for-python-3.patch
new file mode 100644
index 000000000..88c8cfbaa
--- /dev/null
+++ b/patches/gpsd-3.20/0009-SConstruct-Fix-GetPythonValue-for-python-3.patch
@@ -0,0 +1,57 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Wed, 8 Jan 2020 17:25:16 -0800
+Subject: [PATCH] SConstruct: Fix GetPythonValue() for python 3.
+
+---
+ SConstruct | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index fc5ab39bfad6..a5c41e8f4803 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -604,7 +604,8 @@ def GetPythonValue(context, name, imp, expr, brief=False):
+ context.sconf.cached = 0 # Avoid bogus "(cached)"
+
+ if not context.env['target_python']:
+- status, value = 0, str(eval(expr))
++ status = 0
++ value = str(eval(expr))
+ else:
+ command = [target_python_path, '-c', '%s; print(%s)' % (imp, expr)]
+ try:
+@@ -619,7 +620,14 @@ def GetPythonValue(context, name, imp, expr, brief=False):
+ 'Python components will NOT be installed' %
+ command[2])
+ context.env['python'] = False
+- context.Result('failed' if status else 'ok' if brief else value)
++ if 0 != status:
++ result = 'failed'
++ elif brief:
++ result = 'ok'
++ else:
++ # context.Result() confused by bytes
++ result = polystr(value)
++ context.Result(result)
+ return value
+
+
+@@ -1181,15 +1189,14 @@ elif config.env['python']:
+ # Maximize consistency by using the reported sys.executable
+ target_python_path = config.GetPythonValue('exe path',
+ 'import sys',
+- 'sys.executable',
+- brief=cleaning)
++ 'sys.executable')
++ # python module directory
+ if config.env['python_libdir']:
+ python_libdir = config.env['python_libdir']
+ else:
+ python_libdir = config.GetPythonValue('lib dir',
+ PYTHON_SYSCONFIG_IMPORT,
+- PYTHON_LIBDIR_CALL,
+- brief=cleaning)
++ PYTHON_LIBDIR_CALL)
+ # follow FHS, put in /usr/local/libXX, not /usr/libXX
+ # may be lib, lib32 or lib64
+ python_libdir = polystr(python_libdir)
diff --git a/patches/gpsd-3.20/0010-SConstruct-move-more-checks-into-GetPythonValue.patch b/patches/gpsd-3.20/0010-SConstruct-move-more-checks-into-GetPythonValue.patch
new file mode 100644
index 000000000..a68169431
--- /dev/null
+++ b/patches/gpsd-3.20/0010-SConstruct-move-more-checks-into-GetPythonValue.patch
@@ -0,0 +1,98 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Wed, 8 Jan 2020 18:04:15 -0800
+Subject: [PATCH] SConstruct: move more checks into GetPythonValue()
+
+So the target python is used, not the python used to run scons.
+---
+ SConstruct | 36 ++++++++++++++++--------------------
+ 1 file changed, 16 insertions(+), 20 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index a5c41e8f4803..9f88fa347b9a 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -33,7 +33,6 @@ from __future__ import print_function
+ import ast
+ import functools
+ import glob
+-import imp # for imp.find_module('gps'), imp deprecated in 3.4
+ import operator
+ import os
+ import pickle
+@@ -598,12 +597,14 @@ def CheckC11(context):
+
+
+ def GetPythonValue(context, name, imp, expr, brief=False):
+- context.Message('Obtaining Python %s... ' % name)
++ """Get a value from the target python, not the running one."""
++ context.Message('Checking Python %s... ' % name)
+
+ # what is this about?
+ context.sconf.cached = 0 # Avoid bogus "(cached)"
+
+ if not context.env['target_python']:
++ # FIXME: this ignores imp
+ status = 0
+ value = str(eval(expr))
+ else:
+@@ -616,10 +617,8 @@ def GetPythonValue(context, name, imp, expr, brief=False):
+ value = value.strip()
+ else:
+ value = ''
+- announce('Python command "%s" failed - disabling Python.\n'
+- 'Python components will NOT be installed' %
+- command[2])
+- context.env['python'] = False
++ # do not disable python because this failed
++ # maybe testing for newer python feature
+ if 0 != status:
+ result = 'failed'
+ elif brief:
+@@ -1023,7 +1022,8 @@ else:
+ if config.env["magic_hat"]:
+ announce("Forcing magic_hat=no since RFC2783 API is unavailable")
+ config.env["magic_hat"] = False
+- tiocmiwait = config.CheckDeclaration("TIOCMIWAIT", "#include <sys/ioctl.h>")
++ tiocmiwait = config.CheckDeclaration("TIOCMIWAIT",
++ "#include <sys/ioctl.h>")
+ if not tiocmiwait and not kpps:
+ announce("Neither TIOCMIWAIT nor RFC2783 API is available)")
+ if config.env["timeservice"]:
+@@ -1218,28 +1218,24 @@ elif config.env['python']:
+ config.env['aiogps'] = True
+
+ # check for pyserial
+- try:
+- imp.find_module('serial')
+- announce("Python module serial (pyserial) found.")
+- except ImportError:
++ if not config.GetPythonValue('module serial (pyserial)',
++ 'import serial', '"found"'):
+ # no pyserial, used by ubxtool and zerk
+- announce("WARNING: Python module serial (pyserial) not found.")
++ announce("WARNING: ubxtool and zerk are missing optional "
++ "runtime module serial")
+
+ config.env['xgps_deps'] = True
++
+ # check for pycairo
+- try:
+- imp.find_module('cairo')
+- announce("Python module cairo (pycairo) found.")
+- except ImportError:
++ if not config.GetPythonValue('module cairo (pycairo)',
++ 'import cairo', '"found"'):
+ # no pycairo, used by xgps, xgpsspeed
+ config.env['xgps_deps'] = False
+ announce("WARNING: Python module cairo (pycairo) not found.")
+
+ # check for pygobject
+- try:
+- imp.find_module('gi')
+- announce("Python module gi (pygobject) found.")
+- except ImportError:
++ if not config.GetPythonValue('module gi (pygobject)',
++ 'import gi', '"found"'):
+ # no pycairo, used by xgps, xgpsspeed
+ config.env['xgps_deps'] = False
+ announce("WARNING: Python module gi (pygobject) not found.")
diff --git a/patches/gpsd-3.20/0011-SConstruct-Check-target-python-version-not-scons-pyt.patch b/patches/gpsd-3.20/0011-SConstruct-Check-target-python-version-not-scons-pyt.patch
new file mode 100644
index 000000000..19d3e3b23
--- /dev/null
+++ b/patches/gpsd-3.20/0011-SConstruct-Check-target-python-version-not-scons-pyt.patch
@@ -0,0 +1,32 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Wed, 8 Jan 2020 18:38:11 -0800
+Subject: [PATCH] SConstruct: Check target python version, not scons python
+ version.
+
+---
+ SConstruct | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 9f88fa347b9a..a02a2a897d32 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1209,11 +1209,14 @@ elif config.env['python']:
+ brief=True)
+
+ # aiogps is only available on Python >= 3.6
+- # FIXME check target_python, not current python
+- if sys.version_info < (3, 6):
++ sysver = config.GetPythonValue('version',
++ 'import sys',
++ '"%d.%d" % sys.version_info[0:2]')
++ if 3 > int(sysver[0]) or 6 > int(sysver[2]):
+ config.env['aiogps'] = False
+- announce("WARNING: Python too old: "
+- "gps/aiogps.py will not be installed\n")
++ announce("WARNING: Python%s too old (need 3.6): "
++ "gps/aiogps.py will not be installed\n" %
++ (sysver), end=True)
+ else:
+ config.env['aiogps'] = True
+
diff --git a/patches/gpsd-3.20/0012-SConstruct-Simplify-GetPythonValue-.-It-now-caches-p.patch b/patches/gpsd-3.20/0012-SConstruct-Simplify-GetPythonValue-.-It-now-caches-p.patch
new file mode 100644
index 000000000..e833a1f08
--- /dev/null
+++ b/patches/gpsd-3.20/0012-SConstruct-Simplify-GetPythonValue-.-It-now-caches-p.patch
@@ -0,0 +1,174 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Fri, 10 Jan 2020 16:24:58 -0800
+Subject: [PATCH] SConstruct: Simplify GetPythonValue(). It now caches
+ properly.
+
+---
+ SConstruct | 93 ++++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 48 insertions(+), 45 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index a02a2a897d32..f45efe4e19f0 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -22,12 +22,12 @@
+ # * Out-of-directory builds: see http://www.scons.org/wiki/UsingBuildDir
+ # * Coveraging mode: gcc "-coverage" flag requires a hack
+ # for building the python bindings
+-# * Python 3 compatibility in this recipe
+-
+-# Since SCons 3.0.0 forces print_function on us, it needs to be unconditional.
+-# This is recognized to be a bug in SCons, but we need to live with it for now,
+-# and we'll need this for eventual Python 3 compatibility, anyway.
+-# Python requires this to precede any non-comment code.
++#
++# This file is Copyright (c) 2010-2020 by the GPSD project
++# SPDX-License-Identifier: BSD-2-clause
++#
++# This code runs compatibly under Python 2 and 3.x for x >= 2.
++# Preserve this property!
+ from __future__ import print_function
+
+ import ast
+@@ -600,33 +600,29 @@ def GetPythonValue(context, name, imp, expr, brief=False):
+ """Get a value from the target python, not the running one."""
+ context.Message('Checking Python %s... ' % name)
+
+- # what is this about?
+- context.sconf.cached = 0 # Avoid bogus "(cached)"
+-
+ if not context.env['target_python']:
+ # FIXME: this ignores imp
+- status = 0
++ status = 1
+ value = str(eval(expr))
+ else:
+- command = [target_python_path, '-c', '%s; print(%s)' % (imp, expr)]
+- try:
+- status, value = _getstatusoutput(command, shell=False)
+- except OSError:
+- status = -1
+- if status == 0:
+- value = value.strip()
+- else:
+- value = ''
+- # do not disable python because this failed
+- # maybe testing for newer python feature
+- if 0 != status:
+- result = 'failed'
+- elif brief:
+- result = 'ok'
+- else:
+- # context.Result() confused by bytes
+- result = polystr(value)
+- context.Result(result)
++ command = (context.env['target_python'] + " $SOURCE > $TARGET")
++ text = "%s; print(%s)" % (imp, expr)
++
++ # TryAction returns (1, outputStr), or (0, '') on fail
++ (status, value) = context.TryAction(command, text, '.py')
++
++ # do not disable python because this failed
++ # maybe testing for newer python feature
++
++ if 1 == status:
++ # we could convert to str(), but caching turns it into bytes anyway
++ value = value.strip()
++ if brief is True:
++ context.did_show_result = 1
++ print("ok")
++
++ context.Result(value)
++ # return value
+ return value
+
+
+@@ -1174,10 +1170,13 @@ if helping:
+ config.env['xgps_deps'] = False
+
+ elif config.env['python']:
++ target_python_path = None
+ if config.env['target_python']:
+ try:
+ config.CheckProg
+- except AttributeError: # Older scons versions don't have CheckProg
++ except AttributeError:
++ # scons versions before Sep 2015 (2.4.0) don't have CheckProg
++ # gpsd only asks for 2.3.0 or higher
+ target_python_path = config.env['target_python']
+ else:
+ target_python_path = config.CheckProg(config.env['target_python'])
+@@ -1186,10 +1185,13 @@ elif config.env['python']:
+ config.env['python'] = False
+
+ if config.env['python']:
+- # Maximize consistency by using the reported sys.executable
+- target_python_path = config.GetPythonValue('exe path',
+- 'import sys',
+- 'sys.executable')
++ if not target_python_path:
++ # Avoid double testing for target_python_path
++ # Maximize consistency by using the reported sys.executable
++ target_python_path = config.GetPythonValue('exe path',
++ 'import sys',
++ 'sys.executable')
++ target_python_path = polystr(target_python_path)
+ # python module directory
+ if config.env['python_libdir']:
+ python_libdir = config.env['python_libdir']
+@@ -1207,11 +1209,18 @@ elif config.env['python']:
+ PYTHON_SYSCONFIG_IMPORT,
+ PYTHON_CONFIG_CALL,
+ brief=True)
++ py_config_text = polystr(py_config_text)
++ py_config_vars = ast.literal_eval(py_config_text)
++ py_config_vars = [[] if x is None else x for x in py_config_vars]
++ python_config = dict(zip(PYTHON_CONFIG_NAMES, py_config_vars))
++ # debug
++ # announce(python_config)
+
+ # aiogps is only available on Python >= 3.6
+ sysver = config.GetPythonValue('version',
+ 'import sys',
+ '"%d.%d" % sys.version_info[0:2]')
++
+ if 3 > int(sysver[0]) or 6 > int(sysver[2]):
+ config.env['aiogps'] = False
+ announce("WARNING: Python%s too old (need 3.6): "
+@@ -1252,14 +1261,8 @@ elif config.env['python']:
+ # xgps* turned off by option
+ config.env['xgps_deps'] = False
+
+- config.env['PYTHON'] = polystr(target_python_path)
+- # For regress-driver
+- config.env['ENV']['PYTHON'] = polystr(target_python_path)
+- py_config_vars = ast.literal_eval(py_config_text.decode())
+- py_config_vars = [[] if x is None else x for x in py_config_vars]
+- python_config = dict(zip(PYTHON_CONFIG_NAMES, py_config_vars))
+- # debug
+- # announce(python_config)
++ config.env['PYTHON'] = target_python_path
++ config.env['ENV']['PYTHON'] = target_python_path
+
+
+ env = config.Finish()
+@@ -1859,7 +1862,7 @@ else:
+
+
+ # Instantiate some file templates. We'd like to use the Substfile builtin
+-# but it doesn't seem to work in scons 1.20
++# Substfile in scons 1.3.0+, since 2010
+ def substituter(target, source, env):
+ substmap = (
+ ('@ANNOUNCE@', annmail),
+@@ -2371,8 +2374,8 @@ else:
+ ' $SRCDIR/test/clientlib/*.log', ])
+ # Unit-test the bitfield extractor
+ misc_regress = Utility('misc-regress', [], [
+- '{} $SRCDIR/test_clienthelpers.py'.format(target_python_path.decode()),
+- '{} $SRCDIR/test_misc.py'.format(target_python_path.decode())
++ '{} $SRCDIR/test_clienthelpers.py'.format(target_python_path),
++ '{} $SRCDIR/test_misc.py'.format(target_python_path)
+ ])
+
+
diff --git a/patches/gpsd-3.20/0013-SConstruct-fix-polystr-for-python2.patch b/patches/gpsd-3.20/0013-SConstruct-fix-polystr-for-python2.patch
new file mode 100644
index 000000000..0223a2735
--- /dev/null
+++ b/patches/gpsd-3.20/0013-SConstruct-fix-polystr-for-python2.patch
@@ -0,0 +1,34 @@
+From: "Gary E. Miller" <gem@rellim.com>
+Date: Fri, 10 Jan 2020 18:43:17 -0800
+Subject: [PATCH] SConstruct: fix polystr() for python2
+
+---
+ SConstruct | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index f45efe4e19f0..a4f8cdc763cd 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1152,11 +1152,16 @@ PYTHON_CONFIG_CALL = ('sysconfig.get_config_vars(%s)'
+ # ugly hack from http://www.catb.org/esr/faqs/practical-python-porting/
+ # handle python2/3 strings
+ def polystr(o):
+- if isinstance(o, str):
+- return o
+- if isinstance(o, bytes):
+- return str(o, encoding='latin-1')
+- raise ValueError
++ if bytes is str: # Python 2
++ return str(o)
++ else: # python 3.
++ if isinstance(o, str):
++ return o
++ if isinstance(o, bytes) or isinstance(o, bytearray):
++ return str(o, encoding='latin1')
++ if isinstance(o, int):
++ return str(o)
++ raise ValueError
+
+
+ # flag that we have xgps* dependencies, so xgps* should run OK
diff --git a/patches/gpsd-3.20/0100-SConstruct-Use-target_python-when-constructing-exten.patch b/patches/gpsd-3.20/0100-SConstruct-Use-target_python-when-constructing-exten.patch
new file mode 100644
index 000000000..e01d92353
--- /dev/null
+++ b/patches/gpsd-3.20/0100-SConstruct-Use-target_python-when-constructing-exten.patch
@@ -0,0 +1,36 @@
+From: Ladislav Michl <ladis@linux-mips.org>
+Date: Sun, 2 Feb 2020 00:42:42 +0100
+Subject: [PATCH] SConstruct: Use target_python when constructing extension
+ name
+
+---
+ SConstruct | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index a4f8cdc763cd..cd30bb86f4ac 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1234,6 +1234,12 @@ elif config.env['python']:
+ else:
+ config.env['aiogps'] = True
+
++ # get version part of python extension name
++ ext_python_ver = config.GetPythonValue('ext version string',
++ 'import sys',
++ '"_".join(map(str, '
++ 'sys.version_info))')
++
+ # check for pyserial
+ if not config.GetPythonValue('module serial (pyserial)',
+ 'import serial', '"found"'):
+@@ -1756,8 +1762,7 @@ else:
+ python_objects[ext].append(
+ python_env.NoCache(
+ python_env.SharedObject(
+- src.split(".")[0] + '-py_' +
+- '_'.join(['%s' % (x) for x in sys.version_info]) +
++ src.split(".")[0] + '-py_' + ext_python_ver +
+ python_config['SO'], src
+ )
+ )
diff --git a/patches/gpsd-3.19/0001-Search-for-ncursesw-pkgconfig.patch b/patches/gpsd-3.20/0101-SConstruct-Search-for-ncursesw-pkgconfig.patch
similarity index 79%
rename from patches/gpsd-3.19/0001-Search-for-ncursesw-pkgconfig.patch
rename to patches/gpsd-3.20/0101-SConstruct-Search-for-ncursesw-pkgconfig.patch
index 235d5b36e..ac233ca96 100644
--- a/patches/gpsd-3.19/0001-Search-for-ncursesw-pkgconfig.patch
+++ b/patches/gpsd-3.20/0101-SConstruct-Search-for-ncursesw-pkgconfig.patch
@@ -1,8 +1,8 @@
From: Ladislav Michl <ladis@linux-mips.org>
Date: Fri, 25 Oct 2019 14:18:30 +0200
-Subject: [PATCH] Search for ncursesw pkgconfig
+Subject: [PATCH] SConstruct: Search for ncursesw pkgconfig
-PTXDist can be configured to build wide char verson of ncurses
+PTXDist can be configured to build wide char version of ncurses
which SConstruct is unaware of.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
@@ -11,10 +11,10 @@ Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
1 file changed, 2 insertions(+)
diff --git a/SConstruct b/SConstruct
-index 5160481a7a7b..7bd5b08f2a46 100644
+index cd30bb86f4ac..841eb06b7793 100644
--- a/SConstruct
+++ b/SConstruct
-@@ -826,6 +826,8 @@ else:
+@@ -807,6 +807,8 @@ else:
ncurseslibs = pkg_config('ncurses', rpath_hack=True)
if config.CheckPKG('tinfo'):
ncurseslibs += pkg_config('tinfo', rpath_hack=True)
diff --git a/patches/gpsd-3.20/0102-SConstruct-HACK-use-target-INCLUDEPY.patch b/patches/gpsd-3.20/0102-SConstruct-HACK-use-target-INCLUDEPY.patch
new file mode 100644
index 000000000..c597c8393
--- /dev/null
+++ b/patches/gpsd-3.20/0102-SConstruct-HACK-use-target-INCLUDEPY.patch
@@ -0,0 +1,25 @@
+From: Ladislav Michl <ladis@linux-mips.org>
+Date: Fri, 7 Feb 2020 10:53:19 +0100
+Subject: [PATCH] SConstruct: HACK: use target INCLUDEPY
+
+Once PTXdist's cross-python starts returning proper INCLUDEPY
+path, this hack will wanish.
+
+Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
+---
+ SConstruct | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/SConstruct b/SConstruct
+index 841eb06b7793..3d885a17a5b9 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1748,7 +1748,7 @@ else:
+ LINK=ldshared,
+ SHLIBPREFIX="",
+ SHLIBSUFFIX=python_config['SO'],
+- CPPPATH=[python_config['INCLUDEPY']],
++ CPPPATH=[os.getenv('SYSROOT') + python_config['INCLUDEPY']],
+ CPPFLAGS=[],
+ CFLAGS=[],
+ CXXFLAGS=[])
diff --git a/patches/gpsd-3.20/series b/patches/gpsd-3.20/series
new file mode 100644
index 000000000..cf6301f6d
--- /dev/null
+++ b/patches/gpsd-3.20/series
@@ -0,0 +1,20 @@
+# generated by git-ptx-patches
+#tag:base --start-number 1
+0001-SConstruct-replace-custom-CheckSizeOf-with-standard-.patch
+0002-SConstruct-Always-install-xpgs-xgpsspeed-programs-ma.patch
+0003-SConstruct-Always-install-xgps-.-Only-test-if-deps-f.patch
+0004-SConstruct-Skip-sizeof-time_t-test-when-cross-compil.patch
+0005-Fix-merging-and-using-of-python-flags.patch
+0006-SConstruct-Remove-redundant-CheckHeaderDefines.patch
+0007-SConstruct-remove-redundant-CheckCompilerDefines.patch
+0008-SConstruct-GetPythonValue-and-CheckPKG-were-using-wr.patch
+0009-SConstruct-Fix-GetPythonValue-for-python-3.patch
+0010-SConstruct-move-more-checks-into-GetPythonValue.patch
+0011-SConstruct-Check-target-python-version-not-scons-pyt.patch
+0012-SConstruct-Simplify-GetPythonValue-.-It-now-caches-p.patch
+0013-SConstruct-fix-polystr-for-python2.patch
+#tag:ptx --start-number 100
+0100-SConstruct-Use-target_python-when-constructing-exten.patch
+0101-SConstruct-Search-for-ncursesw-pkgconfig.patch
+0102-SConstruct-HACK-use-target-INCLUDEPY.patch
+# 0b0660f42833b6e75cc0bdf50a2eec25 - git-ptx-patches magic
diff --git a/rules/gpsd.in b/rules/gpsd.in
index 57731d040..154068162 100644
--- a/rules/gpsd.in
+++ b/rules/gpsd.in
@@ -13,6 +13,7 @@ menuconfig GPSD
select NCURSES if GPSD_NCURSES
select DBUS_GLIB if GPSD_DBUS
select PYTHON3 if GPSD_PYTHON
+ select PYSERIAL3 if GPSD_PYSERIAL
prompt "gpsd "
help
gpsd is a daemon that listens to a GPS or Loran receiver
@@ -27,25 +28,15 @@ if GPSD
config GPSD_NCURSES
bool
-comment "time service ---"
-
-config GPSD_NTP
+config GPSD_PYSERIAL
bool
- prompt "NTP time hinting support"
-config GPSD_NTPSHM
- bool
- depends on GPSD_NTP
- prompt "NTP time hinting via shared memory"
+comment "time service ---"
config GPSD_OSCILLATOR
bool
prompt "Disciplined oscillator support"
-config GPSD_PPS
- bool
- prompt "PPS time syncing support"
-
comment "export methods ---"
config GPSD_DBUS
@@ -111,14 +102,6 @@ config GPSD_USER
help
This user is used for privilege separation.
-config GPSD_FIXED_PORT_SPEED
- string
- prompt "fixed port speed"
-
-config GPSD_FIXED_PORT_BITS
- string
- prompt "fixed port bits"
-
config GPSD_MAX_CLIENTS
string
prompt "max clients"
@@ -207,7 +190,6 @@ menu "drivers"
config GPSD_DRIVER_UBX
bool
- select GPSD_NTPSHM
select GPSD_DRIVER_NMEA
prompt "ubx"
@@ -367,8 +349,6 @@ menu "install options"
config GPSD_NTPSHMMON
bool
- select GPSD_NTP
- select GPSD_PPS
select GPSD_SHM
prompt "ntpshmmon"
help
@@ -431,6 +411,7 @@ menu "install options"
config GPSD_UBXTOOL
bool
select GPSD_PYTHON
+ select GPSD_PYSERIAL
prompt "ubxtool"
help
ubxtool is a tool for u-blox GPS. ubxtool can decode common
@@ -441,6 +422,7 @@ menu "install options"
config GPSD_ZERK
bool
select GPSD_PYTHON
+ select GPSD_PYSERIAL
prompt "zerk"
help
zerk is an all purpose GREIS fitting. zerk can decode common
diff --git a/rules/gpsd.make b/rules/gpsd.make
index afe02c925..e6c166150 100644
--- a/rules/gpsd.make
+++ b/rules/gpsd.make
@@ -16,8 +16,8 @@ PACKAGES-$(PTXCONF_GPSD) += gpsd
#
# Paths and names
#
-GPSD_VERSION := 3.19
-GPSD_MD5 := b3bf88706794eb8e5f2c2543bf7ba87b
+GPSD_VERSION := 3.20
+GPSD_MD5 := cf7fdec7ce7221d20bee1a7246362b05
GPSD := gpsd-$(GPSD_VERSION)
GPSD_SUFFIX := tar.gz
GPSD_URL := http://download.savannah.gnu.org/releases/gpsd/$(GPSD).$(GPSD_SUFFIX)
@@ -52,6 +52,8 @@ GPSD_PROGS-$(PTXCONF_GPSD_UBXTOOL) += ubxtool
GPSD_PROGS-$(PTXCONF_GPSD_ZERK) += zerk
GPSD_CONF_TOOL := scons
+GPSD_CONF_ENV := \
+ $(CROSS_ENV_PKG_CONFIG)
GPSD_CONF_OPT := \
aivdm=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_AIVDM) \
ashtech=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_ASHTECH) \
@@ -75,10 +77,8 @@ GPSD_CONF_OPT := \
gpsdclients=$(GPSD_BUILD_CLIENTS) \
greis=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_GREIS) \
implicit_link=yes \
- ipv6=$(call ptx/yesno, PTXCONF_GLOBAL_IPV6) \
isync=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_ISYNC) \
itrax=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_ITRAX) \
- leapfetch=yes \
libdir=/usr/$(CROSS_LIB_DIR) \
libgpsmm=no \
magic_hat=no \
@@ -90,16 +90,12 @@ GPSD_CONF_OPT := \
netfeed=yes \
nmea0183=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_NMEA) \
nmea2000=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_NMEA) \
- nofloats=no \
nostrip=yes \
- ntp=$(call ptx/yesno, PTXCONF_GPSD_NTP) \
- ntpshm=$(call ptx/yesno, PTXCONF_GPSD_SHM) \
ntrip=$(call ptx/yesno, GPSD_DRIVER_NTRIP) \
oceanserver=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_OCEANSERVER) \
oncore=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_ONCORE) \
oscillator=$(call ptx/yesno, PTXCONF_GPSD_OSCILLATOR) \
passthrough=no \
- pps=$(call ptx/yesno, PTXCONF_GPSD_PPS) \
prefix=/usr \
profiling=$(call ptx/yesno, PTXCONF_GPSD_PROFILING) \
python=$(call ptx/yesno, PTXCONF_GPSD_PYTHON) \
@@ -116,12 +112,10 @@ GPSD_CONF_OPT := \
squelch=yes \
superstar2=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_SUPERSTAR2) \
sysconfdir=/etc \
- sysroot=$(SYSROOT) \
systemd=$(call ptx/yesno, PTXCONF_GPSD_SYSTEMD) \
target=$(PTXCONF_GNU_TARGET) \
target_python=$(CROSS_PYTHON3) \
timeservice=no \
- timing=no \
tnt=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_TNT) \
tripmate=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_TRIPMATE) \
tsip=$(call ptx/yesno, PTXCONF_GPSD_DRIVER_TSIP) \
@@ -130,13 +124,6 @@ GPSD_CONF_OPT := \
usb=$(call ptx/yesno, PTXCONF_GPSD_USB) \
xgps=no
-ifneq ($(call remove_quotes,$(PTXCONF_GPSD_FIXED_PORT_SPEED)),)
-GPSD_CONF_OPT += fixed_port_speed=$(PTXCONF_GPSD_FIXED_PORT_SPEED)
-endif
-ifneq ($(call remove_quotes,$(PTXCONF_GPSD_FIXED_PORT_BITS)),)
-GPSD_CONF_OPT += fixed_port_bits=$(PTXCONF_GPSD_FIXED_PORT_BITS)
-endif
-
ifneq ($(call remove_quotes,$(PTXCONF_GPSD_GROUP)),)
GPSD_CONF_OPT += gpsd_group=$(PTXCONF_GPSD_GROUP)
endif
--
2.25.0
_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-02-09 16:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-09 16:59 [ptxdist] [PATCH v2] gpsd: version bump 3.19 -> 3.20 Ladislav Michl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox