Index: scripts/buildalltar.in
===================================================================
--- scripts/buildalltar.in	(revision 302b76df6a2a3ff156d33b1941afcb87b06d8a23)
+++ scripts/buildalltar.in	(revision 08f224b0d041902be56c1ac251c0c37e8881e9ad)
@@ -18,4 +18,5 @@
   echo "    -g                  -- build gcc/newlib"
   echo "    -d                  -- build gdb"
+  echo "    -C HOST             -- build canadian cross for HOST "
   echo "    -t                  -- enable test/debug mode"
   echo "    -cfg <setup.cache>"
@@ -24,8 +25,26 @@
 }
 
+#   
+#  Checks the status returned by executables and exits if it is non-zero.
+#
+check_fatal()
+{
+  if [ $1 -ne 0 ] ; then
+    shift
+    echo "ERROR: $*" >&2
+    exit 1
+  fi
+  #echo
+  #echo "End of $*"
+  #echo -n "Press return to continue> "
+  #echo
+  #read line
+}
+
 testing=no
 do_binutils=no
 do_gccnewlib=no
 do_gdb=no
+cdn_cross=no
 
 while test $# -ge 1; do
@@ -46,4 +65,16 @@
       dst=$1
       shift
+      ;;
+    -C)
+      test $# -ge 2 || usage
+      shift
+      build=$1
+      shift
+      if ! test -x ${RTEMS_DIR}/../config.guess ; then
+        echo "Missing ${RTEMS_DIR}/../config.guess!"
+        exit 1
+      fi
+      CDN_ARGS="--build=`${RTEMS_DIR}/../config.guess` --host=${build}"
+      cdn_cross=yes
       ;;
     -*)
@@ -131,36 +162,52 @@
 test -d log || mkdir log
 
+if [ "X${rpm_build_root}" = "X" ] ; then
+  echo rpm_build_root NOT set!
+  exit 1
+fi
+
+CWD=`pwd`
+test -d tarballs || mkdir tarballs
+
+OUT=${CWD}/tarballs
+
 #  do all the tools
 for target in ${TARGETS}
 do
-  bintarfile=${PWD}/${target}-binutils-${binutils}-${binutils_rpm_release}.tar
+  bintarfile=${OUT}/${target}-binutils-${binutils}-${binutils_rpm_release}.tar
   if [ ${do_binutils} = yes ] ; then
-    # this part is for RPMS
-    logfile=log/${target}-binutils
-    #specfile=${dst}/${target}-binutils-${binutils}.spec
-    #echo "rpm -ba ${specfile} >${logfile} 2>&1"
-    #if [ ${testing} = no ] ; then
-    #  rpm -ba ${specfile} >${logfile} 2>&1
-    #fi
-    #${ECHO} rm -rf ${dst}/../BUILD/${target}-binutils*
-
-
+    logfile=${CWD}/log/${target}-binutils
     # this part is for tar.bz2
-    PWD=`pwd`
-    mkdir b-${target}
-    cd b-${target}
-    ../binutils-${binutils}/configure --target=${target} \
-      --verbose --prefix=/opt/rtems 
-    make all
-    make info
-    make prefix=${rpm_build_root}/opt/rtems install
-    make prefix=${rpm_build_root}/opt/rtems install-info         
+    cd ${CWD}
+    if [ ! -d binutils-${binutils} ] ; then
+      echo Could not find binutils-${binutils}!
+      exit 1
+    fi
+    rm -rf b-${target}-bin
+    mkdir b-${target}-bin
+    cd b-${target}-bin
+    echo "Building binutils-${binutils} for ${target}"
+    ../binutils-${binutils}/configure ${CDN_ARGS} --target=${target} \
+      --verbose --prefix=/opt/rtems   >${logfile} 2>&1
+    check_fatal $? "binutils configure"
+
+    make all >>${logfile} 2>&1
+    check_fatal $? "make all"
+
+    make info >>${logfile} 2>&1
+    check_fatal $? "make info"
+
+    make prefix=${rpm_build_root}/opt/rtems install >>${logfile} 2>&1
+    check_fatal $? "make install"
+
+    make prefix=${rpm_build_root}/opt/rtems install-info >>${logfile} 2>&1
+    check_fatal $? "make install-info"
+
     cd ${buildroot}
