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