source: BLFS/libs/scripts.xsl@ 249874a

2.3 2.3.x 2.4 ablfs ablfs-more legacy new_features trunk
Last change on this file since 249874a was 73c3c1c, checked in by Manuel Canales Esparcia <manuel@…>, 18 years ago

Changed build scripts numeration to can insert scripts for non-BLFS packages.

  • Property mode set to 100644
File size: 13.3 KB
Line 
1<?xml version="1.0"?>
2
3<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns:exsl="http://exslt.org/common"
5 extension-element-prefixes="exsl"
6 version="1.0">
7
8<!-- $Id$ -->
9
10<!-- XSLT stylesheet to create shell scripts from "linear build" BLFS books. -->
11
12 <xsl:template match="/">
13 <xsl:apply-templates select="//sect1"/>
14 </xsl:template>
15
16<!--=================== Master chunks code ======================-->
17
18 <xsl:template match="sect1">
19 <xsl:if test="@id != 'locale-issues' and
20 (count(descendant::screen/userinput) &gt; 0 and
21 count(descendant::screen/userinput) &gt;
22 count(descendant::screen[@role='nodump']))">
23
24 <!-- The file names -->
25 <xsl:variable name="pi-file" select="processing-instruction('dbhtml')"/>
26 <xsl:variable name="pi-file-value" select="substring-after($pi-file,'filename=')"/>
27 <xsl:variable name="filename" select="substring-before(substring($pi-file-value,2),'.html')"/>
28
29 <!-- Package name (use "Download FTP" by default. If empty, use "Download HTTP" -->
30 <xsl:param name="package">
31 <xsl:choose>
32 <xsl:when
33 test="string-length(sect2[@role='package']/itemizedlist/listitem[2]/para/ulink/@url)
34 &gt; '10'">
35 <xsl:call-template name="package_name">
36 <xsl:with-param name="url"
37 select="sect2[@role='package']/itemizedlist/listitem[2]/para/ulink/@url"/>
38 </xsl:call-template>
39 </xsl:when>
40 <xsl:otherwise>
41 <xsl:call-template name="package_name">
42 <xsl:with-param name="url"
43 select="sect2[@role='package']/itemizedlist/listitem[1]/para/ulink/@url"/>
44 </xsl:call-template>
45 </xsl:otherwise>
46 </xsl:choose>
47 </xsl:param>
48
49 <!-- FTP dir name -->
50 <xsl:param name="ftpdir">
51 <xsl:call-template name="ftp_dir">
52 <xsl:with-param name="package" select="$package"/>
53 </xsl:call-template>
54 </xsl:param>
55
56 <!-- The build order -->
57 <xsl:variable name="position" select="position()"/>
58 <xsl:variable name="order">
59 <xsl:choose>
60 <xsl:when test="string-length($position) = 1">
61 <xsl:text>00</xsl:text>
62 <xsl:value-of select="$position"/>
63 </xsl:when>
64 <xsl:when test="string-length($position) = 2">
65 <xsl:text>0</xsl:text>
66 <xsl:value-of select="$position"/>
67 </xsl:when>
68 <xsl:otherwise>
69 <xsl:value-of select="$position"/>
70 </xsl:otherwise>
71 </xsl:choose>
72 </xsl:variable>
73
74 <!-- Depuration code -->
75 <xsl:message>
76 <xsl:text>SCRIPT is </xsl:text>
77 <xsl:value-of select="concat($order,'-',$filename)"/>
78 <xsl:text>&#xA; PACKAGE is </xsl:text>
79 <xsl:value-of select="$package"/>
80 <xsl:text>&#xA; FTPDIR is </xsl:text>
81 <xsl:value-of select="$ftpdir"/>
82 <xsl:text>&#xA;&#xA;</xsl:text>
83 </xsl:message>
84
85 <!-- Creating the scripts -->
86 <exsl:document href="{$order}-z-{$filename}" method="text">
87 <xsl:text>#!/bin/sh&#xA;set -e&#xA;&#xA;</xsl:text>
88 <xsl:choose>
89 <!-- Package page -->
90 <xsl:when test="sect2[@role='package']">
91 <!-- Variables -->
92 <xsl:text>SRC_ARCHIVE=$SRC_ARCHIVE&#xA;</xsl:text>
93 <xsl:text>FTP_SERVER=$FTP_SERVER&#xA;&#xA;PACKAGE=</xsl:text>
94 <xsl:value-of select="$package"/>
95 <xsl:text>&#xA;PKG_DIR=</xsl:text>
96 <xsl:value-of select="$ftpdir"/>
97 <xsl:text>&#xA;&#xA;</xsl:text>
98 <!-- Download code and build commands -->
99 <xsl:apply-templates select="sect2">
100 <xsl:with-param name="package" select="$package"/>
101 <xsl:with-param name="ftpdir" select="$ftpdir"/>
102 </xsl:apply-templates>
103 <!-- Clean-up -->
104 <xsl:text>cd ~/sources/$PKG_DIR&#xA;</xsl:text>
105 <xsl:text>rm -rf $UNPACKDIR unpacked&#xA;&#xA;</xsl:text>
106 </xsl:when>
107 <!-- Non-package page -->
108 <xsl:otherwise>
109 <xsl:apply-templates select=".//screen"/>
110 </xsl:otherwise>
111 </xsl:choose>
112 <xsl:text>exit</xsl:text>
113 </exsl:document>
114
115 </xsl:if>
116 </xsl:template>
117
118<!--======================= Sub-sections code =======================-->
119
120 <xsl:template match="sect2">
121 <xsl:param name="package" select="foo"/>
122 <xsl:param name="ftpdir" select="foo"/>
123 <xsl:choose>
124 <xsl:when test="@role = 'package'">
125 <xsl:text>mkdir -p ~/sources/$PKG_DIR&#xA;</xsl:text>
126 <xsl:text>cd ~/sources/$PKG_DIR&#xA;</xsl:text>
127 <xsl:apply-templates select="itemizedlist/listitem/para">
128 <xsl:with-param name="package" select="$package"/>
129 <xsl:with-param name="ftpdir" select="$ftpdir"/>
130 </xsl:apply-templates>
131 <xsl:text>&#xA;</xsl:text>
132 </xsl:when>
133 <xsl:when test="@role = 'installation'">
134 <xsl:text>
135if [[ -e unpacked ]] ; then
136 UNPACKDIR=`head -n1 unpacked | sed 's@^./@@;s@/.*@@'`
137 rm -rf $UNPACKDIR
138fi
139tar -xvf $PACKAGE > unpacked
140UNPACKDIR=`head -n1 unpacked | sed 's@^./@@;s@/.*@@'`
141cd $UNPACKDIR
142 </xsl:text>
143 <xsl:apply-templates select=".//screen | .//para/command"/>
144 <xsl:text>&#xA;</xsl:text>
145 </xsl:when>
146 <xsl:when test="@role = 'configuration'">
147 <xsl:apply-templates select=".//screen"/>
148 <xsl:text>&#xA;</xsl:text>
149 </xsl:when>
150 </xsl:choose>
151 </xsl:template>
152
153<!--==================== Download code =======================-->
154
155 <xsl:template name="package_name">
156 <xsl:param name="url" select="foo"/>
157 <xsl:param name="sub-url" select="substring-after($url,'/')"/>
158 <xsl:choose>
159 <xsl:when test="contains($sub-url,'/')">
160 <xsl:call-template name="package_name">
161 <xsl:with-param name="url" select="$sub-url"/>
162 </xsl:call-template>
163 </xsl:when>
164 <xsl:otherwise>
165 <xsl:choose>
166 <xsl:when test="contains($sub-url,'?')">
167 <xsl:value-of select="substring-before($sub-url,'?')"/>
168 </xsl:when>
169 <xsl:when test="contains($sub-url,'.patch')"/>
170 <xsl:otherwise>
171 <xsl:value-of select="$sub-url"/>
172 </xsl:otherwise>
173 </xsl:choose>
174 </xsl:otherwise>
175 </xsl:choose>
176 </xsl:template>
177
178 <xsl:template name="ftp_dir">
179 <xsl:param name="package" select="foo"/>
180 <!-- A lot of hardcoded dir names. Not full revised yet. -->
181 <xsl:choose>
182 <!-- cdparanoia -->
183 <xsl:when test="contains($package, '-III')">
184 <xsl:text>cdparanoia</xsl:text>
185 </xsl:when>
186 <!-- DobBook 3.1 -->
187 <xsl:when test="contains($package, 'docbk31')">
188 <xsl:text>docbk</xsl:text>
189 </xsl:when>
190 <!-- gc -->
191 <xsl:when test="contains($package, 'gc6')">
192 <xsl:text>gc</xsl:text>
193 </xsl:when>
194 <!-- ISO-codes -->
195 <xsl:when test="contains($package, 'iso-codes')">
196 <xsl:text>iso-codes</xsl:text>
197 </xsl:when>
198 <!-- JPEG -->
199 <xsl:when test="contains($package, 'jpegsrc')">
200 <xsl:text>jpeg</xsl:text>
201 </xsl:when>
202 <!-- lynx -->
203 <xsl:when test="contains($package, 'lynx')">
204 <xsl:text>lynx</xsl:text>
205 </xsl:when>
206 <!-- ntp -->
207 <xsl:when test="contains($package, 'ntp')">
208 <xsl:text>ntp</xsl:text>
209 </xsl:when>
210 <!-- OpenLDAP -->
211 <xsl:when test="contains($package, 'openldap')">
212 <xsl:text>openldap</xsl:text>
213 </xsl:when>
214 <!-- Open Office -->
215 <xsl:when test="contains($package, 'OOo')">
216 <xsl:text>OOo</xsl:text>
217 </xsl:when>
218 <!-- pine -->
219 <xsl:when test="contains($package, 'pine')">
220 <xsl:text>pine</xsl:text>
221 </xsl:when>
222 <!-- portmap -->
223 <xsl:when test="contains($package, 'portmap')">
224 <xsl:text>portmap</xsl:text>
225 </xsl:when>
226 <!-- psutils -->
227 <xsl:when test="contains($package, 'psutils')">
228 <xsl:text>psutils</xsl:text>
229 </xsl:when>
230 <!-- qpopper -->
231 <xsl:when test="contains($package, 'qpopper')">
232 <xsl:text>qpopper</xsl:text>
233 </xsl:when>
234 <!-- QT -->
235 <xsl:when test="contains($package, 'qt-x')">
236 <xsl:text>qt-x11-free</xsl:text>
237 </xsl:when>
238 <!-- sendmail -->
239 <xsl:when test="contains($package, 'sendmail')">
240 <xsl:text>sendmail</xsl:text>
241 </xsl:when>
242 <!-- Slib -->
243 <xsl:when test="contains($package, 'slib')">
244 <xsl:text>slib</xsl:text>
245 </xsl:when>
246 <!-- TCL -->
247 <xsl:when test="contains($package, 'tcl')">
248 <xsl:text>tcl</xsl:text>
249 </xsl:when>
250 <!-- tcpwrappers -->
251 <xsl:when test="contains($package, 'tcp_wrappers')">
252 <xsl:text>tcp_wrappers</xsl:text>
253 </xsl:when>
254 <!-- TeTeX -->
255 <xsl:when test="contains($package, 'tetex')">
256 <xsl:text>tetex</xsl:text>
257 </xsl:when>
258 <!-- Tidy -->
259 <xsl:when test="contains($package, 'tidy')">
260 <xsl:text>tidy</xsl:text>
261 </xsl:when>
262 <!-- Tk -->
263 <xsl:when test="contains($package, 'tk8')">
264 <xsl:text>tk</xsl:text>
265 </xsl:when>
266 <!-- unzip -->
267 <xsl:when test="contains($package, 'unzip')">
268 <xsl:text>unzip</xsl:text>
269 </xsl:when>
270 <!-- wireless_tools -->
271 <xsl:when test="contains($package, 'wireless_tools')">
272 <xsl:text>wireless_tools</xsl:text>
273 </xsl:when>
274 <!-- whois -->
275 <xsl:when test="contains($package, 'whois')">
276 <xsl:text>whois</xsl:text>
277 </xsl:when>
278 <!-- XOrg -->
279 <xsl:when test="contains($package, 'X11R6')">
280 <xsl:text>Xorg</xsl:text>
281 </xsl:when>
282 <!-- zip -->
283 <xsl:when test="contains($package, 'zip2')">
284 <xsl:text>zip</xsl:text>
285 </xsl:when>
286 <!-- General rule -->
287 <xsl:otherwise>
288 <xsl:variable name="cut"
289 select="translate(substring-after($package, '-'), '0123456789', '0000000000')"/>
290 <xsl:variable name="package2">
291 <xsl:value-of select="substring-before($package, '-')"/>
292 <xsl:text>-</xsl:text>
293 <xsl:value-of select="$cut"/>
294 </xsl:variable>
295 <xsl:value-of select="substring-before($package2, '-0')"/>
296 </xsl:otherwise>
297 </xsl:choose>
298 </xsl:template>
299
300 <xsl:template match="itemizedlist/listitem/para">
301 <xsl:param name="package" select="foo"/>
302 <xsl:param name="ftpdir" select="foo"/>
303 <xsl:choose>
304 <!-- This depend on all package pages having both "Download HTTP" and "Download FTP" lines -->
305 <xsl:when test="contains(string(),'HTTP')">
306 <xsl:text>if [[ ! -f $PACKAGE ]] ; then&#xA;</xsl:text>
307 <!-- SRC_ARCHIVE may have subdirectories or not -->
308 <xsl:text> if [[ -f $SRC_ARCHIVE/$PKG_DIR/$PACKAGE ]] ; then&#xA;</xsl:text>
309 <xsl:text> cp $SRC_ARCHIVE/$PKG_DIR/$PACKAGE $PACKAGE&#xA;</xsl:text>
310 <xsl:text> elif [[ -f $SRC_ARCHIVE/$PACKAGE ]] ; then&#xA;</xsl:text>
311 <xsl:text> cp $SRC_ARCHIVE/$PACKAGE $PACKAGE&#xA; else&#xA;</xsl:text>
312 <!-- The FTP_SERVER mirror -->
313 <xsl:text> wget ${FTP_SERVER}conglomeration/$PKG_DIR/$PACKAGE</xsl:text>
314 <!-- Upstream HTTP URL -->
315 <xsl:if test="string-length(ulink/@url) &gt; '10' and
316 not(contains(string(ulink/@url),'sourceforge'))">
317 <xsl:text> || \&#xA; wget </xsl:text>
318 <xsl:value-of select="ulink/@url"/>
319 </xsl:if>
320 </xsl:when>
321 <xsl:when test="contains(string(),'FTP')">
322 <!-- Upstream FTP URL -->
323 <xsl:if test="string-length(ulink/@url) &gt; '10'">
324 <xsl:text> || \&#xA; wget </xsl:text>
325 <xsl:value-of select="ulink/@url"/>
326 </xsl:if>
327 <xsl:text>&#xA; fi&#xA;fi&#xA;</xsl:text>
328 </xsl:when>
329 <xsl:when test="contains(string(),'MD5')">
330 <xsl:text>echo "</xsl:text>
331 <xsl:value-of select="substring-after(string(),'sum: ')"/>
332 <xsl:text>&#x20;&#x20;$PACKAGE" | md5sum -c -&#xA;</xsl:text>
333 </xsl:when>
334 <!-- Patches -->
335 <xsl:when test="contains(string(ulink/@url),'.patch')">
336 <xsl:text>wget </xsl:text>
337 <xsl:value-of select="ulink/@url"/>
338 <xsl:text>&#xA;</xsl:text>
339 </xsl:when>
340 </xsl:choose>
341 </xsl:template>
342
343<!--======================== Commands code ==========================-->
344
345 <xsl:template match="screen">
346 <xsl:if test="child::* = userinput and not(@role = 'nodump')">
347 <xsl:if test="@role = 'root'">
348 <xsl:text>sudo sh -c "</xsl:text>
349 </xsl:if>
350 <xsl:apply-templates select="userinput"/>
351 <xsl:if test="@role = 'root'">
352 <xsl:text>"</xsl:text>
353 </xsl:if>
354 <xsl:text>&#xA;</xsl:text>
355 </xsl:if>
356 </xsl:template>
357
358 <xsl:template match="para/command">
359 <xsl:if test="(contains(string(),'test') or
360 contains(string(),'check'))">
361 <xsl:text>#</xsl:text>
362 <xsl:value-of select="substring-before(string(),'make')"/>
363 <xsl:text>make -k</xsl:text>
364 <xsl:value-of select="substring-after(string(),'make')"/>
365 <xsl:text> || true&#xA;</xsl:text>
366 </xsl:if>
367 </xsl:template>
368
369 <xsl:template match="userinput">
370 <xsl:apply-templates/>
371 </xsl:template>
372
373 <xsl:template match="replaceable">
374 <xsl:text>**EDITME</xsl:text>
375 <xsl:apply-templates/>
376 <xsl:text>EDITME**</xsl:text>
377 </xsl:template>
378
379</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.