Commit a6c4b293b1c78125caa7327742ffbe631d42e09b

Authored by Jay Berkenbilt
1 parent 3dbab589

Clean up release notes for qpdf 11

Showing 2 changed files with 70 additions and 46 deletions
... ... @@ -4,6 +4,8 @@ Always
4 4  
5 5 * Evaluate issues tagged with `next` and `bug`. Remember to check
6 6 discussions and pull requests in addition to regular issues.
  7 +* When close to release, make sure external-libs is building and
  8 + follow instructions in ../external-libs/README
7 9  
8 10 Next
9 11 ====
... ...
manual/release-notes.rst
... ... @@ -6,14 +6,9 @@ Release Notes
6 6 For a detailed list of changes, please see the file
7 7 :file:`ChangeLog` in the source distribution.
8 8  
9   -11.0.0
10   - - Performance improvements
11   -
12   - - Many performance enhancements have been added. In developer
13   - performance benchmarks, gains on the order of 20% have been
14   - observed. Most of that work, including major optimization of
15   - qpdf's lexical and parsing layers, was done by M. Holger.
  9 +.. x.y.z: not yet released
16 10  
  11 +11.0.0: not yet released
17 12 - Replacement of ``PointerHolder`` with ``std::shared_ptr``
18 13  
19 14 - The qpdf-specific ``PointerHolder`` smart pointer implementation
... ... @@ -50,8 +45,8 @@ For a detailed list of changes, please see the file
50 45  
51 46 - Build replaced with cmake
52 47  
53   - - The old autoconf-based build has been replaced with CMake. Version
54   - 3.16 or newer is required. For all the details, please read
  48 + - The old autoconf-based build has been replaced with CMake. CMake
  49 + version 3.16 or newer is required. For details, please read
55 50 :ref:`installing` and, if you package qpdf for a distribution,
56 51 :ref:`packaging`.
57 52  
... ... @@ -87,6 +82,13 @@ For a detailed list of changes, please see the file
87 82 ``autopkgtest`` framework but can be used by others. See
88 83 :file:`pkg-test/README.md` for details.
89 84  
  85 + - Performance improvements
  86 +
  87 + - Many performance enhancements have been added. In developer
  88 + performance benchmarks, gains on the order of 20% have been
  89 + observed. Most of that work, including major optimization of
  90 + qpdf's lexical and parsing layers, was done by M. Holger.
  91 +
90 92 - CLI: breaking changes
91 93  
92 94 - The :qpdf:ref:`--show-encryption` flag now provides encryption
... ... @@ -114,13 +116,13 @@ For a detailed list of changes, please see the file
114 116 need your code to be backward compatible to qpdf versions prior
115 117 to 10.5.0, you can check that the preprocessor symbol
116 118 ``QPDF_MAJOR_VERSION`` is defined and ``>= 11``. As a stop-gap,
117   - you can `#define QPDF_OBJECT_NOWARN` to suppress the warning.
  119 + you can ``#define QPDF_OBJECT_NOWARN`` to suppress the warning.
118 120  
119   - - Pipeline::write now takes ``unsigned char const*`` instead of
120   - ``unsigned char*``. Callers don't need to change anything, but
121   - you no longer have to pass writable pointers to pipelines. If
122   - you've implemented your own pipeline classes, you will need to
123   - update them.
  121 + - ``Pipeline::write`` now takes ``unsigned char const*`` instead
  122 + of ``unsigned char*``. Callers don't need to change anything,
  123 + but you no longer have to pass writable pointers to pipelines.
  124 + If you've implemented your own pipeline classes, you will need
  125 + to update them.
