Index: LFS/lfs.xsl
===================================================================
--- LFS/lfs.xsl	(revision 1f104959e2f31621d102343d34c61893d4824ef5)
+++ LFS/lfs.xsl	(revision bfcaaa074c06ce47cda7814700d98e9f55828587)
@@ -12,4 +12,6 @@
     <!-- Including common extensions templates -->
   <xsl:include href="../XSL/user.xsl"/>
+  <xsl:include href="../XSL/custom-tools.xsl"/>
+  <xsl:include href="../XSL/blfs-tool.xsl"/>
 
 <!-- ####################### PARAMETERS ################################### -->
@@ -49,280 +51,4 @@
 
 <!-- ####################################################################### -->
-
-<!-- ########### NAMED USER TEMPLATES TO ALLOW CUSTOMIZATIONS ############## -->
-<!-- ############ Maybe should be placed on a separate file ################ -->
-
-
-    <!-- Hock for creating a custom tools directory containing scripts
-         to be run after the system has been built
-         (to be moved to a separate file) -->
-  <xsl:template name="custom-tools">
-      <!-- Fixed directory and ch_order values -->
-    <xsl:variable name="basedir">custom-tools/20_</xsl:variable>
-      <!-- Add an exsl:document block for each script to be created.
-           This one is only a dummy example. You must replace "01" by
-           the proper build order and "dummy" by the script name -->
-    <exsl:document href="{$basedir}01-dummy" method="text">
-      <xsl:call-template name="header"/>
-      <xsl:text>
-PKG_PHASE=dummy
-PACKAGE=dummy
-VERSION=0.0.0
-TARBALL=dummy-0.0.0.tar.bz2
-      </xsl:text>
-      <xsl:call-template name="disk_usage"/>
-      <xsl:call-template name="unpack"/>
-      <xsl:text>
-cd $PKGDIR
-./configure --prefix=/usr
-make
-make check
-make install
-      </xsl:text>
-      <xsl:call-template name="disk_usage"/>
-      <xsl:call-template name="clean_sources"/>
-      <xsl:call-template name="footer"/>
-    </exsl:document>
-  </xsl:template>
-
-
-<!-- ####################################################################### -->
-
-<!-- ########################### NAMED TEMPLATES ########################### -->
-
-    <!-- Chapter directory name (the same used for HTML output) -->
-  <xsl:template name="dirname">
-    <xsl:variable name="pi-dir" select="processing-instruction('dbhtml')"/>
-    <xsl:variable name="pi-dir-value" select="substring-after($pi-dir,'dir=')"/>
-    <xsl:variable name="quote-dir" select="substring($pi-dir-value,1,1)"/>
-    <xsl:variable name="dirname" select="substring-before(substring($pi-dir-value,2),$quote-dir)"/>
-    <xsl:value-of select="$dirname"/>
-  </xsl:template>
-
-
-    <!-- Base file name (the same used for HTML output) -->
-  <xsl:template name="filename">
-    <xsl:variable name="pi-file" select="processing-instruction('dbhtml')"/>
-    <xsl:variable name="pi-file-value" select="substring-after($pi-file,'filename=')"/>
-    <xsl:variable name="filename" select="substring-before(substring($pi-file-value,2),'.html')"/>
-    <xsl:value-of select="$filename"/>
-  </xsl:template>
-
-
-    <!-- Script header -->
-  <xsl:template name="header">
-    <xsl:if test="not(@id='ch-system-chroot') and
-                  not(@id='ch-system-revisedchroot')">
-        <!-- Set the shabang -->
-      <xsl:choose>
-        <xsl:when test="@id='ch-system-creatingdirs' or
-                        @id='ch-system-createfiles' or
-                        @id='ch-system-strippingagain'">
-          <xsl:text>#!/tools/bin/bash&#xA;</xsl:text>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:text>#!/bin/bash&#xA;</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
-        <!-- Set +h -->
-      <xsl:text>set +h&#xA;</xsl:text>
-        <!-- Set -e -->
-      <xsl:if test="not(@id='ch-tools-stripping') and
-                    not(@id='ch-system-strippingagain')">
-        <xsl:text>set -e&#xA;</xsl:text>
-      </xsl:if>
-        <!-- Dump a time stamp -->
-      <xsl:text>&#xA;echo -e "\n`date`\n"&#xA;</xsl:text>
-    </xsl:if>
-  </xsl:template>
-
-
-    <!-- Dump current disk usage -->
-  <xsl:template name="disk_usage">
-    <xsl:if test="not(@id='ch-system-chroot') and
-                  not(@id='ch-system-revisedchroot')">
-      <xsl:choose>
-        <xsl:when test="ancestor::chapter[@id='chapter-temporary-tools']">
-          <xsl:text>echo -e "\nKB: `du -skx --exclude=jhalfs --exclude=lost+found $LFS`\n"&#xA;</xsl:text>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:text>echo -e "\nKB: `du -skx --exclude=jhalfs --exclude=lost+found /`\n"&#xA;</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:if>
-  </xsl:template>
-
-
-    <!-- Enter to the sources dir, clean it, unpack the tarball,
-         and reset the seconds counter -->
-  <xsl:template name="unpack">
-    <xsl:text>cd </xsl:text>
-    <xsl:if test="ancestor::chapter[@id='chapter-temporary-tools']">
-      <xsl:text>$LFS</xsl:text>
-    </xsl:if>
-    <xsl:text>/sources
-PKGDIR=`tar -tf $TARBALL | head -n1 | sed -e 's@^./@@;s@/.*@@'`
-if [ -d $PKGDIR ]; then
-  rm -rf $PKGDIR
-fi
-if [ -d ${PKGDIR%-*}-build ]; then
-  rm -rf ${PKGDIR%-*}-build
-fi
-tar -xf $TARBALL
-SECONDS=0
-    </xsl:text>
-  </xsl:template>
-
-
-    <!-- Extra previous commands needed by the book but not inside screen tags -->
-  <xsl:template name="pre_commands">
-    <xsl:if test="sect2[@role='installation']">
-      <xsl:text>cd $PKGDIR&#xA;</xsl:text>
-    </xsl:if>
-    <xsl:if test="@id='ch-system-vim' and $vim-lang = 'y'">
-      <xsl:text>tar -xf ../$TARBALL_1 --strip-components=1&#xA;</xsl:text>
-    </xsl:if>
-  </xsl:template>
-
-
-    <!-- Extra post commands needed by the book but not inside screen tags -->
-  <xsl:template name="post_commands">
-    <xsl:if test="$testsuite='3' and @id='ch-tools-glibc'">
-      <xsl:variable name="content" select="//userinput[@remap='locale-test']"/>
-      <xsl:value-of select="substring-before($content,'/usr/lib/locale')"/>
-      <xsl:text>/tools/lib/locale</xsl:text>
-      <xsl:value-of select="substring-after($content,'/usr/lib/locale')"/>
-    </xsl:if>
-  </xsl:template>
-
-
-    <!-- Remove sources and build dirs, skipping it from seconds meassurament -->
-  <xsl:template name="clean_sources">
-    <xsl:text>cd </xsl:text>
-    <xsl:if test="ancestor::chapter[@id='chapter-temporary-tools']">
-      <xsl:text>$LFS</xsl:text>
-    </xsl:if>
-    <xsl:text>/sources
-SECS=$SECONDS
-rm -rf $PKGDIR
-rm -rf ${PKGDIR%-*}-build
-SECONDS=$SECS
-    </xsl:text>
-  </xsl:template>
-
-
-    <!-- Script footer -->
-  <xsl:template name="footer">
-      <!-- Dump the build time and exit -->
-    <xsl:if test="not(@id='ch-system-chroot') and
-                  not(@id='ch-system-revisedchroot')">
-      <xsl:text>
-echo -e "\n\nTotalseconds: $SECONDS\n"
-
-exit
-      </xsl:text>
-    </xsl:if>
-  </xsl:template>
-
-
-    <!-- Extra commads needed at the start of some screen block
-         to allow automatization -->
-  <xsl:template name="top_screen_build_fixes">
-      <!-- Fix Udev reinstallation after a build failure or on iterative builds -->
-    <xsl:if test="contains(string(),'firmware,udev')">
-      <xsl:text>if [[ ! -d /lib/udev/devices ]] ; then&#xA;</xsl:text>
-    </xsl:if>
-  </xsl:template>
-
-
-    <!-- Extra commads needed at the end of some screen block
-         to allow automatization -->
-  <xsl:template name="bottom_screen_build_fixes">
-      <!-- Fix Udev reinstallation after a build failure or on iterative builds -->
-    <xsl:if test="contains(string(),'firmware,udev')">
-      <xsl:text>&#xA;fi</xsl:text>
-    </xsl:if>
-      <!-- Copying the kernel config file -->
-    <xsl:if test="string() = 'make mrproper'">
-      <xsl:text>&#xA;cp -v ../kernel-config .config</xsl:text>
-    </xsl:if>
-      <!-- Don't stop on strip run -->
-    <xsl:if test="contains(string(),'strip --strip')">
-      <xsl:text> || true</xsl:text>
-    </xsl:if>
-  </xsl:template>
-
-
-    <!-- Extract a package name from a package URL -->
-  <xsl:template name="package_name">
-    <xsl:param name="url" select="foo"/>
-    <xsl:param name="sub-url" select="substring-after($url,'/')"/>
-    <xsl:choose>
-      <xsl:when test="contains($sub-url,'/')">
-        <xsl:call-template name="package_name">
-          <xsl:with-param name="url" select="$sub-url"/>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="$sub-url"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-
-    <!-- Check if a package testsuite must be run -->
-  <xsl:template name="run_this_test">
-    <xsl:choose>
-      <xsl:when test=".//userinput[@remap='test']">
-        <xsl:choose>
-            <!-- No testsuites run on level 0 -->
-          <xsl:when test="$testsuite = '0'">0</xsl:when>
-            <!-- On level 1, only final system toolchain testsuites are run -->
-          <xsl:when test="$testsuite = '1' and
-                          not(@id='ch-system-gcc') and
-                          not(@id='ch-system-glibc') and
-                          not(@id='ch-system-binutils')">0</xsl:when>
-            <!-- On level 2, temp tools testsuites are not run -->
-          <xsl:when test="$testsuite = '2' and
-                          ../@id='chapter-temporary-tools'">0</xsl:when>
-          <xsl:otherwise>1</xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <xsl:otherwise>0</xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-
-    <!-- Adds blfs-tool support scripts (to be moved to a separate file) -->
-  <xsl:template name="blfs-tool">
-      <!-- Fixed directory and ch_order values -->
-    <xsl:variable name="basedir">blfs-tool-deps/30_</xsl:variable>
-      <!-- One exsl:document block for each blfs-tool dependency
-           TO BE WRITTEN -->
-    <exsl:document href="{$basedir}01-dummy" method="text">
-      <xsl:call-template name="header"/>
-      <xsl:text>
-PKG_PHASE=dummy
-PACKAGE=dummy
-VERSION=0.0.0
-TARBALL=dummy-0.0.0.tar.bz2
-      </xsl:text>
-      <xsl:call-template name="disk_usage"/>
-      <xsl:call-template name="unpack"/>
-      <xsl:text>
-cd $PKGDIR
-./configure --prefix=/usr
-make
-make check
-make install
-      </xsl:text>
-      <xsl:call-template name="disk_usage"/>
-      <xsl:call-template name="clean_sources"/>
-      <xsl:call-template name="footer"/>
-    </exsl:document>
-  </xsl:template>
-
-
-<!-- ######################################################################## -->
 
 <!-- ############################# MATCH TEMPLATES ########################## -->
