aboutsummaryrefslogtreecommitdiffstats
path: root/manual/CMakeLists.txt
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-03-05 14:24:51 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-03-19 00:53:18 +0100
commitb8aff90997116a84350018f88f1eabdaa368d11b (patch)
tree5ee781b03d3ffa81bfdd813e91f6324a75b266e6 /manual/CMakeLists.txt
parent105862da3ea72c6763c26038d2e02cf243eb0798 (diff)
downloadqpdf-b8aff90997116a84350018f88f1eabdaa368d11b.tar.zst
Add cmake configuration files
Diffstat (limited to 'manual/CMakeLists.txt')
-rw-r--r--manual/CMakeLists.txt133
1 files changed, 133 insertions, 0 deletions
diff --git a/manual/CMakeLists.txt b/manual/CMakeLists.txt
new file mode 100644
index 00000000..737d2335
--- /dev/null
+++ b/manual/CMakeLists.txt
@@ -0,0 +1,133 @@
+# There is a FindLATEX module, but it does some things we don't care
+# about and doesn't do everything we need.
+find_program(LATEX latex)
+find_program(PDFLATEX pdflatex)
+find_program(LATEXMK latexmk)
+find_program(SPHINX sphinx-build)
+
+# *** NOTE: Never check BUILD_DOC_PDF if BUILD_DOC is not set. See
+# *** comments in top-level CMakeLists.txt.
+
+if(BUILD_DOC)
+ if(SPHINX STREQUAL SPHINX-NOTFOUND)
+ message(FATAL_ERROR "sphinx-build is required for building documentation")
+ endif()
+ if(BUILD_DOC_PDF AND
+ ((LATEX STREQUAL LATEX-NOTFOUND) OR
+ (LATEXMK STREQUAL LATEXMK-NOTFOUND) OR
+ (PDFLATEX STREQUAL PDFLATEX-NOTFOUND)))
+ message(FATAL_ERROR
+ "latex, latexmk, and pdflatex are required to build PDF documentation")
+ endif()
+endif()
+
+set(MANUAL_SRC ${qpdf_SOURCE_DIR}/manual)
+foreach(F qpdf.1 fix-qdf.1 zlib-flate.1)
+ configure_file(
+ ${MANUAL_SRC}/${F}.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${F}
+ NEWLINE_STYLE UNIX)
+endforeach()
+
+SET(MANUAL_DEPS
+ conf.py
+ _ext/qpdf.py
+ acknowledgement.rst
+ cli.rst
+ design.rst
+ download.rst
+ encryption.rst
+ index.rst
+ installation.rst
+ json.rst
+ library.rst
+ license.rst
+ linearization.rst
+ object-streams.rst
+ overview.rst
+ packaging.rst
+ qdf.rst
+ qpdf-job.rst
+ release-notes.rst
+ weak-crypto.rst)
+
+# Prevent targets that run ${SPHINX} from running in parallel by using
+# dependencies. This avoids clashes in temporary files that cause the
+# build to fail with the error "_pickle.UnpicklingError: pickle data
+# was truncated". It would be better if we could use order-only
+# dependencies like gnu make to make it possible to build the targets
+# independently.
+set(DOC_HTML_OUTPUT html/index.html)
+set(DOC_SINGLEHTML_OUTPUT singlehtml/index.html)
+set(DOC_PDF_OUTPUT latex/qpdf.pdf)
+if(BUILD_DOC)
+ add_custom_command(OUTPUT ${DOC_HTML_OUTPUT}
+ COMMAND ${SPHINX} -M html ${MANUAL_SRC} ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND touch ${DOC_HTML_OUTPUT}
+ DEPENDS ${MANUAL_DEPS})
+ add_custom_command(OUTPUT ${DOC_SINGLEHTML_OUTPUT}
+ COMMAND ${SPHINX} -M singlehtml ${MANUAL_SRC} ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND touch ${DOC_SINGLEHTML_OUTPUT}
+ DEPENDS ${MANUAL_DEPS})
+ add_custom_command(OUTPUT ${DOC_PDF_OUTPUT}
+ COMMAND ${SPHINX} -M latexpdf ${MANUAL_SRC} ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND touch ${DOC_PDF_OUTPUT}
+ DEPENDS ${MANUAL_DEPS})
+ add_custom_target(doc_html DEPENDS ${DOC_HTML_OUTPUT})
+ add_custom_target(doc_singlehtml DEPENDS ${DOC_SINGLEHTML_OUTPUT})
+ add_dependencies(doc_singlehtml doc_html)
+ add_custom_target(doc_pdf DEPENDS ${DOC_PDF_OUTPUT})
+ add_custom_target(doc ALL)
+ if(BUILD_DOC_PDF)
+ add_dependencies(doc doc_pdf)
+ if(BUILD_DOC_HTML)
+ add_dependencies(doc_pdf doc_singlehtml)
+ endif()
+ elseif(BUILD_DOC_HTML)
+ add_dependencies(doc doc_singlehtml)
+ endif()
+
+ if(BUILD_DOC_DIST)
+ set(DOC_DIST_HTML doc-dist/manual-html)
+ set(DOC_DIST_SINGLEHTML doc-dist/manual-single-page-html)
+ set(DOC_DIST_PDF doc-dist/qpdf-manual.pdf)
+ add_custom_command(
+ OUTPUT
+ ${DOC_DIST_HTML}
+ ${DOC_DIST_SINGLEHTML}
+ ${DOC_DIST_PDF}
+ COMMAND rm -rf doc-dist
+ COMMAND mkdir -p doc-dist
+ COMMAND cp -r html ${DOC_DIST_HTML}
+ COMMAND cp -r singlehtml ${DOC_DIST_SINGLEHTML}
+ COMMAND cp -r ${DOC_PDF_OUTPUT} ${DOC_DIST_PDF}
+ DEPENDS ${DOC_HTML_OUTPUT} ${DOC_SINGLEHTML_OUTPUT} ${DOC_PDF_OUTPUT})
+ add_custom_target(doc_dist ALL
+ DEPENDS ${DOC_DIST_HTML} ${DOC_DIST_SINGLEHTML} ${DOC_DIST_PDF})
+ add_dependencies(doc_dist doc)
+ endif()
+endif()
+
+# INSTALL_MANUAL is not dependent on building doc -- we sometimes drop in
+# pre-built doc when creating distributions.
+if(INSTALL_MANUAL)
+ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc-dist/
+ TYPE DOC
+ COMPONENT ${COMPONENT_DOC})
+else()
+ install(FILES ${qpdf_SOURCE_DIR}/README-doc.txt
+ TYPE DOC
+ COMPONENT ${COMPONENT_DOC})
+endif()
+
+if(NOT WIN32)
+ # There's no reason to install manual pages in a Windows
+ # environment, especially when all they do is refer people to the
+ # manual.
+ install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/qpdf.1
+ ${CMAKE_CURRENT_BINARY_DIR}/fix-qdf.1
+ ${CMAKE_CURRENT_BINARY_DIR}/zlib-flate.1
+ DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
+ COMPONENT ${COMPONENT_DOC})
+endif()