diff -uNr OpenSP-1.5.2.orig/include/IList.h OpenSP-1.5.2/include/IList.h
--- OpenSP-1.5.2.orig/include/IList.h	2005-07-21 10:04:38.000000000 -0400
+++ OpenSP-1.5.2/include/IList.h	2017-08-13 09:56:12.000000000 -0400
@@ -26,8 +26,8 @@
   void swap(IList<T> &list) { IListBase::swap(list); }
   T *head() const { return (T *)IListBase::head(); }
   T *get() { return (T *)IListBase::get(); }
-  IListBase::clear;
-  IListBase::empty;
+  using IListBase::clear;
+  using IListBase::empty;
 friend class IListIter<T>;
 private:
   IList(const IList<T> &);	// undefined
diff -uNr OpenSP-1.5.2.orig/include/IListIter.h OpenSP-1.5.2/include/IListIter.h
--- OpenSP-1.5.2.orig/include/IListIter.h	2005-07-21 10:04:38.000000000 -0400
+++ OpenSP-1.5.2/include/IListIter.h	2017-08-13 09:56:12.000000000 -0400
@@ -17,8 +17,8 @@
   IListIter(const IList<T> &list) : IListIterBase(list) { }
   T *cur() const { return (T *)IListIterBase::cur(); }
   
-  IListIterBase::next;
-  IListIterBase::done;
+  using IListIterBase::next;
+  using IListIterBase::done;
 };
 
 #ifdef SP_NAMESPACE
diff -uNr OpenSP-1.5.2.orig/include/Ptr.h OpenSP-1.5.2/include/Ptr.h
--- OpenSP-1.5.2.orig/include/Ptr.h	2005-07-21 10:04:39.000000000 -0400
+++ OpenSP-1.5.2/include/Ptr.h	2017-08-13 09:56:12.000000000 -0400
@@ -69,8 +69,8 @@
   const T *operator->() const { return Ptr<T>::pointer(); }
   const T &operator*() const { return *Ptr<T>::pointer(); }
   void swap(ConstPtr<T> &p) { Ptr<T>::swap(p); }
-  Ptr<T>::isNull;
-  Ptr<T>::clear;
+  using Ptr<T>::isNull;
+  using Ptr<T>::clear;
   Boolean operator==(const Ptr<T> &p) const { return Ptr<T>::operator==(p); }
   Boolean operator!=(const Ptr<T> &p) const { return Ptr<T>::operator!=(p); }
   Boolean operator==(const ConstPtr<T> &p) const {
diff -uNr OpenSP-1.5.2.orig/include/Vector.cxx OpenSP-1.5.2/include/Vector.cxx
--- OpenSP-1.5.2.orig/include/Vector.cxx	2005-05-14 05:17:15.000000000 -0400
+++ OpenSP-1.5.2/include/Vector.cxx	2017-08-13 09:56:12.000000000 -0400
@@ -87,7 +87,7 @@
   size_t n = q2 - q1;
   reserve(size_ + n);
   if (i != size_)
-    memmove(ptr_ + i + n, ptr_ + i, (size_ - i)*sizeof(T));
+    memmove((void*)(ptr_ + i + n), (void*)(ptr_ + i), (size_ - i)*sizeof(T));
   for (T *pp = ptr_ + i; q1 != q2; q1++, pp++) {
     (void)new (pp) T(*q1);
     size_++;
@@ -131,7 +131,7 @@
   for (const T *p = p1; p != p2; p++)
     ((X *)p)->~X();
   if (p2 != ptr_ + size_)
-    memmove((T *)p1, p2, ((const T *)(ptr_ + size_) - p2)*sizeof(T));
+    memmove((void*)(T *)p1, (void*)p2, ((const T *)(ptr_ + size_) - p2)*sizeof(T));
   size_ -= p2 - p1;
   return (T *)p1;
 }
@@ -147,7 +147,7 @@
   void *p = ::operator new(newAlloc * sizeof(T));
   alloc_ = newAlloc;
   if (ptr_) {
-    memcpy(p, ptr_, size_*sizeof(T));
+    memcpy(p, (void*)ptr_, size_*sizeof(T));
     ::operator delete((void *)ptr_);
   }
   ptr_ = (T *)p;
diff -uNr OpenSP-1.5.2.orig/intl/vasnprintf.c OpenSP-1.5.2/intl/vasnprintf.c
--- OpenSP-1.5.2.orig/intl/vasnprintf.c	2005-08-26 16:29:21.000000000 -0400
+++ OpenSP-1.5.2/intl/vasnprintf.c	2017-08-13 09:56:51.000000000 -0400
@@ -558,7 +558,7 @@
 		    break;
 		  }
 		*p = dp->conversion;
-#if USE_SNPRINTF
+#if USE_SNPRINTF && !defined(__APPLE__)
 		p[1] = '%';
 		p[2] = 'n';
 		p[3] = '\0';
diff -uNr OpenSP-1.5.2.orig/lib/MessageTable.cxx OpenSP-1.5.2/lib/MessageTable.cxx
--- OpenSP-1.5.2.orig/lib/MessageTable.cxx	2005-07-21 10:05:17.000000000 -0400
+++ OpenSP-1.5.2/lib/MessageTable.cxx	2017-08-13 09:56:12.000000000 -0400
@@ -94,12 +94,7 @@
 #else /* not SP_NO_MESSAGE_TEXT */
 
 #ifdef SP_HAVE_GETTEXT
