Author: pierre Date: Mon Feb 5 10:12:17 2018 New Revision: 4043 Log: Add stats to jhalfs-blfs. NB: due to book layout, far from perfect...
Modified: jhalfs/trunk/BLFS/gen_pkg_book.sh jhalfs/trunk/BLFS/xsl/gen_config.xsl jhalfs/trunk/BLFS/xsl/scripts.xsl Modified: jhalfs/trunk/BLFS/gen_pkg_book.sh ============================================================================== --- jhalfs/trunk/BLFS/gen_pkg_book.sh Mon Feb 5 06:56:54 2018 (r4042) +++ jhalfs/trunk/BLFS/gen_pkg_book.sh Mon Feb 5 10:12:17 2018 (r4043) @@ -51,6 +51,7 @@ MAIL_SERVER=* | \ WRAP_INSTALL=* | \ DEL_LA_FILES=* | \ + STATS=* | \ SUDO=* ) eval ${REPLY} # Define/set a global variable.. continue ;; esac @@ -71,6 +72,7 @@ SUDO=${SUDO:-n} WRAP_INSTALL=${WRAP_INSTALL:-n} DEL_LA_FILES=${DEL_LA_FILES:-n} + STATS=${STATS:-n} } #--------------------------# @@ -94,7 +96,7 @@ # Generates the root of the dependency tree # #--------------------------# -generate_deps() { # +generate_deps() { # #--------------------------# local -i index @@ -199,10 +201,16 @@ done echo -en "\n\tGenerating the build scripts ...\n" rm -rf scripts +if test $STATS = y; then + LIST_STAT="${TARGET[*]}" +else + LIST_STAT="" +fi xsltproc --xinclude --nonet \ --stringparam sudo "$SUDO" \ --stringparam wrap-install "$WRAP_INSTALL" \ --stringparam del-la-files "$DEL_LA_FILES" \ + --stringparam list-stat "$LIST_STAT" \ -o ./scripts/ ${MakeScripts} \ ${BookXml} # Make the scripts executable. Modified: jhalfs/trunk/BLFS/xsl/gen_config.xsl ============================================================================== --- jhalfs/trunk/BLFS/xsl/gen_config.xsl Mon Feb 5 06:56:54 2018 (r4042) +++ jhalfs/trunk/BLFS/xsl/gen_config.xsl Mon Feb 5 10:12:17 2018 (r4043) @@ -79,6 +79,14 @@ help This option should be active on any system mixing libtool and meson build systems. ImageMagick .la files are preserved. + +config STATS + bool "Generate statistics for the requested package(s)" + default n + help + If you want timing and memory footprint statistics to be + generated for the packages you build (not their dependencies), + set this option to y. </xsl:text> </xsl:template> Modified: jhalfs/trunk/BLFS/xsl/scripts.xsl ============================================================================== --- jhalfs/trunk/BLFS/xsl/scripts.xsl Mon Feb 5 06:56:54 2018 (r4042) +++ jhalfs/trunk/BLFS/xsl/scripts.xsl Mon Feb 5 10:12:17 2018 (r4043) @@ -25,6 +25,9 @@ "porg style" package management --> <xsl:param name="wrap-install" select="'n'"/> + <!-- list of packages needing stats --> + <xsl:param name="list-stat" select="''"/> + <!-- Remove libtool .la files --> <xsl:param name="del-la-files" select="'y'"/> @@ -39,6 +42,10 @@ done </xsl:variable> + +<xsl:variable name="list-stat-norm" + select="concat(' ', normalize-space($list-stat),' ')"/> + <xsl:template match="/"> <xsl:apply-templates select="//sect1"/> </xsl:template> @@ -96,6 +103,20 @@ mkdir -p $BUILD_DIR </xsl:text> + +<!-- If stats are requested, include some definitions and intitializations --> + <xsl:if test="contains($list-stat-norm,concat(' ',@id,' '))"> + <xsl:text>INFOLOG=$(pwd)/info-${PKG_DIR} +TESTLOG=$(pwd)/test-${PKG_DIR} +unset MAKEFLAGS +#MAKEFLAGS=-j4 +echo MAKEFLAGS: $MAKEFLAGS > $INFOLOG +> $TESTLOG +PKG_DEST=${BUILD_DIR}/dest +rm -rf $PKG_DEST + +</xsl:text> + </xsl:if> <!-- Download code and build commands --> <xsl:apply-templates select="sect2"/> <!-- Clean-up --> @@ -140,7 +161,16 @@ <xsl:text>sudo </xsl:text> </xsl:if> <xsl:text>rm -rf -case $PACKAGE in + +</xsl:text> +<!-- If stats are requested, insert the start size --> + <xsl:if test="contains($list-stat-norm,concat(' ',../@id,' '))"> + <xsl:text>echo Start Size: $(sudo du -skx --exclude home /) >> $INFOLOG + +</xsl:text> + </xsl:if> + + <xsl:text>case $PACKAGE in *.tar.gz|*.tar.bz2|*.tar.xz|*.tgz|*.tar.lzma) tar -xvf $SRC_DIR/$PACKAGE > unpacked JH_UNPACKDIR=`grep '[^./]\+' unpacked | head -n1 | sed 's@^\./@@;s@/.*@@'` @@ -169,6 +199,13 @@ export JH_UNPACKDIR cd $JH_UNPACKDIR
 </xsl:text> +<!-- If stats are requested, insert the start time --> + <xsl:if test="contains($list-stat-norm,concat(' ',../@id,' '))"> + <xsl:text>echo Start Time: ${SECONDS} >> $INFOLOG + +</xsl:text> + </xsl:if> + <xsl:apply-templates select=".//screen | .//para/command"/> <xsl:if test="$sudo = 'y'"> <xsl:text>sudo /sbin/</xsl:text> @@ -421,15 +458,22 @@ <xsl:template match="screen"> <xsl:if test="child::* = userinput and not(@role = 'nodump')"> <xsl:choose> - <xsl:when test="@role = 'root'"> +<!-- First the case of installation instructions --> + <xsl:when test="@role = 'root' and + ancestor::sect2[@role='installation'] and + not(contains(string(),'useradd')) and + not(contains(string(),'groupadd'))"> <xsl:if test="not(preceding-sibling::screen[1][@role='root'])"> + <xsl:if test="contains($list-stat-norm, + concat(' ', + ancestor::sect1/@id, + ' '))"> + <xsl:call-template name="output-destdir"/> + </xsl:if> <xsl:if test="$sudo = 'y'"> <xsl:text>sudo -E sh << ROOT_EOF
