mirror of
https://github.com/qpdf/qpdf.git
synced 2024-11-18 10:25:12 +00:00
138 lines
4.3 KiB
CMake
138 lines
4.3 KiB
CMake
# 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
|
|
contributing.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(GENERATE_AUTO_JOB)
|
|
add_dependencies(doc auto_job_files)
|
|
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()
|