diff --git a/BLFS/alternatives.conf b/BLFS/alternatives.conf new file mode 100644 index 0000000..0b6b928 --- /dev/null +++ b/BLFS/alternatives.conf @@ -0,0 +1,27 @@ +##### +# +# Configuration file for the BLFS module +# +# $Id$ +# +# Set default package for alternatives when resolving dependencies +# +##### + +# Print server cups/LPRng +PRINT_SERVER=cups + +# Mail server sendmail/postfix/exim +MAIL_SERVER=sendmail + +# GhostScript gs/espgs +GHOSTSCRIPT=espgs + +# Kerberos 5 mitkrb/heimdal +KBR5=heimdal + +# X11 implementation xorg7/xorg/xfree86 +X11=xorg7 + + + diff --git a/BLFS/blfs-parser.sh b/BLFS/blfs-parser.sh new file mode 100755 index 0000000..d9472a5 --- /dev/null +++ b/BLFS/blfs-parser.sh @@ -0,0 +1,215 @@ +#!/bin/bash +# +# $Id$ +# +set -e + +# Configuration file for alternatives +source alternatives.conf +[[ $? > 0 ]] && echo -e "\n\tWARNING: alternatives.conf did not load..\n" && exit + +# Dependencies module +source func_dependencies +[[ $? > 0 ]] && echo -e "\n\tWARNING: func_dependencies did not load..\n" && exit + +#======= MAIN ======== + +if [[ ! -f packages ]] ; then + echo -e "\tNo packages file has been found.\n" + echo -e "\tExecution aborted.\n" + exit 1 +fi + +# ID of target package (as listed in packages file) +if [[ -z "$1" ]] ; then + echo -e "\n\tYou must to provide a package ID." + echo -e "\tSee packages file for a list of available targets.\n" + exit 1 +elif ! grep "^$1[[:space:]]" packages > /dev/null ; then + echo -e "\n\t$1 is not a valid package ID." + echo -e "\tSee packages file for a list of available targets.\n" + exit 1 +else + case $1 in + xorg7 ) + TARGET=xterm2 + echo -e "\n\tUsing $TARGET as the target package" + echo -e "to build the Xorg7 meta-package." + ;; + * ) + TARGET=$1 + echo -e "\n\tUsing $TARGET as the target package." + ;; + esac +fi + +# Dependencies level 1(required)/2(1 + recommended)/3(2+ optional) +if [[ -z "$2" ]] ; then + DEP_LEVEL=2 + echo -e "\n\tNo dependencies level has been defined." + echo -e "\tAssuming level $DEP_LEVEL (Required plus Recommended).\n" +else + case $2 in + 1 | 2 ) + DEP_LEVEL=$2 + echo -e "\n\tUsing $DEP_LEVEL as dependencies level.\n" + ;; + # Prevent circular dependencies when level 3 + # cracklib-->python-->tk-->X-->linux-pam-->cracklib + # docbook-utils--> Optional dependencies are runtime only + # libxml2-->libxslt-->libxml2 + # cyrus-sasl-->openldap-->cyrus-sasl + # alsa-lib-->doxygen-->graphviz-->jdk-->alsa-lib + # unixodbc-->qt-->unixodbc + # cups-->php-->sendmail-->espgs-->cups + # libexif-->graphviz-->php-->libexif + # esound-->aRts-->esound + # gimp-->imagemagick-->gimp + 3 ) + case $TARGET in + cracklib | docbook-utils | libxml2 | cyrus-sasl | alsa-lib | \ + unixodbc | cups | libexif | esound | gimp ) + DEP_LEVEL=2 + echo -e "\n\t$TARGET have circular dependencies at level $2" + echo -e "\tUsing $DEP_LEVEL as dependencies level.\n" + ;; + * ) + DEP_LEVEL=$2 + echo -e "\n\tUsing $DEP_LEVEL as dependencies level.\n" + ;; + esac + ;; + * ) + DEP_LEVEL=2 + echo -e "\n\t$2 is not a valid dependencies level." + echo -e "\tAssuming level $DEP_LEVEL (Required plus Recommended).\n" + ;; + esac +fi + +# Create the working directory and cd into it +mkdir $TARGET && cd $TARGET + +# XML file of the target package +PKGXML=`grep "^$TARGET[[:space:]]" ../packages | cut -f2` + +# The BLFS sources directory. +BLFS_XML=`echo $PKGXML | sed -e 's,/.*,,'` + +if [[ ! -d ../$BLFS_XML ]] ; then + echo -e "\tThe BLFS book sources directory is missing.\n" + echo -e "\tExecution aborted.\n" + cd .. && rmdir $TARGET + exit 1 +fi + +# XInclude stuff +ENTRY_START="" + +echo -en "\tGenerating $TARGET dependencies tree ..." + +# Create target package dependencies list +case $TARGET in + # Meta-packages at target level + # KDE and Gnome-{core,full} could be made via packages.sh, but not sure yet how. + alsa ) # When target "alsa", use all alsa-* packages + echo -e "alsa-oss\nalsa-firmware\nalsa-tools\nalsa-utils\n \ + alsa-plugins\nalsa-lib" > dependencies/$TARGET.dep + ;; + * ) # Default + xsltproc --stringparam dependencies $DEP_LEVEL -o dependencies/$TARGET.dep \ + ../dependencies.xsl ../$PKGXML + ;; +esac + +# Start with a clean $TARGET-index.xml.tmp file +> $TARGET-index.xml.tmp + +# Write the XInclude +echo -e " $ENTRY_START$PKGXML$ENTRY_END" >> $TARGET-index.xml.tmp + +# Start with a clean depure.txt file +> depure.txt + +# If have dependencies, write its XInclude and find sub-dependencies +[[ -f dependencies/$TARGET.dep ]] && \ +echo -e "Start loop for PKG $TARGET\n" >> depure.txt && \ +mkdir xincludes && do_dependencies $TARGET + +echo "done" + +echo -en "\tGenerating $TARGET-index.xml ..." + +# Header to $TARGET-index.xml +{ +cat << EOF + + + + + + + + + + + Preface + + + + + + + + + + Installing $TARGET in Dependencies Build Order + +EOF +} > $TARGET-index.xml + +# Dump $TARGET-index.xml.tmp in reverse order. +tac $TARGET-index.xml.tmp >> $TARGET-index.xml +rm $TARGET-index.xml.tmp + +# Footer of $TARGET-index.xml +{ +cat << EOF + + + + + + + + + + +EOF +} >> $TARGET-index.xml + +echo "done" + +echo -en "\tGenerating the HTML book ..." + +xsltproc --xinclude --nonet --stringparam base.dir HTML/ \ + --stringparam chunk.quietly 1 \ + ../$BLFS_XML/stylesheets/blfs-chunked.xsl \ + $TARGET-index.xml > xsltproc.log 2>&1 +mkdir HTML/{stylesheets,images} +cp ../$BLFS_XML/stylesheets/*.css HTML/stylesheets +cp ../$BLFS_XML/images/*.png HTML/images +cd HTML +sed -i -e "s@../stylesheets@stylesheets@g" *.html +sed -i -e "s@../images@images@g" *.html +for filename in `find . -name "*.html"` ; do + tidy -config ../../$BLFS_XML/tidy.conf $filename || true + sh ../../$BLFS_XML/obfuscate.sh $filename + sed -i -e "s@text/html@application/xhtml+xml@g" $filename +done + +echo "done" + +echo -en "\tGenerating the build scripts ... not implemented yet, sorry\n" diff --git a/BLFS/dependencies.xsl b/BLFS/dependencies.xsl new file mode 100644 index 0000000..672a033 --- /dev/null +++ b/BLFS/dependencies.xsl @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BLFS/func_dependencies b/BLFS/func_dependencies new file mode 100644 index 0000000..5f74eb2 --- /dev/null +++ b/BLFS/func_dependencies @@ -0,0 +1,151 @@ +#!/bin/bash +# +# $Id$ +# +set -e + +#-----------------------# +do_dependencies() { # Loop to find sub-dependencies +#-----------------------# + set -e + local PKG=$1 + local saveIFS=$IFS + local DEP_LV=$DEP_LEVEL + local line line2 DEP + + echo -e "\tPKG is $PKG" >> depure.txt + echo -e "\tDEP_LEVEL for $PKG is $DEP_LV\n" >> depure.txt + + # If a premade xinclude file esist, use it. If not, create one + if [[ -f xincludes/$PKG.xinc ]] ; then + echo -e "\tReusing xinclude file for PKG $PKG" >> depure.txt + IFS=$'\x0A' + for line in `cat xincludes/$PKG.xinc` ; do + IFS=$saveIFS + # Remove the Xinclude entry if found. We want the most newer one. + # Using double quotes to let bash expand variables. + # Remove also the empty line created. Can not be done in one step + # due that d requires the pattner between /, but we have a lot of / + # inside the pattner. + sed -e "s,^[[:space:]]*$line,," -e '/./!d' -i $TARGET-index.xml.tmp + # Write the XInclude + echo -e "$line" >> $TARGET-index.xml.tmp + done + else + # Start with a clean $PKG.xinc.tmp file + > xincludes/$PKG.xinc.tmp + for DEP in `cat dependencies/$PKG.dep`; do + # Especial packages (a lot of hacks) + case $DEP in + # The proper version of DB is installed in LFS + db ) continue ;; + # ID value don't have their own XML package file + hal-requirements ) continue ;; + perl-* | tk-perl ) DEP=perl-modules ;; + # Orphan links (proper link must be created when generating the book) + arts ) DEP=aRts ;; # That should be fixed in the BLFS book + # Set values for alternative packages + # X is a meta-package, thus handled in another way. + LPRng | cups ) DEP=$PRINT_SERVER ;; + mitkrb | heimdal ) DEP=$KBR5 ;; + gs | espgs ) DEP=$GHOSTSCRIPT ;; + MTA ) DEP=$MAIL_SERVER ;; # The BLFS book need be fixed yet for that + esac + echo -e "\tDEP for $PKG is $DEP" >> depure.txt + case $DEP in + # Circular dependencies at level 3 + cracklib | docbook-utils | libxml2 | cyrus-sasl | alsa-lib | \ + unixodbc | cups | libexif | esound | gimp ) + [[ "$DEP_LV" = "3" ]] && DEP_LV=2 + ;; + * ) DEP_LV=$DEP_LEVEL ;; + esac + echo -e "\tDEP_LEVEL for $DEP is $DEP_LV" >> depure.txt + # XML file of dependency package + DEP_XML=`grep "^$DEP[[:space:]]" ../packages | cut -f2` + echo -e "\t\tDEP_XML is $DEP_XML\n" >> depure.txt + case $DEP in + x-window-system ) ;; # No page for that (proper link must be created when generating the book) + xorg7 ) ;; # This page will be dump in the xorg7.xinc file + * ) + # Remove the Xinclude entry if found + sed -e "s,^[[:space:]]*$ENTRY_START$DEP_XML$ENTRY_END,," \ + -e '/./!d' -i xincludes/$PKG.xinc.tmp + # Write the XInclude + echo -e " $ENTRY_START$DEP_XML$ENTRY_END" >> xincludes/$PKG.xinc.tmp + ;; + esac + # If not already created, create its dependencies list + if [[ ! -f dependencies/$DEP.dep ]] ; then + case $DEP in + # Meta-packages at dependency level (ugly *.dep files, but work for now) + alsa ) # When dependency "alsa", use all alsa-* packages + echo -e "alsa-oss\nalsa-firmware\nalsa-tools\nalsa-utils\n \ + alsa-plugins\nalsa-lib" > dependencies/$DEP.dep + ;; + x-window-system ) # X11 alternatives + echo -e "x-config\nx-setup\n$X11" > dependencies/$DEP.dep + ;; + xorg7 ) # All Xorg7 packages except Xterm (circular dependency) + echo -e "rman\nxorg7-driver\nxorg7-server\nluit\nxorg7-font\n \ + xorg7-data\nxorg7-app\nxbitmaps\nmesalib\nlibdrm\n \ + xorg7-lib\nxorg7-util\nxorg7-proto" > dependencies/$DEP.dep + ;; + * ) xsltproc --stringparam dependencies $DEP_LV \ + -o dependencies/$DEP.dep ../dependencies.xsl ../$DEP_XML + ;; + esac + fi + # If needed, process its dependencies + if [[ -f dependencies/$DEP.dep ]] ; then + # If a premade xinclude file esist, include it + if [[ -f xincludes/$DEP.xinc ]] ; then + echo -e "\tReusing xinclude file for PKG $DEP (to solve $PKG)\n" >> depure.txt + IFS=$'\x0A' + for line2 in `cat xincludes/$DEP.xinc` ; do + IFS=$saveIFS + # Remove the Xinclude entry if found + sed -e "s,^[[:space:]]*$line2,," -e '/./!d' -i xincludes/$PKG.xinc.tmp + # Write the XInclude + echo -e "$line2" >> xincludes/$PKG.xinc.tmp + done + # Create the xinclude file + else + # We will call the function from inside it + echo -e "\nStart new loop for PKG $DEP (to solve $PKG)\n" >> depure.txt + # We will call the function from inside it + set +e + do_dependencies $DEP + set -e + # Include it when done + echo -e "\tUsing the new xinclude file for PKG $DEP (to solve $PKG)\n" >> depure.txt + IFS=$'\x0A' + for line2 in `cat xincludes/$DEP.xinc` ; do + IFS=$saveIFS + # Remove the Xinclude entry if found + sed -e "s,^[[:space:]]*$line2,," -e '/./!d' -i xincludes/$PKG.xinc.tmp + # Write the XInclude + echo -e "$line2" >> xincludes/$PKG.xinc.tmp + done + fi + fi + done + if [[ "$PKG" = "xorg7" ]] ; then + # Add their XInclude + PKG_XML=`grep "^$PKG[[:space:]]" ../packages | cut -f2` + echo -e " $ENTRY_START$PKG_XML$ENTRY_END" >> xincludes/$PKG.xinc.tmp + fi + mv xincludes/$PKG.xinc.tmp xincludes/$PKG.xinc + echo -e "Using the new xinclude file for PKG $PKG" >> depure.txt + IFS=$'\x0A' + for line in `cat xincludes/$PKG.xinc` ; do + IFS=$saveIFS + # Remove the Xinclude entry if found. + sed -e "s,^[[:space:]]*$line,," -e '/./!d' -i $TARGET-index.xml.tmp + # Write the XInclude + echo -e "$line" >> $TARGET-index.xml.tmp + done + fi + + echo -e "\nEnd loop for PKG $PKG\n" >> depure.txt +} diff --git a/BLFS/packages.sh b/BLFS/packages.sh new file mode 100755 index 0000000..297916b --- /dev/null +++ b/BLFS/packages.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# +# $Id$ +# +set -e + +BLFS_XML=$1 + +> packages.tmp + +for file in `find $BLFS_XML -name "*.xml"` ; do + pkg_id=`grep "sect1 id" $file | sed -e 's/> packages.tmp +done + +sort packages.tmp -o packages +rm packages.tmp