mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-15 22:03:26 +00:00
Estimated hours taken: 2 Branches: main util/mkinit.c: Provide a mechanism that allows the user to specify that a certain function should always be executed on Mercury startup. This is intended to be used to initialize global variables that point to Mercury data. This is useful e.g. in constraint solvers, because it removes the need for the solver to check, on every access to its state, whether it has been initialized yet. scripts/parse_ml_options-sh-subr.in: scripts/c2init.in: Pass along the required option to mkinit. scripts/Mmakefile: Provide a mechanism to automatically rebuild c2init and other configured files when ../config.status changes.
116 lines
3.2 KiB
Bash
Executable File
116 lines
3.2 KiB
Bash
Executable File
#! /bin/sh
|
|
# @configure_input@
|
|
#---------------------------------------------------------------------------#
|
|
# Copyright (C) 1995-2005 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.
|
|
#---------------------------------------------------------------------------#
|
|
|
|
# C2INIT - Convert *.c to *_init.c
|
|
#
|
|
# This script outputs an appropriate init.c, given the .c files.
|
|
# Type `c2init --help' for usage message.
|
|
#
|
|
# *************************************************************************
|
|
# *** IMPORTANT NOTE: any changes to this file may also require similar ***
|
|
# *** changes to compiler/compile_target_code.m ***
|
|
# *************************************************************************
|
|
|
|
Usage="\
|
|
Name: c2init - Create Mercury initialization file.
|
|
Usage: c2init [options] *.c *.init ..."
|
|
|
|
FULLARCH=@FULLARCH@
|
|
DEFAULT_GRADE=${MERCURY_DEFAULT_GRADE=@DEFAULT_GRADE@}
|
|
|
|
# include the file `parse_ml_options.sh-subr', which in turn includes
|
|
# the sh-subr files dealing with grades
|
|
@PARSE_ML_OPTIONS@
|
|
|
|
# include the file `canonical_grade.sh-subr'
|
|
@CANONICAL_GRADE@
|
|
|
|
# If you change one of these, or if you add a new one, you will also need
|
|
# to check the following files to see if corresponding changes are needed
|
|
# there as well:
|
|
#
|
|
# Mmake.workspace
|
|
# Mmakefile
|
|
# compiler/compile_target_code.m
|
|
# scripts/c2init.in
|
|
# scripts/ml.in
|
|
# scripts/Mercury.config.in
|
|
# scripts/Mercury.config.bootstrap.in
|
|
# tools/bootcheck,
|
|
# tools/binary
|
|
# tools/binary_step
|
|
# tools/linear
|
|
# tools/lmc
|
|
# tools/lml
|
|
|
|
RT_LIB_NAME=mer_rt
|
|
STD_LIB_NAME=mer_std
|
|
TRACE_LIB_NAME=mer_trace
|
|
BROWSER_LIB_NAME=mer_browser
|
|
MDBCOMP_LIB_NAME=mer_mdbcomp
|
|
ANALYSIS_LIB_NAME=mer_analysis
|
|
|
|
MKINIT=${MERCURY_MKINIT=mkinit}
|
|
|
|
case $debug in true)
|
|
trace_opt="-t" ;;
|
|
esac
|
|
|
|
case $debug in true)
|
|
init_opt="-i" ;;
|
|
esac
|
|
|
|
case $profile_deep in true)
|
|
init_opt="-i" ;;
|
|
esac
|
|
|
|
if test "$experimental_complexity" != ""
|
|
then
|
|
experimental_complexity_opt="-X $experimental_complexity"
|
|
else
|
|
experimental_complexity_opt=""
|
|
fi
|
|
|
|
if test "$mercury_stdlib_dir" != ""
|
|
then
|
|
MERCURY_MOD_LIB_MODS="$mercury_stdlib_dir/modules/$RT_LIB_NAME.init \
|
|
$mercury_stdlib_dir/modules/$STD_LIB_NAME.init"
|
|
MERCURY_TRACE_LIB_MODS="\
|
|
$mercury_stdlib_dir/modules/$BROWSER_LIB_NAME.init \
|
|
$mercury_stdlib_dir/modules/$MDBCOMP_LIB_NAME.init"
|
|
fi
|
|
MERCURY_TRACE_LIB_MODS="$MERCURY_TRACE_LIB_MODS $trace_init_files"
|
|
|
|
case "$trace_opt" in
|
|
-t)
|
|
init_opt="-i"
|
|
MERCURY_ALL_LIB_MODS="$MERCURY_MOD_LIB_MODS\
|
|
$MERCURY_TRACE_LIB_MODS"
|
|
;;
|
|
*)
|
|
MERCURY_ALL_LIB_MODS="$MERCURY_MOD_LIB_MODS"
|
|
;;
|
|
esac
|
|
|
|
case $# in
|
|
0) exec $MKINIT $aditi_opt -c"$maxcalls" $init_opt $trace_opt \
|
|
$library_opt $defentry_opt $extra_inits_opt \
|
|
-g "$GRADE" -o "$init_c_file" $experimental_complexity_opt \
|
|
$extra_init_dirs $always_exec_init_opts \
|
|
$EXTRA_INIT_FILES $TRACE_INIT_FILES $MERCURY_ALL_LIB_MODS
|
|
;;
|
|
*) exec $MKINIT $aditi_opt -c"$maxcalls" $init_opt $trace_opt \
|
|
$library_opt $defentry_opt $extra_inits_opt \
|
|
-g "$GRADE" -o "$init_c_file" $experimental_complexity_opt \
|
|
-r "$runtime_flags" \
|
|
$extra_init_dirs $always_exec_init_opts \
|
|
"$@" \
|
|
$EXTRA_INIT_FILES $TRACE_INIT_FILES $MERCURY_ALL_LIB_MODS
|
|
;;
|
|
esac
|