#! /bin/sh 
#         $Id: $
#         %full_filespec: configure~bln_mpt1!0.32.89:shsrc:bln_12xx!6 %

a_unique_file="pfe.spec"
if test ! -r $a_unique_file ; then
 a_prog=$0
 a_topdir=`echo $a_prog|sed 's%/[^/][^/]*$%%'`
 if test -r $a_topdir/$a_unique_file 
 then exec ${CONFIG_SHELL-/bin/sh} $a_topdir/pfe/configure $*
 else 
   echo "could not find pfe toplevel directory"
   exit 1
 fi
fi

use_static=""
use_mode=""
seen_prefix=""
args=""
enable_all="no"

HOST=""

for i in $* ; do
    case $i in
      --enable-all) enable_all="yes" ;;
      --prefix|--prefix=*) seen_prefix="yes" 
	args="$args $i" ;;
      --disable-shared) use_static="-static" 
	args="$args $i" ;;
      --on-darwin) args="$args --with-cflags=--traditional-cpp" ;;
      --use-call-threading) 
	    args="$args --with-call-threading --program-suffix=-call" ;;
      --use-sbr-call-threading) 
	    args="$args --with-sbr-call-threading --program-suffix=-calls --disable-shared" ;;
      --use-sbr-threading|--use-fast-threading) 
	    args="$args --with-sbr-threading --program-suffix=-fast" ;;
      --use-sbr-static|--use-fastest-threading) 
	    args="$args --with-sbr-threading --with-regs=all --with-static-regs --program-suffix=-fastest" ;;
      --enable-maintainer-mode)
	    test -z "$USER" && USER=`id -un 2>/dev/null`
	    test -z "$USER" && USER=`echo $HOME | sed -e 's:.*/::'`
	    test -z "$USER" && USER=`maintainer`
	    use_mode="-$USER" 
	args="$args $i" ;;
      CC=*) CC=`echo $i | sed -e 's/[^=]*=//'` ; args="$args $i" ;;
      --host=*) HOST=`echo $i | sed -e 's/--host=//'` ; args="$args $i" ;;
      HOST=*)   HOST=`echo $i | sed -e 's/[^=]*=//'` 
	                                         args="$args --host=$HOST" ;;
      *) args="$args $i" ;;
    esac
done

# check for the build-directory
HERE=`sh config.guess`
test "_$NULL" = "_" && NULL="/dev/null"

if test "_$HOST" = "_" ; then
    test "_$CC"  != "_" && HOST="$CC"
    test "_$HOST" = "_" && HOST=`sh config.guess`
fi
    
if test -z "$HOST" ; then 
    echo "could not find HOST name :" `uname -m` >&2
    exit 1;
fi
if test -z "$HERE" ; then 
    echo "could not find HERE name :" `uname -m` >&2
    exit 1;
fi

RUN="$HERE-$HOST"
test  "$HERE" = "$HOST" && RUN="$HERE"

configurelist=""
for C in */configure; do
test -f $C && configurelist=`echo $configurelist $C | sed -e 's,/configure,,'`
done

# PREFER=`grep 'PREFER *=' Makefile | sed -e 's: *PREFER *= *::' -e 's: *$::'`
PREFER="pfe|k12-emul|k12-timeserv"
test -z "$PREFER$PREFER1" && PREFER1="pfe"
# it should really scan the configures/makefile.am/makefiles for order hints

sortedlist=""
for q in 1 2 ; do for C in $configurelist ; do
  v="next='false' ; case `echo $C | sed -e 's:.*/::'` in "
  v="$v $PREFER)  test $q = 1 && next='true' ;;"
  v="$v *) test $q = 2 && next='true' ;;"
  v="$v esac ; \$next"
#  echo $v
  if eval "$v" ; then # echo $q : $C
    sortedlist="$sortedlist $C"
  fi
done done
echo sortedlist = $sortedlist

# --- start configure ---
test -d "Release"       || mkdir "Release"
test -d "Debug"         || mkdir "Debug"
echo > Release/$RUN.lst

