r3689 - in jhalfs/branches/ablfs/BLFS: . xsl

pierre at higgs.linuxfromscratch.org pierre at higgs.linuxfromscratch.org
Sun Mar 31 10:25:21 PDT 2013


Author: pierre
Date: Sun Mar 31 10:25:21 2013
New Revision: 3689

Log:
BLFS tools:
- Separates the groups of xorg package into individual builds

Modified:
   jhalfs/branches/ablfs/BLFS/gen-special.sh
   jhalfs/branches/ablfs/BLFS/xsl/gen_config.xsl
   jhalfs/branches/ablfs/BLFS/xsl/gen_pkg_list.xsl
   jhalfs/branches/ablfs/BLFS/xsl/make_book.xsl

Modified: jhalfs/branches/ablfs/BLFS/gen-special.sh
==============================================================================
--- jhalfs/branches/ablfs/BLFS/gen-special.sh	Wed Mar 27 07:54:11 2013	(r3688)
+++ jhalfs/branches/ablfs/BLFS/gen-special.sh	Sun Mar 31 10:25:21 2013	(r3689)
@@ -2,20 +2,38 @@
 
 # $Id: gen-special.sh 21 2012-02-16 15:06:19Z labastie $
 
+#-------------------------------------------------------------------------
+# generates an xsl stylesheet containing a template for special
+# cases in the book:
+#  - If the version does not begin with a number, it is impossible to know
+#    where the package name ends and where the version begins. We therefore
+#    use the ENTITY at the beginning of the validated full-xml.
+#  - If a package is part of a group of xorg packages (proto, fonts, etc)
+#    there is no easy way to extract it from the xml. We use the ENTITY at
+#    the top of each file x7*.xml
+#  - If a pacakge is versioned but the version is not mentioned in the book
+#    (currently only udev), we retrieve the version by other means
+#-------------------------------------------------------------------------
+# Arguments:
+# $1 contains the name of the validated xml book
+# $2 contains the name of the ouput xsl file
+# $3 contains the name of the book sources directory
+#-------------------------------------------------------------------------
+
 BLFS_XML=$1
 if ! test -f ${BLFS_XML}; then
