mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 01:13:30 +00:00
246 lines
7.7 KiB
Bash
246 lines
7.7 KiB
Bash
#! /bin/sh
|
|
# @configure_input@
|
|
#---------------------------------------------------------------------------#
|
|
# Copyright (C) 2003, 2005, 2008, 2010 The University of Melbourne.
|
|
# Copyright (C) 2020, 2022, 2023, 2025 The Mercury team.
|
|
# 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:
|
|
--rebase
|
|
Use this option after moving a Mercury installation to
|
|
regenerate the scripts and configuration files so that
|
|
the Mercury installation will work from the new location.
|
|
|
|
--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_HELP@
|
|
"
|
|
#---------------------------------------------------------------------------#
|
|
|
|
default_grade=${MERCURY_DEFAULT_GRADE-@DEFAULT_GRADE@}
|
|
libgrades="@LIBGRADES@"
|
|
input_prefix=@prefix@
|
|
output_prefix=@CONFIG_PREFIX@
|
|
exe_ext=@EXT_FOR_EXE@
|
|
unset MERCURY_STDLIB_DIR
|
|
unset MERCURY_CONFIG_DIR
|
|
recursive=no
|
|
|
|
orig_arity=$#
|
|
|
|
while true
|
|
do
|
|
case "$1" in
|
|
--rebase)
|
|
input_prefix=$(readlink -f $0)
|
|
input_prefix=${input_prefix%/bin/mercury_config}
|
|
output_prefix=${input_prefix}
|
|
;;
|
|
|
|
# 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"
|
|
|
|
if test "${orig_arity}" -eq 0 && ! test -d "${input_prefix}"
|
|
then
|
|
echo "Input directory \`${input_prefix}' not found."
|
|
echo "Did you mean \`$0 --rebase'?"
|
|
exit 1
|
|
fi
|
|
|
|
# mercury_config regenerates itself, so we can't just execute it in place.
|
|
case "${recursive}" in
|
|
no)
|
|
if test -d "${TMPDIR}"
|
|
then
|
|
:
|
|
elif test -d /tmp
|
|
then
|
|
TMPDIR="/tmp"
|
|
else
|
|
TMPDIR="."
|
|
fi
|
|
TMPDIR=${TMPDIR}/mercury_config.$$
|
|
trap 'rm -rf ${TMPDIR}; exit 1' 1 2 3 13 15
|
|
test -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
|
|
touch ${TMPDIR}/runtime/mercury_dotnet.cs.in || exit 1
|
|
mkdir ${TMPDIR}/java || exit 1
|
|
mkdir ${TMPDIR}/java/runtime || exit 1
|
|
touch ${TMPDIR}/java/runtime/Constants.java.in || exit 1
|
|
mkdir ${TMPDIR}/compiler || exit 1
|
|
touch ${TMPDIR}/compiler/COMP_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/grade_lib || exit 1
|
|
touch ${TMPDIR}/grade_lib/GRADE_LIB_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/library || exit 1
|
|
touch ${TMPDIR}/library/LIB_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/mdbcomp || exit 1
|
|
touch ${TMPDIR}/mdbcomp/MDBCOMP_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/browser || exit 1
|
|
touch ${TMPDIR}/browser/MDB_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/slice || exit 1
|
|
touch ${TMPDIR}/slice/SLICE_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/ssdb || exit 1
|
|
touch ${TMPDIR}/ssdb/SSDB_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/profiler || exit 1
|
|
touch ${TMPDIR}/profiler/PROF_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/deep_profiler || exit 1
|
|
touch ${TMPDIR}/deep_profiler/DEEP_FLAGS.in || exit 1
|
|
mkdir ${TMPDIR}/tests || exit 1
|
|
touch ${TMPDIR}/tests/TESTS_FLAGS.in || exit 1
|
|
touch ${TMPDIR}/tests/DEFNS_FOR_TESTS.in || exit 1
|
|
mkdir ${TMPDIR}/mfilterjavac || exit 1
|
|
touch ${TMPDIR}/mfilterjavac/MFILTERJAVAC_FLAGS.in || exit 1
|
|
|
|
enable_libgrades=`echo ${libgrades} | sed 's/ /,/g'`
|
|
|
|
cd ${TMPDIR}
|
|
case "$#" in
|
|
0)
|
|
./configure @RECONFIGURE_ARGS@ \
|
|
--with-default-grade="${default_grade}" \
|
|
--enable-libgrades="${enable_libgrades}" \
|
|
--cache-file=/dev/null \
|
|
--prefix="${input_prefix}" \
|
|
--enable-reconfigure="${output_prefix}" || exit 1
|
|
;;
|
|
*)
|
|
./configure @RECONFIGURE_ARGS@ "$@" \
|
|
--with-default-grade="${default_grade}" \
|
|
--enable-libgrades="${enable_libgrades}" \
|
|
--cache-file=/dev/null \
|
|
--prefix="${input_prefix}" \
|
|
--enable-reconfigure="${output_prefix}" || exit 1
|
|
;;
|
|
esac
|
|
|
|
test -d ${output_libdir}/conf || mkdir -p ${output_libdir}/conf || exit 1
|
|
test -d ${output_libdir}/mmake || mkdir -p ${output_libdir}/mmake || exit 1
|
|
test -d ${output_libdir}/mdb || mkdir -p ${output_libdir}/mdb || exit 1
|
|
test -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 test "${input_prefix}" != "${output_prefix}"
|
|
then
|
|
cp ${input_prefix}/bin/mdemangle${exe_ext} \
|
|
${input_prefix}/bin/mfiltercc${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*|*.sh-subr)
|
|
;;
|
|
mdbrc)
|
|
cp ${file} ${output_libdir}/mdb || exit 1
|
|
;;
|
|
*)
|
|
cp ${file} ${output_prefix}/bin || exit 1
|
|
chmod u+wx ${output_prefix}/bin/${file} || exit 1
|
|
;;
|
|
esac
|
|
done
|
|
rm -rf ${TMPDIR}
|