CMake: Try to fix the xsltproc path.
[metze/wireshark/wip.git] / cmake / modules / FindXSLTPROC.cmake
1 #
2 # - Find unix commands from cygwin
3 # This module looks for some usual Unix commands.
4 #
5
6 INCLUDE(FindCygwin)
7
8 FIND_PACKAGE(SED)
9
10 FIND_PROGRAM(XSLTPROC_EXECUTABLE
11   NAMES
12     xsltproc
13   PATHS
14     ${CYGWIN_INSTALL_PATH}/bin
15     /bin
16     /usr/bin
17     /usr/local/bin
18     /sbin
19 )
20
21 # Handle the QUIETLY and REQUIRED arguments and set XSLTPROC_FOUND to TRUE if
22 # all listed variables are TRUE
23 INCLUDE(FindPackageHandleStandardArgs)
24 FIND_PACKAGE_HANDLE_STANDARD_ARGS(XSLTPROC DEFAULT_MSG XSLTPROC_EXECUTABLE)
25
26 MARK_AS_ADVANCED(XSLTPROC_EXECUTABLE)
27
28 set (_common_xsltproc_args
29     --stringparam use.id.as.filename 1
30     --stringparam admon.graphics 1
31     --stringparam admon.graphics.extension .svg
32     --stringparam section.autolabel 1
33     --stringparam section.label.includes.component.label 1
34     --stringparam html.stylesheet ws.css
35     )
36
37 if (WIN32 AND NOT "${CYGWIN_INSTALL_PATH}" STREQUAL "" AND ${XSLTPROC_EXECUTABLE} MATCHES "${CYGWIN_INSTALL_PATH}")
38     FIND_PROGRAM(CYGPATH_EXECUTABLE
39         NAMES cygpath
40         PATHS ${CYGWIN_INSTALL_PATH}/bin
41     )
42     # XXX Duplicate of TO_A2X_COMPATIBLE_PATH
43     MACRO( TO_XSLTPROC_COMPATIBLE_PATH _cmake_path _result )
44         execute_process(
45             COMMAND ${CYGPATH_EXECUTABLE} -u ${_cmake_path}
46             OUTPUT_VARIABLE _cygwin_path
47         )
48         # cygpath adds a linefeed.
49         string(STRIP "${_cygwin_path}" _cygwin_path)
50
51         set( ${_result} ${_cygwin_path} )
52     ENDMACRO()
53
54     TO_XSLTPROC_COMPATIBLE_PATH( ${CMAKE_CURRENT_SOURCE_DIR} _xsltproc_current_source_dir )
55     TO_XSLTPROC_COMPATIBLE_PATH( ${CMAKE_CURRENT_BINARY_DIR} _xsltproc_current_binary_dir )
56
57     set ( _xsltproc_path "${_xsltproc_current_source_dir}:${_xsltproc_current_binary_dir}:${_xsltproc_current_binary_dir}/wsluarm_src")
58 else()
59     set ( _xsltproc_path "${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_CURRENT_BINARY_DIR}:${CMAKE_CURRENT_BINARY_DIR}/wsluarm_src")
60 endif()
61
62 # Translate XML to HTML
63 #XML2HTML(
64 #        wsug or wsdg
65 #        single-page or chunked
66 #        WSUG_FILES
67 #        WSUG_GRAPHICS
68 #)
69 MACRO(XML2HTML _guide _mode _xmlsources _gfxsources)
70     SET(_validated ${_guide}.validated)
71
72     IF(${_mode} STREQUAL "chunked")
73         SET(_basedir ${_guide}_html_chunked)
74         SET(_STYLESHEET "http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
75         SET(_modeparams --noout)
76     ELSE() # single-page
77         SET(_basedir ${_guide}_html)
78         SET(_STYLESHEET "http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl")
79         SET(_modeparams --output ${_basedir}/index.html)
80     ENDIF()
81
82     SET(_outdir ${CMAKE_CURRENT_BINARY_DIR}/${_basedir})
83     SET(_output ${_basedir}/index.html)
84
85 #    FOREACH(_tmpgfx ${${_gfxsources}})
86 #        set(_gfx ${_tmpgfx})
87 #        BREAK()
88 #    ENDFOREACH()
89 #    GET_FILENAME_COMPONENT(_GFXDIR ${_gfx} ABSOLUTE)
90 #    GET_FILENAME_COMPONENT(_GFXDIR ${_GFXDIR} PATH)
91 #    GET_FILENAME_COMPONENT(_OUTDIR ${_output} PATH)
92 #    SET(_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/${_OUTDIR})
93
94     FOREACH(_tmpsource ${${_xmlsources}})
95         set(_source ${_tmpsource})
96         BREAK()
97     ENDFOREACH()
98
99     SET(_gfxdir ${_guide}_graphics)
100     ADD_CUSTOM_COMMAND(
101         OUTPUT
102             ${_output}
103         COMMAND cmake
104             -E make_directory ${_outdir}
105         COMMAND cmake
106            -E make_directory ${_outdir}/${_gfxdir}/toolbar
107         COMMAND cp
108            ${CMAKE_CURRENT_SOURCE_DIR}/${_gfxdir}/*.* ${_outdir}/${_gfxdir}/
109         COMMAND cp
110            ${CMAKE_CURRENT_SOURCE_DIR}/common_graphics/*.* ${_outdir}/${_gfxdir}/
111         COMMAND cp
112            ${CMAKE_CURRENT_SOURCE_DIR}/${_gfxdir}/toolbar/*.* ${_outdir}/${_gfxdir}/toolbar/
113         COMMAND cmake
114             -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ws.css ${_outdir}
115         COMMAND ${XSLTPROC_EXECUTABLE}
116             --path "${_xsltproc_path}"
117             --stringparam base.dir ${_basedir}/
118             ${_common_xsltproc_args}
119             --stringparam admon.graphics.path ${_gfxdir}/
120             ${_modeparams}
121             ${_STYLESHEET}
122             ${_source}
123         COMMAND chmod
124             -R og+rX ${_outdir}
125         DEPENDS
126             ${_validated}
127             ${${_xmlsources}}
128             ${${_gfxsources}}
129     )
130 ENDMACRO(XML2HTML)
131
132 # Translate XML to FO to PDF
133 #XML2PDF(
134 #       user-guide-a4.fo or user-guide-us.fo
135 #       WSUG_SOURCE
136 #       custom_layer_pdf.xsl
137 #       A4 or letter
138 #)
139 MACRO(XML2PDF _output _sources _stylesheet _paper)
140     FOREACH(_tmpsource ${${_sources}})
141         set(_source ${_tmpsource})
142         BREAK()
143     ENDFOREACH()
144
145     ADD_CUSTOM_COMMAND(
146         OUTPUT
147             ${_output}
148         COMMAND ${XSLTPROC_EXECUTABLE}
149             --path "${_xsltproc_path}"
150             --stringparam paper.type ${_paper}
151             --stringparam img.src.path ${CMAKE_CURRENT_SOURCE_DIR}/
152             --stringparam use.id.as.filename 1
153             --stringparam admon.graphics 1
154             --stringparam admon.graphics.path ${CMAKE_CURRENT_SOURCE_DIR}/common_graphics/
155             --stringparam admon.graphics.extension .svg
156             --nonet
157             --output ${_output}.fo
158             ${_stylesheet}
159             ${_source}
160         COMMAND ${FOP_EXECUTABLE}
161             ${_output}.fo
162             ${_output}
163         DEPENDS
164             ${${_sources}}
165             ${_stylesheet}
166     )
167 ENDMACRO(XML2PDF)
168
169 # Translate XML to HHP
170 #XML2HHP(
171 #       wsug or wsdg
172 #       user-guide.xml or developer-guide.xml
173 #)
174 MACRO(XML2HHP _guide _docbooksource)
175     GET_FILENAME_COMPONENT( _source_base_name ${_docbooksource} NAME_WE )
176     set( _output_chm ${_source_base_name}.chm )
177     set( _output_hhp ${_source_base_name}.hhp )
178     set( _output_toc_hhc ${_source_base_name}-toc.hhc )
179     set( _docbook_plain_title ${_source_base_name}-plain-title.xml )
180
181     SET(_gfxdir ${_guide}_graphics)
182     SET(_basedir ${_guide}_chm)
183     ADD_CUSTOM_COMMAND(
184         OUTPUT
185             ${_output_hhp}
186         COMMAND ${CMAKE_COMMAND} -E make_directory ${_basedir}
187         COMMAND ${CMAKE_COMMAND} -E make_directory ${_basedir}/${_gfxdir}
188         COMMAND ${CMAKE_COMMAND} -E copy_directory ${_gfxdir} ${_basedir}/${_gfxdir}
189         COMMAND ${CMAKE_COMMAND} -E copy_directory common_graphics ${_basedir}
190         COMMAND ${SED_EXECUTABLE}
191             -e "s|er&#8217;s Guide</title>|er's Guide</title>|"
192             < ${_docbooksource}
193             > ${_docbook_plain_title}
194         COMMAND ${XSLTPROC_EXECUTABLE}
195             --path "${_xsltproc_path}"
196             --stringparam base.dir ${_basedir}/
197             --stringparam htmlhelp.chm ${_output_chm}
198             --stringparam htmlhelp.hhp ${_output_hhp}
199             --stringparam htmlhelp.hhc ${_output_toc_hhc}
200             ${_common_xsltproc_args}
201             --stringparam admon.graphics.path ${_gfxdir}/
202             --nonet custom_layer_chm.xsl
203             ${_docbook_plain_title}
204         DEPENDS
205             ${_docbooksource}
206     )
207 ENDMACRO(XML2HHP)