From 4a557a450df247f045cff9682bc694452dfb426a Mon Sep 17 00:00:00 2001
From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date: Fri, 24 Jul 2020 09:05:55 -0600
Subject: [PATCH 1/5] add qmake options to specify libraries.

---
 GPSBabel.pro        | 68 ++++++++-------------------------------------
 defs.h              | 14 +++++++---
 jeeps/gpslibusb.cc  |  5 +++-
 jeeps/gpsusbstub.cc |  2 +-
 libusb.pri          | 64 ++++++++++++++++++++++++++++++++++++++++++
 shape.cc            |  8 +++++-
 shape.h             |  8 +++++-
 shapelib.pri        | 27 ++++++++++++++++++
 zlib.pri            | 52 ++++++++++++++++++++++++++++++++++
 9 files changed, 183 insertions(+), 65 deletions(-)
 create mode 100644 libusb.pri
 create mode 100644 shapelib.pri
 create mode 100644 zlib.pri

diff --git a/GPSBabel.pro b/GPSBabel.pro
index 3e1ca1573..944422206 100644
--- a/GPSBabel.pro
+++ b/GPSBabel.pro
@@ -10,7 +10,7 @@ count(MIN_QT_VERSION_PATCH, 0): MIN_QT_VERSION_PATCH = 0
 lessThan(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR) | \
 if(equals(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR):lessThan(QT_MINOR_VERSION, $$MIN_QT_VERSION_MINOR)) | \
 if(equals(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR):equals(QT_MINOR_VERSION, $$MIN_QT_VERSION_MINOR):lessThan(QT_PATCH_VERSION, $$MIN_QT_VERSION_PATCH)) {
-  error("$$QMAKE_QMAKE uses Qt version $$QT_VERSION but version $${MIN_QT_VERSION_MAJOR}.$${MIN_QT_VERSION_MINOR}.$${MIN_QT_VERSION_PATCH} or newer is required.")  
+  error("$$QMAKE_QMAKE uses Qt version $$QT_VERSION but version $${MIN_QT_VERSION_MAJOR}.$${MIN_QT_VERSION_MINOR}.$${MIN_QT_VERSION_PATCH} or newer is required.")
 }
 
 QT -= gui
@@ -20,6 +20,7 @@ TARGET = gpsbabel
 CONFIG += console
 CONFIG -= app_bundle
 CONFIG += c++14
+CONFIG += link_pkgconfig
 
 TEMPLATE = app
 
@@ -61,13 +62,6 @@ FILTERS=position.cc radius.cc duplicate.cc arcdist.cc polygon.cc smplrout.cc \
 FILTER_HEADERS = $$FILTERS
 FILTER_HEADERS ~= s/\.cc/.h/g
 
-SHAPE=shapelib/shpopen.c shapelib/dbfopen.c shapelib/safileio.c
-
-ZLIB=zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/inffast.c \
-        zlib/inflate.c zlib/infback.c zlib/inftrees.c zlib/trees.c \
-        zlib/uncompr.c zlib/gzlib.c zlib/gzclose.c zlib/gzread.c \
-        zlib/gzwrite.c zlib/zutil.c
-
 JEEPS += jeeps/gpsapp.cc jeeps/gpscom.cc \
          jeeps/gpsmath.cc jeeps/gpsmem.cc  \
          jeeps/gpsprot.cc jeeps/gpsread.cc \
@@ -84,7 +78,7 @@ SUPPORT = route.cc waypt.cc filter_vecs.cc util.cc vecs.cc mkshort.cc \
           gbfile.cc parse.cc session.cc main.cc globals.cc \
           src/core/textstream.cc \
           src/core/usasciicodec.cc \
-          src/core/xmlstreamwriter.cc 
+          src/core/xmlstreamwriter.cc
 
 HEADERS =  \
 	an1sym.h \
@@ -147,7 +141,6 @@ HEADERS =  \
 	random.h \
 	session.h \
 	shape.h \
-	shapelib/shapefil.h \
 	strptime.h \
 	subrip.h \
 	unicsv.h \
