Imported Upstream version 2.8.0
[platform/upstream/libxml2.git] / doc / syms.xsl
1 <?xml version="1.0"?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 version="1.0">
4   <xsl:output method="text" encoding="UTF-8"/>
5
6   <xsl:variable name="api" select="document('libxml2-api.xml')"/>
7
8   <xsl:template match="/">
9     <xsl:text>#
10 # Officially exported symbols, for which header
11 # file definitions are installed in /usr/include/libxml2
12 #
13 # Automatically generated from symbols.xml and syms.xsl
14 #
15 # Versions here are *fixed* to match the libxml2 version
16 # at which the symbol was introduced. This ensures that
17 # a new client app requiring symbol foo() can't accidentally
18 # run with old libxml2.so not providing foo() - the global
19 # soname version info can't enforce this since we never
20 # change the soname
21 #
22
23 </xsl:text>
24     <xsl:apply-templates select="/symbols/release"/>
25   </xsl:template>
26
27   <xsl:template match="release">
28     <xsl:variable name="prev"
29                   select="preceding-sibling::release[position()=1]"/>
30     <xsl:text>LIBXML2_</xsl:text>
31     <xsl:value-of select="string(@version)"/>
32     <xsl:text> {
33     global:
34 </xsl:text>
35     <xsl:for-each select="symbol">
36       <xsl:if test="string(preceding-sibling::symbol[position()=1]/@file) != string(@file)">
37         <xsl:text>
38 # </xsl:text>
39         <xsl:value-of select="@file"/>
40         <xsl:text>
41 </xsl:text>
42       </xsl:if>
43
44       <xsl:apply-templates select="."/>
45     </xsl:for-each>
46
47     <xsl:text>} </xsl:text>
48     <xsl:if test="$prev">
49       <xsl:text>LIBXML2_</xsl:text>
50       <xsl:value-of select="$prev/@version"/>
51     </xsl:if>
52     <xsl:text>;
53
54 </xsl:text>
55   </xsl:template>
56
57   <xsl:template match="symbol">
58     <xsl:variable name="name" select="string(.)"/>
59     <xsl:variable name="file" select="string(@file)"/>
60     <xsl:choose>
61       <xsl:when test="@removed">
62         <xsl:text># </xsl:text>
63         <xsl:value-of select="$name"/>
64         <xsl:text>; removed in </xsl:text>
65         <xsl:value-of select="@removed"/>
66         <xsl:text>
67 </xsl:text>
68       </xsl:when>
69       <xsl:otherwise>
70         <!-- make sure we can find that symbol exported from the API list -->
71         <xsl:variable name="def"
72             select="$api/api/files/file[@name = $file]/exports[@symbol = $name]"/>
73         <xsl:if test="string($def/@symbol) != $name">
74           <xsl:message terminate="yes">
75             <xsl:text>Failed to find definition in libxml2-api.xml:</xsl:text>
76             <xsl:value-of select="$name"/>
77           </xsl:message>
78         </xsl:if>
79
80         <xsl:text>  </xsl:text>
81         <xsl:value-of select="$name"/>
82         <xsl:text>;</xsl:text>
83         <xsl:if test="$def/@type = 'variable'">
84           <xsl:text> # variable</xsl:text>
85         </xsl:if>
86         <xsl:if test="@comment">
87           <xsl:text># </xsl:text>
88           <xsl:value-of select="@comment"/>
89           <xsl:text>
90 </xsl:text>
91         </xsl:if>
92         <xsl:text>
93 </xsl:text>
94       </xsl:otherwise>
95     </xsl:choose>
96   </xsl:template>
97
98 </xsl:stylesheet>
99