tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm subcontext 32 bits
[wireshark-sm.git] / cmake / modules / FindAsciidoctor.cmake
blobc2bc73a2e03e9caf55a2ed8b1d26708505854d55
2 # - Find Asciidoctor
3 # Sets:
4 #  ASCIIDOCTOR_EXECUTABLE
7 INCLUDE(FindChocolatey)
9 FIND_PROGRAM(ASCIIDOCTOR_EXECUTABLE
10     NAMES
11         asciidoctorj.cmd
12         asciidoctorj.bat
13         asciidoctorj
14         asciidoctor.cmd
15         asciidoctor.bat
16         asciidoctor
17         asciidoctor.ruby2.1
18         # XXX Add Asciidoctor.js releases (asciidoctor-linux,
19         # asciidoctor-macos, asciidoctor-win) if that ever becomes an option.
20     PATHS
21         /bin
22         /usr/bin
23         /usr/local/bin
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
40         )
41     endfunction(set_asciidoctor_target_properties)
43     set (_ad_failure_level_args)
44     if (ENABLE_WERROR)
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)
48         endif()
49     endif()
51     set (_asciidoctor_common_args
52         # AsciidoctorJ added --failure-level in version 2.5.6
53         # --trace
54         --quiet
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
65     )
67     unset(_ad_full_version)
68     unset(_ad_help)
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}
75     )
77     set(_asciidoctor_docbook_common_command
78         ${CMAKE_COMMAND} -E env TZ=UTC ASCIIDOCTORJ_OPTS=${_asciidoctorj_opts}
79         ${ASCIIDOCTOR_EXECUTABLE}
80         ${_asciidoctor_common_args}
81     )
83     MACRO( ASCIIDOCTOR2DOCBOOK _asciidocsource )
84         GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
85         set( _output_xml ${_source_base_name}.xml )
87         add_custom_command(
88             OUTPUT
89                 ${_output_xml}
90             COMMAND ${_asciidoctor_docbook_common_command}
91                 --backend docbook
92                 --out-file ${_output_xml}
93                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
94             DEPENDS
95                 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
96                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
97                 ${ARGN}
98         )
99         if(CMAKE_GENERATOR MATCHES "Visual Studio")
100             add_custom_command(
101                 OUTPUT
102                     ${_output_xml}-stamp
103                 COMMAND ${CMAKE_COMMAND} -E touch ${_output_xml}-stamp
104                 DEPENDS ${_output_xml}
105             )
106             add_custom_target(generate_${_output_xml} DEPENDS ${_output_xml}-stamp)
107         else()
108             add_custom_target(generate_${_output_xml} DEPENDS ${_output_xml})
109         endif()
110         set_asciidoctor_target_properties(generate_${_output_xml})
111         unset(_output_xml)
112     ENDMACRO()
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})
121         endif()
122         if (arg_OUTPUT)
123             set(_output_html ${arg_OUTPUT})
124         else()
125             set(_output_html ${_source_base_name}.html)
126         endif()
128         ADD_CUSTOM_COMMAND(
129             OUTPUT
130                 ${_output_html}
131             COMMAND ${_asciidoctor_common_command}
132                 --backend html
133                 --out-file ${_output_html}
134                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
135             DEPENDS
136                 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
137                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
138                 ${_asciidocsource}
139         )
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)
143     endfunction()
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})
150         endif()
151         set(_input_html ${_source_base_name}.html)
152         set(_output_txt ${_source_base_name}.txt)
154         ADD_CUSTOM_COMMAND(
155             OUTPUT
156                 ${_output_txt}
157             COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/html2text.py
158                 ${_input_html}
159                 > ${_output_txt}
160             DEPENDS
161                 ${MAN_INCLUDES}
162                 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
163                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
164                 ${_input_html}
165                 ${_asciidocsource}
166         )
167     endfunction()
169     # Generate one or more ROFF man pages
170     function(ASCIIDOCTOR2ROFFMAN _man_section)
171         set(_input_adoc)
172         set(_output_man)
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} )
177         endforeach()
179         ADD_CUSTOM_COMMAND(
180             OUTPUT
181                 ${_output_man}
182             COMMAND ${_asciidoctor_common_command}
183                 --backend manpage
184                 --destination-dir ${CMAKE_CURRENT_BINARY_DIR}/man_pages
185                 ${_input_adoc}
186             DEPENDS
187                 ${MAN_INCLUDES}
188                 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
189                 ${_input_adoc}
190         )
191     endfunction()
193     # Generate one or more HTML man pages
194     function(ASCIIDOCTOR2HTMLMAN)
195         set(_input_adoc)
196         set(_output_man)
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 )
201         endforeach()
203         ADD_CUSTOM_COMMAND(
204             OUTPUT
205                 ${_output_man}
206             COMMAND ${_asciidoctor_common_command}
207                 --backend html
208                 --destination-dir ${CMAKE_CURRENT_BINARY_DIR}/man_pages
209                 ${_input_adoc}
210             DEPENDS
211                 ${MAN_INCLUDES}
212                 ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
213                 ${_input_adoc}
214         )
215     endfunction()
217     FIND_PROGRAM(ASCIIDOCTOR_PDF_EXECUTABLE
218         NAMES
219             asciidoctorj
220             asciidoctor-pdf.bat
221             asciidoctor-pdf
222         PATHS
223             /bin
224             /usr/bin
225             /usr/local/bin
226             ${CHOCOLATEY_BIN_PATH}
227         DOC "Path to Asciidoctor PDF or AsciidoctorJ"
228     )
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
236             --backend pdf
237             ${_asciidoctor_common_args}
238         )
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")
245             ADD_CUSTOM_COMMAND(
246             OUTPUT
247                     ${_output_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
252                     -a pdf-theme=wsug
253                     ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
254             DEPENDS
255                     ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
256                     ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
257                     ${ARGN}
258             VERBATIM
259             )
260             add_custom_target(${_generate_pdf} DEPENDS ${_output_pdf})
261             set_asciidoctor_target_properties(${_generate_pdf})
262             unset(_generate_pdf)
263             unset(_output_pdf)
264         ENDMACRO()
266     else(ASCIIDOCTOR_PDF_EXECUTABLE)
268         MACRO( ASCIIDOCTOR2PDF _asciidocsource )
269         ENDMACRO()
271     endif(ASCIIDOCTOR_PDF_EXECUTABLE)
273     FIND_PROGRAM(ASCIIDOCTOR_EPUB_EXECUTABLE
274         NAMES
275             asciidoctorj
276             asciidoctor-epub3.bat
277             asciidoctor-epub3
278         PATHS
279             /bin
280             /usr/bin
281             /usr/local/bin
282             ${CHOCOLATEY_BIN_PATH}
283         DOC "Path to Asciidoctor EPUB3 or AsciidoctorJ"
284     )
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}
291             --backend epub3
292             ${_asciidoctor_common_args}
293         )
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")
300             ADD_CUSTOM_COMMAND(
301             OUTPUT
302                     ${_output_epub}
303             COMMAND ${_asciidoctor_epub_common_command}
304                     --out-file "${_output_epub}"
305                     ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
306             DEPENDS
307                     ${CMAKE_SOURCE_DIR}/doc/attributes.adoc
308                     ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
309                     ${ARGN}
310             VERBATIM
311             )
312             add_custom_target(${_generate_epub} DEPENDS ${_output_epub})
313             set_asciidoctor_target_properties(${_generate_epub})
314             unset(_generate_epub)
315             unset(_output_epub)
316         ENDMACRO()
318     else(ASCIIDOCTOR_EPUB_EXECUTABLE)
320         MACRO(ASCIIDOCTOR2EPUB _asciidocsource)
321         ENDMACRO()
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
331     )
333 mark_as_advanced( ASCIIDOCTOR_EXECUTABLE )