Asciidoctor: Remove underscores from macro names.
[metze/wireshark/wip.git] / cmake / modules / FindAsciidoctor.cmake
1 #
2 # - Find Asciidoctor
3 # Sets:
4 #  ASCIIDOCTOR_EXECUTABLE
5 #
6
7 INCLUDE(FindChocolatey)
8
9 FIND_PROGRAM(ASCIIDOCTOR_EXECUTABLE
10     NAMES
11         asciidoctorj
12         asciidoctor
13         asciidoctor.ruby2.1
14     PATHS
15         /bin
16         /usr/bin
17         /usr/local/bin
18         ${CHOCOLATEY_BIN_PATH}
19     DOC "Path to Asciidoctor or AsciidoctorJ"
20 )
21
22 if(ASCIIDOCTOR_EXECUTABLE)
23     # The AsciidctorJ wrapper script sets -Xmx256m. This isn't enough
24     # for the User's Guide.
25     set(_asciidoctorj_opts -Xmx800m $ENV{ASCIIDOCTORJ_OPTS})
26     execute_process( COMMAND ${ASCIIDOCTOR_EXECUTABLE} --version OUTPUT_VARIABLE _ad_full_version )
27     separate_arguments(_ad_full_version)
28     list(GET _ad_full_version 1 ASCIIDOCTOR_VERSION)
29
30     function(set_asciidoctor_target_properties _target)
31         set_target_properties(${_target} PROPERTIES
32             FOLDER "Docbook"
33             EXCLUDE_FROM_DEFAULT_BUILD True
34             )
35     endfunction(set_asciidoctor_target_properties)
36
37     set (_asciidoctor_common_args
38         --attribute build_dir=${CMAKE_CURRENT_BINARY_DIR}
39         --require ${CMAKE_CURRENT_SOURCE_DIR}/asciidoctor-macros/commaize-block.rb
40         --require ${CMAKE_CURRENT_SOURCE_DIR}/asciidoctor-macros/cveidlink-inline-macro.rb
41         --require ${CMAKE_CURRENT_SOURCE_DIR}/asciidoctor-macros/wsbuglink-inline-macro.rb
42         --require ${CMAKE_CURRENT_SOURCE_DIR}/asciidoctor-macros/wssalink-inline-macro.rb
43     )
44
45     set(_asciidoctor_common_command
46         ${CMAKE_COMMAND} -E env TZ=UTC ASCIIDOCTORJ_OPTS="${_asciidoctorj_opts}"
47         ${ASCIIDOCTOR_EXECUTABLE}
48         ${_asciidoctor_common_args}
49     )
50
51     MACRO( ASCIIDOCTOR2DOCBOOK _asciidocsource )
52         GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
53         set( _output_xml ${_source_base_name}.xml )
54
55         add_custom_command(
56             OUTPUT
57                 ${_output_xml}
58             COMMAND ${_asciidoctor_common_command}
59                 --backend docbook
60                 --out-file ${_output_xml}
61                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
62             DEPENDS
63                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
64                 ${ARGN}
65         )
66         add_custom_target(generate_${_output_xml} DEPENDS ${_output_xml})
67         set_asciidoctor_target_properties(generate_${_output_xml})
68         unset(_output_xml)
69     ENDMACRO()
70
71     # Currently single page only.
72     MACRO( ASCIIDOCTOR2HTML _asciidocsource )
73         GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
74         set( _output_html ${_source_base_name}.html )
75
76         ADD_CUSTOM_COMMAND(
77             OUTPUT
78                 ${_output_html}
79             COMMAND ${_asciidoctor_common_command}
80                 --backend html
81                 --out-file ${_output_html}
82                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
83             DEPENDS
84                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
85                 ${ARGN}
86         )
87         add_custom_target(generate_${_output_html} DEPENDS ${_output_html})
88         set_asciidoctor_target_properties(generate_${_output_html})
89         unset(_output_html)
90     ENDMACRO()
91
92     MACRO( ASCIIDOCTOR2TXT _asciidocsource )
93         GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
94         set( _output_html ${_source_base_name}.html )
95         set( _output_txt ${_source_base_name}.txt )
96
97         ADD_CUSTOM_COMMAND(
98         OUTPUT
99                 ${_output_txt}
100         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/html2text.py
101                 ${_output_html}
102                 > ${_output_txt}
103         DEPENDS
104                 ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
105                 ${_output_html}
106                 ${ARGN}
107         )
108         unset(_output_html)
109         unset(_output_txt)
110     ENDMACRO()
111
112     # news: release-notes.txt
113     #         ${CMAKE_COMMAND} -E copy_if_different release-notes.txt ../NEWS
114
115     FIND_PROGRAM(ASCIIDOCTOR_PDF_EXECUTABLE
116         NAMES
117             asciidoctorj
118             asciidoctor-pdf
119         PATHS
120             /bin
121             /usr/bin
122             /usr/local/bin
123             ${CHOCOLATEY_BIN_PATH}
124         DOC "Path to Asciidoctor PDF or AsciidoctorJ"
125     )
126
127     if(ASCIIDOCTOR_PDF_EXECUTABLE)
128
129         set(_asciidoctor_pdf_common_command
130             ${CMAKE_COMMAND} -E env TZ=UTC ASCIIDOCTORJ_OPTS="${_asciidoctorj_opts}"
131             ${ASCIIDOCTOR_PDF_EXECUTABLE}
132             --require asciidoctor-pdf
133             --backend pdf
134             ${_asciidoctor_common_args}
135         )
136
137         MACRO( ASCIIDOCTOR2PDF _asciidocsource )
138             GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
139             set( _output_pdf ${_source_base_name}.pdf )
140
141             ADD_CUSTOM_COMMAND(
142             OUTPUT
143                     ${_output_pdf}
144             COMMAND ${_asciidoctor_pdf_common_command}
145                     --out-file ${_output_pdf}
146                     ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
147             DEPENDS
148                     ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
149                     ${ARGN}
150             )
151             add_custom_target(generate_${_output_pdf} DEPENDS ${_output_pdf})
152             set_asciidoctor_target_properties(generate_${_output_pdf})
153             unset(_output_pdf)
154         ENDMACRO()
155
156     else(ASCIIDOCTOR_PDF_EXECUTABLE)
157
158         MACRO( ASCIIDOCTOR2PDF _asciidocsource )
159         ENDMACRO()
160
161     endif(ASCIIDOCTOR_PDF_EXECUTABLE)
162
163 endif(ASCIIDOCTOR_EXECUTABLE)
164
165 include( FindPackageHandleStandardArgs )
166 find_package_handle_standard_args( ASCIIDOCTOR
167     REQUIRED_VARS ASCIIDOCTOR_EXECUTABLE
168     VERSION_VAR ASCIIDOCTOR_VERSION
169     )
170
171 mark_as_advanced( ASCIIDOCTOR_EXECUTABLE )