blob: 91c30751798015e9e0416321b9c48c5f50592d11 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# 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()
|