-  echo ${BLFS_XML} does not exist
+  echo File \`${BLFS_XML}\' does not exist
   exit 1
 fi
 SPECIAL_FILE=$2
 if test -z "${SPECIAL_FILE}"; then SPECIAL_FILE=specialCases.xsl;fi
+BLFS_DIR=$3
+if test -z "${BLFS_DIR}"; then BLFS_DIR=$(cd $(dirname ${BLFS_XML})/.. ; pwd);fi
+
 # Packages whose version does not begin with a number
 EXCEPTIONS=$(grep 'ENTITY.*version[ ]*"[^0-9"&.].*[0-9]' $BLFS_XML |
              sed 's@^[^"]*"\([^"]*\)".*@\1@')
-# Version for X Window packages without a version in the book
-XVERSION=$(grep 'ENTITY xorg-version' $BLFS_XML |
-           sed 's@^[^"]*"\([^"]*\)".*@\1@')
-# The case of udev
+
 # Set PATH to be sure to find udevadm
 SAVPATH=$PATH
 PATH=/bin:/sbin:/usr/bin:/usr/sbin
@@ -29,7 +47,7 @@
 
 <xsl:template match='*' mode="special">
   <xsl:choose>
-    <xsl:when test="@id='udev'">
+    <xsl:when test="contains(@id,'udev')">
       <xsl:text>      </xsl:text>
       <package><xsl:text>&#xA;        </xsl:text>
         <xsl:element name="name"><xsl:value-of select="@id"/></xsl:element>
@@ -53,46 +71,94 @@
         <xsl:text>&#xA;      </xsl:text>
       </package><xsl:text>&#xA;</xsl:text>
     </xsl:when>
+<!-- Although versioned, this page is not a package -->
     <xsl:when test="@id='xorg7'"/>
-    <xsl:when test="../@id='x-window-system' and
-                    not(contains(translate(@xreflabel,
-                                           '123456789',
-                                           '000000000'),
-                                '-0'))">
+EOF
+
+# Taking packages inside x7proto etc, as versionned modules.
+# We also write a dependency expansion when a dep is of the form
+# xorg7-something. Since that is another template, we need
+# a temporary file, which we shall concatenate at the end
+cat >tmpfile << EOF
+  <xsl:template name="expand-deps">
+    <xsl:param name="section"/>
+    <xsl:param name="status"/>
+    <xsl:choose>
+EOF
+for file in $(ls ${BLFS_DIR}/x/installing/x7* | grep -v x7driver); do
+  id=$(grep xreflabel $file | sed 's at .*id="\([^"]*\).*@\1@')
+  cat >>$SPECIAL_FILE << EOF
+    <xsl:when test="@id='$id'">
       <xsl:text>      </xsl:text>
       <package><xsl:text>&#xA;        </xsl:text>
-        <xsl:element name="name"><xsl:value-of select="@id"/></xsl:element>
+        <xsl:element name="name">$id</xsl:element>
         <xsl:text>&#xA;        </xsl:text>
-        <xsl:element name="version">$XVERSION</xsl:element>
-        <xsl:if
-            test="document(\$installed-packages)//package[name=current()/@id]">
-          <xsl:text>&#xA;        </xsl:text>
-          <xsl:element name="inst-version">
-            <xsl:value-of
-              select="document(\$installed-packages
-                              )//package[name=current()/@id]/version"/>
-          </xsl:element>
-        </xsl:if>
+EOF
+  cat >> tmpfile << EOF
+      <xsl:when test="\$section='$id'">
+EOF
+# In the list, the preceding package is a dependency of the following,
+# except the first:
+  precpack=NONE
+# Rationale for the sed below: the following for breaks words at spaces (unless
+# we tweak IFS). So replace spaces with commas in lines so that only newlines
+# are separators.
+  for pack in \
+      $(grep 'ENTITY.*version' $file | sed 's/[ ]\+/,/g'); do
+    packname=$(echo $pack | sed s'@.*ENTITY,\(.*\)-version.*@\1@')
+    packversion=$(echo $pack | sed 's@[^"]*"\([^"]*\).*@\1@')
+    cat >>$SPECIAL_FILE << EOF
+        <module><xsl:text>&#xA;          </xsl:text>
+          <xsl:element name="name">$packname</xsl:element>
+          <xsl:element name="version">$packversion</xsl:element>
+          <xsl:if test="document(\$installed-packages)//package[name='$packname']">
+            <xsl:element name="inst-version">
+              <xsl:value-of
+                select="document(\$installed-packages
+                                )//package[name='$packname']/version"/>
+            </xsl:element>
+          </xsl:if>
 <!-- Dependencies -->
-        <xsl:text>
-            </xsl:text>
+EOF
+    if test $precpack != NONE; then
+      cat >>$SPECIAL_FILE << EOF
+          <xsl:element name="dependency">
+            <xsl:attribute name="status">required</xsl:attribute>
+            <xsl:attribute name="name">$precpack</xsl:attribute>
+            <xsl:attribute name="type">ref</xsl:attribute>
+          </xsl:element>
+EOF
+    else
+      cat >>$SPECIAL_FILE << EOF
+          <xsl:apply-templates select=".//para[@role='required' or
+                                               @role='recommended' or
+                                               @role='optional']"
+                               mode="dependency"/>
+EOF
+    fi
+    cat >>$SPECIAL_FILE << EOF
+<!-- End dependencies -->
+        </module>
+EOF
+    cat >> tmpfile << EOF
         <xsl:element name="dependency">
-          <xsl:attribute name="status">required</xsl:attribute>
-          <xsl:attribute name="name">
-            <xsl:value-of
-              select="preceding-sibling::sect1[1]/@id"/>
+          <xsl:attribute name="status">
+            <xsl:value-of select="\$status"/>
           </xsl:attribute>
+          <xsl:attribute name="name">$packname</xsl:attribute>
           <xsl:attribute name="type">ref</xsl:attribute>
         </xsl:element>
-        <xsl:apply-templates select=".//para[@role='required' or
-                                             @role='recommended' or
-                                             @role='optional']"
-                             mode="dependency"/>
-<!-- End dependencies -->
-        <xsl:text>&#xA;      </xsl:text>
-      </package><xsl:text>&#xA;</xsl:text>
-    </xsl:when>
 EOF
+    precpack=$packname
+  done
+  cat >>$SPECIAL_FILE << EOF
+     </package>
+   </xsl:when>
+EOF
+  cat >> tmpfile << EOF
+      </xsl:when>
+EOF
+done
 
 for ver_ent in $EXCEPTIONS; do
   id=$(grep 'xreflabel=".*'$ver_ent $BLFS_XML | sed 's at .*id="\([^"]*\)".*@\1@')
@@ -137,6 +203,17 @@
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>
-
+EOF
+cat $SPECIAL_FILE tmpfile > tmpfile1
+mv tmpfile1 $SPECIAL_FILE
+rm tmpfile
+cat >> $SPECIAL_FILE << EOF
+    <xsl:otherwise>
+      <xsl:message>
+        <xsl:text>You should not be seeing this</xsl:text>
+      </xsl:message>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
 </xsl:stylesheet>
 EOF

Modified: jhalfs/branches/ablfs/BLFS/xsl/gen_config.xsl
==============================================================================
--- jhalfs/branches/ablfs/BLFS/xsl/gen_config.xsl	Wed Mar 27 07:54:11 2013	(r3688)
+++ jhalfs/branches/ablfs/BLFS/xsl/gen_config.xsl	Sun Mar 31 10:25:21 2013	(r3689)
@@ -181,9 +181,19 @@
         <xsl:text>]</xsl:text>
       </xsl:if>
       <xsl:text>"
-			default	n
+			default	</xsl:text>
+      <xsl:choose>
+        <xsl:when test="contains(../name,'xorg')">
+          <xsl:text>y
 
 </xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text>n
+
+</xsl:text>
+        </xsl:otherwise>
+      </xsl:choose>
     </xsl:if>
   </xsl:template>
 

Modified: jhalfs/branches/ablfs/BLFS/xsl/gen_pkg_list.xsl
==============================================================================
--- jhalfs/branches/ablfs/BLFS/xsl/gen_pkg_list.xsl	Wed Mar 27 07:54:11 2013	(r3688)
+++ jhalfs/branches/ablfs/BLFS/xsl/gen_pkg_list.xsl	Sun Mar 31 10:25:21 2013	(r3689)
@@ -256,17 +256,31 @@
     <xsl:variable name="status" select="./@role"/>
 <!-- No ulink for now (see special case for Perl modules) -->
     <xsl:for-each select="./xref">
-      <xsl:text>
+      <xsl:choose>
+        <xsl:when test="contains(@linkend,'xorg7-')">
+          <xsl:call-template name="expand-deps">
+            <xsl:with-param name="section">
+              <xsl:value-of select="@linkend"/>
+            </xsl:with-param>
+            <xsl:with-param name="status">
+              <xsl:value-of select="$status"/>
+            </xsl:with-param>
+          </xsl:call-template>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text>
             </xsl:text>
-      <xsl:element name="dependency">
-        <xsl:attribute name="status">
-          <xsl:value-of select="$status"/>
-        </xsl:attribute>
-        <xsl:attribute name="name">
-          <xsl:value-of select="@linkend"/>
-        </xsl:attribute>
-        <xsl:attribute name="type">ref</xsl:attribute>
-      </xsl:element>
+          <xsl:element name="dependency">
+            <xsl:attribute name="status">
+              <xsl:value-of select="$status"/>
+            </xsl:attribute>
+            <xsl:attribute name="name">
+              <xsl:value-of select="@linkend"/>
+            </xsl:attribute>
+            <xsl:attribute name="type">ref</xsl:attribute>
+          </xsl:element>
+        </xsl:otherwise>
+      </xsl:choose>
     </xsl:for-each>
   </xsl:template>
 

Modified: jhalfs/branches/ablfs/BLFS/xsl/make_book.xsl
==============================================================================
--- jhalfs/branches/ablfs/BLFS/xsl/make_book.xsl	Wed Mar 27 07:54:11 2013	(r3688)
+++ jhalfs/branches/ablfs/BLFS/xsl/make_book.xsl	Sun Mar 31 10:25:21 2013	(r3689)
@@ -34,25 +34,45 @@
     </book>
   </xsl:template>
 
-<!-- apply-templates for each id in the list.
+<!-- apply-templates for each item in the list.
+     Normally, those items are id of nodes.
      Those nodes can be sect1 (normal case),
      sect2 (python modules or DBus bindings)
      bridgehead (perl modules)
      para (dependency of perl modules).
-     The templates after this one treat each of those cases-->
+     The templates after this one treat each of those cases.
+     However, some items are xorg package names, and not id.
+     We need special instructions in that case.
+     The difficulty is that some of those names *are* id's,
+     because they are referenced in the index.
+     Hopefully, none of those id's are sect{1,2}, bridgehead or para...-->
   <xsl:template name="apply-list">
     <xsl:param name="list" select="''"/>
     <xsl:if test="string-length($list) > 0">
       <xsl:choose>
         <xsl:when test="contains($list,' ')">
-          <xsl:apply-templates select="id(substring-before($list,' '))"/>
+          <xsl:call-template name="apply-list">
+            <xsl:with-param name="list"
+                            select="substring-before($list,' ')"/>
+          </xsl:call-template>
           <xsl:call-template name="apply-list">
             <xsl:with-param name="list"
                             select="substring-after($list,' ')"/>
           </xsl:call-template>
         </xsl:when>
         <xsl:otherwise>
-          <xsl:apply-templates select="id($list)"/>
+          <xsl:choose>
+            <xsl:when test="not(id($list)/self::sect1|sect2|para|bridgehead)">
+              <xsl:apply-templates
+                   select="//sect1[contains(string(.//userinput),$list)]"
+                   mode="xorg">
+                <xsl:with-param name="package" select="$list"/>
+              </xsl:apply-templates>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:apply-templates select="id($list)"/>
+            </xsl:otherwise>
+          </xsl:choose>
         </xsl:otherwise>
       </xsl:choose>
     </xsl:if>
@@ -265,4 +285,156 @@
       </xsl:for-each>
     </sect2>
   </xsl:template>
+
+<!-- we have got an xorg package. We are at the installation page
+     but now we need to make an autonomous page from the global
+     one -->
+  <xsl:template match="sect1" mode="xorg">
+    <xsl:param name="package"/>
+    <xsl:variable name="tarball">
+      <xsl:call-template name="tarball">
+        <xsl:with-param name="package" select="$package"/>
+        <xsl:with-param name="cat-md5"
+                        select="string(.//userinput[starts-with(string(),'cat')])"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="md5sum">
+      <xsl:call-template name="md5sum">
+        <xsl:with-param name="package" select="$package"/>
+        <xsl:with-param name="cat-md5"
+                        select=".//userinput[starts-with(string(),'cat')]"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="install-instructions">
+      <xsl:call-template name="inst-instr">
+        <xsl:with-param name="inst-instr"
+                        select=".//userinput[starts-with(string(),'for')]"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:element name="sect1">
+      <xsl:attribute name="id"><xsl:value-of select="$package"/></xsl:attribute>
+      <xsl:processing-instruction name="dbhtml">
+         filename="<xsl:value-of select='$package'/>.html"
+      </xsl:processing-instruction>
+      <title><xsl:value-of select="$package"/></title>
+      <sect2 role="package">
+        <title>Introduction to <xsl:value-of select="$package"/></title>
+        <bridgehead renderas="sect3">Package Information</bridgehead>
+        <itemizedlist spacing="compact">
+          <listitem>
+            <para>Download (HTTP): <xsl:element name="ulink">
+              <xsl:attribute name="url">
+                <xsl:value-of
+                   select=".//para[contains(string(),'(HTTP)')]/ulink/@url"/>
+                <xsl:value-of select="$tarball"/>
+              </xsl:attribute>
+             </xsl:element>
+            </para>
+          </listitem>
+          <listitem>
+            <para>Download (FTP): <xsl:element name="ulink">
+              <xsl:attribute name="url">
+                <xsl:value-of
+                   select=".//para[contains(string(),'(FTP)')]/ulink/@url"/>
+                <xsl:value-of select="$tarball"/>
+              </xsl:attribute>
+             </xsl:element>
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              Download MD5 sum: <xsl:value-of select="$md5sum"/>
+            </para>
+          </listitem>
+        </itemizedlist>
+      </sect2>
+      <sect2 role="installation">
+        <title>Installation of <xsl:value-of select="$package"/></title>
+
+        <para>
+          Install <application><xsl:value-of select="$package"/></application>
+          by running the following commands:
+        </para>
+
+        <screen><userinput>packagedir=<xsl:value-of
+                    select="substring-before($tarball,'.tar.bz2')"/>
+          <xsl:text>&#xA;</xsl:text>
+          <xsl:value-of select="substring-before($install-instructions,
+                                                 'as_root')"/>
+        </userinput></screen>
+
+        <para>
+          Now as the <systemitem class="username">root</systemitem> user:
+        </para>
+        <screen role='root'>
+          <userinput><xsl:value-of select="substring-after(
+                                                 $install-instructions,
+                                                 'as_root')"/>
+          </userinput>
+        </screen>
+      </sect2>
+    </xsl:element><!-- sect1 -->
+
+  </xsl:template>
+
+<!-- get the tarball name from the text that comes from the .md5 file -->
+  <xsl:template name="tarball">
+    <xsl:param name="package"/>
+    <xsl:param name="cat-md5"/>
+<!-- DEBUG
+<xsl:message><xsl:text>Entering "tarball" template:
+  package is: </xsl:text>
+<xsl:value-of select="$package"/><xsl:text>
+  cat-md5 is: </xsl:text>
+<xsl:value-of select="$cat-md5"/>
+</xsl:message>
+END DEBUG -->
+    <xsl:choose>
+      <xsl:when test="contains(substring-before($cat-md5,$package),'&#xA;')">
+        <xsl:call-template name="tarball">
+          <xsl:with-param name="package" select="$package"/>
+          <xsl:with-param name="cat-md5"
+                          select="substring-after($cat-md5,'&#xA;')"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:copy-of select="substring-after(
+                                 substring-before($cat-md5,'&#xA;'),'  ')"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+<!-- same for md5sum -->
+  <xsl:template name="md5sum">
+    <xsl:param name="package"/>
+    <xsl:param name="cat-md5"/>
+    <xsl:choose>
+      <xsl:when test="contains(substring-before($cat-md5,$package),'&#xA;')">
+        <xsl:call-template name="md5sum">
+          <xsl:with-param name="package" select="$package"/>
+          <xsl:with-param name="cat-md5"
+                          select="substring-after($cat-md5,'&#xA;')"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:copy-of select="substring-before($cat-md5,'  ')"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template name="inst-instr">
+    <xsl:param name="inst-instr"/>
+    <xsl:choose>
+      <xsl:when test="contains($inst-instr,'pushd')">
+        <xsl:call-template name="inst-instr">
+          <xsl:with-param name="inst-instr"
+                          select="substring-after(
+                                   substring-after($inst-instr,'pushd'),
+                                   '&#xA;')"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:copy-of select="substring-before($inst-instr,'popd')"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
 </xsl:stylesheet>



More information about the alfs-log mailing list