#!/bin/bash #------------------------------------------------------------------------- # generates an xsl stylesheet containing a template for special # cases in the book: # - If the version does not begin with a number, it is impossible to know # where the package name ends and where the version begins. We therefore # use the ENTITY at the beginning of the validated full-xml. # - If a package is part of a group of xorg packages (proto, fonts, etc) # there is no easy way to extract it from the xml. We use the ENTITY at # the top of each file x7*.xml # - Some non-versioned packages are needed as dependencies of others: we # attribute version 1.0.0 to them. It is just used to know if the package # is installed, by checking inst-version. # - If a package is versioned but the version is not mentioned in the book # (currently only udev), we retrieve the version by other means #------------------------------------------------------------------------- # Arguments: # $1 contains the name of the validated xml book # $2 contains the name of the ouput xsl file # $3 contains the name of the book sources directory #------------------------------------------------------------------------- BLFS_XML=$1 if ! test -f ${BLFS_XML}; then echo File \`${BLFS_XML}\' does not exist exit 1 fi SPECIAL_FILE=$2 if test -z "${SPECIAL_FILE}"; then SPECIAL_FILE=specialCases.xsl;fi BLFS_DIR=$3 if test -z "${BLFS_DIR}"; then BLFS_DIR=$(cd $(dirname ${BLFS_XML})/.. ; pwd);fi # Packages whose version does not begin with a number EXCEPTIONS=$(grep 'ENTITY.*version[ ]*"[^0-9"&.].*[0-9]' ${BLFS_DIR}/packages.ent | sed 's@^[^"]*"\([^"]*\)".*@\1@') # Non-versioned packages: NV_LIST="postlfs-config-profile postlfs-config-random postlfs-config-vimrc \ initramfs xorg-env kde-pre-install-config kf5-intro \ lxqt-pre-install lxqt-post-install ojdk-conf tex-path" cat >$SPECIAL_FILE << EOF EOF # Non-versionned packages. Add to NV_LIST if you need more. for nv_id in $NV_LIST; do # Actually, kf5-intro contains some version info, so should be # versioned. For other packages, we define version to 1.0.0 # because the DTD needs a version tag. DUM_VER=1.0.0 if [ $nv_id = kf5-intro ]; then DUM_VER=$(grep kf5-version $BLFS_DIR/packages.ent | \ sed 's/[^"]*"\([^"]*\).*/\1/') fi cat >>$SPECIAL_FILE << EOF $nv_id $DUM_VER EOF done # Taking packages contained in pages installing several packages (x7* except # x7driver, kf5-frameworks, and plasma5-all), as versionned modules. # We also write a dependency expansion when a dep is of the form # xorg7-something or kf5-frameworks or plasma5-build. Since that is another # template, we need a temporary file, which we shall concatenate at the end cat >tmpfile << EOF EOF for file in $(ls ${BLFS_DIR}/x/installing/x7* | grep -v x7driver) \ ${BLFS_DIR}/kde/kf5/kf5-frameworks.xml \ ${BLFS_DIR}/kde/plasma5/plasma-all.xml \ ${BLFS_DIR}/x/installing/xcb-utilities.xml; do id=$(grep xreflabel $file | sed 's@.*id="\([^"]*\).*@\1@') cat >>$SPECIAL_FILE << EOF $id EOF cat >> tmpfile << EOF EOF # We extract the list of packages for those pages from # the "cat" command that creates the md5 file. We assume # that the preceding package is a dependency of the following, # except the first. # note that some pages may have several "cat" command, so we have to # make a complex regex for the first line to save. All those lines have # .md5 in them except the one for x7legacy that has .dat. # we need also to remove lines beginning with #. # Note that only xorg pages have '&' in them. So for kde # pages, what is extracted it the full tarball name. list_cat="$(sed -n '/>cat.*\.\(md5\|dat\)/,/EOFcat\|EOF<\|#' | \ awk '{ print $NF }' | sed 's/-&.*//')" precpack=NONE for pack in $list_cat; do if grep -q -E 'x7|xcb' $file; then # this is an xorg package packname=$pack # We extract the version from the ENTITY parts of the .xml file. packversion=$(grep "ENTITY ${pack}-version" $file | \ sed 's@[^"]*"\([^"]*\).*@\1@') else packname=${pack%-[[:digit:]]*} packversion=$(echo $pack | sed 's/[^.]*-\([.[:digit:]]*\)\.tar.*/\1/') fi cat >>$SPECIAL_FILE << EOF $packname $packversion EOF if test $precpack != NONE; then cat >>$SPECIAL_FILE << EOF required before $precpack ref EOF else cat >>$SPECIAL_FILE << EOF EOF fi cat >>$SPECIAL_FILE << EOF EOF # cat >> tmpfile << EOF # # # # # # # # $packname # ref # #EOF precpack=$packname done # We need a dummy package for plasma post install instructions if [ $(basename $file .xml) = plasma-all ]; then cat >>$SPECIAL_FILE << EOF plasma-post-install 1.0.0 required before $precpack ref EOF fi cat >>$SPECIAL_FILE << EOF EOF cat >> tmpfile << EOF $packname ref EOF done for ver_ent in $EXCEPTIONS; do id=$(grep 'xreflabel=".*'$ver_ent $BLFS_XML | sed 's@.*id="\([^"]*\)".*@\1@') [[ -z $id ]] && continue cat >>$SPECIAL_FILE << EOF $id $ver_ent $id $ver_ent EOF done cat >>$SPECIAL_FILE << EOF EOF cat $SPECIAL_FILE tmpfile > tmpfile1 mv tmpfile1 $SPECIAL_FILE rm tmpfile cat >> $SPECIAL_FILE << EOF You should not be seeing this EOF