diff options
author | Gerald Combs <gerald@wireshark.org> | 2015-01-06 16:59:32 -0800 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2015-01-08 22:05:38 +0000 |
commit | cd7408e526df2596b478ab622b90a8a2a60890c2 (patch) | |
tree | 21c87caa27168811a7b4858b02e0b0798f5d10d1 /cmake/modules/FindASCIIDOC.cmake | |
parent | 4b8c66891a830716bf1569b9d6aa6742bc47f81c (diff) | |
download | wireshark-cd7408e526df2596b478ab622b90a8a2a60890c2.tar.gz wireshark-cd7408e526df2596b478ab622b90a8a2a60890c2.tar.bz2 wireshark-cd7408e526df2596b478ab622b90a8a2a60890c2.zip |
CMake: Enable DocBook on Windows.
Add a wrapper script and CMake macros which lets us run Cygwin's a2x
from Windows. Add *another* wrapper script that ignores the return value
of hhc.exe.
Move the ASCIIDOC2DOCBOOK macro to FindASCIIDOC.cmake. Add FindHHC.cmake.
Add hints to FindFOP.cmake.
Use unique file names in the HTML Help chain in an attempt to avoid a
race condition.
To do:
- Fix curly quote in HHC title.
Change-Id: I9b154b7fbd02703656e2ab380199ec0a6db4e36d
Reviewed-on: https://code.wireshark.org/review/6379
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'cmake/modules/FindASCIIDOC.cmake')
-rw-r--r-- | cmake/modules/FindASCIIDOC.cmake | 131 |
1 files changed, 103 insertions, 28 deletions
diff --git a/cmake/modules/FindASCIIDOC.cmake b/cmake/modules/FindASCIIDOC.cmake index d957aec51c..a857188af2 100644 --- a/cmake/modules/FindASCIIDOC.cmake +++ b/cmake/modules/FindASCIIDOC.cmake @@ -3,28 +3,52 @@ # This module looks for some usual Unix commands. # -# XXX Trying to get this to work with Cygwin is going to be problematic. -# /usr/bin/a2x is a symlink to /usr/bin/a2x.py. I.e. we can't just call -# directly from Windows. -# Possible solutions: -# - Call a2x.py instead. -# - Wait for someone to create Chocolatey AsciiDoc + DocBook packages - INCLUDE(FindCygwin) FIND_PROGRAM(A2X_EXECUTABLE - NAMES - a2x - PATHS - ${CYGWIN_INSTALL_PATH}/bin - /bin - /usr/bin - /usr/local/bin - /sbin + NAMES + a2x + PATHS + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin ) -# Make sure we don't get language specific quotes -set( A2X_EXECUTABLE LC_ALL=C ${A2X_EXECUTABLE} ) +if (WIN32 AND NOT "${CYGWIN_INSTALL_PATH}" STREQUAL "" AND ${A2X_EXECUTABLE} MATCHES "${CYGWIN_INSTALL_PATH}") + FIND_PROGRAM(CYGPATH_EXECUTABLE + NAMES cygpath + PATHS ${CYGWIN_INSTALL_PATH}/bin + ) + + MACRO( TO_A2X_COMPATIBLE_PATH _cmake_path _result ) + execute_process( + COMMAND ${CYGPATH_EXECUTABLE} -u ${_cmake_path} + OUTPUT_VARIABLE _cygwin_path + ) + # cygpath adds a linefeed. + string(STRIP "${_cygwin_path}" _cygwin_path) + + set( ${_result} ${_cygwin_path} ) + ENDMACRO() + + TO_A2X_COMPATIBLE_PATH( ${CMAKE_SOURCE_DIR}/tools/runa2x.sh RUNA2X_CYGWIN_PATH ) + + # It's difficult or impossible to call /usr/bin/a2x directly from + # Windows because: + # - /usr/bin/a2x, which is a symlink to /usr/bin/a2x.py. + # - We need to set environment variables (LC_ALL, PATH, TZ, PYTHONHOME) + # so we use a wrapper script. + set( A2X_EXECUTABLE ${SH_EXECUTABLE} ${RUNA2X_CYGWIN_PATH} ) +else() + # Make sure we don't get language specific quotes + set( A2X_EXECUTABLE LC_ALL=C TZ=UTC ${A2X_EXECUTABLE} ) + + MACRO( TO_A2X_COMPATIBLE_PATH _cmake_path _result ) + set( ${_result} ${_cmake_path} ) + ENDMACRO() +endif() # Handle the QUIETLY and REQUIRED arguments and set ASCIIDOC_FOUND to TRUE if # all listed variables are TRUE @@ -33,6 +57,48 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ASCIIDOC DEFAULT_MSG A2X_EXECUTABLE) MARK_AS_ADVANCED(A2X_EXECUTABLE) +TO_A2X_COMPATIBLE_PATH( ${CMAKE_CURRENT_BINARY_DIR} _a2x_current_binary_dir ) + +MACRO( ASCIIDOC2DOCBOOK _asciidocsource _conf_files ) + GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE ) + set( A2X_HTML_OPTS --stylesheet=ws.css ) + set( _output_xml ${_source_base_name}.xml ) + set( _output_dbk ${_source_base_name}.dbk ) + + foreach(_conf_file ${_conf_files}) + TO_A2X_COMPATIBLE_PATH ( ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} _a2x_conf_file ) + set( _conf_opts_list ${_conf_opts_list} --conf-file=${_a2x_conf_file}) + endforeach() + string( REPLACE ";" " " _conf_opts "${_conf_opts_list}") + + foreach(_conf_file ${_conf_files}) + set( _conf_deps ${_conf_deps} ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file}) + endforeach() + + TO_A2X_COMPATIBLE_PATH ( ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource} _a2x_asciidocsource ) + + ADD_CUSTOM_COMMAND( + OUTPUT + ${_output_xml} + # XXX - Output to a specific directory, e.g. wsdg_generated_src + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${A2X_EXECUTABLE} + --verbose + --attribute=build_dir=${_a2x_current_binary_dir} + --attribute=docinfo + --destination-dir=${_a2x_current_binary_dir} + --asciidoc-opts=${_conf_opts} + --no-xmllint + --format=docbook + --fop + ${A2X_HTML_OPTS} + ${_a2x_asciidocsource} + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource} + ${_conf_deps} + ) +ENDMACRO() + MACRO( ASCIIDOC2HTML _output _asciidocsource _conf_files ) GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE ) set( A2X_HTML_OPTS --stylesheet=ws.css ) @@ -41,7 +107,8 @@ MACRO( ASCIIDOC2HTML _output _asciidocsource _conf_files ) SET( _conf_opts_list ) FOREACH( _conf_file ${_conf_files} ) - SET( _conf_opts_list ${_conf_opts_list} --conf-file=${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} ) + TO_A2X_COMPATIBLE_PATH ( ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} _a2x_conf_file ) + SET( _conf_opts_list ${_conf_opts_list} --conf-file=${_a2x_conf_file}) ENDFOREACH() STRING( REPLACE ";" " " _conf_opts "${_conf_opts_list}" ) @@ -50,17 +117,19 @@ MACRO( ASCIIDOC2HTML _output _asciidocsource _conf_files ) SET( _conf_deps ${_conf_deps} ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} ) ENDFOREACH() + TO_A2X_COMPATIBLE_PATH ( ${_asciidocsource} _a2x_asciidocsource ) + ADD_CUSTOM_COMMAND( OUTPUT ${_output} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${A2X_EXECUTABLE} --format=xhtml - --destination-dir=${CMAKE_CURRENT_BINARY_DIR} + --destination-dir=${_a2x_current_binary_dir} --asciidoc-opts=${_conf_opts} --fop ${A2X_HTML_OPTS} - ${_asciidocsource} + ${_a2x_asciidocsource} # Replacing file with itself will fail # COMMAND ${CMAKE_COMMAND} -E rename # ${CMAKE_CURRENT_BINARY_DIR}/${_source_base_name}.html @@ -84,7 +153,8 @@ MACRO( ASCIIDOC2TXT _output _asciidocsource _conf_files ) SET( _conf_opts_list ) FOREACH( _conf_file ${_conf_files} ) - SET( _conf_opts_list ${_conf_opts_list} --conf-file=${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} ) + TO_A2X_COMPATIBLE_PATH ( ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} _a2x_conf_file ) + SET( _conf_opts_list ${_conf_opts_list} --conf-file=${_a2x_conf_file}) ENDFOREACH() STRING( REPLACE ";" " " _conf_opts "${_conf_opts_list}" ) @@ -93,18 +163,20 @@ MACRO( ASCIIDOC2TXT _output _asciidocsource _conf_files ) SET( _conf_deps ${_conf_deps} ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} ) ENDFOREACH() + TO_A2X_COMPATIBLE_PATH ( ${_asciidocsource} _a2x_asciidocsource ) + ADD_CUSTOM_COMMAND( OUTPUT ${_output} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND TZ=UTC ${A2X_EXECUTABLE} + COMMAND ${A2X_EXECUTABLE} --format=text - --destination-dir=${CMAKE_CURRENT_BINARY_DIR} + --destination-dir=${_a2x_current_binary_dir} --asciidoc-opts=${_conf_opts} --fop ${A2X_TEXT_OPTS} - --xsltproc-opts '--stringparam generate.toc "article nop"' - ${_asciidocsource} + --xsltproc-opts "--stringparam generate.toc \"article nop\"" + ${_a2x_asciidocsource} COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/${_source_base_name}.text ${CMAKE_CURRENT_BINARY_DIR}/${_output} @@ -124,7 +196,8 @@ MACRO( ASCIIDOC2PDF _output _asciidocsource _conf_files _paper ) SET( _conf_opts_list ) FOREACH( _conf_file ${_conf_files} ) - SET( _conf_opts_list ${_conf_opts_list} --conf-file=${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} ) + TO_A2X_COMPATIBLE_PATH ( ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} _a2x_conf_file ) + SET( _conf_opts_list ${_conf_opts_list} --conf-file=${_a2x_conf_file}) ENDFOREACH() STRING( REPLACE ";" " " _conf_opts "${_conf_opts_list}") @@ -133,19 +206,21 @@ MACRO( ASCIIDOC2PDF _output _asciidocsource _conf_files _paper ) SET( _conf_deps ${_conf_deps} ${CMAKE_CURRENT_SOURCE_DIR}/${_conf_file} ) ENDFOREACH() + TO_A2X_COMPATIBLE_PATH ( ${_asciidocsource} _a2x_asciidocsource ) + ADD_CUSTOM_COMMAND( OUTPUT ${_output} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${A2X_EXECUTABLE} --format=pdf - --destination-dir=${CMAKE_CURRENT_BINARY_DIR} + --destination-dir=${_a2x_current_binary_dir} --asciidoc-opts=${_conf_opts} --fop ${A2X_HTML_OPTS} --xsltproc-opts "--stringparam paper.type ${_paper} --nonet" --xsl-file=custom_layer_pdf.xsl - ${_asciidocsource} + ${_a2x_asciidocsource} COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/${_source_base_name}.pdf ${CMAKE_CURRENT_BINARY_DIR}/${_output} |