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
100