-extern "C" {
-extern char *dgettext(const char *, const char *);
-extern char *gettext(const char *);
-extern char *textdomain(const char *);
-extern char *bindtextdomain(const char *, const char *);
-}
+#include <libintl.h>
 
 #include <stdlib.h>
 
diff -uNr OpenSP-1.5.2.orig/lib/Parser.h OpenSP-1.5.2/lib/Parser.h
--- OpenSP-1.5.2.orig/lib/Parser.h	2005-07-21 10:05:17.000000000 -0400
+++ OpenSP-1.5.2/lib/Parser.h	2017-08-13 09:56:12.000000000 -0400
@@ -62,16 +62,16 @@
   Parser(const SgmlParser::Params &);
   Event *nextEvent();
   void parseAll(EventHandler &, const volatile sig_atomic_t *cancelPtr);
-  ParserState::sdPointer;
-  ParserState::instanceSyntaxPointer;
-  ParserState::prologSyntaxPointer;
-  ParserState::activateLinkType;
-  ParserState::allLinkTypesActivated;
-  ParserState::entityManager;
-  ParserState::entityCatalog;
-  ParserState::baseDtd;
-  ParserState::options;
-  ParserState::instantiateDtd;
+  using ParserState::sdPointer;
+  using ParserState::instanceSyntaxPointer;
+  using ParserState::prologSyntaxPointer;
+  using ParserState::activateLinkType;
+  using ParserState::allLinkTypesActivated;
+  using ParserState::entityManager;
+  using ParserState::entityCatalog;
+  using ParserState::baseDtd;
+  using ParserState::options;
+  using ParserState::instantiateDtd;
   friend class PiAttspecParser;
 private:
   Parser(const Parser &);	// undefined
diff -uNr OpenSP-1.5.2.orig/lib/parseDecl.cxx OpenSP-1.5.2/lib/parseDecl.cxx
--- OpenSP-1.5.2.orig/lib/parseDecl.cxx	2005-07-21 10:05:22.000000000 -0400
+++ OpenSP-1.5.2/lib/parseDecl.cxx	2017-08-13 09:56:12.000000000 -0400
@@ -3226,7 +3226,7 @@
   IdLinkRuleGroup *group = defComplexLpd().lookupCreateIdLink(id);
   size_t nRules = group->nLinkRules();
   if ((nRules == 1 && group->linkRule(0).attributes().nSpec() == 0)
-      || nRules >= 1 && rule.attributes().nSpec() == 0)
+      || (nRules >= 1 && rule.attributes().nSpec() == 0))
     message(ParserMessages::multipleIdLinkRuleAttribute,
 	    StringMessageArg(id));
   group->addLinkRule(rule);
@@ -3239,7 +3239,7 @@
   size_t nRules = linkSet->nLinkRules(sourceElement);
   if ((nRules == 1
        && linkSet->linkRule(sourceElement, 0).attributes().nSpec() == 0)
-      || nRules >= 1 && linkRule->attributes().nSpec() == 0)
+      || (nRules >= 1 && linkRule->attributes().nSpec() == 0))
     message(ParserMessages::multipleLinkRuleAttribute,
 	    StringMessageArg(sourceElement->name()));
   linkSet->addLinkRule(sourceElement, linkRule);
--- OpenSP-1.5.2-orig/tests/Makefile.am	2005-11-05 03:05:21.000000000 -0600
+++ OpenSP-1.5.2/tests/Makefile.am	2020-09-21 19:37:27.000000000 -0500
@@ -9,19 +9,18 @@
 # blank value should prevent those tests from running and allow a make check
 # to complete with a zero exit code.
 
-TESTS_THAT_PASS = onsgmls-1 onsgmls-2 \
-osnorm-1 \
+TESTS_THAT_PASS = osnorm-1 \
 af-1 af-2 af-3 af-4 af-5 af-6 af-12 af-13 af-14 af-15 af-16 \
 af-18 af-19
 
 # These tests currently fail, but should not.  The problems need to be tracked
 # down and fixed, then the tests moved to TESTS_THAT_PASS.
-TESTS_THAT_FAIL = catalog-2 \
+TESTS_THAT_FAIL = catalog-1 catalog-2 onsgmls-1 onsgmls-2 \
 af-7 af-8 af-9 af-10 af-11
 
 SHOWSTOPPERS = $(TESTS_THAT_FAIL)
 
-DTDDECL_TEST = catalog-1
+DTDDECL_TEST = 
 
 TESTS = $(TESTS_THAT_PASS) $(SHOWSTOPPERS)
 
@@ -35,8 +34,7 @@
 TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) \
 	PATH=.:../nsgmls:../sgmlnorm:../sx:../spent:../spcat:../spam:$$PATH \
 	ONSGMLS=`echo onsgmls|sed '$(transform)'`\
-	OSGMLNORM=`echo osgmlnorm|sed '$(transform)'`\
-	$(SHELL)
+	OSGMLNORM=`echo osgmlnorm|sed '$(transform)'`
 
 # Two auxiliary programs used by the tests.
 INCLUDES = -I.. -I$(top_srcdir)/lib -I$(top_srcdir)/intl