rr=""
for C in $sortedlist ; do
echo # just an empty line before

if test -z "$use_mode" ; then
  D="$HOST"
  test -d "Release/$D"    || mkdir "Release/$D"
  test -d "Release/$D/$C" || mkdir "Release/$D/$C"
  rr="$rr  Release/$D/$C"  ; echo  "Release/$D/$C"; 
  echo    "Release/$D/$C" >> Release/$RUN.lst
  (cd     "Release/$D/$C" && sh ../../../$C/configure $args $prefixopt)

  if test "$enable_all" = "yes" ; then
  test -d "Release/$D-fig"    || mkdir "Release/$D-fig"
  test -d "Release/$D-fig/$C" || mkdir "Release/$D-fig/$C"
  rr="$rr  Release/$D-fig/$C"  ; echo  "Release/$D-fig/$C"
  echo    "Release/$D-fig/$C" >> Release/$RUN.lst
  (cd     "Release/$D-fig/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-fig=1 --program-suffix=-fig)
  test -d "Release/$D-regs"    || mkdir "Release/$D-regs"
  test -d "Release/$D-regs/$C" || mkdir "Release/$D-regs/$C"
  rr="$rr  Release/$D-regs/$C"  ; echo  "Release/$D-regs/$C"
  echo    "Release/$D-regs/$C" >> Release/$RUN.lst
  (cd     "Release/$D-regs/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-regs=all --program-suffix=-regs)
  test -d "Release/$D-forth"    || mkdir "Release/$D-forth"
  test -d "Release/$D-forth/$C" || mkdir "Release/$D-forth/$C"
  rr="$rr  Release/$D-forth/$C"  ; echo  "Release/$D-forth/$C"
  echo    "Release/$D-forth/$C" >> Release/$RUN.lst
  (cd     "Release/$D-forth/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-regs=all --without-modules --disable-shared --program-suffix=-regs-forth)
  test -d "Release/$D-call"    || mkdir "Release/$D-call"
  test -d "Release/$D-call/$C" || mkdir "Release/$D-call/$C"
  rr="$rr  Release/$D-call/$C"  ; echo  "Release/$D-call/$C"
  echo    "Release/$D-call/$C" >> Release/$RUN.lst
  (cd     "Release/$D-call/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-call-threading --program-suffix=-call)
  test -d "Release/$D-calls"    || mkdir "Release/$D-calls"
  test -d "Release/$D-calls/$C" || mkdir "Release/$D-calls/$C"
  rr="$rr  Release/$D-calls/$C"  ; echo  "Release/$D-calls/$C"
  echo    "Release/$D-calls/$C" >> Release/$RUN.lst
  (cd     "Release/$D-calls/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-sbr-call-threading --program-suffix=-calls --without-modules --disable-shared)
  test -d "Release/$D-fast"    || mkdir "Release/$D-fast"
  test -d "Release/$D-fast/$C" || mkdir "Release/$D-fast/$C"
  rr="$rr  Release/$D-fast/$C"  ; echo  "Release/$D-fast/$C"
  echo    "Release/$D-fast/$C" >> Release/$RUN.lst
  (cd     "Release/$D-fast/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-sbr-threading --program-suffix=-fast)
  fi
else
  D="$HOST$use_mode"

  if test -z "$use_static" ; then
    test -d "Release/$D"    || mkdir "Release/$D"
    test -d "Release/$D/$C" || mkdir "Release/$D/$C"
    rr="$rr  Release/$D/$C"  ; echo  "Release/$D/$C"
    echo    "Release/$D/$C" >> Release/$RUN.lst
    (cd     "Release/$D/$C" && sh ../../../$C/configure $args $prefixopt)
  fi

  test -d "Release/$D-static"    || mkdir "Release/$D-static"
  test -d "Release/$D-static/$C" || mkdir "Release/$D-static/$C"
  rr="$rr  Release/$D-static/$C"  ; echo  "Release/$D-static/$C"
  echo    "Release/$D-static/$C" >> Release/$RUN.lst
  (cd     "Release/$D-static/$C" && sh ../../../$C/configure \
    $args $prefixopt --disable-shared --program-suffix=-static )

  test -d "Release/$D-fig"    || mkdir "Release/$D-fig"
  test -d "Release/$D-fig/$C" || mkdir "Release/$D-fig/$C"
  rr="$rr  Release/$D-fig/$C"  ; echo  "Release/$D-fig/$C"
  echo    "Release/$D-fig/$C" >> Release/$RUN.lst
  (cd     "Release/$D-fig/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-fig=1 --disable-shared --program-suffix=-fig)

  test -d "Release/$D-regs"    || mkdir "Release/$D-regs"
  test -d "Release/$D-regs/$C" || mkdir "Release/$D-regs/$C"
  rr="$rr  Release/$D-regs/$C"  ; echo  "Release/$D-regs/$C"
  echo    "Release/$D-regs/$C" >> Release/$RUN.lst
  (cd     "Release/$D-regs/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-regs=2 --disable-shared --program-suffix=-regs)

  test -d "Release/$D-small" || mkdir "Release/$D-small"
  test -d "Release/$D-small/$C" || mkdir "Release/$D-small/$C"
  rr="$rr  Release/$D-small/$C"  ; echo  "Release/$D-small/$C"
  echo    "Release/$D-small/$C" >> Release/$RUN.lst
  (cd     "Release/$D-small/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-regs=2 --disable-shared --program-suffix=-small \
     --without-float)

  # and the same with Debug

  test -d "Debug/$D-static"    || mkdir "Debug/$D-static"
  test -d "Debug/$D-static/$C" || mkdir "Debug/$D-static/$C"
  rr="$rr  Debug/$D-static/$C"  ; echo  "Debug/$D-static/$C"
  echo    "Debug/$D-static/$C" >> Release/$RUN.lst
  (cd     "Debug/$D-static/$C" && sh ../../../$C/configure \
    $args $prefixopt --disable-shared --program-suffix=-static- )

  test -d "Debug/$D-fig"    || mkdir "Debug/$D-fig"
  test -d "Debug/$D-fig/$C" || mkdir "Debug/$D-fig/$C"
  rr="$rr  Debug/$D-fig/$C"  ; echo  "Debug/$D-fig/$C"
  echo    "Debug/$D-fig/$C" >> Release/$RUN.lst
  (cd     "Debug/$D-fig/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-fig=1 --disable-shared --program-suffix=-fig-)

  test -d "Debug/$D-regs"    || mkdir "Debug/$D-regs"
  test -d "Debug/$D-regs/$C" || mkdir "Debug/$D-regs/$C"
  rr="$rr  Debug/$D-regs/$C"  ; echo  "Debug/$D-regs/$C"
  echo    "Debug/$D-regs/$C" >> Release/$RUN.lst
  (cd     "Debug/$D-regs/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-regs=2 --disable-shared --program-suffix=-regs-)

  test -d "Debug/$D-small"    || mkdir "Debug/$D-small"
  test -d "Debug/$D-small/$C" || mkdir "Debug/$D-small/$C"
  rr="$rr  Debug/$D-small/$C"  ; echo  "Debug/$D-small/$C"
  echo    "Debug/$D-small/$C" >> Release/$RUN.lst
  (cd     "Debug/$D-small/$C" && sh ../../../$C/configure \
    $args $prefixopt --with-regs=2 --disable-shared --program-suffix=-small- \
     --without-float)
fi
done 

rm -f config.date
echo '___ configure`d ___' "HERE=$HERE" "HOST=$HOST"
for i in $rr ; do
  echo $i
  echo $i >config.date
done

# hmmm, $RUN.ls is about the same as the $rr content... change the style?
cp Release/$RUN.lst Release/$HERE.cfg

test ! -z "$rr"
exit
