#!/bin/sh

# The tmpfile is for pathconfig editing (see below).
tmpfile=pathconfig.tmp.$$

trap 'rm -f $tmpfile; exit 1' 1 2 3 15

this=$0
here=`pwd`
cd ../..
twoup=`pwd`
cd $here

#
# Parse command line
#
SIZE_OPT="-32"
CLEAN=false
STEM=sml
# Process command-line arguments
#
while [ "$#" != "0" ] ; do
    arg=$1; shift
    case $arg in
    -32) SIZE_OPT=$arg ;;
    -64) SIZE_OPT=$arg ;;
    -clean)
	CLEAN=true
	;;
    *)
# TODO: check for excess arguments
	STEM=$arg
	;;
    esac
done

MAIN_HEAP_DIR=$twoup/bin/.heap
MAIN_LIB_DIR=$twoup/lib
MAIN_CONFIG_DIR=$twoup/config

# A function to move all stable library files to a parallel directory
# hierarchy.
# The first argument must be a simple path (no / inside), and
# the second argument must be an absolute path.
move() {
    if [ -d $1 ] ; then
	if [ ! -d $2 ] ; then
	    if [ -f $2 ] ; then
		echo $this: $2 exists as a non-directory.
		exit 1
	    fi
	    mkdir $2
	fi
	cd $1
	for i in * .[a-zA-Z0-9]* ; do
	    move $i $2/$i
	done
	cd ..
    elif [ -f $1 ] ; then
	rm -f $2
	mv $1 $2
    fi
}

if [ -f $twoup/bin/.arch-n-opsys ]; then
  ARCH_N_OPSYS=`$twoup/bin/.arch-n-opsys $SIZE_OPT`
  if [ "$?" = "0" ]; then
    eval $ARCH_N_OPSYS
  else
    echo "$this: Cannot determine architecture/os."
    exit 1
  fi
fi

HEAP_FILE=$STEM.$HEAP_SUFFIX
LIB_DIR=$STEM.lib

if [ ! -f $HEAP_FILE ] ; then
    echo "$this: The heap file $HEAP_FILE is missing."
    exit 1
fi

if [ ! -d $LIB_DIR ] ; then
    echo "$this: The library directory $LIB_DIR is missing."
    exit 1
fi

if $CLEAN ; then
    echo "cleaning $MAIN_LIB_DIR and $MAIN_HEAP_DIR"
    rm -rf $MAIN_LIB_DIR/* $MAIN_HEAP_DIR/*
fi

#
# create heap and lib directories, if necessary
#
if test ! -d $MAIN_HEAP_DIR ; then
  mkdir -p $MAIN_HEAP_DIR
fi
if test ! -d $MAIN_LIB_DIR ; then
  mkdir -p $MAIN_LIB_DIR
fi

# Moving the heap image to its place
mv $HEAP_FILE $MAIN_HEAP_DIR/sml.$HEAP_SUFFIX

# Moving each individual library...
cd $LIB_DIR
for anchor in * ; do
    if [ -d $anchor ] ; then
	move $anchor $MAIN_LIB_DIR/$anchor
    fi
done
cd ..

# Update the pathconfig file in $MAIN_LIB_DIR
#  The awk script below replaces the original binding in $pcfile
#  with its fresh counterpart should there be one.  Other bindings
#  are retained and brand new ones are added.
pcfile=$MAIN_LIB_DIR/pathconfig
if [ -f $pcfile ] ; then
    cp $pcfile $tmpfile
fi
rm -f $pcfile
cat $LIB_DIR/pathconfig >>$tmpfile
if [ -f $MAIN_CONFIG_DIR/extrapathconfig ] ; then
    cat $MAIN_CONFIG_DIR/extrapathconfig >>$tmpfile
fi
awk <$tmpfile 'NF == 2 { mapping[$1] = $2 }
NF != 2 { print $0 }
END { for (i in mapping) print i, mapping[i] }' \
 | sort >$pcfile

rm -r $LIB_DIR
rm -f $tmpfile
