Commit 463953bc96ead56227ef3dbf62639eb7e3545ab4

Authored by Jay Berkenbilt
Committed by GitHub
2 parents 9b09436c 13761120

Merge pull request #992 from jberkenbilt/future

Future
CMakeLists.txt
... ... @@ -104,6 +104,8 @@ option(INSTALL_PKGCONFIG "Install pkgconfig file" ON)
104 104 option(INSTALL_CMAKE_PACKAGE "Install cmake package files" ON)
105 105 option(INSTALL_EXAMPLES "Install example files" ON)
106 106  
  107 +option(FUTURE "Include ABI-breaking changes CONSIDERED for the next major release" OFF)
  108 +
107 109 # *** END OPTIONS ***
108 110  
109 111 if(NOT (BUILD_STATIC_LIBS OR BUILD_SHARED_LIBS))
... ... @@ -121,6 +123,10 @@ else()
121 123 set(ENABLE_QTC_ARG --disable-tc)
122 124 endif()
123 125  
  126 +if(FUTURE)
  127 + add_compile_definitions(QPDF_FUTURE=1)
  128 +endif()
  129 +
124 130 enable_testing()
125 131 set(RUN_QTEST perl ${qpdf_SOURCE_DIR}/run-qtest ${ENABLE_QTC_ARG})
126 132  
... ... @@ -347,6 +353,7 @@ message(STATUS " build static libraries: ${BUILD_STATIC_LIBS}")
347 353 message(STATUS " build manual: ${BUILD_DOC}")
348 354 message(STATUS " compiler warnings are errors: ${WERROR}")
349 355 message(STATUS " QTC test coverage: ${ENABLE_QTC}")
  356 +message(STATUS " include future changes: ${FUTURE}")
350 357 message(STATUS " system: ${CPACK_SYSTEM_NAME}")
351 358 message(STATUS "")
352 359 message(STATUS "*** Options Summary ***")
... ...
include/qpdf/QPDFObjectHandle.hh
... ... @@ -290,6 +290,14 @@ class QPDFObjectHandle
290 290 QPDFObjectHandle(QPDFObjectHandle const&) = default;
291 291 QPDF_DLL
292 292 QPDFObjectHandle& operator=(QPDFObjectHandle const&) = default;
  293 +
  294 +#ifdef QPDF_FUTURE
  295 + QPDF_DLL
  296 + QPDFObjectHandle(QPDFObjectHandle&&) = default;
  297 + QPDF_DLL
  298 + QPDFObjectHandle& operator=(QPDFObjectHandle&&) = default;
  299 +#endif
  300 +
293 301 QPDF_DLL
294 302 inline bool isInitialized() const;
295 303  
... ...
manual/installation.rst
... ... @@ -277,6 +277,16 @@ BUILD_SHARED_LIBS, BUILD_STATIC_LIBS
277 277 compiled executables can find the DLL. Updating your path is not
278 278 necessary if you build with static libraries only.
279 279  
  280 +FUTURE
  281 + This option enables changes planned for the next major release to be
  282 + included. They are NOT part of the stable API. These changes are ABI
  283 + breaking and are subject to change, which means code linked against
  284 + a qpdf built with this option may not be binary compatible with
  285 + installed qpdf libraries. Set this if you want to test your code
  286 + with proposed QPDF API changes and provide feedback prior to the
  287 + inclusion of those changes in a release. Packagers should never
  288 + distribute backages built with this option.
  289 +
280 290 QTEST_COLOR
281 291 Turn this on or off to control whether qtest uses color in its
282 292 output.
... ...
manual/packaging.rst
... ... @@ -26,6 +26,12 @@ particularly useful to packagers.
26 26 combined with either ``ctest --verbose`` or ``ctest
27 27 --output-on-failure``.
28 28  
  29 +- Packagers should never define the ``FUTURE`` build option. API
  30 + changes enabled by ``FUTURE`` are not stable and may be
  31 + API/ABI-breaking. That option is intended only for people who are
  32 + testing their code with a local build of qpdf to provide early
  33 + feedback or prepare for possible future changes to the API.
  34 +
29 35 - qpdf's install targets do not install completion files by default
30 36 since there is no standard location for them. As a packager, it's
31 37 good if you install them wherever your distribution expects such
... ...
manual/release-notes.rst
... ... @@ -6,6 +6,10 @@ 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 +If you are a developer and want to test your code against future API
  10 +changes that are under consideration, you can build qpdf locally and
  11 +enable the ``FUTURE`` build option (see :ref:`build-options`).
  12 +
9 13 Planned changes for future 12.x (subject to change):
10 14 - ``QPDFObjectHandle`` will support move construction/assignment.
11 15 This change will be invisible to most developers but may break
... ...