mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-27 15:24:00 +00:00
bootcheck: Simplify the code. Quite a bit of this file was just to work-around an old bug in `mc --generate-dependencies'.
242 lines
5.4 KiB
Bash
Executable File
242 lines
5.4 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.
|
|
-o <filename>, --output-file <filename>
|
|
Output results to <filename>.
|
|
-m <mmake-args>, --mmake-args <mmake-args>
|
|
Pass <mmake-args> as options to \`mmake'.
|
|
-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=""
|
|
keep_stage_2=false
|
|
keep_stage_3=false
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
|
|
-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\(.*\)' `"; ;;
|
|
|
|
-2|--keep-stage-2)
|
|
keep_stage_2=true ;;
|
|
-3|--keep-stage-3)
|
|
keep_stage_3=true ;;
|
|
|
|
-h|--help)
|
|
echo "$usage"
|
|
exit 0 ;;
|
|
|
|
--)
|
|
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 $root/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/*
|
|
mkdir stage2/compiler
|
|
mkdir stage2/library
|
|
ln -s $root/compiler/*.m stage2/compiler
|
|
ln -s $root/compiler/*.m.in stage2/compiler
|
|
ln -s $root/compiler/Mmake* stage2/compiler
|
|
ln -s $root/library/*.m stage2/library
|
|
# ln -s $root/library/*.m.in stage2/library
|
|
ln -s $root/library/*.nl stage2/library
|
|
ln -s $root/library/Mmake* stage2/library
|
|
ln -s $root/library/library.init stage2/library
|
|
ln -s $root/boehm_gc stage2/boehm_gc
|
|
ln -s $root/doc stage2/doc
|
|
ln -s $root/runtime stage2/runtime
|
|
ln -s $root/scripts stage2/scripts
|
|
ln -s $root/util stage2/util
|
|
ln -s $root/profiler stage2/profiler
|
|
ln -s $root/Mmake* stage2
|
|
ln -s $root/conf* stage2
|
|
|
|
if (cd stage2 ; mmake $mmake_opts depend)
|
|
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
|
|
|
|
if (cd stage2/library ; mmake $mmake_opts $jfactor 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 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/*
|
|
mkdir stage3/compiler
|
|
mkdir stage3/library
|
|
ln -s $root/stage2/compiler/*.m stage3/compiler
|
|
ln -s $root/stage2/compiler/*.m.in stage3/compiler
|
|
ln -s $root/stage2/compiler/Mmake* stage3/compiler
|
|
ln -s $root/stage2/library/*.m stage3/library
|
|
# ln -s $root/stage2/library/*.m.in stage3/library
|
|
ln -s $root/stage2/library/*.nl stage3/library
|
|
ln -s $root/stage2/library/Mmake* stage3/library
|
|
ln -s $root/stage2/library/library.init stage3/library
|
|
ln -s $root/stage2/boehm_gc stage3/boehm_gc
|
|
ln -s $root/stage2/doc stage3/doc
|
|
ln -s $root/stage2/runtime stage3/runtime
|
|
ln -s $root/stage2/scripts stage3/scripts
|
|
ln -s $root/stage2/util stage3/util
|
|
ln -s $root/stage2/profiler stage3/profiler
|
|
ln -s $root/stage2/Mmake* stage3
|
|
ln -s $root/stage2/conf* stage3
|
|
|
|
if (cd stage3 ; mmake $mmake_opts depend)
|
|
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
|