Generate refernceinfo.xml
[openobex:mainline.git] / CMakeModules / FindXslt.cmake
1 # - Find XSLT processors.
2 # This module provides easy integration of XSLT processors.
3 # Currently xsltproc, Saxon 6.5.[345] and Xalan 2.x are supported.
4 #
5 # Typical usage is:
6 #   find_package(Xslt)
7 #   include_file(${Xslt_USE_FILE})
8 #   
9 #
10 # The following variables are created:
11 #   Xslt_FOUND     - true if at least one XSLT processor is found
12 #   Xslt_USE_FILE  - name of the USE_FILE
13 #   Xslt_CLASSPATH - the Java classpath to use for XSLT processing
14 #   XSLT_XSLTPROC_EXECUTABLE - executable for xltproc
15 #   XSLT_SAXON_COMMAND       - command for saxon-6.5.x
16 #   XSLT_XALAN2_COMMAND      - command for xalan-2.x
17 #
18 # The following environment variables are considered:
19 #   CLASSPATH - initial value of Xslt_CLASSPATH (if empty)
20 #
21 # The following functions are provided:
22 #   xsl_transform(xsl-file xml-file <output-file>...)
23 #     This uses the xsl file to transform the xml file input to one or
24 #     more output files. Several variables can be used to change the
25 #     behaviour of the transformation:
26 #       XSLT_PARAMS: cmake list of parameters for the XSL transformation
27 #                    in the form of param=value
28 #       XSLT_<processor>_OPTIONS: extra option for each of XSLTPROC,
29 #                    SAXON and XALAN2.
30
31 find_package ( Java )
32 if ( JAVA_RUNTIME )
33   if ( NOT Xslt_CLASSPATH )
34     set ( Xslt_CLASSPATH $ENV{CLASSPATH} CACHE STRING "java classpath" )
35   endif ( NOT Xslt_CLASSPATH )
36   if ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" )
37     # Non-Windows classpath may use : instead of ;
38     # so make this a cmake list here by always using ;
39     string ( REPLACE ":" ";" Xslt_CLASSPATH "${Xslt_CLASSPATH}" )
40   endif ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" )
41   mark_as_advanced ( Xslt_CLASSPATH )
42
43   find_file ( JAVA_RESOLVER_LIBRARY
44     NAMES resolver.jar xml-commons-resolver-1.1.jar
45     PATH_SUFFIXES share/java
46     DOC "location of the XML commons resolver java library from the apache project"
47     CMAKE_FIND_ROOT_PATH_BOTH
48   )
49   mark_as_advanced ( JAVA_RESOLVER_LIBRARY )
50   if ( JAVA_RESOLVER_LIBRARY )
51     list ( APPEND Xslt_CLASSPATH "${JAVA_RESOLVER_LIBRARY}" )
52   endif ( JAVA_RESOLVER_LIBRARY )
53
54   find_path ( JAVA_PROPERTIES_CATALOGMANAGER
55     NAMES CatalogManager.properties
56     PATHS /etc
57     PATH_SUFFIXES xml/resolver share/java share/xml
58     DOC "location of the catalog manager properties file from the XML commons resolver"
59     CMAKE_FIND_ROOT_PATH_BOTH
60   )
61   mark_as_advanced ( JAVA_PROPERTIES_CATALOGMANAGER )
62   if ( JAVA_PROPERTIES_CATALOGMANAGER )
63     list ( APPEND Xslt_CLASSPATH "${JAVA_PROPERTIES_CATALOGMANAGER}" )
64   endif ( JAVA_PROPERTIES_CATALOGMANAGER )
65
66   find_file ( JAVA_XERCES_IMPL_LIBRARY
67     NAMES xercesImpl.jar
68     PATH_SUFFIXES share/java
69     DOC "location of Xalan2 Xerces Implementation JAR file"
70     CMAKE_FIND_ROOT_PATH_BOTH
71   )
72   mark_as_advanced ( JAVA_XERCES_IMPL_LIBRARY )
73
74   #
75   # Find Xalan 2
76   #
77   find_file ( XALAN2
78     NAMES xalan2.jar
79     PATH_SUFFIXES share/java
80     DOC "location of Xalan2 JAR file"
81     CMAKE_FIND_ROOT_PATH_BOTH
82   )
83   mark_as_advanced ( XALAN2 )
84   find_file ( JAVA_XML_APIS_LIBRARY
85     NAMES xml-apis.jar
86     PATH_SUFFIXES share/java
87     DOC "location of Xalan2 XML-API JAR file"
88     CMAKE_FIND_ROOT_PATH_BOTH
89   )
90   mark_as_advanced ( JAVA_XML_APIS_LIBRARY )
91   if ( XALAN2 AND JAVA_XML_APIS_LIBRARY )
92     set ( XSLT_XALAN2_COMMAND
93       org.apache.xalan.xslt.Process
94     )
95     set ( Xslt_XALAN2_CLASSPATH
96       ${Xslt_CLASSPATH}
97       "${XALAN2}"
98       "${JAVA_XML_APIS_LIBRARY}"
99     )
100     if ( Xslt_XALAN2_EXTENSIONS )
101       list ( APPEND Xslt_XALAN2_CLASSPATH "${Xslt_XALAN2_EXTENSIONS}" )
102     endif ( Xslt_XALAN2_EXTENSIONS )
103
104     if ( JAVA_XERCES_IMPL_LIBRARY )
105       set ( XSLT_JAVA_OPTIONS
106         -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
107         -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
108         -Dorg.apache.xerces.xni.parser.XMLParserConfiguration=org.apache.xerces.parsers.XIncludeParserConfiguration
109       )
110       list ( APPEND Xslt_XALAN2_CLASSPATH "${JAVA_XERCES_IMPL_LIBRARY}" )
111     endif ( JAVA_XERCES_IMPL_LIBRARY )
112
113     if ( JAVA_RESOLVER_LIBRARY AND JAVA_PROPERTIES_CATALOGMANAGER )
114       list ( APPEND XSLT_XALAN2_OPTIONS
115         -ENTITYRESOLVER  org.apache.xml.resolver.tools.CatalogResolver
116         -URIRESOLVER  org.apache.xml.resolver.tools.CatalogResolver
117       )
118     endif ( JAVA_RESOLVER_LIBRARY AND JAVA_PROPERTIES_CATALOGMANAGER )
119
120     if ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" )
121       string ( REPLACE ";" ":" Xslt_XALAN2_CLASSPATH "${Xslt_XALAN2_CLASSPATH}" )
122     endif ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" )
123   endif ( XALAN2 AND JAVA_XML_APIS_LIBRARY )
124
125   #
126   # Find Saxon 6.5.x
127   #
128   find_file ( SAXON
129     NAMES saxon.jar saxon-6.5.5.jar saxon-6.5.4.jar saxon-6.5.3.jar
130     PATH_SUFFIXES share/java
131     DOC "location of saxon 6.5.x JAR file"
132     CMAKE_FIND_ROOT_PATH_BOTH
133   )
134   mark_as_advanced ( SAXON )
135   if ( SAXON )
136     set ( XSLT_SAXON_COMMAND
137       com.icl.saxon.StyleSheet
138     )
139     set ( Xslt_SAXON_CLASSPATH
140       ${Xslt_CLASSPATH}
141       "${SAXON}"
142     )
143     if ( Xslt_SAXON_EXTENSIONS )
144       list ( APPEND Xslt_SAXON_CLASSPATH "${Xslt_SAXON_EXTENSIONS}" )
145     endif ( Xslt_SAXON_EXTENSIONS )
146
147     if ( JAVA_XERCES_IMPL_LIBRARY )
148       set ( XSLT_JAVA_OPTIONS
149         -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
150         -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
151         -Dorg.apache.xerces.xni.parser.XMLParserConfiguration=org.apache.xerces.parsers.XIncludeParserConfiguration
152       )
153       list ( APPEND Xslt_SAXON_CLASSPATH "${JAVA_XERCES_IMPL_LIBRARY}" )
154     endif ( JAVA_XERCES_IMPL_LIBRARY )
155
156     if ( JAVA_RESOLVER_LIBRARY )
157       list ( APPEND XSLT_SAXON_OPTIONS
158         -x org.apache.xml.resolver.tools.ResolvingXMLReader
159         -y org.apache.xml.resolver.tools.ResolvingXMLReader
160         -u
161       )
162       if ( JAVA_PROPERTIES_CATALOGMANAGER )
163         list ( APPEND XSLT_SAXON_OPTIONS
164           -r org.apache.xml.resolver.tools.CatalogResolver
165         )
166       endif ( JAVA_PROPERTIES_CATALOGMANAGER )
167     endif ( JAVA_RESOLVER_LIBRARY )
168
169     if ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" )
170       string ( REPLACE ";" ":" Xslt_SAXON_CLASSPATH "${Xslt_SAXON_CLASSPATH}" )
171     endif ( NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" )
172   endif ( SAXON )
173 endif ( JAVA_RUNTIME )
174
175 find_program ( XSLT_XSLTPROC_EXECUTABLE
176   NAMES xsltproc
177   DOC   "path to the libxslt XSLT processor xsltproc"
178 )
179 mark_as_advanced ( XSLT_XSLTPROC_EXECUTABLE )
180 set ( XSLT_XSLTPROC_OPTIONS
181   --xinclude
182 )
183
184 set ( Xslt_USE_FILE UseXslt )
185
186 if ( XSLT_XSLTPROC_EXECUTABLE OR XSLT_SAXON_COMMAND OR XSLT_XALAN2_COMMAND )
187   set ( Xslt_FOUND true )
188 endif ( XSLT_XSLTPROC_EXECUTABLE OR XSLT_SAXON_COMMAND OR XSLT_XALAN2_COMMAND )
189
190 if ( NOT Xslt_FOUND )
191   if ( NOT Xslt_FIND_QUIETLY )
192     message ( STATUS "No supported XSLT processor found. Supported XSLT processors are: xsltproc, saxon-6.5.x, xalan-2.x" )
193   endif ( NOT Xslt_FIND_QUIETLY )
194   if ( Xslt_FIND_REQUIRED )
195     message ( FATAL_ERROR "No supported XSLT processor found but it is required." )
196   endif ( Xslt_FIND_REQUIRED )
197 endif ( NOT Xslt_FOUND )