Almost working out-of-tree builds for the documentation,
[obnox/wireshark/wip.git] / cmake / modules / FindXSLTPROC.cmake
index 1d18832da0c3cf6901726df103a2260d2f4f2f51..fbbb200ed4ea0cf768c3dcfaddf54053942e25cd 100644 (file)
@@ -25,91 +25,109 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(XSLTPROC DEFAULT_MSG XSLTPROC_EXECUTABLE)
 
 MARK_AS_ADVANCED(XSLTPROC_EXECUTABLE)
 
+# Translate xml to html
 #XML2HTML(
-#       wsug.validated
-#       wsug_html/user-guide.html
-#       single-page
-#       wsug_html
-#       WSUG_SOURCE
-#       WSUG_GFX_SOURCE
+#        wsug.validated
+#        wsug_html/user-guide.html or wsub_html/index.html
+#        single-page or chunked
+#        WSUG_FILES
+#        WSUG_GRAPHICS
 #)
-
-# Translate xml to html
 MACRO(XML2HTML _validated _output _mode _xmlsources _gfxsources)
-    MESSAGE(STATUS "XML source(s): ${${_xmlsources}}")
-    MESSAGE(STATUS "GFX source(s): ${${_gfxsources}}")
-    
+    FOREACH(_tmpgfx ${${_gfxsources}})
+        set(_gfx ${_tmpgfx})
+        BREAK()
+    ENDFOREACH()
+    GET_FILENAME_COMPONENT(_GFXDIR ${_gfx} PATH)
     GET_FILENAME_COMPONENT(_OUTDIR ${_output} PATH)
+    SET(_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/${_OUTDIR})
+
     IF(${_mode} STREQUAL "chunked")