@@ -156,17 +149,6 @@ HEADERS =  \
 	xcsv.h \
 	xmlgeneric.h \
 	yahoo.h \
-	zlib/crc32.h \
-	zlib/deflate.h \
-	zlib/gzguts.h \
-	zlib/inffast.h \
-	zlib/inffixed.h \
-	zlib/inflate.h \
-	zlib/inftrees.h \
-	zlib/trees.h \
-	zlib/zconf.h \
-	zlib/zlib.h \
-	zlib/zutil.h \
 	src/core/datetime.h \
 	src/core/file.h \
 	src/core/logging.h \
@@ -178,8 +160,6 @@ HEADERS =  \
 
 HEADERS += $$FILTER_HEADERS
 
-INCLUDEPATH += zlib
-
 load(configure)
 
 CONFIG(release, debug|release): DEFINES *= NDEBUG
@@ -193,23 +173,21 @@ macx|linux|openbsd {
     # this is used by zlib
     DEFINES += HAVE_STDARG_H
   }
-  DEFINES += HAVE_LIBUSB_1_0
   SOURCES += gbser_posix.cc
   HEADERS += gbser_posix.h
-  JEEPS += jeeps/gpslibusb.cc
   INCLUDEPATH += jeeps
 }
 
 win32 {
   DEFINES += __WIN32__ _CONSOLE
-  DEFINES -= UNICODE ZLIB_INHIBITED
+  DEFINES -= UNICODE
   CONFIG(debug, debug|release) {
     DEFINES += _DEBUG
   }
   SOURCES += gbser_win.cc
   HEADERS += gbser_win.h
   JEEPS += jeeps/gpsusbwin.cc
-  LIBS += "-lsetupapi" 
+  LIBS += "-lsetupapi"
   RC_FILE = win32/gpsbabel.rc
 }
 
@@ -218,39 +196,15 @@ win32-msvc* {
   QMAKE_CXXFLAGS += /MP -wd4100
 }
 
-linux|openbsd {
-  LIBS += "-lusb-1.0"
-}
-
-macx {
-  LIBS += -lobjc -framework IOKit -framework CoreFoundation
-  INCLUDEPATH += mac/libusb \
-                 mac/libusb/Xcode
-  SOURCES += mac/libusb/core.c \
-             mac/libusb/descriptor.c \
-             mac/libusb/hotplug.c \
-             mac/libusb/io.c \
-             mac/libusb/strerror.c \
-             mac/libusb/sync.c \
-             mac/libusb/os/darwin_usb.c \
-             mac/libusb/os/poll_posix.c \
-             mac/libusb/os/threads_posix.c
-  HEADERS += mac/libusb/hotplug.h \
-             mac/libusb/libusb.h \
-             mac/libusb/libusbi.h \
-             mac/libusb/version.h \
-             mac/libusb/version_nano.h \
-             mac/libusb/os/darwin_usb.h \
-             mac/libusb/os/poll_posix.h \
-             mac/libusb/os/threads_posix.h
-}
+include(shapelib.pri)
+include(zlib.pri)
+include(libusb.pri)
 
-SOURCES += $$ALL_FMTS $$FILTERS $$SUPPORT $$SHAPE $$ZLIB $$JEEPS
+SOURCES += $$ALL_FMTS $$FILTERS $$SUPPORT $$JEEPS
 
 # We don't care about stripping things out of the build.  Full monty, baby.
 DEFINES += MAXIMAL_ENABLED
 DEFINES += FILTERS_ENABLED
-DEFINES += SHAPELIB_ENABLED
 DEFINES += CSVFMTS_ENABLED
 
 # Creator insists on adding -W to -Wall which results in a completely
