4 # ASCIIDOCTOR_EXECUTABLE
7 INCLUDE(FindChocolatey)
9 FIND_PROGRAM(ASCIIDOCTOR_EXECUTABLE
18 # XXX Add Asciidoctor.js releases (asciidoctor-linux,
19 # asciidoctor-macos, asciidoctor-win) if that ever becomes an option.
24 ${CHOCOLATEY_BIN_PATH}
25 DOC "Path to Asciidoctor or AsciidoctorJ"
28 if(ASCIIDOCTOR_EXECUTABLE)
29 # As of 2.2.0 the AsciidctorJ wrapper script sets -Xmn128m -Xms256m -Xmx256m.
30 # This isn't enough for the User's Guide.
31 set(_asciidoctorj_opts "-Xmn256m -Xms512m -Xmx2048m $ENV{ASCIIDOCTORJ_OPTS}")
32 execute_process( COMMAND ${ASCIIDOCTOR_EXECUTABLE} --version OUTPUT_VARIABLE _ad_full_version )
33 separate_arguments(_ad_full_version)
34 list(GET _ad_full_version 1 ASCIIDOCTOR_VERSION)
36 function(set_asciidoctor_target_properties _target)
37 set_target_properties(${_target} PROPERTIES
38 FOLDER "Documentation"
39 EXCLUDE_FROM_DEFAULT_BUILD True
41 endfunction(set_asciidoctor_target_properties)
43 set (_ad_failure_level_args)
45 execute_process( COMMAND ${ASCIIDOCTOR_EXECUTABLE} --help OUTPUT_VARIABLE _ad_help )
46 if (_ad_help MATCHES "--failure-level")
47 set (_ad_failure_level_args --failure-level WARN)
51 set (_asciidoctor_common_args
52 # AsciidoctorJ added --failure-level in version 2.5.6
55 ${_ad_failure_level_args}
56 --attribute build_dir=${CMAKE_BINARY_DIR}/doc
57 --attribute css_dir=${CMAKE_SOURCE_DIR}/doc
58 --attribute min-macos-version=${MIN_MACOS_VERSION}
59 --require ${CMAKE_SOURCE_DIR}/doc/asciidoctor-macros/ws_utils.rb
60 --require ${CMAKE_SOURCE_DIR}/doc/asciidoctor-macros/commaize-block.rb
61 --require ${CMAKE_SOURCE_DIR}/doc/asciidoctor-macros/cveidlink-inline-macro.rb
62 --require ${CMAKE_SOURCE_DIR}/doc/asciidoctor-macros/manarg-block.rb
63 --require ${CMAKE_SOURCE_DIR}/doc/asciidoctor-macros/wsbuglink-inline-macro.rb
64 --require ${CMAKE_SOURCE_DIR}/doc/asciidoctor-macros/wssalink-inline-macro.rb
67 unset(_ad_full_version)
69 unset(_ad_failure_level_args)
71 set(_asciidoctor_common_command
72 ${CMAKE_COMMAND} -E env TZ=UTC
73 ${ASCIIDOCTOR_EXECUTABLE}
74 ${_asciidoctor_common_args}
77 set(_asciidoctor_docbook_common_command
78 ${CMAKE_COMMAND} -E env TZ=UTC ASCIIDOCTORJ_OPTS=${_asciidoctorj_opts}
79 ${ASCIIDOCTOR_EXECUTABLE}
80 ${_asciidoctor_common_args}
83 MACRO( ASCIIDOCTOR2DOCBOOK _asciidocsource )
84 GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
85 set( _output_xml ${_source_base_name}.xml )
90 COMMAND ${_asciidoctor_docbook_common_command}
92 --out-file ${_output_xml}
93 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
95 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
96 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
99 if(CMAKE_GENERATOR MATCHES "Visual Studio")
103 COMMAND ${CMAKE_COMMAND} -E touch ${_output_xml}-stamp
104 DEPENDS ${_output_xml}
106 add_custom_target(generate_${_output_xml} DEPENDS ${_output_xml}-stamp)
108 add_custom_target(generate_${_output_xml} DEPENDS ${_output_xml})
110 set_asciidoctor_target_properties(generate_${_output_xml})
114 # Single page only, for the release notes and other user-facing documentation.
115 # Man pages are converted separately below.
116 function(ASCIIDOCTOR2HTML _asciidocsource)
117 cmake_parse_arguments(arg "CONVERT_UNDERSCORES" "OUTPUT" "" ${ARGN})
118 get_filename_component(_source_base_name ${_asciidocsource} NAME_WE)
119 if (arg_CONVERT_UNDERSCORES)
120 string(REPLACE "_" " " _source_base_name ${_source_base_name})
123 set(_output_html ${arg_OUTPUT})
125 set(_output_html ${_source_base_name}.html)
131 COMMAND ${_asciidoctor_common_command}
133 --out-file ${_output_html}
134 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
136 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
137 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
140 # string(REPLACE " " "_" _output_target ${_source_base_name})
141 # add_custom_target(generate_${_output_target}_html DEPENDS ${_output_html})
142 # set_asciidoctor_target_properties(generate_${_output_target}_html)
145 function(ASCIIDOCTOR2TXT _asciidocsource)
146 cmake_parse_arguments(arg "CONVERT_UNDERSCORES" "" "" ${ARGN})
147 get_filename_component(_source_base_name ${_asciidocsource} NAME_WE)
148 if (arg_CONVERT_UNDERSCORES)
149 string(REPLACE "_" " " _source_base_name ${_source_base_name})
151 set(_input_html ${_source_base_name}.html)
152 set(_output_txt ${_source_base_name}.txt)
157 COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/html2text.py
162 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
163 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
169 # Generate one or more ROFF man pages
170 function(ASCIIDOCTOR2ROFFMAN _man_section)
173 foreach(_src_file ${ARGN})
174 list(APPEND _input_adoc ${_src_file})
175 GET_FILENAME_COMPONENT(_source_base_name ${_src_file} NAME_WE )
176 list(APPEND _output_man man_pages/${_source_base_name}.${_man_section} )
182 COMMAND ${_asciidoctor_common_command}
184 --destination-dir ${CMAKE_CURRENT_BINARY_DIR}/man_pages
188 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
193 # Generate one or more HTML man pages
194 function(ASCIIDOCTOR2HTMLMAN)
197 foreach(_src_file ${ARGN})
198 list(APPEND _input_adoc ${_src_file})
199 GET_FILENAME_COMPONENT(_source_base_name ${_src_file} NAME_WE )
200 list(APPEND _output_man man_pages/${_source_base_name}.html )
206 COMMAND ${_asciidoctor_common_command}
208 --destination-dir ${CMAKE_CURRENT_BINARY_DIR}/man_pages
212 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
217 FIND_PROGRAM(ASCIIDOCTOR_PDF_EXECUTABLE
226 ${CHOCOLATEY_BIN_PATH}
227 DOC "Path to Asciidoctor PDF or AsciidoctorJ"
230 if(ASCIIDOCTOR_PDF_EXECUTABLE)
232 set(_asciidoctor_pdf_common_command
233 ${CMAKE_COMMAND} -E env TZ=UTC "ASCIIDOCTORJ_OPTS=${_asciidoctorj_opts}"
234 ${ASCIIDOCTOR_PDF_EXECUTABLE}
235 --require asciidoctor-pdf
237 ${_asciidoctor_common_args}
240 MACRO( ASCIIDOCTOR2PDF _title _asciidocsource )
241 GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
242 set(_generate_pdf "generate_${_source_base_name}_pdf")
243 set(_output_pdf "${_title}.pdf")
248 COMMAND ${_asciidoctor_pdf_common_command}
249 --out-file "${_output_pdf}"
250 -a pdf-fontsdir=${CMAKE_SOURCE_DIR}/resources/fonts
251 -a pdf-themesdir=${CMAKE_SOURCE_DIR}/doc/asciidoctor-themes
253 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
255 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
256 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
260 add_custom_target(${_generate_pdf} DEPENDS ${_output_pdf})
261 set_asciidoctor_target_properties(${_generate_pdf})
266 else(ASCIIDOCTOR_PDF_EXECUTABLE)
268 MACRO( ASCIIDOCTOR2PDF _asciidocsource )
271 endif(ASCIIDOCTOR_PDF_EXECUTABLE)
273 FIND_PROGRAM(ASCIIDOCTOR_EPUB_EXECUTABLE
276 asciidoctor-epub3.bat
282 ${CHOCOLATEY_BIN_PATH}
283 DOC "Path to Asciidoctor EPUB3 or AsciidoctorJ"
286 if(ASCIIDOCTOR_EPUB_EXECUTABLE)
288 set(_asciidoctor_epub_common_command
289 ${CMAKE_COMMAND} -E env TZ=UTC "ASCIIDOCTORJ_OPTS=${_asciidoctorj_opts}"
290 ${ASCIIDOCTOR_EPUB_EXECUTABLE}
292 ${_asciidoctor_common_args}
295 MACRO(ASCIIDOCTOR2EPUB _title _asciidocsource)
296 GET_FILENAME_COMPONENT(_source_base_name ${_asciidocsource} NAME_WE)
297 set(_generate_epub "generate_${_source_base_name}_epub")
298 set(_output_epub "${_title}.epub")
303 COMMAND ${_asciidoctor_epub_common_command}
304 --out-file "${_output_epub}"
305 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
307 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
308 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
312 add_custom_target(${_generate_epub} DEPENDS ${_output_epub})
313 set_asciidoctor_target_properties(${_generate_epub})
314 unset(_generate_epub)
318 else(ASCIIDOCTOR_EPUB_EXECUTABLE)
320 MACRO(ASCIIDOCTOR2EPUB _asciidocsource)
323 endif(ASCIIDOCTOR_EPUB_EXECUTABLE)
325 endif(ASCIIDOCTOR_EXECUTABLE)
327 include( FindPackageHandleStandardArgs )
328 find_package_handle_standard_args( Asciidoctor
329 REQUIRED_VARS ASCIIDOCTOR_EXECUTABLE
330 VERSION_VAR ASCIIDOCTOR_VERSION
333 mark_as_advanced( ASCIIDOCTOR_EXECUTABLE )