--- /dev/null
+From 727c37ef78f2229998ac51942f5d11c754d0c6b9 Mon Sep 17 00:00:00 2001
+From: Robert Hancock <hancock@sedsystems.ca>
+Date: Mon, 13 Jul 2020 17:33:48 -0600
+Subject: [PATCH] Fix errors during gpsd 3.20 cross-compilation
+
+Adapt some post-3.20 changes to the gpsd SConstruct file from the
+gpsd master branch to fix issues when cross-compiling. Original
+commits did not cherry-pick cleanly onto 3.20 due to other
+upstream changes.
+
+Signed-off-by: Robert Hancock <hancock@sedsystems.ca>
+---
+ SConstruct | 81 ++++++++++++++++++++++--------------------------------
+ 1 file changed, 33 insertions(+), 48 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 33e0ff326..93e8fcfea 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -386,13 +386,16 @@ env['SC_PYTHON'] = sys.executable # Path to SCons Python
+ # So we rely on MergeFlags/ParseFlags to do the right thing for us.
+ env['STRIP'] = "strip"
+ env['PKG_CONFIG'] = "pkg-config"
+-for i in ["AR", "CC", "CXX", "LD",
+- "PKG_CONFIG", "STRIP", "TAR"]:
++for i in ["AR", # linker for static libs, usually "ar"
++ "CC",
++ "CXX",
++ # "LD", # scons does not use LD, usually "ld"
++ "PKG_CONFIG",
++ "SHLINK", # linker for shared libs, usually "gcc" or "g++", NOT "ld"
++ "STRIP",
++ "TAR"]:
+ if i in os.environ:
+- j = i
+- if i == "LD":
+- i = "SHLINK"
+- env[i] = os.getenv(j)
++ env[i] = os.getenv(i)
+ for i in ["ARFLAGS", "CFLAGS", "CXXFLAGS", "LDFLAGS", "SHLINKFLAGS",
+ "CPPFLAGS", "CCFLAGS", "LINKFLAGS"]:
+ if i in os.environ:
+@@ -483,7 +486,7 @@ devenv = (("ADDR2LINE", "addr2line"),
+ ("GCCBUG", "gccbug"),
+ ("GCOV", "gcov"),
+ ("GPROF", "gprof"),
+- ("LD", "ld"),
++ # ("LD", "ld"), # scons does not use LD
+ ("NM", "nm"),
+ ("OBJCOPY", "objcopy"),
+ ("OBJDUMP", "objdump"),
+@@ -565,6 +568,22 @@ def CheckXsltproc(context):
+ return ret
+
+
++def CheckTime_t(context):
++ context.Message('Checking if sizeof(time_t) is 64 bits... ')
++ ret = context.TryLink("""
++ #include <time.h>
++
++ int main(int argc, char **argv) {
++ static int test_array[1 - 2 * ((long int) sizeof(time_t) < 8 )];
++ test_array[0] = 0;
++ (void) argc; (void) argv;
++ return 0;
++ }
++ """, '.c')
++ context.Result(ret)
++ return ret
++
++
+ def CheckCompilerOption(context, option):
+ context.Message('Checking if compiler accepts %s... ' % (option,))
+ old_CFLAGS = context.env['CFLAGS'][:] # Get a *copy* of the old list
+@@ -597,42 +616,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,8 +691,8 @@ config = Configure(env, custom_tests={
+ 'CheckCompilerOption': CheckCompilerOption,
+ 'CheckHeaderDefines': CheckHeaderDefines,
+ 'CheckPKG': CheckPKG,
+- 'CheckSizeOf': CheckSizeOf,
+ 'CheckXsltproc': CheckXsltproc,
++ 'CheckTime_t': CheckTime_t,
+ 'GetPythonValue': GetPythonValue,
+ })
+
+@@ -1043,11 +1026,13 @@ else:
+ confdefs.append("/* #undef HAVE_%s_H */\n"
+ % hdr.replace("/", "_").upper())
+
+- sizeof_time_t = config.CheckSizeOf("time_t")
+- 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):
++ if 0 == config.CheckTime_t():
+ announce("WARNING: time_t is too small. It will fail in 2038")
++ sizeof_time_t = 4
++ else:
++ sizeof_time_t = 8
++
++ confdefs.append("#define SIZEOF_TIME_T %s\n" % sizeof_time_t)
+
+ # check function after libraries, because some function require libraries
+ # for example clock_gettime() require librt on Linux glibc < 2.17
+--
+2.18.4
+