diff --git a/Documentation/Developers/CHANGELOG-RENE b/Documentation/Developers/CHANGELOG-RENE index 893547b1c..cd8992603 100644 --- a/Documentation/Developers/CHANGELOG-RENE +++ b/Documentation/Developers/CHANGELOG-RENE @@ -12,6 +12,7 @@ - Dimitar Zhekov: fix gcc3 optimisation - Sirkull: dcc update - Alejandro Mery: fix to handle /share and /include when prefix='' + - some work on Emerge-Pkg *) 2003-09-14 (2.0.0-rc1 - 2.0.0-rc2) diff --git a/scripts/Emerge-Pkg b/scripts/Emerge-Pkg index daf5e4bad..a704b268e 100755 --- a/scripts/Emerge-Pkg +++ b/scripts/Emerge-Pkg @@ -48,11 +48,6 @@ help_msg() { echo } -dep4pkg() -{ - grep "$1:" scripts/dep_db.txt | cut -d ' ' -f 4- -} - # # ---- Parse options + config # @@ -93,9 +88,6 @@ check4update() elif [ "$confdir" = X ] ; then [ $debug = 1 ] && \ echo " $package: Package in multiple trees." - elif [ ! "`echo $alllist | grep +${package}+`" ] ; then - [ $debug = 1 ] && \ - echo " $package: Package not in default package list." elif [ ! -f /var/adm/packages/$package ] ; then [ $debug = 1 ] && \ echo " $package: Not installed. Added." @@ -138,12 +130,81 @@ check4update() deplist="$addlist" } -alllist=`./scripts/Create-PkgList $arch | grep ^X | cut -d ' ' -f 5 | \ - sed -e 's/$/+/' -e 's/^/+/'` +dep4pkg() { + gawk -v package=$1 ' +function check_package() { + + found_new = 0; + + for ( package in build_list ) { + if ( debug ) + print "#DEBUG PACKAGE: " package; + + if ( ! package in database ) { + if (debug) + print "# " package " not in database"; + } + else { + if (debug) + print "# " package " in database"; + + split(database[package], a); + + for (d in a) { + # if ( a[c] == package ) continue; + if ( strtonum(d) <= 3 ) continue; + dep = a[d]; + if ( debug && 0) + print "# dep: " dep; + if ( dep in build_list ) { + if ( debug && 0) + print "# dep: " dep " already parsed"; + } + else { + if (debug) + print "# dep: " dep " now added"; + build_list [ dep ] = (package); + found_new = 1; + } + } + } + } + if (found_new) + check_package(); +} + +BEGIN { + config="'$config'"; debug='$debug'; + depdb_file = "scripts/dep_db.txt"; + + while ( (getline depline < depdb_file) > 0 ) + { $0 = depline; sub(/:/, "", $1); database[$1]=$0; } + close(depdb_file); + + build_list [ package ] = 1; + + check_package(); + + if (debug) { + for ( bp in build_list ) { + print "# " bp " (" build_list[bp] ")" + } + } + for ( bp in build_list ) { + print bp + } +} + +' +} if [ $builddep = 1 ] ; then - # we have a complete dependency graph cached ... - deplist="`dep4pkg $1`" + # we have to create a complete dependency graph ... + tmp="`mktemp`" + dep4pkg $1 > $tmp + [ "$debug" = 1 ] && grep '^#' $tmp + deplist="`grep -v '^#' $tmp`" + rm $tmp check4update else deplist=$1 @@ -157,7 +218,11 @@ echo "Packages scheduled to build: $deplist" [ $update = 1 ] && options="$options -update" for package in $deplist ; do - ./scripts/Download -package $package - ./scripts/Build-Pkg $options $package + if ./scripts/Download -package $package ; then + ./scripts/Build-Pkg $options $package + else + echo "The download for package $package failed!" + exit -1 + fi done