+       SET(_STYLESHEET "http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
     ELSE() # single-page
+       SET(_STYLESHEET "http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl")
     ENDIF()
 
+    # FIXME: How do I extract the first element of a variable containing a
+    # list of values? Isn't there a "cleaner" solution?
+    # Oh, and I have no idea why I can't directly use _source instead of
+    # having to introduce _tmpsource.
+    FOREACH(_tmpsource ${${_xmlsources}})
+        set(_source ${_tmpsource})
+        BREAK()
+    ENDFOREACH()
+
     ADD_CUSTOM_COMMAND(
         OUTPUT
             ${_output}
-        COMMAND
-            cmake -E make_directory ${_OUTDIR}
-        COMMAND
-            cmake -E copy ${${_gfxsources}} ${_OUTDIR}
-        COMMAND
-            cmake -E copy ws.css ${_OUTDIR}
+       # Fixme: find out about subdirs (i.e. toolbar) automatically 
+       #   so this works for wsdg as well.
+        COMMAND cmake
+           -E make_directory ${_OUTDIR}/${_GFXDIR}/toolbar
+        COMMAND cp
+           ${CMAKE_CURRENT_SOURCE_DIR}/${_GFXDIR}/*.* ${_OUTDIR}/${_GFXDIR}/
+        COMMAND cp
+           ${CMAKE_CURRENT_SOURCE_DIR}/${_GFXDIR}/toolbar/*.* ${_OUTDIR}/${_GFXDIR}/toolbar/
+        COMMAND cmake
+           -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ws.css ${_OUTDIR}
+       COMMAND ${XSLTPROC_EXECUTABLE}
+           --path "${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_CURRENT_BINARY_DIR}:${CMAKE_CURRENT_BINARY_DIR}/wsluarm_src"
+           --stringparam base.dir ${_OUTDIR}/
+           --stringparam use.id.as.filename 1
+           --stringparam admon.graphics 1
+           --stringparam admon.graphics.path ${_GFXDIR}/
+           --stringparam section.autolabel 1
+           --stringparam section.label.includes.component.label 1
+           --stringparam html.stylesheet ws.css
+           --nonet
+            --output ${_output}
+           ${_STYLESHEET}
+           ${_source}
+       COMMAND chmod
+           -R og+rX ${_OUTDIR}
         DEPENDS
+           ${_validated}
             ${${_xmlsources}}
             ${${_gfxsources}}
     )
-#        mkdir -p wsug_html/wsug_graphics/toolbar
-#        cp wsug_graphics/*.* wsug_html/wsug_graphics
-#        cp wsug_graphics/toolbar/* wsug_html/wsug_graphics/toolbar
-#        cp ws.css wsug_html
-
-#        mkdir -p wsug_html_chunked/wsug_graphics/toolbar
-#        cp wsug_graphics/*.* wsug_html_chunked/wsug_graphics
-#        cp wsug_graphics/toolbar/* wsug_html_chunked/wsug_graphics/toolbar
-#        cp ws.css wsug_html_chunked
 ENDMACRO(XML2HTML)
 
-#wsug_html/user-guide.html: $(WSUG_SOURCE)
-#        @ echo --- WSUG - HTML SINGLE PAGE ---
-#        mkdir -p wsug_html/wsug_graphics/toolbar
-#        cp wsug_graphics/*.* wsug_html/wsug_graphics
-#        cp wsug_graphics/toolbar/* wsug_html/wsug_graphics/toolbar
-#        cp ws.css wsug_html
-#        $(XSLTPROC) --stringparam base.dir wsug_html/ --stringparam  use.id.as.filename 1 --stringparam admon.graphics 1 --stringparam admon.graphics.path wsug_graphics/ --stringparam section.autolabel 1 --stringparam  section.label.includes.component.label 1 --stringparam html.stylesheet ws.css --nonet http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< > $@
-#        -chmod -R og+rX wsug_html
-#
-
-#wsug_html_chunked/index.html: $(WSUG_SOURCE)
-#        @ echo --- WSUG - HTML CHUNKED ---
-#        mkdir -p wsug_html_chunked/wsug_graphics/toolbar
-#        cp wsug_graphics/*.* wsug_html_chunked/wsug_graphics
-#        cp wsug_graphics/toolbar/* wsug_html_chunked/wsug_graphics/toolbar
-#        cp ws.css wsug_html_chunked
-#        $(XSLTPROC) --stringparam base.dir wsug_html_chunked/ --stringparam  use.id.as.filename 1 --stringparam admon.graphics 1 --stringparam admon.graphics.path wsug_graphics/ --stringparam section.autolabel 1 --stringparam  section.label.includes.component.label 1 --stringparam html.stylesheet ws.css --nonet http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl $<
-#        -chmod -R og+rX wsug_html_chunked
 
 #XML2PDF(
-#       WSUG_SOURCE
-#       custom_layer_pdf.xsl
-#       A4
-#)
-#
-#XML2PDF(
-#       WSUG_SOURCE
-#       custom_layer_pdf.xsl
-#       letter
+#      user-guide-a4.fo or user-guide-us.fo
+#      WSUG_SOURCE
+#      custom_layer_pdf.xsl
+#      A4 or letter
 #)
+MACRO(XML2PDF _output _sources _stylesheet _paper)
+    # FIXME: How do I extract the first element of a variable containing a
+    # list of values? Isn't there a "cleaner" solution?
+    # Oh, and I have no idea why I can't directly use _source instead of
+    # having to introduce _tmpsource.
+    FOREACH(_tmpsource ${${_sources}})
+        set(_source ${_tmpsource})
+        BREAK()
+    ENDFOREACH()
 
-#user-guide-us.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl
-#ifdef FOP
-#        @ echo --- WSUG - PDF US PAPER ---
-#        $(XSLTPROC) --stringparam paper.type letter --nonet custom_layer_pdf.xsl $< > $@
-#endif
-#
-## create pdf file (through XSL-FO), portrait pages on A4 paper
-## you will get lot's of errors, but that's ok
-#user-guide-a4.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl
-#ifdef FOP
-#        @ echo --- WSUG - PDF A4 PAPER ---
-#        $(XSLTPROC) --stringparam paper.type A4 --nonet custom_layer_pdf.xsl $< > $@
-#endif
+    ADD_CUSTOM_COMMAND(
+        OUTPUT
+            ${_output}
+       COMMAND ${XSLTPROC_EXECUTABLE}
+           --path "${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_CURRENT_BINARY_DIR}:${CMAKE_CURRENT_BINARY_DIR}/wsluarm_src"
+           --stringparam paper.type ${_paper}
+           --nonet
+           --output ${_output}.fo
+           ${_stylesheet}
+           ${_source}
+       # FIXME: The images for tip, warning and note (and maybe more of those)
+       #   are not found by fop. I have no idea why "system" images don't work
+       #   the way other images work.
+       COMMAND ${FOP_EXECUTABLE}
+           ${_output}.fo
+           ${_output}
+       DEPENDS
+           ${${_sources}}
+           ${_stylesheet}
+    )
+ENDMACRO(XML2PDF)