124 126  
125 127 - Remove deprecated
126 128 ``QPDFAcroFormDocumentHelper::copyFieldsFromForeignPage``. This
... ... @@ -132,8 +134,8 @@ For a detailed list of changes, please see the file
132 134 ``QPDF&`` argument.
133 135  
134 136 - The function passed to and called by ``QPDFJob::doIfVerbose``
135   - now takes a ``Pipeline&` argument instead of a ``std::ostream&``
136   - argument.
  137 + now takes a ``Pipeline&`` argument instead of a
  138 + ``std::ostream&`` argument.
137 139  
138 140 - Intentionally break API to call attention to operations that
139 141 write files with insecure encryption:
... ... @@ -150,8 +152,9 @@ For a detailed list of changes, please see the file
150 152  
151 153 - ``QPDFObjectHandle::warnIfPossible`` no longer takes an optional
152 154 argument to throw an exception if there is no description. If
153   - there is no description, it writes to the default logger's error
154   - stream.
  155 + there is no description, it writes to the default
  156 + ``QPDFLogger``'s error stream. (``QPDFLogger`` is new in qpdf
  157 + 11---see below.)
155 158  
156 159 - ``QPDF`` objects can no longer be copied or assigned to. It has
157 160 never been safe to do this because of assumptions made by
... ... @@ -162,7 +165,7 @@ For a detailed list of changes, please see the file
162 165  
163 166 - CLI Enhancements
164 167  
165   - - ``qpdf --list-attachments --verbose`` include some additional
  168 + - ``qpdf --list-attachments --verbose`` includes some additional
166 169 information about attachments. Additional information about
167 170 attachments is also included in the ``attachments`` JSON key
168 171 with ``--json``.
... ... @@ -206,32 +209,43 @@ For a detailed list of changes, please see the file
206 209 ``replaceKeyAndGetOld``, a ``null`` object if the object was not
207 210 previously there.
208 211  
209   - - It is now possible to detect when a ``QPDFObjectHandle`` is an
210   - indirect object that belongs to a ``QPDF`` that has been
211   - destroyed. Any attempt to unparse this type of
212   - ``QPDFObjectHandle`` will throw a logic error. You can detect
213   - this by calling the new ``QPDFObjectHandle::isDestroyed``
214   - method. Also the ``QPDFObjectHandle::getOwningQPDF`` method now
215   - returns a null pointer rather than an invalid pointer.
216   -
217   - - The method ``QPDFObjectHandle::getQPDF`` returns a ``QPDF&``
218   - (rather than a ``QPDF*``) and is an alternative to
219   - ``QPDFObjectHandle::getOwningQPDF`` for when the object is known
220   - to have an owning ``QPDF``.
  212 + - The ``QPDFObjectHandle::isDestroyed`` method can be used to
  213 + detect when an indirect object ``QPDFObjectHandle`` belongs to a
  214 + ``QPDF`` that has been destroyed. Any attempt to unparse this
  215 + type of ``QPDFObjectHandle`` will throw a logic error.
  216 +
  217 + - The ``QPDFObjectHandle::getOwningQPDF`` method now returns a
  218 + null pointer rather than an invalid pointer when the owning
  219 + ``QPDF`` object has been destroyed. Indirect objects whose
  220 + owning ``QPDF`` has been destroyed become invalid. Direct
  221 + objects just lose their owning ``QPDF`` but continue to be
  222 + valid.
  223 +
  224 + - The method ``QPDFObjectHandle::getQPDF`` is an alternative to
  225 + ``QPDFObjectHandle::getOwningQPDF``. It returns a ``QPDF&``
  226 + rather than a ``QPDF*`` and can be used when the object is known
  227 + to have an owning ``QPDF``. It throws an exception if the object
  228 + does not have an owning ``QPDF``. Only indirect objects are
  229 + guaranteed to have an owning ``QPDF``. Direct objects may have
  230 + one if they were initially read from a PDF input source that is
  231 + still valid, but it's also possible to have direct objects that
  232 + don't have an owning ``QPDF``.
221 233  
222 234 - It is now possible to test ``QPDFObjectHandle`` equality with
223 235 ``==`` and ``!=``. Two ``QPDFObjectHandle`` objects are equal if
224 236 they point to the same underlying object, meaning changes to one
225   - will be reflected in the other.
  237 + will be reflected in the other. Note that this method does not
  238 + compare the contents of the objects, so two distinct but
  239 + structurally identical objects will not be considered equal.
226 240  
227   - - Add new factory method ``QPDF::create()`` that returns a
  241 + - New factory method ``QPDF::create()`` returns a
228 242 ``std::shared_ptr<QPDF>``.
229 243  
230   - - Add new ``Pipeline`` methods to reduce the amount of casting that is
231   - needed:
  244 + - New ``Pipeline`` methods have been added to reduce the amount of
  245 + casting that is needed:
232 246  
233   - - ``write``: overloaded version that takes `char const*` in
234   - addition to the one that takes `unsigned char const*`
  247 + - ``write``: overloaded version that takes ``char const*`` in
  248 + addition to the one that takes ``unsigned char const*``
235 249  
236 250 - ``writeCstr``: writes a null-terminated C string
237 251  
... ... @@ -240,20 +254,26 @@ For a detailed list of changes, please see the file
240 254 - ``operator <<``: for null-terminated C strings, std::strings,
241 255 and integer types
242 256  
243   - - Add new ``Pipeline`` type ``Pl_OStream`` to write to a
  257 + - New ``Pipeline`` type ``Pl_OStream`` writes to a
244 258 ``std::ostream``.
245 259  
246   - - Add new ``Pipeline`` type ``Pl_String`` to append to a
  260 + - New ``Pipeline`` type ``Pl_String`` appends to a
247 261 ``std::string``.
248 262  
249   - - Add methods to ``QUtil`` for converting PDF timestamps and
250   - ``QPDFTime`` objects to ISO-8601 timestamps.
  263 + - New ``Pipeline`` type ``Pl_Function`` can be used to call an
  264 + arbitrary function on write. It supports ``std::function`` for
  265 + C++ code and can also accept C-style functions that indicate
  266 + success using a return value and take an extra parameter for
  267 + passing user data.
  268 +
  269 + - Methods have been added to ``QUtil`` for converting PDF
  270 + timestamps and ``QPDFTime`` objects to ISO-8601 timestamps.
251 271  
252 272 - Enhance JSON class to better support incrementally reading and
253 273 writing large amounts of data without having to keep everything
254 274 in memory.
255 275  
256   - - Add new functions to the C API for qpdfjob that use a
  276 + - Add new functions to the C API for ``qpdfjob`` that use a
257 277 ``qpdfjob_handle``. Like with the regular C API for qpdf, you
258 278 have to call ``qpdfjob_init`` first, pass the handle to the
259 279 functions, and call ``qpdfjob_cleanup`` at the end. This
... ... @@ -308,11 +328,13 @@ For a detailed list of changes, please see the file
308 328 `qpdf/performance-test-files github repository
309 329 <https://github.com/qpdf/performance-test-files>`__. In addition
310 330 to running time, memory usage is also included in performance
311   - test results. The ``performance_check`` tool has only been
312   - tested on Linux.
  331 + test results when available. The ``performance_check`` tool has
  332 + only been tested on Linux.
313 333  
314 334 - Lots of code cleanup and refactoring work was contributed in
315   - multiple pull requests by M. Holger.
  335 + multiple pull requests by M. Holger. This includes the work
  336 + required to enable detection of ``QPDFObjectHandle`` objects
  337 + that belong to destroyed ``QPDF`` objects.
316 338  
317 339 10.6.3: March 8, 2022
318 340 - Announcement of upcoming change:
... ...