#! /bin/sh
# scripts/mercury_config.  Generated from mercury_config.in by configure.
#---------------------------------------------------------------------------#
# Copyright (C) 2003 The University of Melbourne.
# This file may only be copied under the terms of the GNU General
# Public License - see the file COPYING in the Mercury distribution.
#---------------------------------------------------------------------------#
#
# IMPORTANT: the manpage is produced automatically from this help
# message, so if you change the help message, don't forget to check
# that the manpage still looks OK.
                
Help="\
Name:   mercury_config - generate new configurations for a Mercury installation
Usage:  mercury_config [<options>] [-- <configure options>]
Options:
	--output-prefix <dir>
		Generate the new copies of the Mercury scripts and
		configuration files into the given directory.
		By default mercury_config overwrites the configuration in
		the installation hierarchy containing the mercury_config
		script.

Description:
	Generates an alternative configuration for a Mercury
	installation, for example to use a different C compiler.

	The <configure options> must result in a configuration
	which is compatible with the configuration used to build
	the installed libraries, or else linking using the new
	configuration will fail.  For example, both configurations
	must agree on the use of boxed or unboxed floats.

	To use the new configuration, put \`<dir>/bin' at the
	beginning of your PATH.

Environment variables:
        MERCURY_DEFAULT_GRADE.

Configure options:

\`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print \`checking...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for \`--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or \`..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
			  [/usr/local/mercury-rotd-2004-05-11]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
			  [PREFIX]

By default, \`make install' will install all the files in
\`/usr/local/mercury-rotd-2004-05-11/bin', \`/usr/local/mercury-rotd-2004-05-11/lib' etc.  You can specify
an installation prefix other than \`/usr/local/mercury-rotd-2004-05-11' using \`--prefix',
for instance \`--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR           user executables [EPREFIX/bin]
  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  --libexecdir=DIR       program executables [EPREFIX/libexec]
  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  --libdir=DIR           object code libraries [EPREFIX/lib]
  --includedir=DIR       C header files [PREFIX/include]
  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  --infodir=DIR          info documentation [PREFIX/info]
  --mandir=DIR           man documentation [PREFIX/man]

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]

  --enable-gcc-back-end   enable the Mercury compiler's GCC back-end interface
  --disable-aditi-back-end
                          disable the Mercury compiler's Aditi back-end
  --enable-deep-profiler=<directory>
                          install deep profiler CGI script in <directory>
  --enable-inefficient-grades
                          install inefficient versions of the library
  --disable-most-grades   install only the essential versions of the library
  --enable-nogc-grades   install no-gc versions of the library
  --enable-agc-grades   install accurate GC versions of the library
  --disable-prof-grades   do not install profiling versions of the library
  --disable-trail-grades  do not install trailing versions of the library
  --disable-par-grades    do not install thread-safe versions of the library
  --enable-mm-grades      install minimal model versions of the library
  --enable-hlc-prof-grades
                          install profiling versions of the high level C grade
  --disable-dotnet-grades do not install the .NET grades
  --disable-java-grade    do not install the Java grade
  --enable-libgrades=...
                          install exactly the given versions of the library.
			  The versions are specified using a comma-separated
			  list.

  --disable-extern-debug  disable the external (separate process) debugger
  --disable-dynamic-link  disable the use of dynamic linking
  --enable-new-mercuryfile-struct
                          enable new MercuryFile struct.

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-cc=<program>     Specify which C compiler to use.
  --with-msvcrt
                          use the MS Visual C runtime if using MS C compiler.
  --without-readline      Don't use the GPL'd GNU readline library

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
              headers in a nonstandard directory <include dir>
  CPP         C preprocessor

Use these variables to override the choices made by \`configure' or to help
it to find libraries and programs with nonstandard names/locations.

"
#---------------------------------------------------------------------------#

input_prefix=/usr
output_prefix=/usr
exe_ext=
unset MERCURY_STDLIB_DIR
unset MERCURY_CONFIG_DIR
recursive=no

while : ; do
	case $1 in 
		# This option is only for use by
		# bindist/bindist.INSTALL.in
		--input-prefix=*)
			input_prefix=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
			;;
		--input-prefix)
			input_prefix="$2"
			shift
			;;

		--output-prefix=*)
			output_prefix=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
			;;
		--output-prefix)
			output_prefix="$2"
			shift
			;;

		--recursive)
			recursive=yes
			;;

		-h|--help|"-?")
			echo "$Help"
			exit 0
			;;

		--)
			shift
			break
			;;

		*)
			break
			;;
	esac
	shift
done

input_libdir="$input_prefix/lib/mercury"
output_libdir="$output_prefix/lib/mercury"

# mercury_config regenerates itself, so we can't just execute it in place.
case $recursive in
    no)
	if [ -d "$TMPDIR" ]; then
		:
	elif [ -d /tmp ]; then
		TMPDIR="/tmp"
	else
		TMPDIR="."
	fi
	TMPDIR=$TMPDIR/mercury_config.$$
	trap 'rm -rf $TMPDIR; exit 1' 1 2 3 13 15 
	[ -d $TMPDIR ] || mkdir -p $TMPDIR || \
		{ echo mercury_config: invalid TMPDIR: $TMPDIR; exit 1; }
	export TMPDIR

	cp $input_prefix/bin/mercury_config $TMPDIR
	case $# in
	0)
		exec $TMPDIR/mercury_config --recursive \
			--input-prefix "$input_prefix" \
			--output-prefix "$output_prefix" ;;
	*)
		exec $TMPDIR/mercury_config --recursive \
			--input-prefix "$input_prefix" \
			--output-prefix "$output_prefix" "$@" ;;
	esac
esac

cp -r $input_libdir/reconf/* $TMPDIR || exit 1
mkdir $TMPDIR/bindist || exit 1

# The configure script tries to process these files, but they won't be used.
touch $TMPDIR/scripts/Mercury.config.bootstrap.in || exit 1
touch $TMPDIR/Mmake.common.in $TMPDIR/bindist/bindist.INSTALL.in || exit 1
touch $TMPDIR/bindist/bindist.Makefile.in || exit 1
mkdir $TMPDIR/tools || exit 1
touch $TMPDIR/tools/lmc.in || exit 1
touch $TMPDIR/tools/dotime.in || exit 1

cd $TMPDIR
case $# in
	0)
		./configure  --enable-libgrades=hlc.gc,asm_fast.gc,asm_fast.gc.prof,asm_fast.gc.memprof,asm_fast.gc.tr,asm_fast.gc.tr.debug,asm_fast.gc.prof.tr \
			--cache-file=/dev/null \
			--prefix="$input_prefix" \
			--enable-reconfigure="$output_prefix" || exit 1
		;;
	*)
		./configure  --enable-libgrades=hlc.gc,asm_fast.gc,asm_fast.gc.prof,asm_fast.gc.memprof,asm_fast.gc.tr,asm_fast.gc.tr.debug,asm_fast.gc.prof.tr "$@" \
			--cache-file=/dev/null \
			--prefix="$input_prefix" \
			--enable-reconfigure="$output_prefix" || exit 1
		;;
esac

[ -d $output_libdir/conf ] || mkdir -p $output_libdir/conf || exit 1
[ -d $output_libdir/mmake ] || mkdir -p $output_libdir/mmake || exit 1
[ -d $output_prefix/bin ] || mkdir -p $output_prefix/bin || exit 1

#
# Copy the new configuration into place.
#
cp runtime/mercury_conf.h $output_libdir/conf || exit 1
cp scripts/Mercury.config $output_libdir/conf || exit 1
cp scripts/Mmake.vars $output_libdir/mmake || exit 1
if [ "$input_prefix" != "$output_prefix" ]; then
	cp $input_prefix/bin/mdemangle${exe_ext} \
		$input_prefix/bin/mkinit${exe_ext} \
		$input_prefix/bin/info_to_mdb${exe_ext} $output_prefix/bin
	cp $input_libdir/mmake/Mmake.rules $output_libdir/mmake
fi
cd scripts
echo *
for file in *; do
	case "$file" in
		*.in|Mmake.*|Mercury.config|mdbrc|*.sh-subr) ;;
		*)
			cp $file $output_prefix/bin || exit 1
			chmod u+w $output_prefix/bin/$file || exit 1
			;;
	esac
done
rm -rf $TMPDIR
