[m-rev.] for review: lmc.in

Zoltan Somogyi zs at cs.mu.OZ.AU
Wed Apr 16 18:55:47 AEST 2003


Make lmc work on aral, and make it more flexible.

tools/lmc:
tools/lmc.in:
	Remove lmc from the CVS repository, and make it automatically from lmc.in.
	The conversion process fills in the autoconfigured libraries we need to
	link debuggable executables with.

	Allow the environment to override the value of MERCURY_COMPILER,
	for use in e.g. Fergus's mymc.st12 script.

tools/configure.in:
	Make configure do the initial conversion.

tools/Mmakefile:
	Add an Mmakefile to call ../config.status to convert lmc.in to lmc,
	for use when lmc.in is changed after configure has been run. (Rerunning
	configure would also work, but would be slower.)

The interesting diff is the one between the old lmc and the new lmc.in,
which comes first in what follows. The full diff is after that.

Zoltan.

--- /mnt/muruke/home/staff/zs/mer/ws62/tools/lmc	2003-04-03 08:58:31.000000000 +1000
+++ tools/lmc.in	2003-04-16 18:33:56.000000000 +1000
@@ -1,23 +1,32 @@
 #!/bin/sh
 #---------------------------------------------------------------------------#
-# Copyright (C) 2001 The University of Melbourne.
+# Copyright (C) 2001,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.
 #---------------------------------------------------------------------------#
 #
 # This shell script allows you to execute a version of the Mercury compiler
-# that you have built in a workspace. Everything that the compilation process
-# needs will come from that workspace: the libraries for the runtime system,
-# the trace system, the Mercury standard library, the Boehm collector, etc.
-# You specify the directory containing the workspace by setting the value of
-# the WORKSPACE environment variable. This can be done by setting up a small
-# shell script for each workspace you have:
+# that you have built in a workspace. By default, everything that the
+# compilation # process needs will come from that workspace: the libraries
+# for the runtime system, the trace system, the Mercury standard library,
+# the Boehm collector, etc. You specify the directory containing the workspace
+# by setting the value of the WORKSPACE environment variable. This can be done
+# by setting up a small shell script for each workspace you have:
 #
 # #!/bin/sh
 # WORKSPACE=$HOME/mer/ws1
 # export WORKSPACE
 # exec $WORKSPACE/tools/lmc "$@"
 #
+# You can specify that the compiler executable itself should come from
+# somewhere else than $WORKSPACE/compiler/mercury_compile by putting the
+# pathname of the desired compiler into the environment variable
+# MERCURY_COMPILER_OVERRIDE. For example, if the stage2 compiler is buggy,
+# but you want to link test programs with stage2 libraries, you can set
+# WORKSPACE to point to the stage2 directory but make MERCURY_COMPILER_OVERRIDE
+# specify the stage1 compiler. This works because the stage1 and stage2
+# compilers are *supposed* to behave identically.
+#
 # If you want to track down some C level bug, you can ask this script to
 # pass -g to the C compiler and to the linker by setting the environment
 # variable MMC_CDEBUG to the string "true".
@@ -37,14 +46,19 @@
 # execute the Mercury compiler under gdb by setting the environment variable
 # MMC_UNDER_GDB to the string "true".
 
-MERCURY_COMPILER=$WORKSPACE/compiler/mercury_compile
-export MERCURY_COMPILER
-
 if test ! -d $WORKSPACE
 then
 	echo "workspace $WORKSPACE does not exist"
 fi
 
+if test "$MERCURY_COMPILER_OVERRIDE" != ""
+then
+	MERCURY_COMPILER=$MERCURY_COMPILER_OVERRIDE
+else
+	MERCURY_COMPILER=$WORKSPACE/compiler/mercury_compile
+fi
+export MERCURY_COMPILER
+
 if test -s $WORKSPACE/boehm_gc/libgc.a
 then
 	gclib="$WORKSPACE/boehm_gc/libgc.a"
@@ -58,7 +72,8 @@
 	echo "$WORKSPACE/boehm_gc does not have a gc library"
 fi
 
