Added new BLFS files from the experimental branch.
This commit is contained in:
parent
7fdd8f64fb
commit
3c10176753
12 changed files with 1644 additions and 0 deletions
32
BLFS/TODO
Normal file
32
BLFS/TODO
Normal file
|
@ -0,0 +1,32 @@
|
|||
#####
|
||||
#
|
||||
# Project TODO list
|
||||
#
|
||||
# $Id$
|
||||
#####
|
||||
|
||||
For now the code is able to do the first step for the new approach: to create
|
||||
LFS-like books from BLFS sources, allowing to create linear build scrips and
|
||||
Makefiles similars to the current ones for {C,H}LFS.
|
||||
|
||||
What remains to do:
|
||||
|
||||
1. - To make the top-level blfs script functional. That script should to create
|
||||
the working directory (selected at command line)
|
||||
a. Copy all BLFS/* files to it,
|
||||
b. Fetch the BLFS sources (output directory selected at command line or
|
||||
based on the book version),
|
||||
c. Run the packages.sh script.
|
||||
|
||||
2. - To develop the XSL code needed to create the build scripts.
|
||||
Work in progress.
|
||||
|
||||
3. - To develop the code to create the Makefile.
|
||||
Should be a separate script to be run manually after the user has
|
||||
review and edited the target build scripts.
|
||||
Must make the build scripts executables and set the SRC_ARCHIVE and
|
||||
FTP_SERVER envars.
|
||||
|
||||
4. - To find a way to track already installed packages by previous runs, to can
|
||||
skip them when creating the book/scripts/Makefile for a new target.
|
||||
|
27
BLFS/alternatives.conf
Normal file
27
BLFS/alternatives.conf
Normal file
|
@ -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
|
||||
|
||||
|
||||
|
125
BLFS/blfs-parser.sh
Executable file
125
BLFS/blfs-parser.sh
Executable file
|
@ -0,0 +1,125 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
set -e
|
||||
declare TARGET
|
||||
declare DEP_LEVEL
|
||||
declare PKGXML
|
||||
declare BLFS_XML
|
||||
declare VERBOSITY=1
|
||||
|
||||
# Grab and name the command line options
|
||||
optTARGET=$1
|
||||
optDEPENDENCY=$2
|
||||
|
||||
|
||||
#---------------------
|
||||
# Constants
|
||||
source libs/constants.inc
|
||||
[[ $? > 0 ]] && echo -e "\n\tERROR: constants.inc did not load..\n" && exit
|
||||
|
||||
#---------------------
|
||||
# Configuration file for alternatives
|
||||
source alternatives.conf
|
||||
[[ $? > 0 ]] && echo -e "\n\tERROR: alternatives.conf did not load..\n" && exit
|
||||
|
||||
#---------------------
|
||||
# Dependencies module
|
||||
source libs/func_dependencies
|
||||
[[ $? > 0 ]] && echo -e "\n\tERROR: func_dependencies did not load..\n" && exit
|
||||
|
||||
#---------------------
|
||||
# parser module
|
||||
source libs/func_parser
|
||||
[[ $? > 0 ]] && echo -e "\n\tERROR: func_parser did not load..\n" && exit
|
||||
|
||||
#---------------------
|
||||
# Makefile module
|
||||
source libs/func_makefile
|
||||
[[ $? > 0 ]] && echo -e "\n\tERROR: func_makefile did not load..\n" && exit
|
||||
|
||||
|
||||
|
||||
#-------------------------#
|
||||
validate_target() { # ID of target package (as listed in packages file)
|
||||
#-------------------------#
|
||||
: <<inline_doc
|
||||
function: Validate the TARGET parameter.
|
||||
input vars: $1, package/target to validate
|
||||
externals: file: packages
|
||||
modifies: TARGET
|
||||
returns: nothing
|
||||
output: nothing
|
||||
on error: exit
|
||||
on success: modifies TARGET
|
||||
inline_doc
|
||||
|
||||
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
|
||||
fi
|
||||
|
||||
if ! 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
|
||||
fi
|
||||
|
||||
TARGET=$1
|
||||
echo -e "\n\tUsing $TARGET as the target package."
|
||||
}
|
||||
|
||||
#-------------------------#
|
||||
validate_dependency() { # Dependencies level 1(required)/2(1 + recommended)/3(2+ optional)
|
||||
#-------------------------#
|
||||
: <<inline_doc
|
||||
function: Validate the dependency level requested.
|
||||
input vars: $1, requested dependency level
|
||||
externals: vars: TARGET
|
||||
modifies: vars: DEP_LEVEL
|
||||
returns: nothing
|
||||
output: nothing
|
||||
on error: nothing
|
||||
on success: modifies DEP_LEVEL, default value = 2
|
||||
inline_doc
|
||||
|
||||
if [[ -z "$1" ]] ; then
|
||||
DEP_LEVEL=2
|
||||
echo -e "\n\tNo dependencies level has been defined."
|
||||
echo -e "\tAssuming level $DEP_LEVEL (Required plus Recommended).\n"
|
||||
return
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
1 | 2 | 3 )
|
||||
DEP_LEVEL=$1
|
||||
echo -e "\n\tUsing $DEP_LEVEL as dependencies level.\n"
|
||||
;;
|
||||
* )
|
||||
DEP_LEVEL=2
|
||||
echo -e "\n\t$1 is not a valid dependencies level."
|
||||
echo -e "\tAssuming level $DEP_LEVEL (Required plus Recommended).\n"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#------- MAIN --------
|
||||
if [[ ! -f packages ]] ; then
|
||||
echo -e "\tNo packages file has been found.\n"
|
||||
echo -e "\tExecution aborted.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
validate_target "${optTARGET}"
|
||||
validate_dependency "${optDEPENDENCY}"
|
||||
generate_dependency_tree
|
||||
generate_TARGET_xml
|
||||
generate_target_book
|
||||
create_build_scripts
|
||||
generate_Makefile
|
105
BLFS/libs/book.xsl
Normal file
105
BLFS/libs/book.xsl
Normal file
|
@ -0,0 +1,105 @@
|
|||
<?xml version='1.0' encoding='ISO-8859-1'?>
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
version="1.0">
|
||||
|
||||
<!-- $Id$ -->
|
||||
|
||||
<!-- NOTE: the base dir (blfs-xml) must be changed to FAKEDIR on the
|
||||
final version and set it to the proper dir via a sed in ./blfs -->
|
||||
<xsl:import href="../blfs-xml/stylesheets/blfs-chunked.xsl"/>
|
||||
|
||||
<xsl:param name="mail_server" select="sendmail"/>
|
||||
|
||||
<xsl:param name="xwindow" select="xorg7"/>
|
||||
|
||||
<!-- Template from BLFS_XML/stylesheets/xhtml/lfs-xref.xsl.-->
|
||||
<xsl:template match="xref" name="xref">
|
||||
|
||||
<!-- IDs that need be remaped to the proper file -->
|
||||
<xsl:variable name="linkend">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@linkend = 'alsa'">
|
||||
<xsl:text>alsa-lib</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="@linkend = 'arts'">
|
||||
<xsl:text>aRts</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="@linkend = 'kde'">
|
||||
<xsl:text>kdelibs</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="@linkend = 'server-mail'">
|
||||
<xsl:value-of select="$mail_server"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="@linkend = 'x-window-system'">
|
||||
<xsl:value-of select="$xwindow"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@linkend"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="targets" select="key('id',$linkend)"/>
|
||||
<!-- -->
|
||||
|
||||
<xsl:variable name="target" select="$targets[1]"/>
|
||||
<xsl:variable name="refelem" select="local-name($target)"/>
|
||||
<xsl:variable name="role" select="@role"/>
|
||||
<xsl:call-template name="check.id.unique">
|
||||
<xsl:with-param name="linkend" select="$linkend"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="anchor"/>
|
||||
<xsl:choose>
|
||||
|
||||
<!-- Dead links -->
|
||||
<xsl:when test="count($target) = 0">
|
||||
<b>
|
||||
<xsl:value-of select="@linkend"/>
|
||||
</b>
|
||||
<tt>
|
||||
<xsl:text> (in the full book)</xsl:text>
|
||||
</tt>
|
||||
</xsl:when>
|
||||
<!-- -->
|
||||
|
||||
<xsl:when test="$target/@xreflabel">
|
||||
<a>
|
||||
<xsl:attribute name="href">
|
||||
<xsl:call-template name="href.target">
|
||||
<xsl:with-param name="object" select="$target"/>
|
||||
</xsl:call-template>
|
||||
</xsl:attribute>
|
||||
<xsl:call-template name="xref.xreflabel">
|
||||
<xsl:with-param name="target" select="$target"/>
|
||||
</xsl:call-template>
|
||||
</a>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:variable name="href">
|
||||
<xsl:call-template name="href.target">
|
||||
<xsl:with-param name="object" select="$target"/>
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<xsl:apply-templates select="$target" mode="xref-to-prefix"/>
|
||||
<a href="{$href}">
|
||||
<xsl:if test="$target/title or $target/*/title">
|
||||
<xsl:attribute name="title">
|
||||
<xsl:apply-templates select="$target" mode="xref-title"/>
|
||||
</xsl:attribute>
|
||||
</xsl:if>
|
||||
<xsl:apply-templates select="$target" mode="xref-to">
|
||||
<xsl:with-param name="referrer" select="."/>
|
||||
<xsl:with-param name="role" select="$role"/>
|
||||
<xsl:with-param name="xrefstyle">
|
||||
<xsl:value-of select="@xrefstyle"/>
|
||||
</xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</a>
|
||||
<xsl:apply-templates select="$target" mode="xref-to-suffix"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
40
BLFS/libs/constants.inc
Normal file
40
BLFS/libs/constants.inc
Normal file
|
@ -0,0 +1,40 @@
|
|||
#####
|
||||
#
|
||||
# common constants
|
||||
#
|
||||
# $Id:
|
||||
#####
|
||||
|
||||
|
||||
# VT100 colors
|
||||
declare -r BLACK=$'\e[1;30m'
|
||||
declare -r DK_GRAY=$'\e[0;30m'
|
||||
|
||||
declare -r RED=$'\e[31m'
|
||||
declare -r GREEN=$'\e[32m'
|
||||
declare -r YELLOW=$'\e[33m'
|
||||
declare -r BLUE=$'\e[34m'
|
||||
declare -r MAGENTA=$'\e[35m'
|
||||
declare -r CYAN=$'\e[36m'
|
||||
declare -r WHITE=$'\e[37m'
|
||||
|
||||
declare -r OFF=$'\e[0m'
|
||||
declare -r BOLD=$'\e[1m'
|
||||
declare -r REVERSE=$'\e[7m'
|
||||
declare -r HIDDEN=$'\e[8m'
|
||||
|
||||
declare -r tab_=$'\t'
|
||||
declare -r nl_=$'\n'
|
||||
|
||||
declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
|
||||
declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
|
||||
declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
|
||||
|
||||
# bold yellow > < pair
|
||||
declare -r R_arrow=$'\e[1;33m>\e[0m'
|
||||
declare -r L_arrow=$'\e[1;33m<\e[0m'
|
||||
|
||||
HEADER="# This file is automatically generated by jhalfs
|
||||
# DO NOT EDIT THIS FILE MANUALLY
|
||||
#
|
||||
# Generated on `date \"+%F %X %Z\"`"
|
47
BLFS/libs/dependencies.xsl
Normal file
47
BLFS/libs/dependencies.xsl
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- $Id$ -->
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<xsl:output method="text"/>
|
||||
|
||||
<xsl:param name="dependencies" select="2"/>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:apply-templates select="//para[@role='optional']"/>
|
||||
<xsl:apply-templates select="//para[@role='recommended']"/>
|
||||
<xsl:apply-templates select="//para[@role='required']"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="//text()"/>
|
||||
|
||||
<xsl:template match="para[@role='required']">
|
||||
<xsl:apply-templates select="xref">
|
||||
<xsl:sort select="position()" data-type="number" order="descending"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="para[@role='recommended']">
|
||||
<xsl:if test="$dependencies != '1'">
|
||||
<xsl:apply-templates select="xref">
|
||||
<xsl:sort select="position()" data-type="number" order="descending"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="para[@role='optional']">
|
||||
<xsl:if test="$dependencies = '3'">
|
||||
<xsl:apply-templates select="xref">
|
||||
<xsl:sort select="position()" data-type="number" order="descending"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xref">
|
||||
<xsl:value-of select="@linkend"/>
|
||||
<xsl:text>
</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
371
BLFS/libs/func_dependencies
Normal file
371
BLFS/libs/func_dependencies
Normal file
|
@ -0,0 +1,371 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
set -e
|
||||
|
||||
declare -i cntr=0
|
||||
declare -a spaceSTR=" "
|
||||
|
||||
#----------------------------#
|
||||
generate_dependency_tree() { #
|
||||
#----------------------------#
|
||||
: <<inline_doc
|
||||
function: Create a dependency tree for the TARGET
|
||||
input vars: none
|
||||
externals: vars: TARGET
|
||||
PKGXML
|
||||
DEP_LEVEL
|
||||
func: do_dependencies
|
||||
modifies: vars: PKGXML
|
||||
BLFS_XML
|
||||
returns: nothing
|
||||
output: files: $TARGET.dep
|
||||
$TARGET-index.xml.tmp
|
||||
depure.txt
|
||||
on error: nothing
|
||||
on success: nothing
|
||||
inline_doc
|
||||
|
||||
local ENTRY_START
|
||||
local ENTRY_END
|
||||
|
||||
#---------------------
|
||||
# Create the working directory and cd into it
|
||||
if [[ -d $TARGET ]] ; then
|
||||
echo -e "\tERROR: Looks like $TARGET has been already processed."
|
||||
echo -e "\tPlease delete or rename the $TARGET directory.\n"
|
||||
exit 1
|
||||
else
|
||||
mkdir $TARGET && cd $TARGET
|
||||
fi
|
||||
|
||||
#---------------------
|
||||
# XML file of the target package
|
||||
PKGXML=`grep "^$TARGET[[:space:]]" ../packages | cut -f2`
|
||||
|
||||
#---------------------
|
||||
# The BLFS sources directory.
|
||||
# Note: for book.xsl this value must be set via a sed in ./blfs.
|
||||
# For consistency, we should to do the same here.
|
||||
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="<xi:include xmlns:xi=\"http://www.w3.org/2003/XInclude\" href=\"../"
|
||||
ENTRY_END="\"/>"
|
||||
|
||||
echo -en "\tGenerating $TARGET dependencies tree ..."
|
||||
|
||||
mkdir dependencies
|
||||
|
||||
#---------------------
|
||||
# Create target package dependencies list
|
||||
case $TARGET in
|
||||
# Skip the creation when all dependencies are circular.
|
||||
alsa-lib | cracklib | libexif | unixodbc ) ;;
|
||||
|
||||
# Meta-packages at target level
|
||||
# KDE and Gnome-{core,full} could be made via packages.sh, but not sure yet how.
|
||||
alsa )
|
||||
echo -e "alsa-oss\nalsa-firmware\nalsa-tools\nalsa-utils\n \
|
||||
alsa-plugins\nalsa-lib" > dependencies/alsa.dep
|
||||
;;
|
||||
gnome-core )
|
||||
cp ../libs/gnome-core.dep dependencies/
|
||||
;;
|
||||
gnome-full )
|
||||
cp ../libs/gnome-{core,full}.dep dependencies/
|
||||
;;
|
||||
kde-core )
|
||||
cp ../libs/kde-core.dep dependencies/
|
||||
;;
|
||||
kde-full )
|
||||
cp ../libs/kde-{core,full}.dep dependencies/
|
||||
;;
|
||||
kde-koffice )
|
||||
cp ../libs/kde-{core,full}.dep dependencies/
|
||||
echo -e "koffice\nkde-full\nkde-core" > dependencies/kde-koffice.dep
|
||||
;;
|
||||
xorg7 ) # At atarget level, add also x-config and x-setup
|
||||
echo -e "x-config\nx-setup\nrman\nxterm2\nxorg7-driver\nxorg7-server\nluit\n \
|
||||
xorg7-font\nxorg7-data\nxorg7-app\nxbitmaps\nmesalib\nlibdrm\n \
|
||||
xorg7-lib\nxorg7-util\nxorg7-proto" > dependencies/xorg7.dep
|
||||
;;
|
||||
* ) # Default
|
||||
xsltproc --stringparam dependencies $DEP_LEVEL \
|
||||
-o dependencies/$TARGET.dep \
|
||||
../libs/dependencies.xsl ../$PKGXML
|
||||
;;
|
||||
esac
|
||||
|
||||
#---------------------
|
||||
# Start with a clean $TARGET-index.xml.tmp file
|
||||
> $TARGET-index.xml.tmp
|
||||
|
||||
#---------------------
|
||||
# Write the XInclude
|
||||
case $TARGET in
|
||||
# If there is no usefull XML page, skip it.
|
||||
alsa | gnome-core | gnome-full | kde-core | kde-full | kde-koffice ) ;;
|
||||
* )
|
||||
echo -e " $ENTRY_START$PKGXML$ENTRY_END" >> $TARGET-index.xml.tmp
|
||||
;;
|
||||
esac
|
||||
|
||||
#------------------P---
|
||||
# Start with a clean depure.txt file
|
||||
> depure.txt
|
||||
|
||||
#---------------------
|
||||
# If have dependencies, write its XInclude and find sub-dependencies
|
||||
if [[ -f dependencies/$TARGET.dep ]]; then
|
||||
echo -e "Start loop for PKG $TARGET\n" >> depure.txt
|
||||
mkdir xincludes && do_dependencies $TARGET
|
||||
fi
|
||||
|
||||
echo "done"
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-----------------------#
|
||||
do_dependencies() { # Loop to find sub-dependencies :::WARNING::: THIS IS A RECURVISE FUNCTION
|
||||
#-----------------------#
|
||||
: <<inline_doc
|
||||
function: Loop through all the packages and create a sub-dependency tree
|
||||
input vars: $1, package name
|
||||
externals: vars: $DEP_LEVEL
|
||||
$TARGET
|
||||
$PRINT_SERVER
|
||||
$KBR5
|
||||
$GHOSTSCRIPT
|
||||
$MAILSERVER
|
||||
file: depure.txt
|
||||
$TARGET-index.xml.tmp
|
||||
$PKG.dep
|
||||
$PKG.inc
|
||||
modifies: files
|
||||
returns: nothing
|
||||
output: file: $PKG-xinc.tmp
|
||||
depure.txt
|
||||
$TARGET-index.xml.tmp
|
||||
on error: exit
|
||||
on success:
|
||||
inline_doc
|
||||
|
||||
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 exists, 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
|
||||
return
|
||||
fi
|
||||
|
||||
#------------------
|
||||
# Start with a clean $PKG.xinc.tmp file
|
||||
> xincludes/$PKG.xinc.tmp
|
||||
for DEP in `cat dependencies/$PKG.dep`; do
|
||||
# Special packages (a lot of hacks)
|
||||
case $DEP in
|
||||
|
||||
db ) continue ;; # The proper version of DB is installed in LFS
|
||||
|
||||
# Don't have their own XML file
|
||||
hal-requirements | hal-runtime-dependencies ) continue ;;
|
||||
perl-* | tk-perl ) DEP=perl-modules ;;
|
||||
|
||||
# Orphan links (proper link must be created when generating the book)
|
||||
arts ) DEP=aRts ;;
|
||||
kde ) DEP=kde-core ;;
|
||||
|
||||
# Dummy gnome-core pages
|
||||
GNOME-desktop-file-utils ) DEP=desktop-file-utils ;;
|
||||
GNOME-shared-mime-info ) DEP=shared-mime-info ;;
|
||||
|
||||
# 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 ;;
|
||||
server-mail ) DEP=$MAIL_SERVER ;;
|
||||
esac
|
||||
|
||||
#------------------
|
||||
echo -e "\tDEP for $PKG is $DEP" >> depure.txt
|
||||
# Prevent circular dependencies
|
||||
# If all dependencies are circular, the creation of the *.dep file
|
||||
# must be skipped, not placed here, to avoid that the script will bomb
|
||||
# due empty *.xinc files
|
||||
case $DEP in
|
||||
jadetex | perl-* | lynx | Links | w3m )
|
||||
# Optional dependencies are runtime only
|
||||
[[ "$PKG" = "docbook-utils" ]] && continue
|
||||
;;
|
||||
libxslt )
|
||||
# libxml2-->libxslt-->libxml2
|
||||
[[ "$PKG" = "libxml2" ]] && continue
|
||||
;;
|
||||
openldap | postgresql | $KBR5 )
|
||||
# cyrus-sasl-->several-->cyrus-sasl
|
||||
[[ "$PKG" = "cyrus-sasl" ]] && continue
|
||||
;;
|
||||
espgs )
|
||||
# sendmail-->espgs-->cups-->php-->sendmail
|
||||
[[ "$PKG" = "$MAIL_SERVER" ]] && continue
|
||||
;;
|
||||
aRts )
|
||||
# esound-->aRts-->esound
|
||||
[[ "$PKG" = "esound" ]] && continue
|
||||
;;
|
||||
gimp | sane )
|
||||
# imagemagick-->{sane}-->gimp-->imagemagick
|
||||
[[ "$PKG" = "imagemagick" ]] && continue
|
||||
;;
|
||||
ffmpeg )
|
||||
# alsa-plugins-->ffmpeg-->several-->alsa-plugins
|
||||
[[ "$PKG" = "alsa-plugins" ]] && continue
|
||||
;;
|
||||
akode )
|
||||
# Both are in the same page
|
||||
[[ "$PKG" = "kdemultimedia" ]] && continue
|
||||
;;
|
||||
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 | alsa ) ;; # No page for that (proper link must be created when generating the book)
|
||||
xorg7 ) ;; # This page will be dump in the xorg7.xinc file
|
||||
gnome-core | kde-core | kde-full ) ;; # Invented packages
|
||||
* )
|
||||
# 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
|
||||
# Skip the creation when all dependencies are circular.
|
||||
alsa-lib | cracklib | libexif | unixodbc ) ;;
|
||||
# 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/alsa.dep
|
||||
;;
|
||||
kde-core )
|
||||
cp ../libs/kde-core.dep dependencies/
|
||||
;;
|
||||
x-window-system ) # X11 alternatives
|
||||
echo -e "x-config\nx-setup\n$X11" > dependencies/x-window-system.dep
|
||||
;;
|
||||
xorg7 )
|
||||
echo -e "rman\nxterm2\nxorg7-driver\nxorg7-server\nluit\nxorg7-font\n \
|
||||
xorg7-data\nxorg7-app\nxbitmaps\nmesalib\nlibdrm\n \
|
||||
xorg7-lib\nxorg7-util\nxorg7-proto" > dependencies/xorg7.dep
|
||||
;;
|
||||
* ) xsltproc --stringparam dependencies $DEP_LV \
|
||||
-o dependencies/$DEP.dep ../libs/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
|
||||
echo -e "\nStart new loop for PKG $DEP (to solve $PKG)\n" >> depure.txt
|
||||
#
|
||||
# >>>>>> THIS IS A RECURSIVE FUNCTION CALL.. BEWARE OF GREMLINS. <<<<<<
|
||||
#
|
||||
# If the recursion depth is not too great this is an acceptable methodology for a script language
|
||||
# However, uncontrolled recursion will cause a seg-fault due to stack issues with local variables.
|
||||
#
|
||||
set +e
|
||||
[[ "${VERBOSITY}" > 0 ]] && echo -ne "\nrecursive call: $((++cntr)) ${spaceSTR:0:$cntr} ${RED}$DEP${OFF}"
|
||||
do_dependencies $DEP
|
||||
[[ "${VERBOSITY}" > 0 ]] && echo -ne "\n ret: $cntr ${spaceSTR:0:$((cntr--))} ${GREEN}$DEP${OFF}\tUsing the new xinclude file for PKG $DEP (to solve $PKG)"
|
||||
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
|
||||
|
||||
echo -e "\nEnd loop for PKG $PKG\n" >> depure.txt
|
||||
}
|
149
BLFS/libs/func_makefile
Normal file
149
BLFS/libs/func_makefile
Normal file
|
@ -0,0 +1,149 @@
|
|||
#####
|
||||
#
|
||||
#
|
||||
#
|
||||
# $Id$
|
||||
#####
|
||||
|
||||
# TEMPORARY VARIABLES.. development use only
|
||||
declare MKFILE=devMakefile
|
||||
declare PREV_PACKAGE=""
|
||||
declare BUILD_SCRIPTS=scripts
|
||||
declare TRACKING_DIR=/var/lib/jhalfs/BLFS
|
||||
|
||||
|
||||
#----------------------------------#
|
||||
__wrt_target() { # Create target and initialize log file
|
||||
#----------------------------------#
|
||||
local i=$1
|
||||
local PREV=$2
|
||||
(
|
||||
cat << EOF
|
||||
|
||||
$i: $PREV
|
||||
@\$(call echo_message, Building)
|
||||
@./progress_bar.sh \$@ &
|
||||
EOF
|
||||
) >> $MKFILE.tmp
|
||||
}
|
||||
|
||||
|
||||
|
||||
#----------------------------------#
|
||||
__write_build_cmd() { #
|
||||
#----------------------------------#
|
||||
local this_script=$1
|
||||
local file=$2
|
||||
(
|
||||
cat << EOF
|
||||
@( time { ${BUILD_SCRIPTS}/${file} >>logs/${this_script} 2>&1 ; } ) 2>>logs/${this_script}
|
||||
EOF
|
||||
) >> $MKFILE.tmp
|
||||
}
|
||||
|
||||
#----------------------------------#
|
||||
__wrt_touch() { #
|
||||
#----------------------------------#
|
||||
local pkg_name=$1
|
||||
(
|
||||
cat << EOF
|
||||
@touch \$@ && \\
|
||||
touch \$(TRACKING_DIR)/${pkg_name#*-} && \\
|
||||
sleep .25 && \\
|
||||
echo -e "\n\n "\$(BOLD)Target \$(BLUE)\$@ \$(BOLD)OK && \\
|
||||
echo --------------------------------------------------------------------------------\$(WHITE)
|
||||
EOF
|
||||
) >> $MKFILE.tmp
|
||||
}
|
||||
|
||||
|
||||
#----------------------------#
|
||||
__write_entry() { #
|
||||
#----------------------------#
|
||||
local script_name=$1
|
||||
|
||||
echo -n "${tab_}${tab_} entry for <$script_name>"
|
||||
|
||||
#--------------------------------------------------------------------#
|
||||
# >>>>>>>> START BUILDING A Makefile ENTRY <<<<<<<< #
|
||||
#--------------------------------------------------------------------#
|
||||
#
|
||||
# Drop in the name of the target on a new line, and the previous target
|
||||
# as a dependency. Also call the echo_message function.
|
||||
__wrt_target "${script_name}" "$PREV_PACKAGE"
|
||||
__write_build_cmd "${script_name}" "${script_name}"
|
||||
|
||||
# Include a touch of the target name so make can check
|
||||
# if it's already been made.
|
||||
__wrt_touch "${script_name}"
|
||||
#
|
||||
#--------------------------------------------------------------------#
|
||||
# >>>>>>>> END OF Makefile ENTRY <<<<<<<< #
|
||||
#--------------------------------------------------------------------#
|
||||
echo " .. OK"
|
||||
}
|
||||
|
||||
#----------------------------#
|
||||
generate_Makefile () { #
|
||||
#----------------------------#
|
||||
|
||||
|
||||
echo "${tab_}Creating Makefile... ${BOLD}START${OFF}"
|
||||
|
||||
# Start with a clean files
|
||||
>$MKFILE
|
||||
>$MKFILE.tmp
|
||||
|
||||
|
||||
for package_script in scripts/* ; do
|
||||
this_script=`basename $package_script`
|
||||
if [ ! -e $TRACKING_DIR/${this_script#*-} ]; then
|
||||
pkg_list="$pkg_list ${this_script}"
|
||||
__write_entry $this_script
|
||||
PREV_PACKAGE=${this_script}
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# Add a header, some variables and include the function file
|
||||
# to the top of the real Makefile.
|
||||
(
|
||||
cat << EOF
|
||||
$HEADER
|
||||
|
||||
PACKAGE= "`basename $PKGXML .xml`"
|
||||
TRACKING_DIR= $TRACKING_DIR
|
||||
|
||||
BOLD= "[0;1m"
|
||||
RED= "[1;31m"
|
||||
GREEN= "[0;32m"
|
||||
ORANGE= "[0;33m"
|
||||
BLUE= "[1;34m"
|
||||
WHITE= "[00m"
|
||||
|
||||
define echo_message
|
||||
@echo \$(BOLD)
|
||||
@echo --------------------------------------------------------------------------------
|
||||
@echo \$(BOLD)\$(1) target \$(BLUE)\$@\$(BOLD)
|
||||
@echo \$(WHITE)
|
||||
endef
|
||||
|
||||
|
||||
define fin_message
|
||||
@echo \$(BOLD)
|
||||
@echo --------------------------------------------------------------------------------
|
||||
@echo \$(BOLD) Build complete for the package \$(BLUE)\$(PACKAGE)\$(BOLD) and its dependencies
|
||||
@echo \$(WHITE)
|
||||
endef
|
||||
|
||||
all : $pkg_list
|
||||
@\$(call fin_message )
|
||||
EOF
|
||||
) > $MKFILE
|
||||
|
||||
cat $MKFILE.tmp >> $MKFILE
|
||||
echo "${tab_}Creating Makefile... ${BOLD}DONE${OFF}"
|
||||
|
||||
rm $MKFILE.tmp
|
||||
|
||||
}
|
129
BLFS/libs/func_packages
Normal file
129
BLFS/libs/func_packages
Normal file
|
@ -0,0 +1,129 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
set -e
|
||||
|
||||
#-----------------------#
|
||||
generate_packages() { # Master packages file
|
||||
#-----------------------#
|
||||
local pkg_id file
|
||||
|
||||
> packages.tmp
|
||||
|
||||
# Extract Id and path for sect1 files
|
||||
for file in `find $BLFS_XML -name "*.xml"` ; do
|
||||
pkg_id=`grep "sect1 id" $file | sed -e 's/<sect1 id="//;s/".*//'`
|
||||
[[ ! -z "$pkg_id" ]] && echo -e "$pkg_id\t$file" >> packages.tmp
|
||||
done
|
||||
|
||||
# IDs clean-up (unuseful pages or commented-out packages, could be more)
|
||||
sed -i '/template/d;/ntroduction/d;/preface/d' packages.tmp
|
||||
sed -i '/courier.xml/d' packages.tmp
|
||||
sed -i '/nautilus-media.xml/d;/gal.xml/d;/gpdf.xml/d;/gv.xml/d' packages.tmp
|
||||
|
||||
# Add header with meta-packages pseudo Id
|
||||
{
|
||||
cat << EOF
|
||||
|
||||
=== GNOME META-PACKAGES ===
|
||||
# GNOME base packages
|
||||
gnome-core $BLFS_XML
|
||||
# All GNOME packages
|
||||
gnome-full $BLFS_XML
|
||||
|
||||
=== KDE META-PACKAGES ===
|
||||
# KDE base packages
|
||||
kde-core $BLFS_XML
|
||||
# All KDE packages
|
||||
kde-full $BLFS_XML
|
||||
# All KDE packages plus Koffice
|
||||
kde-koffice $BLFS_XML
|
||||
|
||||
=== INDIVIDUAL PACKAGES ===
|
||||
|
||||
EOF
|
||||
} > packages
|
||||
|
||||
# Dump packages list
|
||||
sort packages.tmp >> packages
|
||||
|
||||
# Clean up
|
||||
rm packages.tmp
|
||||
}
|
||||
|
||||
# Pre-made *.dep files for meta-packages
|
||||
|
||||
#--------------------------#
|
||||
generate_gnome_core() { # GNOME core
|
||||
#--------------------------#
|
||||
local line base_xml package
|
||||
|
||||
> gnome-core.dep.tmp
|
||||
|
||||
for line in `grep "xi:include" $BLFS_XML/gnome/core/core.xml` ; do
|
||||
base_xml=`echo $line | sed 's/^.*href="//;s/".*//'`
|
||||
package=`grep "gnome/core/$base_xml" packages | cut -f1`
|
||||
[[ -n "$package" ]] && echo $package >> gnome-core.dep.tmp
|
||||
done
|
||||
|
||||
tac gnome-core.dep.tmp > libs/gnome-core.dep
|
||||
rm gnome-core.dep.tmp
|
||||
}
|
||||
|
||||
#--------------------------#
|
||||
generate_gnome_full() { # GNOME full
|
||||
#--------------------------#
|
||||
local line base_xml package
|
||||
|
||||
echo "gnome-core" > gnome-full.dep.tmp
|
||||
|
||||
for line in `grep "xi:include" $BLFS_XML/gnome/add/add.xml` ; do
|
||||
base_xml=`echo $line | sed 's/^.*href="//;s/".*//'`
|
||||
package=`grep "gnome/add/$base_xml" packages | cut -f1`
|
||||
[[ -n "$package" ]] && echo $package >> gnome-full.dep.tmp
|
||||
done
|
||||
|
||||
tac gnome-full.dep.tmp > libs/gnome-full.dep
|
||||
rm gnome-full.dep.tmp
|
||||
}
|
||||
|
||||
#--------------------------#
|
||||
generate_kde_core() { # KDE core
|
||||
#--------------------------#
|
||||
local line base_xml package
|
||||
|
||||
> kde-core.dep.tmp
|
||||
|
||||
for line in `grep "xi:include" $BLFS_XML/kde/core/core.xml` ; do
|
||||
base_xml=`echo $line | sed 's/^.*href="//;s/".*//'`
|
||||
package=`grep "kde/core/$base_xml" packages | cut -f1`
|
||||
[[ -n "$package" ]] && echo $package >> kde-core.dep.tmp
|
||||
done
|
||||
|
||||
tac kde-core.dep.tmp > libs/kde-core.dep
|
||||
rm kde-core.dep.tmp
|
||||
}
|
||||
|
||||
#--------------------------#
|
||||
generate_kde_full() { # KDE full
|
||||
#--------------------------#
|
||||
local line base_xml package
|
||||
|
||||
echo "kde-core" > kde-full.dep.tmp
|
||||
|
||||
for line in `grep "xi:include" $BLFS_XML/kde/add/add.xml` ; do
|
||||
base_xml=`echo $line | sed 's/^.*href="//;s/".*//'`
|
||||
package=`grep "kde/add/$base_xml" packages | cut -f1`
|
||||
[[ -n "$package" ]] && echo $package >> kde-full.dep.tmp
|
||||
done
|
||||
|
||||
for line in `grep "xi:include" $BLFS_XML/kde/devel/devel.xml` ; do
|
||||
base_xml=`echo $line | sed 's/^.*href="//;s/".*//'`
|
||||
package=`grep "kde/devel/$base_xml" packages | cut -f1`
|
||||
[[ -n "$package" ]] && echo $package >> kde-full.dep.tmp
|
||||
done
|
||||
|
||||
tac kde-full.dep.tmp > libs/kde-full.dep
|
||||
rm kde-full.dep.tmp
|
||||
}
|
149
BLFS/libs/func_parser
Normal file
149
BLFS/libs/func_parser
Normal file
|
@ -0,0 +1,149 @@
|
|||
#!/bin/bash
|
||||
#####
|
||||
#
|
||||
# Parse the XML documents to create a 'package' book
|
||||
#
|
||||
# $Id$
|
||||
#####
|
||||
|
||||
|
||||
#----------------------------#
|
||||
generate_TARGET_xml() { #
|
||||
#----------------------------#
|
||||
: <<inline_doc
|
||||
function: Generate the XML document for the TARGET package
|
||||
input vars: nothing
|
||||
externals: vars: TARGET
|
||||
modifies: nothing
|
||||
returns: nothing
|
||||
output: file: $TARGET-index.xml
|
||||
on error: nothing
|
||||
on success: nothing
|
||||
inline_doc
|
||||
|
||||
local
|
||||
echo -en "\tGenerating $TARGET-index.xml ..."
|
||||
|
||||
#---------------------
|
||||
# Header to $TARGET-index.xml
|
||||
{
|
||||
cat << EOF
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" >
|
||||
|
||||
<book>
|
||||
|
||||
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="../$BLFS_XML/book/bookinfo.xml"/>
|
||||
|
||||
<preface>
|
||||
<?dbhtml filename="preface.html" dir="preface"?>
|
||||
|
||||
<title>Preface</title>
|
||||
|
||||
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="../$BLFS_XML/introduction/important/locale-issues.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="../$BLFS_XML/introduction/important/bootscripts.xml"/>
|
||||
|
||||
</preface>
|
||||
|
||||
<chapter>
|
||||
<?dbhtml filename="chapter.html" dir="installing"?>
|
||||
|
||||
<title>Installing $TARGET in Dependencies Build Order</title>
|
||||
|
||||
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
|
||||
|
||||
</chapter>
|
||||
|
||||
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="../$BLFS_XML/appendices/creat-comm.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="../$BLFS_XML/appendices/ac-free-lic.xml"/>
|
||||
|
||||
<index/>
|
||||
|
||||
</book>
|
||||
|
||||
EOF
|
||||
} >> $TARGET-index.xml
|
||||
|
||||
echo "done"
|
||||
}
|
||||
|
||||
|
||||
#-------------------------#
|
||||
generate_target_book() { #
|
||||
#-------------------------#
|
||||
: <<inline_doc
|
||||
function: Create an HTML document of the requested TARGET.
|
||||
input vars: nothing
|
||||
externals: vars: TARGET
|
||||
BLFS_XML
|
||||
MAIL_SERVER
|
||||
X11
|
||||
modifies: nothing
|
||||
returns: nothing
|
||||
output: file: NUMEROUS FILES
|
||||
on error: nothing
|
||||
on success: nothing
|
||||
inline_doc
|
||||
|
||||
local filename # output filename
|
||||
echo -en "\tGenerating the HTML book for <$TARGET> from the xml files located in <$BLFS_XML>..."
|
||||
xsltproc --xinclude --nonet \
|
||||
--stringparam mail_server $MAIL_SERVER \
|
||||
--stringparam xwindow $X11 \
|
||||
--stringparam base.dir HTML/ \
|
||||
../libs/book.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
|
||||
cd ..
|
||||
echo "done"
|
||||
}
|
||||
|
||||
|
||||
#-------------------------#
|
||||
create_build_scripts() { #
|
||||
#-------------------------#
|
||||
: <<inline_doc
|
||||
function: Create shell scripts of the requested TARGET.
|
||||
input vars: nothing
|
||||
externals: TARGET
|
||||
modifies: nothing
|
||||
returns: nothing
|
||||
output: file: NUMEROUS FILES
|
||||
on error: nothing
|
||||
on success: nothing
|
||||
inline_doc
|
||||
|
||||
# Log separator
|
||||
echo -e "\n\tScripts generation depuration and errors:\n" >> xsltproc.log
|
||||
|
||||
echo -en "\tGenerating the build scripts ..."
|
||||
xsltproc --xinclude --nonet \
|
||||
-o ./scripts/ ../libs/scripts.xsl \
|
||||
$TARGET-index.xml >> xsltproc.log 2>&1
|
||||
echo "done"
|
||||
# Make the scripts executable.
|
||||
chmod -R +x scripts
|
||||
|
||||
}
|
373
BLFS/libs/scripts.xsl
Normal file
373
BLFS/libs/scripts.xsl
Normal file
|
@ -0,0 +1,373 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:exsl="http://exslt.org/common"
|
||||
extension-element-prefixes="exsl"
|
||||
version="1.0">
|
||||
|
||||
<!-- $Id$ -->
|
||||
|
||||
<!-- XSLT stylesheet to create shell scripts from "linear build" BLFS books. -->
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:apply-templates select="//sect1"/>
|
||||
</xsl:template>
|
||||
|
||||
<!--=================== Master chunks code ======================-->
|
||||
|
||||
<xsl:template match="sect1">
|
||||
<xsl:if test="@id != 'locale-issues' and
|
||||
(count(descendant::screen/userinput) > 0 and
|
||||
count(descendant::screen/userinput) >
|
||||
count(descendant::screen[@role='nodump']))">
|
||||
|
||||
<!-- The file names -->
|
||||
<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')"/>
|
||||
|
||||
<!-- Package name (use "Download FTP" by default. If empty, use "Download HTTP" -->
|
||||
<xsl:param name="package">
|
||||
<xsl:choose>
|
||||
<xsl:when
|
||||
test="string-length(sect2[@role='package']/itemizedlist/listitem[2]/para/ulink/@url)
|
||||
> '10'">
|
||||
<xsl:call-template name="package_name">
|
||||
<xsl:with-param name="url"
|
||||
select="sect2[@role='package']/itemizedlist/listitem[2]/para/ulink/@url"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="package_name">
|
||||
<xsl:with-param name="url"
|
||||
select="sect2[@role='package']/itemizedlist/listitem[1]/para/ulink/@url"/>
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:param>
|
||||
|
||||
<!-- FTP dir name -->
|
||||
<xsl:param name="ftpdir">
|
||||
<xsl:call-template name="ftp_dir">
|
||||
<xsl:with-param name="package" select="$package"/>
|
||||
</xsl:call-template>
|
||||
</xsl:param>
|
||||
|
||||
<!-- The build order -->
|
||||
<xsl:variable name="position" select="position()"/>
|
||||
<xsl:variable name="order">
|
||||
<xsl:choose>
|
||||
<xsl:when test="string-length($position) = 1">
|
||||
<xsl:text>00</xsl:text>
|
||||
<xsl:value-of select="$position"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="string-length($position) = 2">
|
||||
<xsl:text>0</xsl:text>
|
||||
<xsl:value-of select="$position"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$position"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<!-- Depuration code -->
|
||||
<xsl:message>
|
||||
<xsl:text>SCRIPT is </xsl:text>
|
||||
<xsl:value-of select="concat($order,'-',$filename)"/>
|
||||
<xsl:text>
 PACKAGE is </xsl:text>
|
||||
<xsl:value-of select="$package"/>
|
||||
<xsl:text>
 FTPDIR is </xsl:text>
|
||||
<xsl:value-of select="$ftpdir"/>
|
||||
<xsl:text>

</xsl:text>
|
||||
</xsl:message>
|
||||
|
||||
<!-- Creating the scripts -->
|
||||
<exsl:document href="{$order}-{$filename}" method="text">
|
||||
<xsl:text>#!/bin/sh
set -e

</xsl:text>
|
||||
<xsl:choose>
|
||||
<!-- Package page -->
|
||||
<xsl:when test="sect2[@role='package']">
|
||||
<!-- Variables -->
|
||||
<xsl:text>SRC_ARCHIVE=$SRC_ARCHIVE
</xsl:text>
|
||||
<xsl:text>FTP_SERVER=$FTP_SERVER

PACKAGE=</xsl:text>
|
||||
<xsl:value-of select="$package"/>
|
||||
<xsl:text>
PKG_DIR=</xsl:text>
|
||||
<xsl:value-of select="$ftpdir"/>
|
||||
<xsl:text>

</xsl:text>
|
||||
<!-- Download code and build commands -->
|
||||
<xsl:apply-templates select="sect2">
|
||||
<xsl:with-param name="package" select="$package"/>
|
||||
<xsl:with-param name="ftpdir" select="$ftpdir"/>
|
||||
</xsl:apply-templates>
|
||||
<!-- Clean-up -->
|
||||
<xsl:text>cd ~/sources/$PKG_DIR
</xsl:text>
|
||||
<xsl:text>rm -rf $UNPACKDIR

</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- Non-package page -->
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select=".//screen"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:text>exit</xsl:text>
|
||||
</exsl:document>
|
||||
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<!--======================= Sub-sections code =======================-->
|
||||
|
||||
<xsl:template match="sect2">
|
||||
<xsl:param name="package" select="foo"/>
|
||||
<xsl:param name="ftpdir" select="foo"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="@role = 'package'">
|
||||
<xsl:text>mkdir -p ~/sources/$PKG_DIR
</xsl:text>
|
||||
<xsl:text>cd ~/sources/$PKG_DIR
</xsl:text>
|
||||
<xsl:apply-templates select="itemizedlist/listitem/para">
|
||||
<xsl:with-param name="package" select="$package"/>
|
||||
<xsl:with-param name="ftpdir" select="$ftpdir"/>
|
||||
</xsl:apply-templates>
|
||||
<xsl:text>
</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="@role = 'installation'">
|
||||
<xsl:text>tar -xvf $PACKAGE > unpacked
</xsl:text>
|
||||
<xsl:text>UNPACKDIR=`head -n1 unpacked | sed 's@^./@@;s@/.*@@'`
</xsl:text>
|
||||
<xsl:text>cd $UNPACKDIR
</xsl:text>
|
||||
<xsl:apply-templates select=".//screen | .//para/command"/>
|
||||
<xsl:text>
</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="@role = 'configuration'">
|
||||
<xsl:apply-templates select=".//screen"/>
|
||||
<xsl:text>
</xsl:text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!--==================== Download code =======================-->
|
||||
|
||||
<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:choose>
|
||||
<xsl:when test="contains($sub-url,'?')">
|
||||
<xsl:value-of select="substring-before($sub-url,'?')"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($sub-url,'.patch')"/>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$sub-url"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="ftp_dir">
|
||||
<xsl:param name="package" select="foo"/>
|
||||
<!-- A lot of hardcoded dir names. Not full revised yet. -->
|
||||
<xsl:choose>
|
||||
<!-- cdparanoia -->
|
||||
<xsl:when test="contains($package, '-III')">
|
||||
<xsl:text>cdparanoia</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- DobBook 3.1 -->
|
||||
<xsl:when test="contains($package, 'docbk31')">
|
||||
<xsl:text>docbk</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- gc -->
|
||||
<xsl:when test="contains($package, 'gc6')">
|
||||
<xsl:text>gc</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- ISO-codes -->
|
||||
<xsl:when test="contains($package, 'iso-codes')">
|
||||
<xsl:text>iso-codes</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- JPEG -->
|
||||
<xsl:when test="contains($package, 'jpegsrc')">
|
||||
<xsl:text>jpeg</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- lynx -->
|
||||
<xsl:when test="contains($package, 'lynx')">
|
||||
<xsl:text>lynx</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- ntp -->
|
||||
<xsl:when test="contains($package, 'ntp')">
|
||||
<xsl:text>ntp</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- OpenLDAP -->
|
||||
<xsl:when test="contains($package, 'openldap')">
|
||||
<xsl:text>openldap</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- Open Office -->
|
||||
<xsl:when test="contains($package, 'OOo')">
|
||||
<xsl:text>OOo</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- pine -->
|
||||
<xsl:when test="contains($package, 'pine')">
|
||||
<xsl:text>pine</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- portmap -->
|
||||
<xsl:when test="contains($package, 'portmap')">
|
||||
<xsl:text>portmap</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- psutils -->
|
||||
<xsl:when test="contains($package, 'psutils')">
|
||||
<xsl:text>psutils</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- qpopper -->
|
||||
<xsl:when test="contains($package, 'qpopper')">
|
||||
<xsl:text>qpopper</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- QT -->
|
||||
<xsl:when test="contains($package, 'qt-x')">
|
||||
<xsl:text>qt-x11-free</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- sendmail -->
|
||||
<xsl:when test="contains($package, 'sendmail')">
|
||||
<xsl:text>sendmail</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- Slib -->
|
||||
<xsl:when test="contains($package, 'slib')">
|
||||
<xsl:text>slib</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- TCL -->
|
||||
<xsl:when test="contains($package, 'tcl')">
|
||||
<xsl:text>tcl</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- tcpwrappers -->
|
||||
<xsl:when test="contains($package, 'tcp_wrappers')">
|
||||
<xsl:text>tcp_wrappers</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- TeTeX -->
|
||||
<xsl:when test="contains($package, 'tetex')">
|
||||
<xsl:text>tetex</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- Tidy -->
|
||||
<xsl:when test="contains($package, 'tidy')">
|
||||
<xsl:text>tidy</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- Tk -->
|
||||
<xsl:when test="contains($package, 'tk8')">
|
||||
<xsl:text>tk</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- unzip -->
|
||||
<xsl:when test="contains($package, 'unzip')">
|
||||
<xsl:text>unzip</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- wireless_tools -->
|
||||
<xsl:when test="contains($package, 'wireless_tools')">
|
||||
<xsl:text>wireless_tools</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- whois -->
|
||||
<xsl:when test="contains($package, 'whois')">
|
||||
<xsl:text>whois</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- XOrg -->
|
||||
<xsl:when test="contains($package, 'X11R6')">
|
||||
<xsl:text>Xorg</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- zip -->
|
||||
<xsl:when test="contains($package, 'zip2')">
|
||||
<xsl:text>zip</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- General rule -->
|
||||
<xsl:otherwise>
|
||||
<xsl:variable name="cut"
|
||||
select="translate(substring-after($package, '-'), '0123456789', '0000000000')"/>
|
||||
<xsl:variable name="package2">
|
||||
<xsl:value-of select="substring-before($package, '-')"/>
|
||||
<xsl:text>-</xsl:text>
|
||||
<xsl:value-of select="$cut"/>
|
||||
</xsl:variable>
|
||||
<xsl:value-of select="substring-before($package2, '-0')"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="itemizedlist/listitem/para">
|
||||
<xsl:param name="package" select="foo"/>
|
||||
<xsl:param name="ftpdir" select="foo"/>
|
||||
<xsl:choose>
|
||||
<!-- This depend on all package pages having both "Download HTTP" and "Download FTP" lines -->
|
||||
<xsl:when test="contains(string(),'HTTP')">
|
||||
<xsl:text>if [[ ! -f $PACKAGE ]] ; then
</xsl:text>
|
||||
<!-- SRC_ARCHIVE may have subdirectories or not -->
|
||||
<xsl:text> if [[ -f $SRC_ARCHIVE/$PKG_DIR/$PACKAGE ]] ; then
</xsl:text>
|
||||
<xsl:text> cp $SRC_ARCHIVE/$PKG_DIR/$PACKAGE $PACKAGE
</xsl:text>
|
||||
<xsl:text> elif [[ -f $SRC_ARCHIVE/$PACKAGE ]] ; then
</xsl:text>
|
||||
<xsl:text> cp $SRC_ARCHIVE/$PACKAGE $PACKAGE
 else
</xsl:text>
|
||||
<!-- The FTP_SERVER mirror -->
|
||||
<xsl:text> wget $FTP_SERVER/BLFS/conglomeration/$PKG_DIR/$PACKAGE</xsl:text>
|
||||
<!-- Upstream HTTP URL -->
|
||||
<xsl:if test="string-length(ulink/@url) > '10' and
|
||||
not(contains(string(ulink/@url),'sourceforge'))">
|
||||
<xsl:text> || \
 wget </xsl:text>
|
||||
<xsl:value-of select="ulink/@url"/>
|
||||
</xsl:if>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains(string(),'FTP')">
|
||||
<!-- Upstream FTP URL -->
|
||||
<xsl:if test="string-length(ulink/@url) > '10'">
|
||||
<xsl:text> || \
 wget </xsl:text>
|
||||
<xsl:value-of select="ulink/@url"/>
|
||||
</xsl:if>
|
||||
<xsl:text>
 fi
fi
</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains(string(),'MD5')">
|
||||
<xsl:text>echo "</xsl:text>
|
||||
<xsl:value-of select="substring-after(string(),'sum: ')"/>
|
||||
<xsl:text>  $PACKAGE" | md5sum -c -
</xsl:text>
|
||||
</xsl:when>
|
||||
<!-- Patches -->
|
||||
<xsl:when test="contains(string(ulink/@url),'.patch')">
|
||||
<xsl:text>wget </xsl:text>
|
||||
<xsl:value-of select="ulink/@url"/>
|
||||
<xsl:text>
</xsl:text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!--======================== Commands code ==========================-->
|
||||
|
||||
<xsl:template match="screen">
|
||||
<xsl:if test="child::* = userinput and not(@role = 'nodump')">
|
||||
<xsl:if test="@role = 'root'">
|
||||
<xsl:text>sudo sh -c "</xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:apply-templates select="userinput"/>
|
||||
<xsl:if test="@role = 'root'">
|
||||
<xsl:text>"</xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:text>
</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="para/command">
|
||||
<xsl:if test="(contains(string(),'test') or
|
||||
contains(string(),'check'))">
|
||||
<xsl:text>#</xsl:text>
|
||||
<xsl:value-of select="substring-before(string(),'make')"/>
|
||||
<xsl:text>make -k</xsl:text>
|
||||
<xsl:value-of select="substring-after(string(),'make')"/>
|
||||
<xsl:text> || true
</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="userinput">
|
||||
<xsl:apply-templates/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="replaceable">
|
||||
<xsl:text>**EDITME</xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text>EDITME**</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
97
BLFS/packages.sh
Executable file
97
BLFS/packages.sh
Executable file
|
@ -0,0 +1,97 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
set -e
|
||||
|
||||
declare -r SVN="svn://svn.linuxfromscratch.org"
|
||||
|
||||
BLFS_XML=$1 # Book directory
|
||||
DOC_MODE=$2 # Action to take, only update at the moment
|
||||
|
||||
#---------------------
|
||||
# packages module
|
||||
source libs/func_packages
|
||||
[[ $? > 0 ]] && echo -e "\n\tERROR: func_packages did not load..\n" && exit
|
||||
|
||||
#----------------------------#
|
||||
BOOK_Source() { #
|
||||
#----------------------------#
|
||||
: <<inline_doc
|
||||
function: Retrieve a fresh copy or upate an existing copy of the BLFS svn tree
|
||||
input vars: $1 BLFS_XML directory
|
||||
$2 DOC_MODE action get/update
|
||||
externals: none
|
||||
modifies: $BLFS_XML directory tree
|
||||
returns: nothing
|
||||
output:
|
||||
on error: exit
|
||||
on success: text messages
|
||||
inline_doc
|
||||
|
||||
# Redundant definitions but this function may be reused
|
||||
local BLFS_XML=$1
|
||||
local DOC_MODE=$2
|
||||
|
||||
if [[ -z "$BLFS_XML" ]] ; then
|
||||
echo -e "\n\tYou must to provide the name of the BLFS book sources directory.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$DOC_MODE" ]] ; then
|
||||
case $DOC_MODE in
|
||||
update )
|
||||
if [[ ! -d $BLFS_XML ]] ; then
|
||||
echo -e "\n\t$BLFS_XML is not a directory\n"
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -f $BLFS_XML/use-unzip.xml ]] ; then
|
||||
echo -e "\n\tLooks like $BLFS_XML is not a BLFS book sources directory\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -d $BLFS_XML/.svn ]] ; then
|
||||
echo -e "\n\tUpdating the $BLFS_XML book sources ...\n"
|
||||
pushd $BLFS_XML 1> /dev/null
|
||||
svn up
|
||||
popd 1> /dev/null
|
||||
echo -e "\n\tBook sources updated."
|
||||
else
|
||||
echo -e "\n\tLooks like $BLFS_XML is not a svn working copy."
|
||||
echo -e "\tSkipping BLFS sources update.\n"
|
||||
fi
|
||||
;;
|
||||
|
||||
get )
|
||||
[[ ! -d $BLFS_XML ]] && mkdir -pv $BLFS_XML
|
||||
svn co $SVN/BLFS/trunk/BOOK $BLFS_XML 2>&1
|
||||
;;
|
||||
* )
|
||||
echo -e "\n\tUnknown option ${DOC_MODE} ignored.\n"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
BOOK_Source $BLFS_XML $DOC_MODE
|
||||
|
||||
echo -en "\n\tGenerating packages file ..."
|
||||
generate_packages
|
||||
echo "done."
|
||||
|
||||
echo -en "\tGenerating gnome-core dependencies list ..."
|
||||
generate_gnome_core
|
||||
echo "done."
|
||||
|
||||
echo -en "\tGenerating gnome-full dependencies list ..."
|
||||
generate_gnome_full
|
||||
echo "done."
|
||||
|
||||
echo -en "\tGenerating kde-core dependencies list ..."
|
||||
generate_kde_core
|
||||
echo "done."
|
||||
|
||||
echo -en "\tGenerating kde-full dependencies list ..."
|
||||
generate_kde_full
|
||||
echo -e "done.\n"
|
||||
|
Reference in a new issue