Generate refernceinfo.xml
[openobex:mainline.git] / CMakeModules / UseXslt.cmake
1 #
2 # call as XSLT_TRANSFORM(<.xsl file URL> <input file> <output files...>)
3 #
4 # The following variables are supported:
5 # XSLT_PROCESSOR (mandatory):
6 #      select the xslt processor to use (xsltproc, xalan2, saxon)
7 # XSLT_PARAMS (optional):
8 #      a list which may contain param=value entries.
9 # XSLT_(XSLTPROC|XALAN2|SAXON)_OPTIONS (optional):
10 #      a list with extra options for those xslt processors.
11 #
12 function ( XSL_TRANSFORM xslurl infile )
13   if ( XSLT_PARAMS )
14     foreach ( param ${XSLT_PARAMS} )
15       set ( param_name )
16       string ( REGEX MATCH "[^=]+" param_name "${param}" )
17       if ( param_name )
18         set ( param_value )
19         string ( REGEX REPLACE "[^=]+=(.*)" "\\1" param_value "${param}" )
20         set ( XSLT_XSLTPROC_OPTIONS ${XSLT_XSLTPROC_OPTIONS} --param ${param_name} ${param_value} )
21         set ( XSLT_XALAN2_OPTIONS ${XSLT_XALAN2_OPTIONS} -param ${param_name} ${param_value} )
22       endif ( param_name )
23     endforeach ( param )
24   endif ( XSLT_PARAMS )
25
26   if ( XSLT_PROCESSOR STREQUAL "xsltproc" )
27     if ( XSLT_XSLTPROC_EXECUTABLE )
28       add_custom_command (
29         OUTPUT ${ARGN}
30         COMMAND ${XSLT_XSLTPROC_EXECUTABLE} ${XSLT_XSLTPROC_OPTIONS} "${xslurl}" "${infile}"
31         DEPENDS "${infile}"
32         VERBATIM
33       )
34     else ( XSLT_XSLTPROC_EXECUTABLE )
35       message ( FATAL_ERROR "xsltproc not found" )
36     endif ( XSLT_XSLTPROC_EXECUTABLE )
37
38   elseif ( XSLT_PROCESSOR STREQUAL "saxon" )
39     if ( XSLT_SAXON_COMMAND )
40       add_custom_command (
41         OUTPUT ${ARGN}
42         COMMAND "${JAVA_RUNTIME}" ${XSLT_JAVA_OPTIONS} -cp "${Xslt_SAXON_CLASSPATH}" ${XSLT_SAXON_COMMAND} ${XSLT_SAXON_OPTIONS} "${infile}" "${xslurl}" ${Xslt_PARAMS}
43         DEPENDS "${infile}"
44         VERBATIM
45       )
46     else ( XSLT_SAXON_COMMAND )
47       message ( FATAL_ERROR "Saxon-6.5.x not found" )
48     endif ( XSLT_SAXON_COMMAND )
49
50   elseif ( XSLT_PROCESSOR STREQUAL "xalan2" )
51     get_filename_component ( infile_name "${infile}" NAME )
52     if ( NOT infile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/${infile_name}" )
53       # Xalan places the output in the source file's directory :-(
54       add_custom_command (
55         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${infile_name}
56         COMMAND ${CMAKE_COMMAND} -E copy_if_different "${infile}" "${CMAKE_CURRENT_BINARY_DIR}/${infile_name}"
57         DEPENDS ${infile}
58         VERBATIM
59       )
60       set ( infile "${CMAKE_CURRENT_BINARY_DIR}/${infile_name}" )
61     endif ( NOT infile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/${infile_name}" )
62     if ( XSLT_XALAN2_COMMAND )
63       add_custom_command (
64         OUTPUT ${ARGN}
65         COMMAND "${JAVA_RUNTIME}" ${XSLT_JAVA_OPTIONS} -cp "${Xslt_XALAN2_CLASSPATH}" ${XSLT_XALAN2_COMMAND} ${XSLT_XALAN2_OPTIONS} -in "${infile}" -xsl "${xslurl}"
66         DEPENDS "${infile}"
67         VERBATIM
68       )
69     else ( XSLT_XALAN2_COMMAND )
70       message ( FATAL_ERROR " Xalan 2.x not found" )
71     endif ( XSLT_XALAN2_COMMAND )
72
73   else ( XSLT_PROCESSOR STREQUAL "xsltproc" )
74     message ( FATAL_ERROR "Unsupported XSLT processor" )
75   endif ( XSLT_PROCESSOR STREQUAL "xsltproc" )
76 endfunction ( XSL_TRANSFORM )