-    tar cf ${PWD}/${target}-binutils-${binutils}-${binutils_rpm_release}.tar opt
-    cd ${PWD}
-    bzip2 -9 ${target}-binutils-${binutils}.tar
+    tar cjf ${bintarfile}.bz2 opt
+    cd ${CWD}
+    rm -rf b-${target}-bin
     ${ECHO} rm -rf ${rpm_build_root}/opt
-    rm -rf ${rpm_build_root}/opt/rtems
-    rm -rf b-${target}
+    #rm -rf ${rpm_build_root}/opt
   else
     echo Skipping binutils for ${target}
@@ -172,60 +219,53 @@
 
   if [ ${do_gccnewlib} = yes ] ; then
+    logfile=${CWD}/log/${target}-gccnewlib
     # now build gcc/newlib
-    #    NOTE: This requires having binutils installed and we immediately
-    #          remove it once finished.
-    #base_binutils_rpm=${dst}/../RPMS/${rpm_cpu}/rtems-base-binutils-${binutils}-${binutils_rpm_release}.${rpm_cpu}.rpm
-    #binutils_rpm=${dst}/../RPMS/${rpm_cpu}/${target}-binutils-${binutils}-${binutils_rpm_release}.${rpm_cpu}.rpm
-    #if [ ! -f ${binutils_rpm} ] ; then
-    #  echo There is no RPM for binutils for ${target}.
-    #  echo Looked for ${binutils_rpm}.
-    #fi
-    #${ECHO} rpm -i ${base_binutils_rpm}
-    #${ECHO} rpm -i ${binutils_rpm}
-
-    #logfile=log/${target}-gccnewlib
-    #specfile=${dst}/${target}-gcc-${gcc}-newlib-${newlib}.spec
-    #echo "rpm -ba ${specfile} >${logfile} 2>&1"
-    #if [ ${testing} = no ] ; then
-    #  rpm -ba ${specfile} >${logfile} 2>&1
-    #fi
-    #${ECHO} rm -rf ${dst}/../BUILD/${target}-gcc*
-    #${ECHO} rm -rf ${buildroot}/opt/rtems
-
-    #echo uninstalling binutils for ${target} 
-    #if [ ${testing} = no ] ; then
-    #  rpm -e `rpm -qa | grep rtems`
-    #  rm -rf /opt/rtems/*
-    #fi
- 
     # this part is for tar.bz2
