Files
mercury/scripts/c2init.in
Zoltan Somogyi 5ebb612c9c Provide a mechanism that allows the user to specify that a certain
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.
2005-05-09 08:10:22 +00:00

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