2 # - Find unix commands from cygwin
3 # This module looks for some usual Unix commands.
10 if(${FOP_EXECUTABLE} STREQUAL "FOP_EXECUTABLE-NOTFOUND")
11 message(FATAL_ERROR "fop wasn't found, but is necessary for building PDFs." )
15 find_program(XSLTPROC_EXECUTABLE
19 ${CYGWIN_INSTALL_PATH}/bin
26 # Handle the QUIETLY and REQUIRED arguments and set XSLTPROC_FOUND to TRUE if
27 # all listed variables are TRUE
28 INCLUDE(FindPackageHandleStandardArgs)
29 FIND_PACKAGE_HANDLE_STANDARD_ARGS(XSLTPROC DEFAULT_MSG XSLTPROC_EXECUTABLE)
31 MARK_AS_ADVANCED(XSLTPROC_EXECUTABLE)
33 set (_common_xsltproc_args
34 --stringparam use.id.as.filename 1
35 --stringparam admon.graphics 1
36 --stringparam admon.graphics.extension .svg
37 --stringparam section.autolabel 1
38 --stringparam section.label.includes.component.label 1
39 --stringparam html.stylesheet ws.css
42 if (WIN32 AND NOT "${CYGWIN_INSTALL_PATH}" STREQUAL "" AND ${XSLTPROC_EXECUTABLE} MATCHES "${CYGWIN_INSTALL_PATH}")
43 FIND_PROGRAM(CYGPATH_EXECUTABLE
45 PATHS ${CYGWIN_INSTALL_PATH}/bin
47 # XXX Duplicate of TO_A2X_COMPATIBLE_PATH
48 MACRO( TO_XSLTPROC_COMPATIBLE_PATH _cmake_path _result )
50 COMMAND ${CYGPATH_EXECUTABLE} -u ${_cmake_path}
51 OUTPUT_VARIABLE _cygwin_path
53 # cygpath adds a linefeed.
54 string(STRIP "${_cygwin_path}" _cygwin_path)
56 set( ${_result} ${_cygwin_path} )
59 TO_XSLTPROC_COMPATIBLE_PATH( ${CMAKE_CURRENT_SOURCE_DIR} _xsltproc_current_source_dir )
60 TO_XSLTPROC_COMPATIBLE_PATH( ${CMAKE_CURRENT_BINARY_DIR} _xsltproc_current_binary_dir )
62 set ( _xsltproc_path "${_xsltproc_current_source_dir}:${_xsltproc_current_binary_dir}:${_xsltproc_current_binary_dir}/wsluarm_src")
64 set ( _xsltproc_path "${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_CURRENT_BINARY_DIR}:${CMAKE_CURRENT_BINARY_DIR}/wsluarm_src")
67 # Workaround for parallel build issue with msbuild.
68 # https://gitlab.kitware.com/cmake/cmake/issues/16767
69 if(CMAKE_GENERATOR MATCHES "Visual Studio")
70 # msbuild (as used by the Visual Studio generators) must not depend on the XML
71 # file (otherwise the XML file will be generated multiple times, possibly in
72 # parallel, breaking the build). Workaround: add one dependency to generate
73 # the XML file when outdated, depend on the -stamp file to ensure that the
74 # target is rebuilt when the XML file is regenerated.
75 function(get_docbook_xml_depends varname _dbk_source)
77 "generate_${_dbk_source}"
78 "${CMAKE_CURRENT_BINARY_DIR}/${_dbk_source}-stamp"
83 # Unix Makefiles, Ninja, etc: first dependency enforces that the XML file is
84 # rebuilt when outdated, the second dependency ensures that the target is
85 # rebuilt when the XML file has changed.
86 function(get_docbook_xml_depends varname _dbk_source)
88 "generate_${_dbk_source}"
95 # Translate XML to HTML
98 # single-page or chunked
102 MACRO(XML2HTML _target_dep _dir_pfx _mode _dbk_source _gfx_sources)
103 # We depend on the docbook target to avoid parallel builds.
104 SET(_dbk_dep ${_target_dep}_docbook)
106 IF(${_mode} STREQUAL "chunked")
107 SET(_basedir ${_dir_pfx}_html_chunked)
108 SET(_STYLESHEET "http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
109 SET(_modeparams --noout)
111 SET(_basedir ${_dir_pfx}_html)
112 SET(_STYLESHEET "http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl")
113 SET(_modeparams --output ${_basedir}/index.html)
116 SET(_out_dir ${CMAKE_CURRENT_BINARY_DIR}/${_basedir})
117 SET(_output ${_basedir}/index.html)
118 get_docbook_xml_depends(_dbk_xml_deps "${_dbk_source}")
120 FOREACH(_tmpgfx ${${_gfx_sources}})
121 set(_gfx_deps ${CMAKE_CURRENT_SOURCE_DIR}/${_tmpgfx})
124 # GET_FILENAME_COMPONENT(_GFXDIR ${_gfx} ABSOLUTE)
125 # GET_FILENAME_COMPONENT(_GFXDIR ${_GFXDIR} PATH)
126 # GET_FILENAME_COMPONENT(_OUTDIR ${_output} PATH)
127 # SET(_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/${_OUTDIR})
129 SET(_gfx_dir ${_dir_pfx}_graphics)
133 COMMAND ${CMAKE_COMMAND}
134 -E make_directory ${_out_dir}
135 COMMAND ${CMAKE_COMMAND}
136 -E make_directory ${_out_dir}/${_gfx_dir}/toolbar
137 COMMAND ${CMAKE_COMMAND}
138 -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/${_gfx_dir} ${_out_dir}/${_gfx_dir}
139 COMMAND ${CMAKE_COMMAND}
140 -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/common_graphics ${_out_dir}/${_gfx_dir}
141 COMMAND ${CMAKE_COMMAND}
142 -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/${_gfx_dir}/toolbar ${_out_dir}/${_gfx_dir}/toolbar
143 COMMAND ${CMAKE_COMMAND}
144 -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/ws.css ${_out_dir}
145 COMMAND ${XSLTPROC_EXECUTABLE}
146 --path "${_xsltproc_path}"
147 --stringparam base.dir ${_basedir}/
148 ${_common_xsltproc_args}
149 --stringparam admon.graphics.path ${_gfx_dir}/
169 # Translate XML to FO to PDF
171 # user-guide-a4.fo or user-guide-us.fo
173 # custom_layer_pdf.xsl
176 MACRO(XML2PDF _target_dep _output _dbk_source _stylesheet)
177 # We depend on the docbook target to avoid parallel builds.
178 SET(_dbk_dep ${_target_dep}_docbook)
179 file(RELATIVE_PATH _img_relative_path ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
180 get_docbook_xml_depends(_dbk_xml_deps "${_dbk_source}")
185 COMMAND ${XSLTPROC_EXECUTABLE}
186 --path "${_xsltproc_path}"
187 --stringparam img.src.path ${_img_relative_path}/
188 --stringparam use.id.as.filename 1
189 --stringparam admon.graphics.path ${_img_relative_path}/common_graphics/
191 --output ${_output}.fo
194 COMMAND ${FOP_EXECUTABLE}
204 # Translate XML to HHP
207 # user-guide.xml or developer-guide.xml
209 MACRO(XML2HHP _target_dep _guide _dbk_source)
210 # We depend on the docbook target to avoid parallel builds.
211 SET(_dbk_dep ${_target_dep}_docbook)
212 GET_FILENAME_COMPONENT( _source_base_name ${_dbk_source} NAME_WE )
213 set( _output_chm ${_source_base_name}.chm )
214 set( _output_hhp ${_source_base_name}.hhp )
215 set( _output_toc_hhc ${_source_base_name}-toc.hhc )
216 set( _docbook_plain_title ${_source_base_name}-plain-title.xml )
217 get_docbook_xml_depends(_dbk_xml_deps "${_dbk_source}")
219 SET(_gfxdir ${_guide}_graphics)
220 SET(_basedir ${_guide}_chm)
225 COMMAND ${CMAKE_COMMAND} -E make_directory ${_basedir}
226 COMMAND ${CMAKE_COMMAND} -E make_directory ${_basedir}/${_gfxdir}
227 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/${_gfxdir} ${_basedir}/${_gfxdir}
228 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/common_graphics ${_basedir}/${_gfxdir}
229 # HTML Help doesn't render decimal character entities in the title.
230 COMMAND ${PERL_EXECUTABLE} -p
231 -e "s|er’s Guide</title>|er's Guide</title>|"
233 > ${_docbook_plain_title}
234 COMMAND ${XSLTPROC_EXECUTABLE}
235 --path "${_xsltproc_path}"
236 --stringparam base.dir ${_basedir}/
237 --stringparam htmlhelp.chm ${_output_chm}
238 --stringparam htmlhelp.hhp ${_output_hhp}
239 --stringparam htmlhelp.hhc ${_output_toc_hhc}
240 ${_common_xsltproc_args}
241 --stringparam admon.graphics.path ${_gfxdir}/
242 --nonet custom_layer_chm.xsl
243 ${_docbook_plain_title}
247 # AsciiDoc uses UTF-8 by default, which is unsupported by HTML
248 # Help. We may want to render an ISO-8859-1 version, or get rid