Files
mercury/tools/bootcheck
Zoltan Somogyi b221d25b52 <overview or general description of changes>
Estimated hours taken: 1

<overview or general description of changes>

<directory>/<file>:
	<detailed description of changes>
1996-05-13 05:10:23 +00:00

299 lines
5.8 KiB
Bash
Executable File

#!/bin/sh
usage="\
Usage: $0 [options]
Options:
-h, --help
Display this usage message.
-j <num-jobs>, --jobs <num-jobs>
Run using <num-jobs> different parallel processes.
-m <mmake-args>, --mmake-args <mmake-args>
Pass <mmake-args> as options to \`mmake'.
-o <filename>, --output-file <filename>
Output results to <filename>.
-r, --copy-runtime
Copy the runtime directory instead of linking it.
-2, --keep-stage-2
Don't rebuild the stage 2 directory from scratch after
building stage 1. Instead use the existing stage 2 directory.
-3, --keep-stage-3
Don't rebuild the stage 3 directory from scratch after
building stage 1. Instead use the existing stage 3 directory.
"
jfactor=""
mmake_opts="-k"
outfile=""
copy_runtime=false
keep_stage_2=false
keep_stage_3=false
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
echo "$usage"
exit 0 ;;
-j|--jobs)
jfactor="-j$2"; shift ;;
-j*)
jfactor="-j` expr $1 : '-j\(.*\)' `" ;;
--jobs*)
jfactor="--jobs` expr $1 : '--jobs\(.*\)' `" ;;
-m|--mmake)
mmake_opts="$mmake_opts $2"; shift ;;
-o|--output-file)
outfile="$2"; shift ;;
-o*)
outfile="` expr $1 : '-o\(.*\)' `"; ;;
-r|--copy-runtime)
copy_runtime=true ;;
-2|--keep-stage-2)
keep_stage_2=true ;;
-3|--keep-stage-3)
keep_stage_3=true ;;
--)
shift; break ;;
-*)
echo "$0: unknown option \`$1'" 1>&2
echo "$usage" 1>&2
exit 1 ;;
*)
break ;;
esac
shift
done
if [ $# -ne 0 ]; then
echo "$0: unexpected argument(s) \`$*'" 1>&2
echo "$usage" 1>&2
exit 1
fi
echo "starting at `date`"
set -x
if mmake $mmake_opts MMAKEFLAGS=$jfactor all
then
echo "building of stage 1 successful"
else
echo "building of stage 1 not successful"
exit 1
fi
root=`/bin/pwd`
# the stage 1 compiler is copied to allow it to be worked on
# in parallel with the bootcheck itself.
[ -d stage1 ] || mkdir stage1
cp compiler/mercury_compile stage1
MERCURY_COMPILER=$root/stage1/mercury_compile
export MERCURY_COMPILER
MERCURY_INT_DIR=$root/stage2/library
export MERCURY_INT_DIR
# .pp files are not necessary
[ -d stage2 ] || mkdir stage2
$keep_stage_2 || /bin/rm -fr stage2/*
set +x
echo linking stage 2... 1>&2
cd stage2
mkdir compiler
cd compiler
ln -s ../../compiler/*.m .
cp ../../compiler/Mmake* .
cd ..
mkdir library
cd library
ln -s ../../library/*.m .
ln -s ../../library/*.nl .
cp ../../library/Mmake* .
ln -s ../../library/library.init .
cd ..
if test "$copy_runtime" = "true"
then
mkdir runtime
cd runtime
ln -s ../../runtime/*.h .
ln -s ../../runtime/*.c .
ln -s ../../runtime/*.mod .
ln -s ../../runtime/*.in .
cp ../../runtime/Mmake* .
ln -s ../../runtime/machdeps .
cd ..
else
ln -s ../runtime .
fi
ln -s ../boehm_gc .
ln -s ../doc .
ln -s ../scripts .
ln -s ../util .
ln -s ../profiler .
ln -s ../conf* .
rm -f config*.log
cp ../Mmake* .
if test -f ../Mmake.stage.params
then
/bin/rm -f Mmake.params
cp ../Mmake.stage.params Mmake.params
fi
cd ..
set -x
if (cd stage2 ; mmake $mmake_opts $jfactor runtime)
then
echo "building of stage 2 runtime successful"
else
echo "building of stage 2 runtime not successful"
exit 1
fi
if (cd stage2 ; mmake $mmake_opts depend_library depend_compiler)
then
echo "building of stage 2 dependencies successful"
else
echo "building of stage 2 dependencies not successful"
exit 1
fi
MMAKE_VPATH=.
export MMAKE_VPATH
MMAKE_DIR=../scripts
export MMAKE_DIR
# the `RM_C=:' ensures that the `.c' files do not get deleted
if (cd stage2/library ; mmake $mmake_opts $jfactor RM_C=: libmercury)
then
echo "building of stage 2 library successful"
else
echo "building of stage 2 library not successful"
exit 1
fi
if (cd stage2/compiler ; mmake $mmake_opts $jfactor RM_C=: mercury_compile)
then
echo "building of stage 2 compiler successful"
else
echo "building of stage 2 compiler not successful"
exit 1
fi
unset MMAKE_VPATH
unset MMAKE_DIR
if (cd stage2 ; mmake $mmake_opts $jfactor all)
then
echo "building of stage 2 successful"
else
echo "building of stage 2 not successful"
exit 1
fi
MERCURY_COMPILER=$root/stage2/compiler/mercury_compile
export MERCURY_COMPILER
MERCURY_INT_DIR=$root/stage3/library
export MERCURY_INT_DIR
# .pp files are not necessary
[ -d stage3 ] || mkdir stage3
$keep_stage_3 || /bin/rm -fr stage3/*
echo linking stage 3... 1>&2
set +x
cd stage3
mkdir compiler
cd compiler
ln -s ../../compiler/*.m .
cp ../../compiler/Mmake* .
cd ..
mkdir library
cd library
ln -s ../../library/*.m .
ln -s ../../library/*.nl .
cp ../../library/Mmake* .
ln -s ../../library/library.init .
cd ..
ln -s ../boehm_gc .
ln -s ../doc .
ln -s ../runtime .
ln -s ../scripts .
ln -s ../util .
ln -s ../profiler .
ln -s ../conf* .
rm -f config*.log
cp ../Mmake* .
if test -f ../Mmake.stage.params
then
/bin/rm -f Mmake.params
ln -s ../Mmake.stage.params Mmake.params
fi
cd ..
set -x
if (cd stage3 ; mmake $mmake_opts depend_library depend_compiler)
then
echo "building of stage 3 dependencies successful"
else
echo "building of stage 3 dependencies not successful"
exit 1
fi
MMAKE_VPATH=.
export MMAKE_VPATH
MMAKE_DIR=../scripts
export MMAKE_DIR
if (cd stage3/library ; mmake $mmake_opts $jfactor cs)
then
echo "building of stage 3 library successful"
else
echo "building of stage 3 library not successful"
exit 1
fi
if (cd stage3/compiler ; mmake $mmake_opts $jfactor cs)
then
echo "building of stage 3 compiler successful"
else
echo "building of stage 3 compiler not successful"
exit 1
fi
exit_status=0
exec 3>&1 # save stdout in fd 3
if [ -n "$outfile" ]
then
exec > "$outfile" # redirect stdout to $outfile
fi
for dir in library compiler; do
for file in stage2/$dir/*.c; do
diff -u $file stage3/$dir/`basename $file` ||
exit_status=1
done
done
exec >&3 # restore stdout from fd 3
if [ $exit_status -ne 0 ]; then
echo "error - stage 2 and stage 3 differ!"
else
echo "stage 2 and stage 3 compare ok"
fi
echo "finishing at `date`"
exit $exit_status