aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindASCIIDOC.cmake
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2015-01-06 16:59:32 -0800
committerGerald Combs <gerald@wireshark.org>2015-01-08 22:05:38 +0000
commitcd7408e526df2596b478ab622b90a8a2a60890c2 (patch)
tree21c87caa27168811a7b4858b02e0b0798f5d10d1 /cmake/modules/FindASCIIDOC.cmake
parent4b8c66891a830716bf1569b9d6aa6742bc47f81c (diff)
downloadwireshark-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.cmake131
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}