ENH: Fix and enhance MathJax handling
[freefoam.git] / doc / UserGuide / CMakeLists.txt
blobb886aa3076702e3f078d91047140506ffd67cf3d
1 #-------------------------------------------------------------------------------
2 #               ______                _     ____          __  __
3 #              |  ____|             _| |_  / __ \   /\   |  \/  |
4 #              | |__ _ __ ___  ___ /     \| |  | | /  \  | \  / |
5 #              |  __| '__/ _ \/ _ ( (| |) ) |  | |/ /\ \ | |\/| |
6 #              | |  | | |  __/  __/\_   _/| |__| / ____ \| |  | |
7 #              |_|  |_|  \___|\___|  |_|   \____/_/    \_\_|  |_|
9 #                   FreeFOAM: The Cross-Platform CFD Toolkit
11 # Copyright (C) 2008-2010 Michael Wild <themiwi@users.sf.net>
12 #                         Gerber van der Graaf <gerber_graaf@users.sf.net>
13 #-------------------------------------------------------------------------------
14 # License
15 #   This file is part of FreeFOAM.
17 #   FreeFOAM is free software; you can redistribute it and/or modify it
18 #   under the terms of the GNU General Public License as published by the
19 #   Free Software Foundation; either version 2 of the License, or (at your
20 #   option) any later version.
22 #   FreeFOAM is distributed in the hope that it will be useful, but WITHOUT
23 #   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
24 #   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
25 #   for more details.
27 #   You should have received a copy of the GNU General Public License
28 #   along with FreeFOAM; if not, write to the Free Software Foundation,
29 #   Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 #-------------------------------------------------------------------------------
32 include(files.cmake)
34 # determine graphics formats to generate
35 set(GRAPHICS_FORMATS)
36 foreach(f IN LISTS FOAM_GUIDES_FORMATS)
37   if(f STREQUAL xhtml)
38     list(APPEND GRAPHICS_FORMATS png)
39   elseif(f STREQUAL pdf)
40     list(APPEND GRAPHICS_FORMATS pdf)
41   else()
42     message(SEND_ERROR "Unknown output format ${f}")
43   endif()
44 endforeach()
46 # copy files
47 foam_configure_files(installFiles DESTDIR doc/UserGuide COPYONLY ${IMAGES})
48 set(COPY_OUTPUT)
49 foreach(fd IN LISTS COPY_SRCS)
50   # parse <source>=>[range]<test> entries
51   if(fd MATCHES "([^=]*)=(\\[(-?[0-9]*:-?[0-9]*)\\])?>(.*)")
52     set(f "${CMAKE_MATCH_1}")
53     get_filename_component(df "${f}" NAME)
54     set(d "${CMAKE_MATCH_4}/${df}")
55     if(NOT IS_ABSOLUTE "${d}")
56       set(d "${CMAKE_CURRENT_BINARY_DIR}/${d}")
57     endif()
58     if(CMAKE_MATCH_3)
59       get_filename_component(dd "${d}" PATH)
60       if(NOT IS_DIRECTORY "${dd}")
61         file(MAKE_DIRECTORY "${dd}")
62       endif()
63       # have a line-range specified
64       add_custom_command(OUTPUT "${d}"
65         COMMAND "${PYTHON_EXECUTABLE}" -c
66         "open('${d}', 'wt').writelines(open('${f}', 'rt').readlines()[${CMAKE_MATCH_3}])"
67         DEPENDS "${f}"
68         COMMENT "Extracting range ${CMAKE_MATCH_3} from ${f}"
69         VERBATIM)
70     else()
71       configure_file("${f}" "${d}" COPYONLY)
72     endif()
73     list(APPEND COPY_OUTPUT "${d}")
74   else()
75     message(SEND_ERROR
76       "Elements in LISTING_SRCS must be of the form SRCFILE=([range])?>DESTDIR")
77   endif()
78 endforeach()
80 # run asymptote
81 foam_compile_asy(ASY_OUTPUT "${GRAPHICS_FORMATS}" ${ASY_SRCS})
83 # run asciidoc
84 set(DBLATEX_XSL
85   "${CMAKE_BINARY_DIR}/data/asciidoc/dblatex/asciidoc-dblatex.xsl")
86 set(DBLATEX_STY
87   "${CMAKE_BINARY_DIR}/data/asciidoc/dblatex/asciidoc-dblatex.sty")
89 set(A2X_pdf_dblatex_OPTS
90   "--dblatex-opts=--xsl-user=${DBLATEX_XSL}"
91   "--texstyle=${DBLATEX_STY}"
92   "--fig-path=${CMAKE_CURRENT_BINARY_DIR}")
93 string(REPLACE ";" " " A2X_pdf_dblatex_OPTS "${A2X_pdf_dblatex_OPTS}")
95 set(A2X_pdf_fop_OPTS --fop -a foam-use-fop -a foam-use-pngmath)
97 set(A2X_pdf_OPTS -f pdf -a foam-pdf)
99 if(FOAM_USE_FOP)
100   list(APPEND A2X_pdf_OPTS ${A2X_pdf_fop_OPTS})
101 else()
102   list(APPEND A2X_pdf_OPTS -a foam-use-dblatex ${A2X_pdf_dblatex_OPTS})
103 endif()
105 set(A2X_pdf_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.pdf")
107 if(NOT FOAM_USE_FOP)
108   set(A2X_pdf_EXTRA_DEPS
109     "${CMAKE_BINARY_DIR}/data/asciidoc/dblatex/asciidoc-dblatex.xsl"
110     "${CMAKE_BINARY_DIR}/data/asciidoc/dblatex/orig-asciidoc-dblatex.xsl"
111     "${CMAKE_BINARY_DIR}/data/asciidoc/dblatex/asciidoc-dblatex.sty"
112     "${CMAKE_BINARY_DIR}/data/asciidoc/dblatex/orig-asciidoc-dblatex.sty")
113 endif()
115 set(ADOC_pdf_MAIN_CONF "${CMAKE_BINARY_DIR}/data/asciidoc/pdf.conf")
116 set(ADOC_pdf_ALL_CONF "${ADOC_pdf_MAIN_CONF}"
117   "${CMAKE_BINARY_DIR}/data/asciidoc/common.conf"
118   "${CMAKE_BINARY_DIR}/data/asciidoc/docbook.conf")
120 set(A2X_xhtml_xslt_OPTS "--xsltproc-opts=--stringparam chunk.section.depth 1")
121 if(FOAM_ENABLE_MATHJAX)
122   set(A2X_xhtml_xslt_OPTS
123     "${A2X_xhtml_xslt_OPTS} --param foam.use.mathjax 1")
124   set(A2X_xhtml_xslt_OPTS
125     "${A2X_xhtml_xslt_OPTS} --stringparam foam.mathjax.location ${FOAM_MATHJAX_URL}")
126   set(A2X_xhtml_xslt_OPTS
127     "${A2X_xhtml_xslt_OPTS} --stringparam foam.doc.location ..")
128 else()
129   set(A2X_xhtml_xslt_OPTS
130     "${A2X_xhtml_xslt_OPTS} --param foam.use.mathjax 0")
131 endif()
132 set(A2X_xhtml_OPTS -f chunked -a foam-xhtml11
133   "--xsl-file=${CMAKE_BINARY_DIR}/data/asciidoc/docbook-xsl/chunked.xsl"
134   "${A2X_xhtml_xslt_OPTS}")
136 if(NOT FOAM_ENABLE_MATHJAX)
137   list(APPEND A2X_xhtml_OPTS -a foam-use-pngmath)
138 endif()
140 set(A2X_xhtml_OUTPUT
141   "${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.chunked/index.html")
143 set(A2X_xhtml_EXTRA_DEPS
144   "${CMAKE_BINARY_DIR}/data/asciidoc/docbook-xsl/chunked.xsl"
145   "${CMAKE_BINARY_DIR}/data/asciidoc/docbook-xsl/orig-chunked.xsl"
146   "${CMAKE_BINARY_DIR}/data/asciidoc/docbook-xsl/common.xsl"
147   "${CMAKE_BINARY_DIR}/data/asciidoc/docbook-xsl/orig-common.xsl")
149 set(ADOC_xhtml_MAIN_CONF "${CMAKE_BINARY_DIR}/data/asciidoc/chunked.conf")
150 set(ADOC_xhtml_ALL_CONF "${ADOC_xhtml_MAIN_CONF}"
151   "${CMAKE_BINARY_DIR}/data/asciidoc/common.conf"
152   "${CMAKE_BINARY_DIR}/data/asciidoc/docbook.conf")
154 set(PNGMATH_FILTER
155   "${CMAKE_BINARY_DIR}/data/utilities/foamPNGMathFilter${FOAM_PY_SCRIPT_SUFFIX}")
156 set(CONF_ASCIIDOC_SRCS)
157 foreach(f IN LISTS ASCIIDOC_SRCS)
158   if(FOAM_NEED_PNGMATH)
159     set(ff "${CMAKE_CURRENT_BINARY_DIR}/${f}")
160     list(APPEND CONF_ASCIIDOC_SRCS "${ff}")
161     add_custom_command(OUTPUT "${ff}"
162       COMMAND "${PYTHON_EXECUTABLE}" "${PNGMATH_FILTER}"
163         -m "${CMAKE_CURRENT_BINARY_DIR}/math"
164         -D 120 -o "${ff}" "${CMAKE_CURRENT_SOURCE_DIR}/${f}"
165       DEPENDS "${f}" "${CMAKE_SOURCE_DIR}/data/utilities/foamPNGMathFilter.py.in"
166       COMMENT "Filtering math in ${ff}"
167       VERBATIM)
168   else()
169     list(APPEND CONF_ASCIIDOC_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
170   endif()
171 endforeach()
172 list(GET CONF_ASCIIDOC_SRCS 0 ASCIIDOC_MAIN_SRC)
174 add_custom_target(UserGuides ALL)
175 foreach(fmt IN LISTS FOAM_GUIDES_FORMATS)
176   add_custom_command(OUTPUT "${A2X_${fmt}_OUTPUT}"
177     COMMAND "${A2X_EXECUTABLE}" ${A2X_OPTS} ${A2X_${fmt}_OPTS} -d book
178       -D "${CMAKE_CURRENT_BINARY_DIR}/.." --icons
179       -a builddir=${CMAKE_CURRENT_BINARY_DIR}/
180       "--asciidoc-opts=-f ${ADOC_${fmt}_MAIN_CONF}"
181       -r "${CMAKE_CURRENT_BINARY_DIR}"
182       -v
183       "${ASCIIDOC_MAIN_SRC}"
184     DEPENDS ${CONF_ASCIIDOC_SRCS} ${IMAGES} ${ASY_OUTPUT} ${COPY_OUTPUT}
185       ${ADOC_${fmt}_ALL_CONF}
186       ${A2X_${fmt}_EXTRA_DEPS}
187     WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
188     COMMENT "Generating ${fmt} version of the UserGuide"
189     VERBATIM)
190   add_custom_target(UserGuide-${fmt}
191     DEPENDS "${A2X_${fmt}_OUTPUT}")
192   add_dependencies(UserGuides UserGuide-${fmt})
193 endforeach()
195 if(FOAM_ENABLE_PDF_GUIDES)
196   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.pdf
197     DESTINATION ${FOAM_INSTALL_DOC_PATH} COMPONENT doc
198     )
199 endif()
201 if(FOAM_ENABLE_XHTML_GUIDES)
202   add_dependencies(UserGuide-xhtml MathJax)
203   install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.chunked/
204     DESTINATION ${FOAM_INSTALL_DOC_PATH}/html/UserGuide COMPONENT doc
205     )
206 endif()
208 # ------------------------- vim: set sw=2 sts=2 et: --------------- end-of-file