more robust config prompting
[build.git] / build.common
index ae938c3..23d282d 100644 (file)
@@ -128,7 +128,7 @@ function pl_process_fedora_options () {
 function pl_root_rpm_macros () {
     cat <<EOF
 %_install_langs C:en_US:en
-%_netsharedpath /proc:/dev/pts
+%_netsharedpath /proc:/dev/pts:/usr/share/info
 %_excludedocs 1
 %__file_context_path /dev/null
 EOF
@@ -333,6 +333,8 @@ linux/core/$releasever/$basearch/os
        done
        echo
        mkfedora_usage
+    else
+       echo "* selecting mirror with baseurl=$baseurl"
     fi
 
     # Do not tolerate errors
@@ -634,7 +636,7 @@ function pl_make_image() {
     (cd $root && tar cpf - .) | (cd $tmp && tar xpf -)
 
     # Unmount it
-    umount -l $tmp
+    umount $tmp
     rmdir $tmp
     trap - ERR INT
 }
@@ -658,6 +660,14 @@ function pl_fixdirs() {
 
 ########## .pkgs format
 # comments start with a # - this is needed only if you use a keyword in a comment
+
+function pl_getPkgsAttribute () {
+    keyword=$1; shift
+    file=$1; shift
+    grep -v '^#' $file | grep --regexp="^${keyword}:" | sed -e "s,${keyword}:,,"
+}
+
+
 # for a given keyword like 'package' :
 # we support fcdistro-dependant format, for tokens (pkgname) without whitespace
 # you can e.g. use
@@ -720,22 +730,32 @@ function pl_locateDistroFile () {
 
 # experimental
 function yumgroups_from_pkgs () {
-   groupname=$1; shift
-   groupdesc=$1; shift
-   pkgsfile=$1; shift
-   fcdistro=$pl_DISTRO_NAME
-   [[ -n "$@" ]] && fcdistro=$1; shift
-   if [[ -n "$@" ]] ; then 
-       echo "yumgroups_from_pkgs : wrong signature"
-       return 1
-   fi
-
-   packages=$(pl_getPackages $fcdistro $pkgsfile)
+    builddir=$1; shift
+    pldistro=$1; shift
+    fcdistro=$1; shift
+    pkgsnames=$@
+
+sedargs="-e s,@FCDISTRO@,$fcdistro,g"
 
    cat <<__header
 <?xml version="1.0"?>
 <!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
 <comps>
+__header
+
+    for pkgsname in $pkgsnames; do
+       pkgsfile=$(pl_locateDistroFile $builddir $pldistro $pkgsname)
+       packages=$(pl_getPackages $fcdistro $pkgsfile)
+
+       groupname=$(pl_getPkgsAttribute groupname $pkgsfile | sed $sedargs)
+       groupdesc=$(pl_getPkgsAttribute groupdesc $pkgsfile | sed $sedargs)
+
+       if [ -z "$groupname" -o -z "$groupdesc" ] ; then
+           echo "Cannot find groupname: and groupdesc: in $pkgsfile -- skipped" 1>&2
+           continue
+       fi
+       
+       cat << __group_header
   <group>
     <id>$(echo $groupname|tr A-Z a-z)</id>
     <name>$groupname</name>
@@ -743,24 +763,18 @@ function yumgroups_from_pkgs () {
     <description>$groupdesc</description>
     <uservisible>false</uservisible>
     <packagelist>
-__header
-
-    for package in $packages; do 
-       echo "<packagereq type=\"mandatory\">$package</packagereq>"
-    done
-
-cat <<__footer
+__group_header
+        for package in $packages; do 
+           echo "<packagereq type=\"mandatory\">$package</packagereq>"
+       done
+       cat << __group_footer
     </packagelist>
   </group>
+__group_footer
+    done
+cat <<__footer
 </comps>
 __footer
 }
 
-function toplevel_yumgroups () {
-    pldistro=$1; shift
-    pkgsname=$1; shift
-    builddir=$(dirname $0)
-    pkgsfile=$(pl_locateDistroFile $builddir $pldistro $pkgsname)
-    yumgroups_from_pkgs 'PlanetLab' 'PlanetLab Node Root' $pkgsfile
-}