Skip to content

Commit b1d0f95

Browse files
committed
Improve pdf/latex doc generation
- Find latexmk instead of assuming it's there - Download ornltm at build time and set in TEXINPUTS - Add interdependencies between pdf doc stages - Generate and append footer
1 parent c7d6eaa commit b1d0f95

File tree

5 files changed

+93
-226
lines changed

5 files changed

+93
-226
lines changed

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ endif()
6666

6767
if(FLIBCPP_BUILD_DOCS)
6868
find_package(Sphinx REQUIRED)
69+
include(ExternalProject) # for pdf header
70+
set(FLIBCPP_PYTHONPATH "$ENV{PYTHONPATH}" CACHE STRING
71+
"Python path used for generating documentation"
72+
)
6973
endif()
7074

7175
#---------------------------------------------------------------------------#

doc/CMakeLists.txt

Lines changed: 80 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,90 @@
66
#---------------------------------------------------------------------------#
77

88
configure_file("version.json.in" "version.json" @ONLY)
9-
add_custom_target(doc ALL)
10-
add_custom_command(TARGET doc
11-
COMMAND "${CMAKE_COMMAND}" -E env
12-
"CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
13-
"${SPHINX_EXECUTABLE}" -q
14-
-d "${CMAKE_CURRENT_BINARY_DIR}/doctrees"
15-
-b html
16-
"${CMAKE_CURRENT_SOURCE_DIR}"
17-
"${CMAKE_CURRENT_BINARY_DIR}/html"
18-
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
19-
COMMENT "Building HTML documentation with Sphinx"
20-
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/html/index.html"
9+
10+
function(flibcpp_build_sphinx type output)
11+
add_custom_command(OUTPUT "${output}"
12+
VERBATIM COMMAND
13+
"${CMAKE_COMMAND}" -E env
14+
"PYTHONPATH=${FLIBCPP_PYTHONPATH}"
15+
"CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
16+
"${SPHINX_EXECUTABLE}" -q
17+
-d "${CMAKE_CURRENT_BINARY_DIR}/doctrees"
18+
-b ${type}
19+
"${CMAKE_CURRENT_SOURCE_DIR}"
20+
"${CMAKE_CURRENT_BINARY_DIR}/${type}"
21+
COMMENT "Building ${type} documentation with Sphinx"
22+
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/conf.py"
23+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
24+
${ARGN}
25+
)
26+
endfunction()
27+
28+
set(_doc_html "${CMAKE_CURRENT_BINARY_DIR}/html/index.html")
29+
flibcpp_build_sphinx(html "${_doc_html}")
30+
add_custom_target(doc ALL DEPENDS "${_doc_html}")
31+
32+
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html/"
33+
DESTINATION "${CMAKE_INSTALL_DOCDIR}"
2134
)
2235

