Files
mercury/bytecode/Mmakefile
Zoltan Somogyi b7e55aa8ad Enforce namespace cleanliness in the library and browser directories
Estimated hours taken: 6
Branches: main

Enforce namespace cleanliness in the library and browser directories
as well as in the runtime and trace directories.

Mmake.common.in:
	Move the rules check_namespace here (they used to be in the Mmakefiles
	of the runtime and trace directories), together with the variables they
	need. Generalize them to also handle the needs of the browser, library
	and bytecode directories. The former two in particular need the
	ability to check automatically generated .mh files.

	Make all the rules used by check_namespace conditional on a macro
	that is defined by the Makefiles in all the directories that are
	checked for namespace cleanliness.

trace/Mmakefile:
runtime/Mmakefile:
	Replace the old rules for check_namespace, which are now in
	../Mmake.common.in, with the macros needed to control their behavior.

bytecode/Mmakefile:
	Add the macros needed to control the behavior of the rules for
	check_namespace.

	Move the lists of files to the start, before the include of
	../Mmake.common.

browser/Mmakefile:
library/Mmakefile:
	Add the macros needed to control the behavior of the rules for
	check_namespace.

runtime/RESERVED_MACRO_NAMES:
	Update comments, and delete obsolete exceptions.

browser/RESERVED_MACRO_NAMES:
library/RESERVED_MACRO_NAMES:
	New files to contain the exceptions from the naming scheme.

tools/bootcheck:
	Invoke "mmake check_namespace" in the library and browser directories
	as well as the runtime and the trace directories. Perform the
	invocation before we delete the object files we are checking for
	cleanliness.

	Clean up object files in all stage2 directories, not just the library,
	as soon as we can.

library/array.m:
library/builtin.m:
library/io.m:
library/time.m:
	Fix namespace violations.
2002-09-24 06:55:36 +00:00

155 lines
4.0 KiB
Plaintext

#-----------------------------------------------------------------------------#
# Copyright (C) 1998-2002 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.
#-----------------------------------------------------------------------------#
# Mmake - Mmake file for the bytecode interpreter
MAIN_TARGET=all
#-----------------------------------------------------------------------------#
# keep these lists in alphabetical order, please
# bytecode headers
MB_HDRS = \
mb_basetypes.h \
mb_bytecode.h \
mb_disasm.h \
mb_exec.h \
mb_interface.h \
mb_machine.h \
mb_machine_def.h \
mb_machine_show.h \
mb_mem.h \
mb_module.h \
mb_stack.h \
mb_util.h
# bytecode c files
MB_CFILES = \
mb_bytecode.c \
mb_disasm.c \
mb_exec.c \
mb_interface.c \
mb_interface_stub.c \
mb_machine.c \
mb_machine_show.c \
mb_mem.c \
mb_module.c \
mb_stack.c \
mb_util.c
# bytecode mercury files
MB_MFILES = \
# mb_interface_stub.m
# bytecode object files
MB_OBJS = $(MB_MFILES:%.m=%.o) $(MB_CFILES:%.c=%.o)
$(MB_OBJS): $(MB_HDRS)
# Specify which files to check for namespace cleanliness, and which name
# prefixes are allowed.
CHECK_HDRS = $(MB_HDRS)
CHECK_MHDRS =
CHECK_OBJS = $(MB_OBJS)
ALLOW_LIB_PREFIX=no
ALLOW_BROWSER_PREFIX=no
MERCURY_DIR=..
include $(MERCURY_DIR)/Mmake.common
-include ../Mmake.params
#-----------------------------------------------------------------------------#
# NOTE: any library functions that called from bytecode must be compiled
# with trace information. (So their entry labels can be looked up)
#-----------------------------------------------------------------------------#
MERCURY_SYSTEM = \
$(RUNTIME_DIR)/*.c $(RUNTIME_DIR)/*.h \
$(RUNTIME_DIR)/machdeps/*.c $(RUNTIME_DIR)/machdeps/*.h\
$(LIBRARY_DIR)/*.m \
$(TRACE_DIR)/*.h $(TRACE_DIR)/*.c \
$(BROWSER_DIR)/*.h $(BROWSER_DIR)/*.c \
$(BOEHM_GC_DIR)/*.h $(BOEHM_GC_DIR)/include/*.h
MERCURY_INC = \
-I$(LIBRARY_DIR) \
-I$(RUNTIME_DIR) \
-I$(BOEHM_GC_DIR) \
-I$(BOEHM_GC_DIR)/include \
-I$(TRACE_DIR)
#-----------------------------------------------------------------------------#
CFLAGS = $(MERCURY_INC) -DMR_BYTECODE_CALLABLE -g
MGNUCFLAGS-mb_disasm = --no-ansi
MCFLAGS = --trace shallow --generate-bytecode -O 0
MLFLAGS = --trace
#-----------------------------------------------------------------------------#
# The actual program (as distinct from bytecode interpreter)
HDRS =
CFILES =
MFILES = simple.m
OBJS = simple_init.o $(MFILES:%.m=%.o) $(CFILES:%.c=%.o)
$(OBJS): $(HDRS) $(MB_HDRS)
#-----------------------------------------------------------------------------#
ALL_HDRS = $(HDRS) $(MB_HDRS)
ALL_MFILES = $(MFILES) $(MB_MFILES)
ALL_CFILES = $(CFILES) $(MB_CFILES)
ALL_OBJS = $(OBJS) $(MB_OBJS)
ALL_DEPENDS=$(ALL_MFILES:%=%.depend)
#-----------------------------------------------------------------------------#
.PHONY: all
all: check
MLOBJS = $(MB_OBJS)
.PHONY: check
check: simple
#-----------------------------------------------------------------------------#
# tags actually depends on $(MERCURY_SYSTEM) too but since changes to that
# hardly ever have an effect, just ignore them
tags: $(ALL_CFILES) $(ALL_HDRS) tags2
ctags $(CTAGFLAGS) $(ALL_CFILES) $(ALL_HDRS) $(MERCURY_SYSTEM)
tags2: $(ALL_MFILES)
mtags $(MTAGFLAGS) $(ALL_MFILES) $(MERCURY_SYSTEM)
mv tags tags2
.PHONY: depend
depend: $(ALL_DEPENDS)
.PHONY: clean_local
clean_local:
rm -f $(ALL_MFILES:%.m=%.mbc)
rm -f $(ALL_MFILES:%.m=%.bytedebug)
rm -f $(ALL_OBJS)
.PHONY: realclean_local
realclean_local:
rm -f tags tags2 *.mbc *.bytedebug
# XXX: The dependencies in mmake ignore .mbc and .bytedebug files
# so we have to manually delete them. We delete all bytecode files
# because it will leave submodule files if we don't
# (eg: module simple contains simple2: simple.simple2.mbc will be
# generated but will not be removed properly)
#-----------------------------------------------------------------------------#