</xsl:text> </xsl:if> - <xsl:if test="$wrap-install = 'y' and - ancestor::sect2[@role='installation'] and - not(contains(string(),'useradd')) and - not(contains(string(),'groupadd'))"> + <xsl:if test="$wrap-install = 'y'"> <xsl:text>if [ -r "$JH_PACK_INSTALL" ]; then source $JH_PACK_INSTALL export -f wrapInstall @@ -441,18 +485,12 @@ </xsl:if> <xsl:apply-templates mode="root"/> <xsl:if test="not(following-sibling::screen[1][@role='root'])"> - <xsl:if test="$del-la-files = 'y' and - ancestor::sect2[@role='installation'] and - not(contains(string(),'useradd')) and - not(contains(string(),'groupadd'))"> + <xsl:if test="$del-la-files = 'y'"> <xsl:call-template name="output-root"> <xsl:with-param name="out-string" select="$la-files-instr"/> </xsl:call-template> </xsl:if> - <xsl:if test="$wrap-install = 'y' and - ancestor::sect2[@role='installation'] and - not(contains(string(),'useradd')) and - not(contains(string(),'groupadd'))"> + <xsl:if test="$wrap-install = 'y'"> <xsl:text>'
packInstall</xsl:text> </xsl:if> <xsl:if test="$sudo = 'y'"> @@ -460,6 +498,21 @@ </xsl:if> </xsl:if> </xsl:when> +<!-- then the case of other instructions run as root (configuration mainly) --> + <xsl:when test="@role = 'root'"> + <xsl:if test="not(preceding-sibling::screen[1][@role='root'])"> + <xsl:if test="$sudo = 'y'"> + <xsl:text>sudo -E sh << ROOT_EOF
</xsl:text> + </xsl:if> + </xsl:if> + <xsl:apply-templates mode="root"/> + <xsl:if test="not(following-sibling::screen[1][@role='root'])"> + <xsl:if test="$sudo = 'y'"> + <xsl:text>
ROOT_EOF</xsl:text> + </xsl:if> + </xsl:if> + </xsl:when> +<!-- then all the instructions run as user --> <xsl:otherwise> <xsl:apply-templates select="userinput"/> </xsl:otherwise> @@ -534,15 +587,38 @@ <xsl:template match="para/command"> <xsl:variable name="ns" select="normalize-space(string())"/> - <xsl:if test="(contains($ns,'test') or - contains($ns,'check'))"> - <xsl:text>#</xsl:text> - <xsl:value-of select="substring-before($ns,'make ')"/> - <xsl:text>make </xsl:text> - <xsl:if test="not(contains($ns,'-k'))"> - <xsl:text>-k </xsl:text> + <xsl:if test="contains($ns,'test') or + contains($ns,'check')"> + <xsl:choose> + <xsl:when test="contains($list-stat-norm, + concat(' ',ancestor::sect1/@id,' '))"> + <xsl:text> +echo Time after make: ${SECONDS} >> $INFOLOG +echo Size after make: $(sudo du -skx --exclude home /) >> $INFOLOG +echo Time before test: ${SECONDS} >> $INFOLOG +</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>#</xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:choose> + <xsl:when test="contains($ns,'make')"> + <xsl:value-of select="substring-before($ns,'make ')"/> + <xsl:text>make </xsl:text> + <xsl:if test="not(contains($ns,'-k'))"> + <xsl:text>-k </xsl:text> + </xsl:if> + <xsl:value-of select="substring-after($ns,'make ')"/> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of select="$ns"/> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="contains($list-stat-norm, + concat(' ',ancestor::sect1/@id,' '))"> + <xsl:text> >> $TESTLOG 2>&1</xsl:text> </xsl:if> - <xsl:value-of select="substring-after($ns,'make ')"/> <xsl:text> || true
</xsl:text> </xsl:if> </xsl:template> @@ -637,4 +713,118 @@ <xsl:text>EDITME**</xsl:text> </xsl:template> + <xsl:template name="output-destdir"> +<!-- Hopefully, the current node is the first screen with role equal to root. + We first output stats, since we are only called if stats are needed. + then we output DESTDIR instructions,etc --> + <xsl:text> +echo Time after tests: ${SECONDS} >> $INFOLOG +echo Size after tests: $(sudo du -skx --exclude home /) >> $INFOLOG +echo Time before install: ${SECONDS} >> $INFOLOG +</xsl:text> + <xsl:apply-templates + select="userinput|following-sibling::screen[@role='root']/userinput" + mode="destdir"/> + <xsl:text> +echo Time after install: ${SECONDS} >> $INFOLOG +echo Size after install: $(sudo du -skx --exclude home /) >> $INFOLOG +</xsl:text> + </xsl:template> + + <xsl:template match="userinput" mode="destdir"> + <xsl:choose> + <xsl:when test="./literal"> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param name="outputstring" select="text()[1]"/> + </xsl:call-template> + <xsl:apply-templates select="literal"/> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param name="outputstring" select="text()[2]"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param name="outputstring" select="string()"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + <xsl:text>
</xsl:text> + </xsl:template> + + <xsl:template name="outputpkgdest"> + <xsl:param name="outputstring" select="'foo'"/> + <xsl:choose> + <xsl:when test="contains($outputstring,'make ')"> + <xsl:choose> + <xsl:when test="not(starts-with($outputstring,'make'))"> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param name="outputstring" + select="substring-before($outputstring,'make')"/> + </xsl:call-template> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param + name="outputstring" + select="substring-after($outputstring, + substring-before($outputstring,'make'))"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:text>make DESTDIR=$PKG_DEST</xsl:text> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param + name="outputstring" + select="substring-after($outputstring,'make')"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="contains($outputstring,'ninja install')"> + <xsl:choose> + <xsl:when test="not(starts-with($outputstring,'ninja install'))"> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param name="outputstring" + select="substring-before($outputstring,'ninja install')"/> + </xsl:call-template> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param + name="outputstring" + select="substring-after($outputstring, + substring-before($outputstring,'ninja install'))"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:text>DESTDIR=$PKG_DEST ninja</xsl:text> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param + name="outputstring" + select="substring-after($outputstring,'ninja')"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> <!-- no make nor ninja in this string --> + <xsl:choose> + <xsl:when test="contains($outputstring,'>/') and + not(contains(substring-before($outputstring,'>/'),' /'))"> + <xsl:value-of select="substring-before($outputstring,'>/')"/> + <xsl:text>>$PKG_DEST/</xsl:text> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param name="outputstring" select="substring-after($outputstring,'>/')"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="contains($outputstring,' /')"> + <xsl:value-of select="substring-before($outputstring,' /')"/> + <xsl:text> $PKG_DEST/</xsl:text> + <xsl:call-template name="outputpkgdest"> + <xsl:with-param name="outputstring" select="substring-after($outputstring,' /')"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$outputstring"/> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + </xsl:stylesheet> -- http://lists.linuxfromscratch.org/listinfo/alfs-log Unsubscribe: See the above information page