-LIB_FLAGS="--link-object $WORKSPACE/trace/libmer_trace.a --link-object $WORKSPACE/browser/libmer_browser.a --link-object $WORKSPACE/library/libmer_std.a --link-object $WORKSPACE/runtime/libmer_rt.a --link-object $gclib -lm"
+LIB_FLAGS="--link-object $WORKSPACE/trace/libmer_trace.a --link-object $WORKSPACE/browser/libmer_browser.a --link-object $WORKSPACE/library/libmer_std.a --link-object $WORKSPACE/runtime/libmer_rt.a --link-object $gclib -lm @TRACE_LIBS_SYSTEM@ @READLINE_LIBRARIES@"
+
 INIT_FLAGS="--trace-init-file $WORKSPACE/browser/mer_browser.init --init-file $WORKSPACE/library/mer_std.init --init-file $WORKSPACE/runtime/mer_rt.init"
 
 if test "$MMC_CDEBUG" != ""

---------------------------------------------------------------------

Index: configure.in
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/configure.in,v
retrieving revision 1.358
diff -u -b -r1.358 configure.in
--- configure.in	13 Apr 2003 05:48:29 -0000	1.358
+++ configure.in	16 Apr 2003 08:15:48 -0000
@@ -3536,7 +3536,7 @@
 scripts/mgnuc scripts/parse_ml_options.sh-subr scripts/ml
 scripts/c2init scripts/mmake scripts/mdb scripts/mdbrc scripts/mdprof
 scripts/mkfifo_using_mknod bindist/bindist.INSTALL bindist/bindist.Makefile