-    PWD=`pwd`
-
-    gcctarfile=${PWD}/${target}-gcc-${gcc}-newlib-${newlib}-${gccnewlib_rpm_release}.tar
-    bintarfile=${dst}/binaries/binutils-${binutils}-${binutils_rpm_release}/${target}-binutils-${binutils}-${binutils_rpm_release}.tar
-    cd /
-    rm -rf /opt/*
-    bzcat ${bintarfile}.bz2 | tar xf -
-
-    cd ${PWD}
-    rm -rf b-${target}
-    mkdir b-${target}
-    cd b-${target}
-    ../gcc-${gcc}/configure --target=${target} \
-      --with-gnu-as --with-gnu-ld --with-newlib --verbose \
-      --enable-threads --prefix=/opt/rtems '--enable-languages=c,c++'
-    make all
-    make info
-    make prefix=${rpm_build_root}/opt/rtems install
-    make prefix=${rpm_build_root}/opt/rtems install-info         
+
+    gcctarfile=${OUT}/${target}-gcc-${gcc}-newlib-${newlib}-${gccnewlib_rpm_release}.tar
+    if [ ${cdn_cross} = "no" ] ; then
+      bintarfile=${dst}/binaries/binutils-${binutils}-${binutils_rpm_release}/${target}-binutils-${binutils}-${binutils_rpm_release}.tar
+      cd /
+      rm -rf /opt/*
+      tar xjf ${bintarfile}.bz2
+    fi
+
+    cd ${CWD}
+    if [ ! -d gcc-${gcc} ] ; then
+      echo Could not find gcc-${gcc}!
+      exit 1
+    fi
+    if [ ! -d gcc-${gcc}/newlib ] ; then
+      echo Could not find gcc-${gcc}/newlib!
+      exit 1
+    fi
+    rm -rf b-${target}-gccnewlib
+    mkdir b-${target}-gccnewlib
+    cd b-${target}-gccnewlib
+    echo "Building gcc-${gcc} for ${target}"
+    ../gcc-${gcc}/configure ${CDN_ARGS} --target=${target} \
+      --with-gnu-as --with-gnu-ld --with-newlib --verbose --enable-threads \
+      --prefix=/opt/rtems '--enable-languages=c,c++' >${logfile} 2>&1
+    check_fatal $? "gcc configure"
+
+    make all >>${logfile} 2>&1
+    check_fatal $? "make all"
+
+    make info >>${logfile} 2>&1
+    check_fatal $? "make info"
+
+    make prefix=${rpm_build_root}/opt/rtems install >>${logfile} 2>&1
+    check_fatal $? "make install"
+
     cd ${target}/newlib
-    make prefix=${rpm_build_root}/opt/rtems install-info         
+    make prefix=${rpm_build_root}/opt/rtems install-info  >>${logfile} 2>&1
+    check_fatal $? "newlib make install-info"
+
     cd ${buildroot}
-    tar cf ${gcctarfile} opt
-    cd ${PWD}
-    bzip2 -9 ${gcctarfile}
+    tar cjf ${gcctarfile}.bz2 opt
+    cd ${CWD}
     rm -rf ${rpm_build_root}/opt
     rm -rf ${rpm_build_root}/opt/rtems
-    rm -rf b-${target}
+    rm -rf b-${target}-gccnewlib
   else
     echo Skipping gcc/newlib for ${target}
@@ -238,18 +278,15 @@
   if [ ${do_gdb} = yes ] ; then
     # now build gdb
-    #logfile=log/${target}-gdb
-    #specfile=${dst}/${target}-gdb-${gdb}.spec
-    #echo "rpm -ba ${specfile} >${logfile} 2>&1"
-    #if [ ${testing} = no ] ; then
-    #  rpm -ba ${specfile} >${logfile} 2>&1
-    #fi
-    #${ECHO} rm -rf ${dst}/../BUILD/${target}-gdb*
-    #${ECHO} rm -rf ${buildroot}/opt/rtems
+    gdbtarfile=${OUT}/${target}-gdb-${gdb}-${gdb_rpm_release}.tar
+    logfile=${CWD}/log/${target}-gdb
 
     # this part is for tar.bz2
     
-    PWD=`pwd`
-    mkdir b-${target}
-    cd b-${target}
+    if [ ! -d gdb-${gdb} ] ; then
+      echo Could not find gdb-${gdb}!
+      exit 1
+    fi
+    mkdir b-${target}-gdb
+    cd b-${target}-gdb
     case ${target} in
       arm* | d10v* | d30v* | erc32* | fr30* | h8300* | h8500* | i960* | \
@@ -267,17 +304,27 @@
         ;;
 esac 
-    ../gdb-${gdb}/configure --target=${target} \
-      ${extra_configure_arguments} --verbose --prefix=/opt/rtems 
-    make all
-    make info
-    make prefix=${rpm_build_root}/opt/rtems install
-    make prefix=${rpm_build_root}/opt/rtems install-info         
+    echo "Building gdb-${gdb}/configure ${CDN_ARGS} --target=${target}"
+    ../gdb-${gdb}/configure ${CDN_ARGS} --target=${target} \
+      ${extra_configure_arguments} --verbose --prefix=/opt/rtems >${logfile} 2>&1
+    check_fatal $? "make info"
+
+    make all >>${logfile} 2>&1
+    check_fatal $? "make all"
+
+    make info >>${logfile} 2>&1
+    check_fatal $? "make info"
+
+    make prefix=${rpm_build_root}/opt/rtems install >>${logfile} 2>&1
+    check_fatal $? "make install"
+
+    make prefix=${rpm_build_root}/opt/rtems install-info >>${logfile} 2>&1
+    check_fatal $? "make install-info"
+
     cd ${buildroot}
-    tar cf ${PWD}/${target}-gdb-${gdb}-${gdb_rpm_release}.tar opt
-    cd ${PWD}
-    bzip2 -9 ${target}-gdb-${gdb}.tar
+    tar cjf ${gdbtarfile}.bz2 opt
+    cd ${CWD}
     ${ECHO} rm -rf ${rpm_build_root}/opt
     rm -rf ${rpm_build_root}/opt/rtems
-    rm -rf b-${target}
+    rm -rf b-${target}-gdb
   else
     echo Skipping gdb for ${target}