@@ -468,5 +194,5 @@
       <xsl:text>/jhalfs/test-logs/</xsl:text>
       <xsl:value-of select="$testlogfile"/>
-      <xsl:text>&#xA;echo -e "\n`date`\n" > $TEST_LOG</xsl:text>
+      <xsl:text>&#xA;echo -e "\n`date`\n" &gt; $TEST_LOG</xsl:text>
     </xsl:if>
     <xsl:text>&#xA;&#xA;</xsl:text>
@@ -623,3 +349,210 @@
   </xsl:template>
 
+
+<!-- ######################################################################## -->
+
+<!-- ########################### NAMED TEMPLATES ########################### -->
+
+    <!-- Chapter directory name (the same used for HTML output) -->
+  <xsl:template name="dirname">
+    <xsl:variable name="pi-dir" select="processing-instruction('dbhtml')"/>
+    <xsl:variable name="pi-dir-value" select="substring-after($pi-dir,'dir=')"/>
+    <xsl:variable name="quote-dir" select="substring($pi-dir-value,1,1)"/>
+    <xsl:variable name="dirname" select="substring-before(substring($pi-dir-value,2),$quote-dir)"/>
+    <xsl:value-of select="$dirname"/>
+  </xsl:template>
+
+
+    <!-- Base file name (the same used for HTML output) -->
+  <xsl:template name="filename">
+    <xsl:variable name="pi-file" select="processing-instruction('dbhtml')"/>
+    <xsl:variable name="pi-file-value" select="substring-after($pi-file,'filename=')"/>
+    <xsl:variable name="filename" select="substring-before(substring($pi-file-value,2),'.html')"/>
+    <xsl:value-of select="$filename"/>
+  </xsl:template>
+
+
+    <!-- Script header -->
+  <xsl:template name="header">
+    <xsl:if test="not(@id='ch-system-chroot') and
+                  not(@id='ch-system-revisedchroot')">
+        <!-- Set the shabang -->
+      <xsl:choose>
+        <xsl:when test="@id='ch-system-creatingdirs' or
+                        @id='ch-system-createfiles' or
+                        @id='ch-system-strippingagain'">
+          <xsl:text>#!/tools/bin/bash&#xA;</xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text>#!/bin/bash&#xA;</xsl:text>
+        </xsl:otherwise>
+      </xsl:choose>
+        <!-- Set +h -->
+      <xsl:text>set +h&#xA;</xsl:text>
+        <!-- Set -e -->
+      <xsl:if test="not(@id='ch-tools-stripping') and
+                    not(@id='ch-system-strippingagain')">
+        <xsl:text>set -e&#xA;</xsl:text>
+      </xsl:if>
+        <!-- Dump a time stamp -->
+      <xsl:text>&#xA;echo -e "\n`date`\n"&#xA;</xsl:text>
+    </xsl:if>
+  </xsl:template>
+
+
+    <!-- Dump current disk usage -->
+  <xsl:template name="disk_usage">
+    <xsl:if test="not(@id='ch-system-chroot') and
+                  not(@id='ch-system-revisedchroot')">
+      <xsl:choose>
+        <xsl:when test="ancestor::chapter[@id='chapter-temporary-tools']">
+          <xsl:text>echo -e "\nKB: `du -skx --exclude=jhalfs --exclude=lost+found $LFS`\n"&#xA;</xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text>echo -e "\nKB: `du -skx --exclude=jhalfs --exclude=lost+found /`\n"&#xA;</xsl:text>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:if>
+  </xsl:template>
+
+
+    <!-- Enter to the sources dir, clean it, unpack the tarball,
+         and reset the seconds counter -->
+  <xsl:template name="unpack">
+    <xsl:text>cd </xsl:text>
+    <xsl:if test="ancestor::chapter[@id='chapter-temporary-tools']">
+      <xsl:text>$LFS</xsl:text>
+    </xsl:if>
+    <xsl:text>/sources
+PKGDIR=`tar -tf $TARBALL | head -n1 | sed -e 's@^./@@;s@/.*@@'`
+if [ -d $PKGDIR ]; then
+  rm -rf $PKGDIR
+fi
+if [ -d ${PKGDIR%-*}-build ]; then
+  rm -rf ${PKGDIR%-*}-build
+fi
+tar -xf $TARBALL
+SECONDS=0
+    </xsl:text>
+  </xsl:template>
+
+
+    <!-- Extra previous commands needed by the book but not inside screen tags -->
+  <xsl:template name="pre_commands">
+    <xsl:if test="sect2[@role='installation']">
+      <xsl:text>cd $PKGDIR&#xA;</xsl:text>
+    </xsl:if>
+    <xsl:if test="@id='ch-system-vim' and $vim-lang = 'y'">
+      <xsl:text>tar -xf ../$TARBALL_1 --strip-components=1&#xA;</xsl:text>
+    </xsl:if>
+  </xsl:template>
+
+
+    <!-- Extra post commands needed by the book but not inside screen tags -->
+  <xsl:template name="post_commands">
+    <xsl:if test="$testsuite='3' and @id='ch-tools-glibc'">
+      <xsl:variable name="content" select="//userinput[@remap='locale-test']"/>
+      <xsl:value-of select="substring-before($content,'/usr/lib/locale')"/>
+      <xsl:text>/tools/lib/locale</xsl:text>
+      <xsl:value-of select="substring-after($content,'/usr/lib/locale')"/>
+    </xsl:if>
+  </xsl:template>
+
+
+    <!-- Remove sources and build dirs, skipping it from seconds meassurament -->
+  <xsl:template name="clean_sources">
+    <xsl:text>cd </xsl:text>
+    <xsl:if test="ancestor::chapter[@id='chapter-temporary-tools']">
+      <xsl:text>$LFS</xsl:text>
+    </xsl:if>
+    <xsl:text>/sources
+SECS=$SECONDS
+rm -rf $PKGDIR
+rm -rf ${PKGDIR%-*}-build
+SECONDS=$SECS
+    </xsl:text>
+  </xsl:template>
+
+
+    <!-- Script footer -->
+  <xsl:template name="footer">
+      <!-- Dump the build time and exit -->
+    <xsl:if test="not(@id='ch-system-chroot') and
+                  not(@id='ch-system-revisedchroot')">
+      <xsl:text>
+echo -e "\n\nTotalseconds: $SECONDS\n"
+
+exit
+      </xsl:text>
+    </xsl:if>
+  </xsl:template>
+
+
+    <!-- Extra commads needed at the start of some screen block
+         to allow automatization -->
+  <xsl:template name="top_screen_build_fixes">
+      <!-- Fix Udev reinstallation after a build failure or on iterative builds -->
+    <xsl:if test="contains(string(),'firmware,udev')">
+      <xsl:text>if [[ ! -d /lib/udev/devices ]] ; then&#xA;</xsl:text>
+    </xsl:if>
+  </xsl:template>
+
+
+    <!-- Extra commads needed at the end of some screen block
+         to allow automatization -->
+  <xsl:template name="bottom_screen_build_fixes">
+      <!-- Fix Udev reinstallation after a build failure or on iterative builds -->
+    <xsl:if test="contains(string(),'firmware,udev')">
+      <xsl:text>&#xA;fi</xsl:text>
+    </xsl:if>
+      <!-- Copying the kernel config file -->
+    <xsl:if test="string() = 'make mrproper'">
+      <xsl:text>&#xA;cp -v ../kernel-config .config</xsl:text>
+    </xsl:if>
+      <!-- Don't stop on strip run -->
+    <xsl:if test="contains(string(),'strip --strip')">
+      <xsl:text> || true</xsl:text>
+    </xsl:if>
+  </xsl:template>
+
+
+    <!-- Extract a package name from a package URL -->
+  <xsl:template name="package_name">
+    <xsl:param name="url" select="foo"/>
+    <xsl:param name="sub-url" select="substring-after($url,'/')"/>
+    <xsl:choose>
+      <xsl:when test="contains($sub-url,'/')">
+        <xsl:call-template name="package_name">
+          <xsl:with-param name="url" select="$sub-url"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$sub-url"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+
+    <!-- Check if a package testsuite must be run -->
+  <xsl:template name="run_this_test">
+    <xsl:choose>
+      <xsl:when test=".//userinput[@remap='test']">
+        <xsl:choose>
+            <!-- No testsuites run on level 0 -->
+          <xsl:when test="$testsuite = '0'">0</xsl:when>
+            <!-- On level 1, only final system toolchain testsuites are run -->
+          <xsl:when test="$testsuite = '1' and
+                          not(@id='ch-system-gcc') and
+                          not(@id='ch-system-glibc') and
+                          not(@id='ch-system-binutils')">0</xsl:when>
+            <!-- On level 2, temp tools testsuites are not run -->
+          <xsl:when test="$testsuite = '2' and
+                          ../@id='chapter-temporary-tools'">0</xsl:when>
+          <xsl:otherwise>1</xsl:otherwise>
+        </xsl:choose>
+      </xsl:when>
+      <xsl:otherwise>0</xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
 </xsl:stylesheet>
