source: BLFS/xsl/gen_pkg_list.xsl@ b7515ec

2.4 ablfs-more legacy new_features trunk
Last change on this file since b7515ec was bd07ef5, checked in by Pierre Labastie <pierre@…>, 10 years ago

The preceding fix is just a workaround, but the correct fix is:

  • the problem is when a .dep file contains pack-A pack-B pack-A. If pack-A

and pack-B have some dep in common, say pack-C, that dep is erased from
pack-B, with the idea that it will be built as a dep of pack-A. But when
the program encounters the second pack-A, it removes the first one, so that
pack-C is built before the second pack-A, but after pack-B. Sorting was
a good workaround, but removing the last line instead of the first is
much better.

  • Otherwise, add Xfce and Lxde to the list of packages whose preceding

sibling is a required dep.

  • Property mode set to 100644
File size: 13.4 KB
RevLine 
[e576789]1<?xml version="1.0" encoding="ISO-8859-1"?>
2
3<!-- $Id: gen_pkg_list.xsl 21 2012-02-16 15:06:19Z labastie $ -->
4<!-- Takes the blfs-full.xml file and extract a list
5 of packages obeying packdesc.dtd + looks for already
6 installed packages in the tracking file (stringparam
7 'installed-packages') -->
8
9<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
10 version="1.0">
11
12 <xsl:param name="installed-packages" select="'../lib/instpkg.xml'"/>
13
14 <xsl:output method="xml"
15 encoding='ISO-8859-1'
16 doctype-system="./packdesc.dtd"/>
17
18<!-- specialCases.xsl is generated by a shell script:
19 allows for cases where version begins with a letter
20 and when there is no version (such as xorg7 packages) -->
21 <xsl:include href="./specialCases.xsl"/>
22
23 <xsl:template match="/">
24 <princList>
25 <xsl:text>&#xA;&#xA;</xsl:text>
26<!-- How to have blfs-bootscripts versionned? Do not know, so
27 avoid it (TODO ?) -->
28 <xsl:apply-templates select="//part[not(@id='introduction')]"/>
29 </princList>
30 </xsl:template>
31
32 <xsl:template match="part">
33 <xsl:if test="count(.//*[contains(translate(@xreflabel,
34 '123456789',
35 '000000000'),
36 '-0')
37 ]) &gt; 0">
38 <xsl:text> </xsl:text>
39 <list>
40 <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
41 <xsl:text>&#xA; </xsl:text>
42 <xsl:element name="name">
43 <xsl:value-of select="title"/>
44 </xsl:element>
45 <xsl:text>&#xA;&#xA;</xsl:text>
46 <xsl:apply-templates select="chapter"/>
47 <xsl:text> </xsl:text>
48 </list>
49 <xsl:text>&#xA;&#xA;</xsl:text>
50 </xsl:if>
51 </xsl:template>
52
53 <xsl:template match="chapter">
54 <xsl:if test="count(.//*[contains(translate(@xreflabel,
55 '123456789',
56 '000000000'),
57 '-0')
58 ]) &gt; 0">
59 <xsl:text> </xsl:text>
60 <sublist>
61 <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
62 <xsl:text>&#xA; </xsl:text>
63 <xsl:element name="name">
64 <xsl:value-of select="title"/>
65 </xsl:element>
66 <xsl:text>&#xA;</xsl:text>
67 <xsl:apply-templates select=".//sect1[@xreflabel]">
68 <xsl:sort select="@id"/>
69 </xsl:apply-templates>
70 <xsl:text> </xsl:text>
71 </sublist><xsl:text>&#xA;&#xA;</xsl:text>
72 </xsl:if>
73 </xsl:template>
74
75 <xsl:template match="sect1">
76 <xsl:choose>
77<!-- This test is to find sections containing modules (PERL, Python
78 DBus,...) -->
79 <xsl:when
80 test="not(contains(translate(@xreflabel,
81 '123456789',
82 '000000000'),
83 '-0')) and
84 count(descendant::node()[contains(translate(@xreflabel,
85 '123456789',
86 '000000000'),
87 '-0')
88 ]) &gt; 0">
89 <xsl:text> </xsl:text>
90 <package><xsl:text>&#xA; </xsl:text>
91 <xsl:element name="name">
92 <xsl:value-of select="title"/>
93 </xsl:element>
94 <xsl:text>&#xA;</xsl:text>
95<!-- Do not use .//*, which would include self.
96 Calls the template of specialCases.xsl,
97 which calls the "normal" template when the
98 case is normal. -->
99 <xsl:apply-templates
100 select="descendant::node()[contains(translate(@xreflabel,
101 '123456789',
102 '000000000'),
103 '-0')
104 ]"
105 mode="special">
106 <xsl:sort select="@id"/>
107 </xsl:apply-templates>
108 <xsl:text> </xsl:text>
109 </package><xsl:text>&#xA;&#xA;</xsl:text>
110 </xsl:when>
111 <xsl:otherwise>
112<!-- Calls the template of specialCases.xsl,
113 which calls the "normal" template when the
114 case is normal. -->
115 <xsl:apply-templates select='.' mode="special">
116 <xsl:sort select="@id"/>
117 </xsl:apply-templates>
118 </xsl:otherwise>
119 </xsl:choose>
120 </xsl:template>
121
122 <xsl:template match="*" mode="normal">
123 <xsl:variable name="version">
124 <xsl:call-template name="version">
125 <xsl:with-param name="label" select="./@xreflabel"/>
126 </xsl:call-template>
127 </xsl:variable>
128 <xsl:choose>
129<!-- If there is a "sect1" ancestor, this means that
130 we have a module -->
131 <xsl:when test="ancestor::sect1">
132 <xsl:text> </xsl:text>
133 <module><xsl:text>&#xA; </xsl:text>
134 <xsl:element name="name">
135 <xsl:value-of select="./@id"/>
136 </xsl:element>
137 <xsl:text>&#xA; </xsl:text>
138 <xsl:element name="version">
139 <xsl:value-of select="$version"/>
140 </xsl:element>
141 <xsl:if
142 test="document($installed-packages)//package[name=current()/@id]">
143 <xsl:text>&#xA; </xsl:text>
144 <xsl:element name="inst-version">
145 <xsl:value-of
146 select="document(
147 $installed-packages
148 )//package[name=current()/@id]/version"/>
149 </xsl:element>
150 </xsl:if>
151<!-- Dependencies -->
152<!-- First the case of python modules or d-bus bindings -->
153 <xsl:if test="self::sect2">
154<!-- dependencies -->
155 <xsl:apply-templates select=".//para[@role='required' or
156 @role='recommended' or
157 @role='optional']"
158 mode="dependency"/>
159 </xsl:if>
160<!-- For python modules, the preceding module is an optional dep -->
161 <xsl:if test="ancestor::sect1[@id='python-modules']">
162 <xsl:apply-templates
163 select="preceding-sibling::sect2[@role='package']
164 //listitem[para/xref/@linkend=current()/@id]"
165 mode="prec-dep"/>
166 </xsl:if>
167<!-- Now the case of perl modules: let us test our XSLT abilities.
168 Well, "use the sibling, Luke" -->
169 <xsl:if test="self::bridgehead">
170 <xsl:apply-templates select="following-sibling::itemizedlist[1]
171 /listitem/itemizedlist/listitem"
172 mode="perlmod-dep">
173 <xsl:sort select="position()"
174 data-type="number"
175 order="descending"/>
176 </xsl:apply-templates>
177 </xsl:if>
178<!-- End dependencies -->
179 <xsl:text>&#xA; </xsl:text>
180 </module><xsl:text>&#xA;</xsl:text>
181 </xsl:when>
182 <xsl:otherwise>
183 <xsl:text> </xsl:text>
184 <package><xsl:text>&#xA; </xsl:text>
185 <xsl:element name="name">
186 <xsl:value-of select="./@id"/>
187 </xsl:element>
188 <xsl:text>&#xA; </xsl:text>
189 <xsl:element name="version">
190 <xsl:value-of select="$version"/>
191 </xsl:element>
192 <xsl:if
193 test="document($installed-packages)//package[name=current()/@id]">
194 <xsl:text>&#xA; </xsl:text>
195 <xsl:element name="inst-version">
196 <xsl:value-of
197 select="document(
198 $installed-packages
199 )//package[name=current()/@id]/version"/>
200 </xsl:element>
201 </xsl:if>
202<!-- Dependencies -->
[7735c7a]203<!-- If in Xorg (not anymore) or KDE chapter, consider that the preceding
204 package is the first dependency (not always noted in the book)-->
[bd07ef5]205 <xsl:if test="ancestor::chapter[@id='kde4-core'
206 or @id='xfce-core'
207 or @id='lxde-desktop']
208 and preceding-sibling::sect1[1]">
[e576789]209 <xsl:text>
210 </xsl:text>
[7735c7a]211 <xsl:element name="dependency">
212 <xsl:attribute name="status">required</xsl:attribute>
213 <xsl:attribute name="name">
214 <xsl:value-of select="preceding-sibling::sect1[1]/@id"/>
215 </xsl:attribute>
216 <xsl:attribute name="type">ref</xsl:attribute>
217 </xsl:element>
[e576789]218 </xsl:if>
219 <xsl:apply-templates select=".//para[@role='required' or
220 @role='recommended' or
221 @role='optional']"
222 mode="dependency"/>
223<!-- End dependencies -->
224 <xsl:text>&#xA; </xsl:text>
225 </package><xsl:text>&#xA;</xsl:text>
226 </xsl:otherwise>
227 </xsl:choose>
228 </xsl:template>
229
230 <xsl:template name="version">
231 <xsl:param name="label" select="abc-2"/>
232 <xsl:variable name="start" select="string-length(substring-before(translate($label,'123456789','000000000'),'-0'))+2"/>
233 <xsl:variable name="prelim-ver" select="substring($label,$start)"/>
234 <xsl:choose>
235 <xsl:when test="contains($prelim-ver,'onfiguration')"/>
236 <xsl:when test="contains($prelim-ver,'escription')"/>
237 <xsl:when test="contains($prelim-ver,'EggDBus')">
238 <xsl:value-of select="substring-before($prelim-ver,' (EggDBus)')"/>
239 </xsl:when>
240 <xsl:when test="contains($label,'JDK')">
241 <xsl:value-of select="translate($prelim-ver,' ','_')"/>
242 </xsl:when>
243 <xsl:otherwise>
244 <xsl:value-of select="$prelim-ver"/>
245 </xsl:otherwise>
246 </xsl:choose>
247 </xsl:template>
248
249 <xsl:template match="para" mode="dependency">
250 <xsl:variable name="status" select="./@role"/>
251<!-- No ulink for now (see special case for Perl modules) -->
252 <xsl:for-each select="./xref">
253 <xsl:choose>
[2ae5bbe]254<!-- Avoid depending of myself -->
255 <xsl:when test="ancestor::*[@id=current()/@linkend]"/>
256<!-- Call list expansion when we have an xorg7 series of packages -->
[e576789]257 <xsl:when test="contains(@linkend,'xorg7-')">
258 <xsl:call-template name="expand-deps">
259 <xsl:with-param name="section">
260 <xsl:value-of select="@linkend"/>
261 </xsl:with-param>
262 <xsl:with-param name="status">
263 <xsl:value-of select="$status"/>
264 </xsl:with-param>
265 </xsl:call-template>
266 </xsl:when>
267 <xsl:otherwise>
268 <xsl:text>
269 </xsl:text>
270 <xsl:element name="dependency">
271 <xsl:attribute name="status">
272 <xsl:value-of select="$status"/>
273 </xsl:attribute>
274 <xsl:attribute name="name">
275 <xsl:value-of select="@linkend"/>
276 </xsl:attribute>
277 <xsl:attribute name="type">ref</xsl:attribute>
278 </xsl:element>
279 </xsl:otherwise>
280 </xsl:choose>
281 </xsl:for-each>
282 </xsl:template>
283
284 <xsl:template match="listitem" mode="prec-dep">
285 <xsl:if test="preceding-sibling::listitem">
286 <xsl:text>
287 </xsl:text>
288 <xsl:element name="dependency">
289<!-- the dep on the preceding package used to be required for python.
290 It seems optional now -->
291 <xsl:attribute name="status">optional</xsl:attribute>
292 <xsl:attribute name="name">
293 <xsl:value-of select="preceding-sibling::listitem[1]//@linkend"/>
294 </xsl:attribute>
295 <xsl:attribute name="type">ref</xsl:attribute>
296 </xsl:element>
297 </xsl:if>
298 </xsl:template>
299
300 <xsl:template match="listitem" mode="perlmod-dep">
301 <xsl:param name="glue" select="'&#xA; '"/>
302 <xsl:choose>
303 <xsl:when test="para/xref|para[@id]/ulink">
304 <xsl:value-of select="$glue"/>
305 <xsl:element name="dependency">
306 <xsl:attribute name="status">
307 <xsl:choose>
308 <xsl:when
309 test="count(./para/text()[contains(string(),
310 'ptional')
311 ]
312 )&gt;0">optional</xsl:when>
313 <xsl:otherwise>required</xsl:otherwise>
314 </xsl:choose>
315 </xsl:attribute>
316 <xsl:attribute name="name">
317 <xsl:if test="para/xref">
318 <xsl:value-of select="para/xref/@linkend"/>
319 </xsl:if>
320 <xsl:if test="para/ulink">
321 <xsl:value-of select="para/@id"/>
322 </xsl:if>
323 </xsl:attribute>
324 <xsl:attribute name="type">
325 <xsl:if test="para/xref">ref</xsl:if>
326 <xsl:if test="para/ulink">link</xsl:if>
327 </xsl:attribute>
328 <xsl:apply-templates select="itemizedlist/listitem"
329 mode="perlmod-dep">
330 <xsl:sort select="position()"
331 data-type="number"
332 order="descending"/>
333 <xsl:with-param name="glue" select="concat($glue,' ')"/>
334 </xsl:apply-templates>
335 </xsl:element>
336 </xsl:when>
337 <xsl:otherwise>
338 <xsl:apply-templates select="itemizedlist/listitem"
339 mode="perlmod-dep">
340 <xsl:sort select="position()"
341 data-type="number"
342 order="descending"/>
343 <xsl:with-param name="glue" select="$glue"/>
344 </xsl:apply-templates>
345 </xsl:otherwise>
346 </xsl:choose>
347 </xsl:template>
348
349</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.