<?xml version=“1.0”?> <xsl:stylesheet xmlns:xsl=“www.w3.org/1999/XSL/Transform

              version="1.0">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:variable name="api" select="document('libxml2-api.xml')"/>

<xsl:template match="/">
  <xsl:text>#

# Officially exported symbols, for which header # file definitions are installed in /usr/include/libxml2 # # Automatically generated from symbols.xml and syms.xsl # # Versions here are fixed to match the libxml2 version # at which the symbol was introduced. This ensures that # a new client app requiring symbol foo() can't accidentally # run with old libxml2.so not providing foo() - the global # soname version info can't enforce this since we never # change the soname #

</xsl:text>

  <xsl:apply-templates select="/symbols/release"/>
</xsl:template>

<xsl:template match="release">
  <xsl:variable name="prev"
                select="preceding-sibling::release[position()=1]"/>
  <xsl:text>LIBXML2_</xsl:text>
  <xsl:value-of select="string(@version)"/>
  <xsl:text> {
  global:

</xsl:text>

<xsl:for-each select="symbol">
  <xsl:if test="string(preceding-sibling::symbol[position()=1]/@file) != string(@file)">
    <xsl:text>

# </xsl:text>

<xsl:value-of select="@file"/>
<xsl:text>

</xsl:text>

  </xsl:if>

  <xsl:apply-templates select="."/>
</xsl:for-each>

<xsl:text>} </xsl:text>
<xsl:if test="$prev">
  <xsl:text>LIBXML2_</xsl:text>
  <xsl:value-of select="$prev/@version"/>
</xsl:if>
<xsl:text>;

</xsl:text>

</xsl:template>

<xsl:template match="symbol">
  <xsl:variable name="name" select="string(.)"/>
  <xsl:variable name="file" select="string(@file)"/>
  <xsl:choose>
    <xsl:when test="@removed">
      <xsl:text># </xsl:text>
      <xsl:value-of select="$name"/>
      <xsl:text>; removed in </xsl:text>
      <xsl:value-of select="@removed"/>
      <xsl:text>

</xsl:text>

</xsl:when>
<xsl:otherwise>
  <!-- make sure we can find that symbol exported from the API list -->
  <xsl:variable name="def"
      select="$api/api/files/file[@name = $file]/exports[@symbol = $name]"/>
  <xsl:if test="string($def/@symbol) != $name">
    <xsl:message terminate="yes">
      <xsl:text>Failed to find definition in libxml2-api.xml:</xsl:text>
      <xsl:value-of select="$name"/>
    </xsl:message>
  </xsl:if>

  <xsl:text>  </xsl:text>
  <xsl:value-of select="$name"/>
  <xsl:text>;</xsl:text>
  <xsl:if test="$def/@type = 'variable'">
    <xsl:text> # variable</xsl:text>
  </xsl:if>
  <xsl:if test="@comment">
    <xsl:text># </xsl:text>
    <xsl:value-of select="@comment"/>
    <xsl:text>

</xsl:text>

</xsl:if>
<xsl:text>

</xsl:text>

    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>