@@ -278,7 +232,7 @@ macx|linux|openbsd{
 # example usage:
 # make clang-tidy RUN_CLANG_TIDY_FLAGS="-header-filter=.*\\\.h -checks=-*,modernize-use-nullptr -fix"
 # It seems to be better to use run-clang-tidy with the compilation database as opposed to
-# running clang-tidy directly and listing the 
+# running clang-tidy directly and listing the
 # compilation options on the clang-tidy line after --.
 # An example is modernize-use-override which inserts repeadted overrides when run directly,
 # but works as expected when run with run-clang-tidy.
@@ -306,7 +260,7 @@ cppcheck.commands = cppcheck --enable=all --force --config-exclude=zlib --config
 QMAKE_EXTRA_TARGETS += cppcheck
 
 gpsbabel.pdf.depends = FORCE
-gpsbabel.pdf.commands += perl xmldoc/makedoc && 
+gpsbabel.pdf.commands += perl xmldoc/makedoc &&
 gpsbabel.pdf.commands += xmlwf xmldoc/readme.xml && #check for well-formedness
 gpsbabel.pdf.commands += xmllint --noout --valid xmldoc/readme.xml &&   #validate
 gpsbabel.pdf.commands += xsltproc -o gpsbabel.fo xmldoc/babelpdf.xsl xmldoc/readme.xml &&
diff --git a/defs.h b/defs.h
index 604d02528..39e0516d3 100644
--- a/defs.h
+++ b/defs.h
@@ -31,10 +31,16 @@
 #if HAVE_CONFIG_H
 #include "config.h"
 #endif
-#if HAVE_LIBZ
-#include <zlib.h>                 // doesn't really belong here, but is missing elsewhere.
-#elif !ZLIB_INHIBITED
-#include "zlib.h"                 // doesn't really belong here, but is missing elsewhere.
+#ifdef ZLIB_H_SYSTEM_INCLUDE
+#  include <zlib.h>                   // doesn't really belong here, but is missing elsewhere.
+#elif ZLIB_H_LOCAL_INCLUDE
+#  include "zlib/zlib.h"              // doesn't really belong here, but is missing elsewhere.
+#else
+#  if HAVE_LIBZ
+#    include <zlib.h>                 // doesn't really belong here, but is missing elsewhere.
+#  elif !ZLIB_INHIBITED
+#    include "zlib.h"                 // doesn't really belong here, but is missing elsewhere.
+#  endif
 #endif
 
 #include <QtCore/QDebug>          // for QDebug
diff --git a/jeeps/gpslibusb.cc b/jeeps/gpslibusb.cc
index 3de965003..401f9be2b 100644
--- a/jeeps/gpslibusb.cc
+++ b/jeeps/gpslibusb.cc
@@ -28,12 +28,15 @@
 #include "config.h"
 #endif
 #if HAVE_LIBUSB_1_0
+#ifdef LIBUSB_H_INCLUDE
+#  include LIBUSB_H_INCLUDE
+#else
 #  if __APPLE__
-// We use our own libusb.
 #    include "mac/libusb/libusb.h"
 #  else
 #    include <libusb-1.0/libusb.h>
 #  endif
+#endif
 #include "../defs.h"
 #include "garminusb.h"
 #include "gpsdevice.h"
diff --git a/jeeps/gpsusbstub.cc b/jeeps/gpsusbstub.cc
index 086ae7a9b..d6f390268 100644
--- a/jeeps/gpsusbstub.cc
+++ b/jeeps/gpsusbstub.cc
@@ -34,7 +34,7 @@ typedef struct gpsdevh gpsdevh;
 int
 gusb_init(const char* portname, gpsdevh** dh)
 {
-  Fatal() << no_usb;
+  fatal(FatalMsg() << no_usb);
   return 0;
 }
 
diff --git a/libusb.pri b/libusb.pri
new file mode 100644
index 000000000..0345f6546
--- /dev/null
+++ b/libusb.pri
@@ -0,0 +1,64 @@
+macx|linux|openbsd {
+  !defined(WITH_LIBUSB, var) {
+    macx: WITH_LIBUSB = included
+    linux|openbsd: WITH_LIBUSB = system
+  }
+  equals(WITH_LIBUSB, no) {
+    JEEPS += jeeps/gpsusbstub.cc
+  } else {
+    DEFINES += HAVE_LIBUSB_1_0
+    JEEPS += jeeps/gpslibusb.cc
+    equals(WITH_LIBUSB, pkgconfig) {
+      message("Using libusb-1.0 found by pkg-config")
+      PKGCONFIG += libusb-1.0
+      DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
+    } else {
+      linux|openbsd {
+        equals(WITH_LIBUSB, system) {
+          LIBS += "-lusb-1.0"
+          DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb-1.0/libusb.h>)
+        } else:equals(WITH_LIBUSB, custom) {
+          message("libusb-1.0 is enabled but but must be manually configured")
+          message("  e.g. qmake WITH_LIBUSB=custom LIBS+=... INCLUDEPATH+=...")
+          DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
+        } else {
+          error("WITH_LIBUSB=no|pkgconfig|system*|custom");
+        }
+      }
+
+      macx {
+        equals(WITH_LIBUSB, included) {
+          # TODO: It would be better to create an archive and link to it
+          #       to separate library build requirements from gpsbabel requirements.
+          DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(\"mac/libusb/libusb.h\")
+          LIBS += -lobjc -framework IOKit -framework CoreFoundation
+          INCLUDEPATH += mac/libusb \
+                         mac/libusb/Xcode
+          SOURCES += mac/libusb/core.c \
+                     mac/libusb/descriptor.c \
+                     mac/libusb/hotplug.c \
+                     mac/libusb/io.c \
+                     mac/libusb/strerror.c \
+                     mac/libusb/sync.c \
+                     mac/libusb/os/darwin_usb.c \
+                     mac/libusb/os/poll_posix.c \
+                     mac/libusb/os/threads_posix.c
+          HEADERS += mac/libusb/hotplug.h \
+                     mac/libusb/libusb.h \
+                     mac/libusb/libusbi.h \
+                     mac/libusb/version.h \
+                     mac/libusb/version_nano.h \
+                     mac/libusb/os/darwin_usb.h \
+                     mac/libusb/os/poll_posix.h \
+                     mac/libusb/os/threads_posix.h
+        } else:equals(WITH_LIBUSB, custom) {
+          message("libusb-1.0 is enabled but but must be manually configured")
+          message("  e.g. qmake WITH_LIBUSB=custom LIBS+=... INCLUDEPATH+=...")
+          DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
+        } else {
+          error("WITH_LIBUSB=no|pkgconfig|included*|custom");
+        }
+      }
+    }
+  }
+}
diff --git a/shape.cc b/shape.cc
index 933eb95a4..8c30cd54a 100644
--- a/shape.cc
+++ b/shape.cc
@@ -32,7 +32,13 @@
 
 #include "defs.h"
 #include "shape.h"
-#include "shapelib/shapefil.h"
+#ifdef SHAPEFILE_H_SYSTEM_INCLUDE
+#  include <shapefil.h>
+#elif SHAPEFILE_H_LOCAL_INCLUDE
+#  include "shapelib/shapefil.h"
+#else
+#  include "shapelib/shapefil.h"
+#endif
 
 
 #if SHAPELIB_ENABLED
diff --git a/shape.h b/shape.h
index 0ce05af7c..3c0e7a746 100644
--- a/shape.h
+++ b/shape.h
@@ -27,7 +27,13 @@
 
 #include "defs.h"               // for arglist_t, ARGTYPE_STRING, Waypoint, route_head, CET_CHARSET_ASCII, FF_CAP_RW_ALL, ff_cap, ff_type, ff_type_file
 #include "format.h"             // for Format
-#include "shapelib/shapefil.h"  // for DBFHandle, SHPAPI_CALL, SHPHandle
+#ifdef SHAPEFILE_H_SYSTEM_INCLUDE
+#  include <shapefil.h>
+#elif SHAPEFILE_H_LOCAL_INCLUDE
+#  include "shapelib/shapefil.h"
+#else
+#  include "shapelib/shapefil.h"  // for DBFHandle, SHPAPI_CALL, SHPHandle
+#endif
 
 
 #if SHAPELIB_ENABLED
diff --git a/shapelib.pri b/shapelib.pri
new file mode 100644
index 000000000..cd2f2081d
--- /dev/null
+++ b/shapelib.pri
@@ -0,0 +1,27 @@
+!defined(WITH_SHAPELIB, var):WITH_SHAPELIB = included
+equals(WITH_SHAPELIB, no) {
+  message("shapelib disabled")
+} else {
+  DEFINES += SHAPELIB_ENABLED
+  equals(WITH_SHAPELIB, pkgconfig) {
+    message("Using shapelib found by pkg-config")
+    PKGCONFIG += shapelib
+    # This gets trashed on windows with qmake -tp vc:
+    #DEFINES += SHAPEFIL_H_INCLUDE=$$shell_quote(<shapefil.h>)
+    DEFINES += SHAPEFIL_H_SYSTEM_INCLUDE
+  } else:equals(WITH_SHAPELIB, included) {
+    # TODO: It would be better to create an archive and link to it
+    #       to separate library build requirements from gpsbabel requirements.
+    SOURCES += shapelib/shpopen.c shapelib/dbfopen.c shapelib/safileio.c
+    #DEFINES += SHAPEFIL_H_INCLUDE=$$shell_quote(\"shapelib/shapefil.h\")
+    DEFINES += SHAPEFIL_H_LOCAL_INCLUDE
+    HEADERS += shapelib/shapefil.h
+  } else:equals(WITH_SHAPELIB, custom) {
+    message("shapelib is enabled but but must be manually configured")
+    message("  e.g. qmake WITH_SHAPELIB=custom LIBS+=... INCLUDEPATH+=...")
+    #DEFINES += SHAPEFIL_H_INCLUDE=$$shell_quote(<shapefil.h>)
+    DEFINES += SHAPEFIL_H_SYSTEM_INCLUDE
+  } else {
+    error("WITH_SHAPELIB=no|pkgconfig|included*|custom");
+  }
+}
diff --git a/zlib.pri b/zlib.pri
new file mode 100644
index 000000000..ecf1dce7e
--- /dev/null
+++ b/zlib.pri
@@ -0,0 +1,52 @@
+!defined(WITH_ZLIB, var):WITH_ZLIB = included
+equals(WITH_ZLIB, no) {
+  message("zlib disabled")
+  DEFINES += ZLIB_INHIBITED
+} else {
+  equals(WITH_ZLIB, pkgconfig) {
+    message("Using zlib found by pkg-config")
+    PKGCONFIG += $$shell_quote(zlib > 1.2.8)
+    # This gets trashed on windows with qmake -tp vc:
+    #DEFINES += ZLIB_H_INCLUDE=$$shell_quote(<zlib.h>)
+    DEFINES += ZLIB_H_SYSTEM_INCLUDE
+  } else:equals(WITH_ZLIB, included) {
+    # TODO: It would be better to create an archive and link to it
+    #       to separate library build requirements from gpsbabel requirements.
+    SOURCES += zlib/adler32.c \
+               zlib/compress.c \
+               zlib/crc32.c \
+               zlib/deflate.c \
+               zlib/inffast.c \
+               zlib/inflate.c \
+               zlib/infback.c \
+               zlib/inftrees.c \
+               zlib/trees.c \
+               zlib/uncompr.c \
+               zlib/gzlib.c \
+               zlib/gzclose.c \
+               zlib/gzread.c \
+               zlib/gzwrite.c \
+               zlib/zutil.c
+    #DEFINES += ZLIB_H_INCLUDE=$$shell_quote(\"zlib/zlib.h\")
+    DEFINES += ZLIB_H_LOCAL_INCLUDE
+    INCLUDEPATH += zlib
+    HEADERS += zlib/crc32.h \
+               zlib/deflate.h \
+               zlib/gzguts.h \
+               zlib/inffast.h \
+               zlib/inffixed.h \
+               zlib/inflate.h \
+               zlib/inftrees.h \
+               zlib/trees.h \
+               zlib/zconf.h \
+               zlib/zlib.h \
+               zlib/zutil.h
+  } else:equals(WITH_ZLIB, custom) {
+    message("zlib is enabled but but must be manually configured")
+    message("  e.g. qmake WITH_ZLIB=custom LIBS+=... INCLUDEPATH+=...")
+    #DEFINES += ZLIB_H_INCLUDE=$$shell_quote(<zlib.h>)
+    DEFINES += ZLIB_H_SYSTEM_INCLUDE
+  } else {
+    error("WITH_ZLIB=no|pkgconfig|included*|custom");
+  }
+}

From 58aaee54c8f81f879f68876a25bab3f38519fb75 Mon Sep 17 00:00:00 2001
From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date: Sat, 25 Jul 2020 06:27:28 -0600
Subject: [PATCH 2/5] fix no libusb along lines of #610

---
 jeeps/gpsusbstub.cc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/jeeps/gpsusbstub.cc b/jeeps/gpsusbstub.cc
index d6f390268..8ffea63e9 100644
--- a/jeeps/gpsusbstub.cc
+++ b/jeeps/gpsusbstub.cc
@@ -25,7 +25,6 @@
 #endif
 
 #include "../defs.h"
-#include "src/core/logging.h"
 
 #if !HAVE_LIBUSB_1_0
 
@@ -34,7 +33,7 @@ typedef struct gpsdevh gpsdevh;
 int
 gusb_init(const char* portname, gpsdevh** dh)
 {
-  fatal(FatalMsg() << no_usb);
+  fatal(no_usb);
   return 0;
 }
 

From 1c8f71a0d4102b9d6e3309c635b31b160781d7c1 Mon Sep 17 00:00:00 2001
From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date: Sun, 26 Jul 2020 09:16:23 -0600
Subject: [PATCH 3/5] correct inclusion of shapelib headers.

---
 shape.cc | 4 ++--
 shape.h  | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/shape.cc b/shape.cc
index 8c30cd54a..a57ea52b4 100644
--- a/shape.cc
+++ b/shape.cc
@@ -32,9 +32,9 @@
 
 #include "defs.h"
 #include "shape.h"
-#ifdef SHAPEFILE_H_SYSTEM_INCLUDE
+#ifdef SHAPEFIL_H_SYSTEM_INCLUDE
 #  include <shapefil.h>
-#elif SHAPEFILE_H_LOCAL_INCLUDE
+#elif SHAPEFIL_H_LOCAL_INCLUDE
 #  include "shapelib/shapefil.h"
 #else
 #  include "shapelib/shapefil.h"
diff --git a/shape.h b/shape.h
index 3c0e7a746..2c2852161 100644
--- a/shape.h
+++ b/shape.h
@@ -27,9 +27,9 @@
 
 #include "defs.h"               // for arglist_t, ARGTYPE_STRING, Waypoint, route_head, CET_CHARSET_ASCII, FF_CAP_RW_ALL, ff_cap, ff_type, ff_type_file
 #include "format.h"             // for Format
-#ifdef SHAPEFILE_H_SYSTEM_INCLUDE
+#ifdef SHAPEFIL_H_SYSTEM_INCLUDE
 #  include <shapefil.h>
-#elif SHAPEFILE_H_LOCAL_INCLUDE
+#elif SHAPEFIL_H_LOCAL_INCLUDE
 #  include "shapelib/shapefil.h"
 #else
 #  include "shapelib/shapefil.h"  // for DBFHandle, SHPAPI_CALL, SHPHandle

From c342972dc2cc04348cc6caf0d808ed0f39f9aed9 Mon Sep 17 00:00:00 2001
From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date: Mon, 27 Jul 2020 09:39:37 -0600
Subject: [PATCH 4/5] more closely match original includes

instead of trying to use HAVE_*, ENABLED_* *_INHIBITED and
-I options in a consistent manner.

We can revisit this after the demise of configure.
---
 defs.h             | 14 ++++----------
 jeeps/gpslibusb.cc |  8 +++++++-
 shape.cc           |  6 ++----
 shape.h            |  6 ++----
 shapelib.pri       |  9 ++-------
 zlib.pri           |  9 ++-------
 6 files changed, 19 insertions(+), 33 deletions(-)

diff --git a/defs.h b/defs.h
index 39e0516d3..604d02528 100644
--- a/defs.h
+++ b/defs.h
@@ -31,16 +31,10 @@
 #if HAVE_CONFIG_H
 #include "config.h"
 #endif
-#ifdef ZLIB_H_SYSTEM_INCLUDE
-#  include <zlib.h>                   // doesn't really belong here, but is missing elsewhere.
-#elif ZLIB_H_LOCAL_INCLUDE
-#  include "zlib/zlib.h"              // doesn't really belong here, but is missing elsewhere.
-#else
-#  if HAVE_LIBZ
-#    include <zlib.h>                 // doesn't really belong here, but is missing elsewhere.
-#  elif !ZLIB_INHIBITED
-#    include "zlib.h"                 // doesn't really belong here, but is missing elsewhere.
-#  endif
+#if HAVE_LIBZ
+#include <zlib.h>                 // doesn't really belong here, but is missing elsewhere.
+#elif !ZLIB_INHIBITED
+#include "zlib.h"                 // doesn't really belong here, but is missing elsewhere.
 #endif
 
 #include <QtCore/QDebug>          // for QDebug
diff --git a/jeeps/gpslibusb.cc b/jeeps/gpslibusb.cc
index 401f9be2b..bcdd8d141 100644
--- a/jeeps/gpslibusb.cc
+++ b/jeeps/gpslibusb.cc
@@ -29,9 +29,15 @@
 #endif
 #if HAVE_LIBUSB_1_0
 #ifdef LIBUSB_H_INCLUDE
+// Warning: LIBUSB_H_INCLUDE necessarily includes bracket or double quote
+//          characters.
+//          qmake -tp vc doesn't properly quote these characters, and the
+//          produced project file is invalid.  However, we don't use libusb
+//          at all on windows, so this isn't an issue in this application.
 #  include LIBUSB_H_INCLUDE
-#else
+#else  // TODO: delete this clause when configure is removed and CMakeLists updated.
 #  if __APPLE__
+// We use our own libusb.
 #    include "mac/libusb/libusb.h"
 #  else
 #    include <libusb-1.0/libusb.h>
diff --git a/shape.cc b/shape.cc
index a57ea52b4..139a7ee9d 100644
--- a/shape.cc
+++ b/shape.cc
@@ -32,16 +32,14 @@
 
 #include "defs.h"
 #include "shape.h"
-#ifdef SHAPEFIL_H_SYSTEM_INCLUDE
+#if SHAPELIB_ENABLED
+#if HAVE_LIBSHAPE
 #  include <shapefil.h>
-#elif SHAPEFIL_H_LOCAL_INCLUDE
-#  include "shapelib/shapefil.h"
 #else
 #  include "shapelib/shapefil.h"
 #endif
 
 
-#if SHAPELIB_ENABLED
 #define MYNAME "shape"
 
 /************************************************************************/
diff --git a/shape.h b/shape.h
index 2c2852161..38c1208c0 100644
--- a/shape.h
+++ b/shape.h
@@ -27,16 +27,14 @@
 
 #include "defs.h"               // for arglist_t, ARGTYPE_STRING, Waypoint, route_head, CET_CHARSET_ASCII, FF_CAP_RW_ALL, ff_cap, ff_type, ff_type_file
 #include "format.h"             // for Format
-#ifdef SHAPEFIL_H_SYSTEM_INCLUDE
+#if SHAPELIB_ENABLED
+#if HAVE_LIBSHAPE
 #  include <shapefil.h>
-#elif SHAPEFIL_H_LOCAL_INCLUDE
-#  include "shapelib/shapefil.h"
 #else
 #  include "shapelib/shapefil.h"  // for DBFHandle, SHPAPI_CALL, SHPHandle
 #endif
 
 
-#if SHAPELIB_ENABLED
 class ShapeFormat : public Format
 {
 public:
diff --git a/shapelib.pri b/shapelib.pri
index cd2f2081d..806c2966e 100644
--- a/shapelib.pri
+++ b/shapelib.pri
@@ -6,21 +6,16 @@ equals(WITH_SHAPELIB, no) {
   equals(WITH_SHAPELIB, pkgconfig) {
     message("Using shapelib found by pkg-config")
     PKGCONFIG += shapelib
-    # This gets trashed on windows with qmake -tp vc:
-    #DEFINES += SHAPEFIL_H_INCLUDE=$$shell_quote(<shapefil.h>)
-    DEFINES += SHAPEFIL_H_SYSTEM_INCLUDE
+    DEFINES += HAVE_LIBSHAPE
   } else:equals(WITH_SHAPELIB, included) {
     # TODO: It would be better to create an archive and link to it
     #       to separate library build requirements from gpsbabel requirements.
     SOURCES += shapelib/shpopen.c shapelib/dbfopen.c shapelib/safileio.c
-    #DEFINES += SHAPEFIL_H_INCLUDE=$$shell_quote(\"shapelib/shapefil.h\")
-    DEFINES += SHAPEFIL_H_LOCAL_INCLUDE
     HEADERS += shapelib/shapefil.h
   } else:equals(WITH_SHAPELIB, custom) {
     message("shapelib is enabled but but must be manually configured")
     message("  e.g. qmake WITH_SHAPELIB=custom LIBS+=... INCLUDEPATH+=...")
-    #DEFINES += SHAPEFIL_H_INCLUDE=$$shell_quote(<shapefil.h>)
-    DEFINES += SHAPEFIL_H_SYSTEM_INCLUDE
+    DEFINES += HAVE_LIBSHAPE
   } else {
     error("WITH_SHAPELIB=no|pkgconfig|included*|custom");
   }
diff --git a/zlib.pri b/zlib.pri
index ecf1dce7e..36dcbb0c4 100644
--- a/zlib.pri
+++ b/zlib.pri
@@ -6,9 +6,7 @@ equals(WITH_ZLIB, no) {
   equals(WITH_ZLIB, pkgconfig) {
     message("Using zlib found by pkg-config")
     PKGCONFIG += $$shell_quote(zlib > 1.2.8)
-    # This gets trashed on windows with qmake -tp vc:
-    #DEFINES += ZLIB_H_INCLUDE=$$shell_quote(<zlib.h>)
-    DEFINES += ZLIB_H_SYSTEM_INCLUDE
+    DEFINES += HAVE_LIBZ
   } else:equals(WITH_ZLIB, included) {
     # TODO: It would be better to create an archive and link to it
     #       to separate library build requirements from gpsbabel requirements.
@@ -27,8 +25,6 @@ equals(WITH_ZLIB, no) {
                zlib/gzread.c \
                zlib/gzwrite.c \
                zlib/zutil.c
-    #DEFINES += ZLIB_H_INCLUDE=$$shell_quote(\"zlib/zlib.h\")
-    DEFINES += ZLIB_H_LOCAL_INCLUDE
     INCLUDEPATH += zlib
     HEADERS += zlib/crc32.h \
                zlib/deflate.h \
@@ -44,8 +40,7 @@ equals(WITH_ZLIB, no) {
   } else:equals(WITH_ZLIB, custom) {
     message("zlib is enabled but but must be manually configured")
     message("  e.g. qmake WITH_ZLIB=custom LIBS+=... INCLUDEPATH+=...")
-    #DEFINES += ZLIB_H_INCLUDE=$$shell_quote(<zlib.h>)
-    DEFINES += ZLIB_H_SYSTEM_INCLUDE
+    DEFINES += HAVE_LIBZ
   } else {
     error("WITH_ZLIB=no|pkgconfig|included*|custom");
   }

From 303d0d9f3f7bc2fc6c426ba2621236175b8e3657 Mon Sep 17 00:00:00 2001
From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date: Mon, 27 Jul 2020 14:53:55 -0600
Subject: [PATCH 5/5] add qmake message when libusb is disabled.

---
 libusb.pri | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libusb.pri b/libusb.pri
index 0345f6546..477929185 100644
--- a/libusb.pri
+++ b/libusb.pri
@@ -4,6 +4,7 @@ macx|linux|openbsd {
     linux|openbsd: WITH_LIBUSB = system
   }
   equals(WITH_LIBUSB, no) {
+    message("libusb-1.0 disabled")
     JEEPS += jeeps/gpsusbstub.cc
   } else {
     DEFINES += HAVE_LIBUSB_1_0