23-
# Note: latex generation creates a makefile that muts be run
24-
add_custom_target(doc_latex)
25-
add_custom_command(TARGET doc_latex
26-
COMMAND "${CMAKE_COMMAND}" -E env
27-
"CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
28-
"${SPHINX_EXECUTABLE}" -q
29-
-d "${CMAKE_CURRENT_BINARY_DIR}/doctrees"
30-
-b latex
31-
"${CMAKE_CURRENT_SOURCE_DIR}"
32-
"${CMAKE_CURRENT_BINARY_DIR}/latex"
33-
COMMENT "Building LaTeX documentation with Sphinx"
34-
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/latex/Flibcpp.tex"
36+
# Note: latex generation creates a makefile that must be run
37+
set(_doc_tex "${CMAKE_CURRENT_BINARY_DIR}/latex/Flibcpp.tex")
38+
flibcpp_build_sphinx(latex "${_doc_tex}")
39+
40+
find_program(LATEXMK_EXECUTABLE latexmk)
41+
if(NOT LATEXMK_EXECUTABLE)
42+
# Local variable to give helpful error at runtime?
43+
set(LATEXMK_EXECUTABLE latexmk)
44+
endif()
45+
46+
# Download ornltm class
47+
set(_ornltm_base "${CMAKE_CURRENT_BINARY_DIR}/latex/ornltm")
48+
ExternalProject_Add(ornltm
49+
GIT_REPOSITORY https://code.ornl.gov/s3j/ornltm.git
50+
GIT_TAG 2ad59291117b487666d15d10a105de0d680e72a6
51+
CONFIGURE_COMMAND ""
52+
BUILD_COMMAND ""
53+
INSTALL_COMMAND ""
54+
SOURCE_DIR "${_ornltm_base}"
3555
)
36-
add_custom_target(doc_pdf)
37-
add_custom_command(TARGET doc_pdf
38-
COMMAND "${CMAKE_COMMAND}" -E env
39-
"LATEXOPTS="
40-
latexmk -pdf flibcpp-tm-header Flibcpp
41-
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/latex"
42-
COMMENT "Building PDF documentation from LaTeX"
43-
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/latex/Flibcpp.pdf"
56+
57+
set(_texenv "LATEXOPTS=" "TEXINPUTS=${_ornltm_base}/ornltm:")
58+
function(flibcpp_build_latex input output)
59+
add_custom_command(OUTPUT "${output}"
60+
VERBATIM COMMAND
61+
"${CMAKE_COMMAND}" -E env ${_texenv}
62+
"${LATEXMK_EXECUTABLE}" -pdf "${input}"
63+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/latex"
64+
${ARGN}
65+
)
66+
endfunction()
67+
68+
# Generate header
69+
set(_header_pdf "${CMAKE_CURRENT_BINARY_DIR}/latex/flibcpp-tm-header.pdf")
70+
flibcpp_build_latex(
71+
"${CMAKE_CURRENT_SOURCE_DIR}/_static/flibcpp-tm-header.tex"
72+
"${_header_pdf}"
73+
COMMENT "Building tech memo header"
74+
DEPENDS ornltm
4475
)
45-
add_dependencies(doc_pdf doc_latex)
4676

47-
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html/"
48-
DESTINATION "${CMAKE_INSTALL_DOCDIR}"
77+
# Generate header
78+
set(_footer_pdf "${CMAKE_CURRENT_BINARY_DIR}/latex/flibcpp-tm-footer.pdf")
79+
flibcpp_build_latex(
80+
"${CMAKE_CURRENT_SOURCE_DIR}/_static/flibcpp-tm-footer.tex"
81+
"${_footer_pdf}"
82+
COMMENT "Building tech memo footer"
83+
DEPENDS ornltm
84+
)
85+
86+
# Generate PDF
87+
set(_doc_pdf "${CMAKE_CURRENT_BINARY_DIR}/latex/Flibcpp.pdf")
88+
flibcpp_build_latex(
89+
Flibcpp
90+
"${_doc_pdf}"
91+
COMMENT "Building PDF documentation from LaTeX"
92+
DEPENDS "${_doc_tex}" "${_header_pdf}" "${_footer_pdf}" ornltm
4993
)
5094

95+
add_custom_target(doc_pdf DEPENDS "${_doc_pdf}")

doc/_static/flibcpp-tm-footer.tex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
\documentclass{ornltm}
2+
3+
\author{Seth R.~Johnson}
4+
5+
\begin{document}
6+
\backmatter
7+
\end{document}

doc/_static/ornltm-style.sty

Lines changed: 0 additions & 190 deletions
This file was deleted.

doc/conf.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@
181181
# see http://texdoc.net/texmf-dist/doc/latex/pdfpages/pdfpages.pdf
182182
# and documents repo:
183183
'maketitle': r"\includepdf[pages=-]{flibcpp-tm-header.pdf}",
184+
'atendofbody': r"\includepdf[pages=-]{flibcpp-tm-footer.pdf}",
184185
}
185186

186187
# Grouping the document tree into LaTeX files. List of tuples
@@ -191,7 +192,7 @@
191192
author, 'howto'),
192193
]
193194

194-
latex_additional_files = glob.glob("_static/*")
195+
latex_additional_files = glob.glob("_static/*.sty")
195196

196197
# -- Options for manual page output ------------------------------------------
197198

0 commit comments

Comments
 (0)