no need to check out build
[build.git] / build.common
index 97193b2..983ed75 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
@@ -184,8 +184,8 @@ mirrors=(
     )
 
 function mkfedora_usage() {
-    echo "Usage: mkfedora [OPTION]... [basedir]"
-    echo "     -l url          Fedora mirror location. Defaults to try:"
+    echo "Usage: pl_root_mkfedora [OPTION]... basedir"
+    echo "     -l url          Fedora mirror location. Default is to try:"
     for mirror in "${mirrors[@]}" ; do
        echo "                  $mirror"
     done
@@ -208,7 +208,12 @@ function mkfedora_usage() {
 
 function pl_root_mkfedora () {
 
-    echo "* Entering pl_root_mkfedora " "$@"
+    echo "* Entering pl_root_mkfedora" "$@"
+
+    if [ $UID -ne 0 ] ; then
+       echo "Error: You must run this script as root."
+       exit 1
+    fi
 
 # Verbosity
     verbose=0
@@ -275,16 +280,11 @@ function pl_root_mkfedora () {
     done
 
     shift $(($OPTIND - 1))
-    if [ ! -d "$1" ] ; then
-       mkfedora_usage
-    fi
-
-    vroot=$(cd $1 && pwd -P)
-
-    if [ $UID -ne 0 ] ; then
-       echo "Error: You must run this script as root."
-       exit 1
-    fi
+    [[ -n "$@" ]] || mkfedora_usage
+    vroot=$1 ; shift
+    vroot=$(cd $vroot && pwd -P)
+    [[ -z "$@" ]] || mkfedora_usage
+    [ -d $vroot ] || mkfedora_usage
 
     function mkfedora_fetch ()
     {
@@ -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
@@ -575,7 +577,7 @@ function pl_root_setup_chroot() {
     options="$@"
 
     pl_root_makedevs $root
-    pl_root_mkfedora $root $options
+    pl_root_mkfedora $options $root 
 
     # Disable all services in reference image
     chroot $root sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
@@ -607,7 +609,7 @@ function pl_move_dirs() {
        fi
        rm -rf ${root}/${datadir}
        mkdir -p $(dirname ${root}/${datadir})
-       ln -nsf /${store}/${datadir} ${root}/${datadir}
+       ln -nsf ${store}/${datadir} ${root}/${datadir}
     done
 }
 
@@ -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
@@ -674,9 +684,9 @@ function pl_parsePkgs () {
     # grab regular descriptions
     all=$(grep -v '^#' "$@" | grep --regexp="^${keyword}:" | sed -e "s,${keyword}:,,")
     # grab additions
-    add=$(grep -v '^#' "$@" | grep --regexp="^${keyword}+${fcdistro}:" | sed -e "s,${keyword}\+${fcdistro}:,,")
+    add=$(grep -v '^#' "$@" | grep --regexp="^${keyword}+${fcdistro}:" | sed -e "s,${keyword}+${fcdistro}:,,")
     # grab exclusions
-    sub=$(grep -v '^#' "$@" | grep --regexp="^${keyword}\-${fcdistro}:" | sed -e "s,${keyword}\-${fcdistro}:,,")
+    sub=$(grep -v '^#' "$@" | grep --regexp="^${keyword}-${fcdistro}:" | sed -e "s,${keyword}-${fcdistro}:,,")
 
     for i in $all $add; do
        for exclude in $sub; do
@@ -717,3 +727,54 @@ function pl_locateDistroFile () {
        return 0
     fi
 }
+
+# experimental
+function yumgroups_from_pkgs () {
+    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>
+    <default>true</default>
+    <description>$groupdesc</description>
+    <uservisible>false</uservisible>
+    <packagelist>
+__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
+}
+
+