Commit 32e30a3af2f3198e1522a42bdde8faa1cd1a88df

Authored by Jay Berkenbilt
1 parent b90adb1c

Resolve QPDF{Name,Number} tree helper linker issues (fixes #745)

This is a guess...I'm not sure exactly why there are linker issues or
how to reproduce them.
include/qpdf/QPDFNameTreeObjectHelper.hh
@@ -42,7 +42,7 @@ class NNTreeImpl; @@ -42,7 +42,7 @@ class NNTreeImpl;
42 class NNTreeIterator; 42 class NNTreeIterator;
43 class NNTreeDetails; 43 class NNTreeDetails;
44 44
45 -class QPDFNameTreeObjectHelper: public QPDFObjectHelper 45 +class QPDF_DLL_CLASS QPDFNameTreeObjectHelper: public QPDFObjectHelper
46 { 46 {
47 public: 47 public:
48 // The qpdf object is required so that this class can issue 48 // The qpdf object is required so that this class can issue
@@ -55,7 +55,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper @@ -55,7 +55,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
55 static QPDFNameTreeObjectHelper newEmpty(QPDF&, bool auto_repair = true); 55 static QPDFNameTreeObjectHelper newEmpty(QPDF&, bool auto_repair = true);
56 56
57 QPDF_DLL 57 QPDF_DLL
58 - virtual ~QPDFNameTreeObjectHelper() = default; 58 + virtual ~QPDFNameTreeObjectHelper();
59 59
60 // Return whether the number tree has an explicit entry for this 60 // Return whether the number tree has an explicit entry for this
61 // number. 61 // number.
@@ -67,7 +67,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper @@ -67,7 +67,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
67 QPDF_DLL 67 QPDF_DLL
68 bool findObject(std::string const& utf8, QPDFObjectHandle& oh); 68 bool findObject(std::string const& utf8, QPDFObjectHandle& oh);
69 69
70 - class iterator 70 + class QPDF_DLL_PRIVATE iterator
71 { 71 {
72 friend class QPDFNameTreeObjectHelper; 72 friend class QPDFNameTreeObjectHelper;
73 73
@@ -181,7 +181,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper @@ -181,7 +181,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
181 void setSplitThreshold(int); 181 void setSplitThreshold(int);
182 182
183 private: 183 private:
184 - class Members 184 + class QPDF_DLL_PRIVATE Members
185 { 185 {
186 friend class QPDFNameTreeObjectHelper; 186 friend class QPDFNameTreeObjectHelper;
187 187
include/qpdf/QPDFNumberTreeObjectHelper.hh
@@ -39,7 +39,7 @@ class NNTreeImpl; @@ -39,7 +39,7 @@ class NNTreeImpl;
39 class NNTreeIterator; 39 class NNTreeIterator;
40 class NNTreeDetails; 40 class NNTreeDetails;
41 41
42 -class QPDFNumberTreeObjectHelper: public QPDFObjectHelper 42 +class QPDF_DLL_CLASS QPDFNumberTreeObjectHelper: public QPDFObjectHelper
43 { 43 {
44 public: 44 public:
45 // The qpdf object is required so that this class can issue 45 // The qpdf object is required so that this class can issue
@@ -49,7 +49,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper @@ -49,7 +49,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
49 QPDFObjectHandle, QPDF&, bool auto_repair = true); 49 QPDFObjectHandle, QPDF&, bool auto_repair = true);
50 50
51 QPDF_DLL 51 QPDF_DLL
52 - virtual ~QPDFNumberTreeObjectHelper() = default; 52 + virtual ~QPDFNumberTreeObjectHelper();
53 53
54 // Create an empty number tree 54 // Create an empty number tree
55 QPDF_DLL 55 QPDF_DLL
@@ -85,7 +85,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper @@ -85,7 +85,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
85 bool findObjectAtOrBelow( 85 bool findObjectAtOrBelow(
86 numtree_number idx, QPDFObjectHandle& oh, numtree_number& offset); 86 numtree_number idx, QPDFObjectHandle& oh, numtree_number& offset);
87 87
88 - class iterator 88 + class QPDF_DLL_PRIVATE iterator
89 { 89 {
90 friend class QPDFNumberTreeObjectHelper; 90 friend class QPDFNumberTreeObjectHelper;
91 91
@@ -200,7 +200,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper @@ -200,7 +200,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
200 void setSplitThreshold(int); 200 void setSplitThreshold(int);
201 201
202 private: 202 private:
203 - class Members 203 + class QPDF_DLL_PRIVATE Members
204 { 204 {
205 friend class QPDFNumberTreeObjectHelper; 205 friend class QPDFNumberTreeObjectHelper;
206 typedef QPDFNumberTreeObjectHelper::numtree_number numtree_number; 206 typedef QPDFNumberTreeObjectHelper::numtree_number numtree_number;
libqpdf/QPDFNameTreeObjectHelper.cc
@@ -34,6 +34,13 @@ namespace @@ -34,6 +34,13 @@ namespace
34 34
35 static NameTreeDetails name_tree_details; 35 static NameTreeDetails name_tree_details;
36 36
  37 +QPDFNameTreeObjectHelper::~QPDFNameTreeObjectHelper()
  38 +{
  39 + // Must be explicit and not inline -- see QPDF_DLL_CLASS in
  40 + // README-maintainer. For this specific class, see github issue
  41 + // #745.
  42 +}
  43 +
37 QPDFNameTreeObjectHelper::Members::Members( 44 QPDFNameTreeObjectHelper::Members::Members(
38 QPDFObjectHandle& oh, QPDF& q, bool auto_repair) : 45 QPDFObjectHandle& oh, QPDF& q, bool auto_repair) :
39 impl(std::make_shared<NNTreeImpl>(name_tree_details, q, oh, auto_repair)) 46 impl(std::make_shared<NNTreeImpl>(name_tree_details, q, oh, auto_repair))
libqpdf/QPDFNumberTreeObjectHelper.cc
@@ -35,6 +35,13 @@ namespace @@ -35,6 +35,13 @@ namespace
35 35
36 static NumberTreeDetails number_tree_details; 36 static NumberTreeDetails number_tree_details;
37 37
  38 +QPDFNumberTreeObjectHelper::~QPDFNumberTreeObjectHelper()
  39 +{
  40 + // Must be explicit and not inline -- see QPDF_DLL_CLASS in
  41 + // README-maintainer. For this specific class, see github issue
  42 + // #745.
  43 +}
  44 +
38 QPDFNumberTreeObjectHelper::Members::Members( 45 QPDFNumberTreeObjectHelper::Members::Members(
39 QPDFObjectHandle& oh, QPDF& q, bool auto_repair) : 46 QPDFObjectHandle& oh, QPDF& q, bool auto_repair) :
40 impl(std::make_shared<NNTreeImpl>(number_tree_details, q, oh, auto_repair)) 47 impl(std::make_shared<NNTreeImpl>(number_tree_details, q, oh, auto_repair))