-scripts/mercury_config scripts/Mercury.config
+scripts/mercury_config scripts/Mercury.config tools/lmc
 ,
 [
 # Only do this when compiling the source, not when reconfiguring
cvs diff: Diffing tools
Index: tools/Mmakefile
===================================================================
RCS file: tools/Mmakefile
diff -N tools/Mmakefile
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tools/Mmakefile	16 Apr 2003 08:21:40 -0000
@@ -0,0 +1,33 @@
+#-----------------------------------------------------------------------------#
+# 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.
+#-----------------------------------------------------------------------------#
+
+# Mmakefile for the Mercury tools
+
+MAIN_TARGET=all
+
+MERCURY_DIR=..
+include $(MERCURY_DIR)/Mmake.common
+
+SCRIPTS = lmc
+
+.SUFFIXES: .in
+
+.in:
+	CONFIG_FILES=$@ CONFIG_HEADERS= $(MERCURY_DIR)/config.status
+	# check to ensure there were no mispelt autoconf variable names
+	if grep -n '[^$$]@' $@; then false; else true; fi
+
+#-----------------------------------------------------------------------------#
+
+.PHONY: all
+all: $(SCRIPTS)
+
+#-----------------------------------------------------------------------------#
+
+lmc:	$(MERCURY_DIR)/config.status lmc.in
+	CONFIG_FILES=lmc CONFIG_HEADERS= $(MERCURY_DIR)/config.status
+
+#-----------------------------------------------------------------------------#
Index: tools/lmc
===================================================================
RCS file: tools/lmc
diff -N tools/lmc
--- tools/lmc	1 Apr 2003 08:21:04 -0000	1.14
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,96 +0,0 @@
-#!/bin/sh
-#---------------------------------------------------------------------------#
-# Copyright (C) 2001 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.
-#---------------------------------------------------------------------------#
-#
-# This shell script allows you to execute a version of the Mercury compiler
-# that you have built in a workspace. Everything that the compilation process
-# needs will come from that workspace: the libraries for the runtime system,
-# the trace system, the Mercury standard library, the Boehm collector, etc.
-# You specify the directory containing the workspace by setting the value of
-# the WORKSPACE environment variable. This can be done by setting up a small
-# shell script for each workspace you have:
-#
-# #!/bin/sh
-# WORKSPACE=$HOME/mer/ws1
-# export WORKSPACE
-# exec $WORKSPACE/tools/lmc "$@"
-#
-# If you want to track down some C level bug, you can ask this script to
-# pass -g to the C compiler and to the linker by setting the environment
-# variable MMC_CDEBUG to the string "true".
-#
-# You can also ask the script to enable low level debugging of the generated
-# code by setting the environment variable MMC_LOWLEVEL_DEBUG to the string
-# "true", and you can ask it to enable low level debugging of tabling
-# operations by setting the environment variable MMC_TABLE_DEBUG to the same
-# string.
-#
-# You can ask for additional C flags to compile with by setting the environment
-# variable MMC_ADDED_CFLAGS to those flags. Setting up this environment
-# variable one can be more convenient than repeatedly supplying
-# "--cflag <flag>" arguments on the command line.
-#
-# If you want to track down some low level bug, you can ask this script to
-# execute the Mercury compiler under gdb by setting the environment variable
-# MMC_UNDER_GDB to the string "true".
-
-MERCURY_COMPILER=$WORKSPACE/compiler/mercury_compile
-export MERCURY_COMPILER
-
-if test ! -d $WORKSPACE
-then
-	echo "workspace $WORKSPACE does not exist"
-fi
-
-if test -s $WORKSPACE/boehm_gc/libgc.a
-then
-	gclib="$WORKSPACE/boehm_gc/libgc.a"
-elif test -s $WORKSPACE/boehm_gc/libpar_gc.a
-then
-	gclib="$WORKSPACE/boehm_gc/libpar_gc.a"
-elif test -s $WORKSPACE/boehm_gc/libgc_prof.a
-then
-	gclib="$WORKSPACE/boehm_gc/libgc_prof.a"
-else
-	echo "$WORKSPACE/boehm_gc does not have a gc library"
-fi
-
-LIB_FLAGS="--link-object $WORKSPACE/trace/libmer_trace.a --link-object $WORKSPACE/browser/libmer_browser.a --link-object $WORKSPACE/library/libmer_std.a --link-object $WORKSPACE/runtime/libmer_rt.a --link-object $gclib -lm"
-INIT_FLAGS="--trace-init-file $WORKSPACE/browser/mer_browser.init --init-file $WORKSPACE/library/mer_std.init --init-file $WORKSPACE/runtime/mer_rt.init"
-
-if test "$MMC_CDEBUG" != ""
-then
-	CDEBUG_FLAGS="--target-debug"
-else
-	CDEBUG_FLAGS=""
-fi
-
-if test "$MMC_LOWLEVEL_DEBUG" != ""
-then
-	CDEBUG_FLAGS="$CDEBUG_FLAGS --cflags -DMR_LOWLEVEL_DEBUG"
-fi
-
-if test "$MMC_TABLE_DEBUG" != ""
-then
-	CDEBUG_FLAGS="$CDEBUG_FLAGS --cflags -DMR_TABLE_DEBUG"
-fi
-
-if test "$MMC_ADDED_CFLAGS" != ""
-then
-	CDEBUG_FLAGS="$CDEBUG_FLAGS --cflags \"$MMC_ADDED_CFLAGS\""
-fi
-
-C_FLAGS="--c-include-directory $WORKSPACE/trace --c-include-directory $WORKSPACE/library --c-include-directory $WORKSPACE/library/Mercury/mihs --c-include-directory $WORKSPACE/runtime --c-include-directory $WORKSPACE/boehm_gc --c-include-directory $WORKSPACE/boehm_gc/include"
-
-if test "$MMC_UNDER_GDB" != ""
-then
-	MERCURY_COMPILER="$WORKSPACE/tools/gdbrun $MERCURY_COMPILER"
-	export MERCURY_COMPILER
-fi
-
-PATH="$WORKSPACE/scripts:$WORKSPACE/util:$PATH"
-export PATH
-exec mmc --no-mercury-stdlib-dir -I $WORKSPACE/library -I $WORKSPACE/analysis $CDEBUG_FLAGS $C_FLAGS $INIT_FLAGS $LIB_FLAGS "$@"
Index: tools/lmc.in
===================================================================
RCS file: tools/lmc.in
diff -N tools/lmc.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tools/lmc.in	16 Apr 2003 08:33:56 -0000
@@ -0,0 +1,111 @@
+#!/bin/sh
+#---------------------------------------------------------------------------#
+# Copyright (C) 2001,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.
+#---------------------------------------------------------------------------#
+#
+# This shell script allows you to execute a version of the Mercury compiler
+# that you have built in a workspace. By default, everything that the
+# compilation # process needs will come from that workspace: the libraries
+# for the runtime system, the trace system, the Mercury standard library,
+# the Boehm collector, etc. You specify the directory containing the workspace
+# by setting the value of the WORKSPACE environment variable. This can be done
+# by setting up a small shell script for each workspace you have:
+#
+# #!/bin/sh
+# WORKSPACE=$HOME/mer/ws1
+# export WORKSPACE
+# exec $WORKSPACE/tools/lmc "$@"
+#
+# You can specify that the compiler executable itself should come from
+# somewhere else than $WORKSPACE/compiler/mercury_compile by putting the
+# pathname of the desired compiler into the environment variable
+# MERCURY_COMPILER_OVERRIDE. For example, if the stage2 compiler is buggy,
+# but you want to link test programs with stage2 libraries, you can set
+# WORKSPACE to point to the stage2 directory but make MERCURY_COMPILER_OVERRIDE
+# specify the stage1 compiler. This works because the stage1 and stage2
+# compilers are *supposed* to behave identically.
+#
+# If you want to track down some C level bug, you can ask this script to
+# pass -g to the C compiler and to the linker by setting the environment
+# variable MMC_CDEBUG to the string "true".
+#
+# You can also ask the script to enable low level debugging of the generated
+# code by setting the environment variable MMC_LOWLEVEL_DEBUG to the string
+# "true", and you can ask it to enable low level debugging of tabling
+# operations by setting the environment variable MMC_TABLE_DEBUG to the same
+# string.
+#
+# You can ask for additional C flags to compile with by setting the environment
+# variable MMC_ADDED_CFLAGS to those flags. Setting up this environment
+# variable one can be more convenient than repeatedly supplying
+# "--cflag <flag>" arguments on the command line.
+#
+# If you want to track down some low level bug, you can ask this script to
+# execute the Mercury compiler under gdb by setting the environment variable
+# MMC_UNDER_GDB to the string "true".
+
+if test ! -d $WORKSPACE
+then
+	echo "workspace $WORKSPACE does not exist"
+fi
+
+if test "$MERCURY_COMPILER_OVERRIDE" != ""
+then
+	MERCURY_COMPILER=$MERCURY_COMPILER_OVERRIDE
+else
+	MERCURY_COMPILER=$WORKSPACE/compiler/mercury_compile
+fi
+export MERCURY_COMPILER
+
+if test -s $WORKSPACE/boehm_gc/libgc.a
+then
+	gclib="$WORKSPACE/boehm_gc/libgc.a"
+elif test -s $WORKSPACE/boehm_gc/libpar_gc.a
+then
+	gclib="$WORKSPACE/boehm_gc/libpar_gc.a"
+elif test -s $WORKSPACE/boehm_gc/libgc_prof.a
+then
+	gclib="$WORKSPACE/boehm_gc/libgc_prof.a"
+else
+	echo "$WORKSPACE/boehm_gc does not have a gc library"
+fi
+
+LIB_FLAGS="--link-object $WORKSPACE/trace/libmer_trace.a --link-object $WORKSPACE/browser/libmer_browser.a --link-object $WORKSPACE/library/libmer_std.a --link-object $WORKSPACE/runtime/libmer_rt.a --link-object $gclib -lm @TRACE_LIBS_SYSTEM@ @READLINE_LIBRARIES@"
+
+INIT_FLAGS="--trace-init-file $WORKSPACE/browser/mer_browser.init --init-file $WORKSPACE/library/mer_std.init --init-file $WORKSPACE/runtime/mer_rt.init"
+
+if test "$MMC_CDEBUG" != ""
+then
+	CDEBUG_FLAGS="--target-debug"
+else
+	CDEBUG_FLAGS=""
+fi
+
+if test "$MMC_LOWLEVEL_DEBUG" != ""
+then
+	CDEBUG_FLAGS="$CDEBUG_FLAGS --cflags -DMR_LOWLEVEL_DEBUG"
+fi
+
+if test "$MMC_TABLE_DEBUG" != ""
+then
+	CDEBUG_FLAGS="$CDEBUG_FLAGS --cflags -DMR_TABLE_DEBUG"
+fi
+
+if test "$MMC_ADDED_CFLAGS" != ""
+then
+	CDEBUG_FLAGS="$CDEBUG_FLAGS --cflags \"$MMC_ADDED_CFLAGS\""
+fi
+
+C_FLAGS="--c-include-directory $WORKSPACE/trace --c-include-directory $WORKSPACE/library --c-include-directory $WORKSPACE/library/Mercury/mihs --c-include-directory $WORKSPACE/runtime --c-include-directory $WORKSPACE/boehm_gc --c-include-directory $WORKSPACE/boehm_gc/include"
+
+if test "$MMC_UNDER_GDB" != ""
+then
+	MERCURY_COMPILER="$WORKSPACE/tools/gdbrun $MERCURY_COMPILER"
+	export MERCURY_COMPILER
+fi
+
+PATH="$WORKSPACE/scripts:$WORKSPACE/util:$PATH"
+export PATH
+exec mmc --no-mercury-stdlib-dir -I $WORKSPACE/library -I $WORKSPACE/analysis $CDEBUG_FLAGS $C_FLAGS $INIT_FLAGS $LIB_FLAGS "$@"
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list