<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://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>