Files
mercury/scripts/mod2init.sh
Fergus Henderson 90f7fa5864 Use files with any file extension in $prefix/lib/mercury/modules,
mod2init.sh:
	Use files with any file extension in $prefix/lib/mercury/modules,
	not just the *.mod files, because I'm changing them to be *.c
	or *.init.
1995-03-15 11:03:43 +00:00

59 lines
1.3 KiB
Bash

#!/bin/sh
# MOD2INIT - Convert *.mod (or *.c) to *_init.c
#
# This script outputs an appropriate init.c, given the .mod (or .c) files.
#
# Usage: mod2init [-w<entry_point>] modules...
#
# Environment variables: MERCURY_MOD_LIB_DIR, MERCURY_MOD_LIB_MODS.
MERCURY_MOD_LIB_DIR=${MERCURY_MOD_LIB_DIR:-@LIBDIR@/modules}
MERCURY_MOD_LIB_MODS=${MERCURY_MOD_LIB_MODS:-@LIBDIR@/modules/*}
defentry=mercury__io__run_0_0
while getopts w: c
do
case $c in
w) defentry="$OPTARG";;
\?) echo "Usage: mod2init -[wentry] modules ..."
exit 1;;
esac
shift `expr $OPTIND - 1`
done
files="$* $MERCURY_MOD_LIB_MODS"
modules="`sed -n '/^BEGIN_MODULE(\(.*\)).*$/s//\1/p' $files`"
echo "/*";
echo "** This code was automatically generated by mod2init.";
echo "** Do not edit.";
echo "**"
echo "** Input files:"
for file in $files; do
echo "** $file"
done
echo "*/";
echo "";
echo '#include <stddef.h>';
echo '#include "init.h"';
echo "";
echo "Declare_entry($defentry);";
echo "#if defined(USE_GCC_NONLOCAL_GOTOS) && !defined(USE_ASM_LABELS)";
echo "Code *default_entry;";
echo "#else";
echo "Code *default_entry = ENTRY($defentry);";
echo "#endif";
echo "";
for mod in $modules; do
echo "extern void $mod(void);";
done
echo "";
echo "void init_modules(void)";
echo "{";
for mod in $modules; do
echo " $mod();";
done
echo "";
echo " default_entry = ENTRY($defentry);";
echo "}";