mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 01:13:30 +00:00
Mmake.common.in:
bindist/Mmakefile:
compiler/Mmakefile:
compiler/notes/Mmakefile:
doc/Mmakefile:
extras/align_right/Mmakefile:
extras/base64/Mmakefile:
extras/dynamic_linking/Mmakefile:
extras/error/Mmakefile:
extras/fixed/Mmakefile:
extras/graphics/samples/gears/Mmakefile.MacOSX:
extras/graphics/samples/maze/Mmakefile.MacOSX:
extras/lex/Mmakefile:
extras/monte/Mmakefile:
extras/posix/Mmakefile:
extras/references/Mmakefile:
extras/references/samples/Mmakefile:
extras/split_file/Mmakefile:
library/Mmakefile:
mdbcomp/Mmakefile:
runtime/Mmakefile:
scripts/Mmakefile:
ssdb/Mmakefile:
tests/Mmake.common:
tests/mmc_make/Mmakefile:
trace/Mmakefile:
util/Mmakefile:
Invoke the sh builtin "test" as "test", not as "[".
Make some target names more descriptive.
Fix indentation.
376 lines
12 KiB
Makefile
376 lines
12 KiB
Makefile
#-----------------------------------------------------------------------------#
|
|
# vim: ts=8 sw=8 noexpandtab ft=make
|
|
#-----------------------------------------------------------------------------#
|
|
# Copyright (C) 1998-2008 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 trace library, which contains the runtime
|
|
# system components that are needed only if some procedures are traced.
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# The list of human-written C header files of the trace library.
|
|
# Keep this list in alphabetical order, please.
|
|
HAND_TRACE_HDRS = \
|
|
mercury_trace.h \
|
|
mercury_trace_alias.h \
|
|
mercury_trace_browse.h \
|
|
mercury_trace_cmd_backward.h \
|
|
mercury_trace_cmd_breakpoint.h \
|
|
mercury_trace_cmd_browsing.h \
|
|
mercury_trace_cmd_dd.h \
|
|
mercury_trace_cmd_developer.h \
|
|
mercury_trace_cmd_exp.h \
|
|
mercury_trace_cmd_help.h \
|
|
mercury_trace_cmd_misc.h \
|
|
mercury_trace_cmd_parameter.h \
|
|
mercury_trace_cmd_queries.h \
|
|
mercury_trace_cmd_table_io.h \
|
|
mercury_trace_cmds.h \
|
|
mercury_trace_command_queue.h \
|
|
mercury_trace_completion.h \
|
|
mercury_trace_declarative.h \
|
|
mercury_trace_external.h \
|
|
mercury_trace_help.h \
|
|
mercury_trace_hold_vars.h \
|
|
mercury_trace_internal.h \
|
|
mercury_trace_readline.h \
|
|
mercury_trace_source.h \
|
|
mercury_trace_spy.h \
|
|
mercury_trace_tables.h \
|
|
mercury_trace_util.h \
|
|
mercury_trace_vars.h
|
|
|
|
# The list of human-written C source files of the trace library.
|
|
# Keep this list in alphabetical order, please.
|
|
HAND_TRACE_SRCS = \
|
|
mercury_trace.c \
|
|
mercury_trace_alias.c \
|
|
mercury_trace_browse.c \
|
|
mercury_trace_cmd_backward.c \
|
|
mercury_trace_cmd_breakpoint.c \
|
|
mercury_trace_cmd_browsing.c \
|
|
mercury_trace_cmd_dd.c \
|
|
mercury_trace_cmd_developer.c \
|
|
mercury_trace_cmd_exp.c \
|
|
mercury_trace_cmd_forward.c \
|
|
mercury_trace_cmd_help.c \
|
|
mercury_trace_cmd_misc.c \
|
|
mercury_trace_cmd_parameter.c \
|
|
mercury_trace_cmd_queries.c \
|
|
mercury_trace_cmd_table_io.c \
|
|
mercury_trace_command_queue.c \
|
|
mercury_trace_completion.c \
|
|
mercury_trace_declarative.c \
|
|
mercury_trace_external.c \
|
|
mercury_trace_help.c \
|
|
mercury_trace_hold_vars.c \
|
|
mercury_trace_internal.c \
|
|
mercury_trace_readline.c \
|
|
mercury_trace_source.c \
|
|
mercury_trace_spy.c \
|
|
mercury_trace_tables.c \
|
|
mercury_trace_util.c \
|
|
mercury_trace_vars.c
|
|
|
|
# The list of human-written C header files of the eventspec library.
|
|
# Keep this list in alphabetical order, please.
|
|
HAND_EVENTSPEC_HDRS = \
|
|
mercury_event_scanner.h \
|
|
mercury_event_spec.h
|
|
|
|
# The list of human-written C source files of the eventspec library.
|
|
# Keep this list in alphabetical order, please.
|
|
HAND_EVENTSPEC_SRCS = \
|
|
mercury_event_spec.c
|
|
|
|
# The list of automatically created C header files.
|
|
# Keep this list in alphabetical order, please.
|
|
GEN_EVENTSPEC_HDRS = \
|
|
mercury_event_parser.h
|
|
|
|
# The list of automatically created C source files.
|
|
# Keep this list in alphabetical order, please.
|
|
GEN_EVENTSPEC_SRCS = \
|
|
mercury_event_parser.c \
|
|
mercury_event_scanner.c
|
|
|
|
TRACE_HDRS = $(HAND_TRACE_HDRS)
|
|
TRACE_SRCS = $(HAND_TRACE_SRCS)
|
|
|
|
EVENTSPEC_HDRS = $(HAND_EVENTSPEC_HDRS) $(GEN_EVENTSPEC_HDRS)
|
|
EVENTSPEC_SRCS = $(HAND_EVENTSPEC_SRCS) $(GEN_EVENTSPEC_SRCS)
|
|
|
|
HAND_HDRS = $(HAND_TRACE_HDRS) $(HAND_EVENTSPEC_HDRS)
|
|
HAND_SRCS = $(HAND_TRACE_SRCS) $(HAND_EVENTSPEC_SRCS)
|
|
|
|
HDRS = $(TRACE_HDRS) $(EVENTSPEC_HDRS)
|
|
SRCS = $(TRACE_SRCS) $(EVENTSPEC_SRCS)
|
|
|
|
# The object files in this directory depend on many of the header files
|
|
# in the runtime. However, changes to many of these header files require
|
|
# a global make clean. Here we list only the header files from the runtime
|
|
# whose changes don't usually require a make clean but which nevertheless
|
|
# require the trace library to be recompiled.
|
|
RUNTIME_HDRS = \
|
|
$(RUNTIME_DIR)/mercury_stack_layout.h \
|
|
$(RUNTIME_DIR)/mercury_trace_base.h \
|
|
$(RUNTIME_DIR)/mercury_trace_term.h
|
|
|
|
TRACE_OBJS = $(TRACE_SRCS:.c=.$O)
|
|
EVENTSPEC_OBJS = $(EVENTSPEC_SRCS:.c=.$O)
|
|
OBJS = $(SRCS:.c=.$O)
|
|
TRACE_PIC_OBJS = $(TRACE_SRCS:.c=.$(EXT_FOR_PIC_OBJECTS))
|
|
EVENTSPEC_PIC_OBJS = $(EVENTSPEC_SRCS:.c=.$(EXT_FOR_PIC_OBJECTS))
|
|
PIC_OBJS = $(SRCS:.c=.$(EXT_FOR_PIC_OBJECTS))
|
|
|
|
EVENTSPEC_LDFLAGS = -L$(BROWSER_DIR) -L$(MDBCOMP_DIR) -L$(LIBRARY_DIR) \
|
|
-L$(RUNTIME_DIR) -L$(BOEHM_GC_DIR) -L/usr/local/lib
|
|
EVENTSPEC_LDLIBS= -l$(BROWSER_LIB_NAME) -l$(MDBCOMP_LIB_NAME) \
|
|
$(MLLIBS) $(SOCKET_LIBRARY) \
|
|
$(NSL_LIBRARY) $(DL_LIBRARY) $(READLINE_LIBRARIES)
|
|
|
|
TRACE_LDFLAGS = -L$(TRACE_DIR) $(EVENTSPEC_LDFLAGS)
|
|
TRACE_LDLIBS = -l$(EVENTSPEC_LIB_NAME) $(EVENTSPEC_LDLIBS)
|
|
|
|
THREADLIBS = \
|
|
` case "$(GRADE)" in \
|
|
*.par*) echo "-lpthread" ;; \
|
|
esac \
|
|
`
|
|
MAIN_TARGET=all
|
|
|
|
# Specify which files to check for namespace cleanliness, and which name
|
|
# prefixes are allowed.
|
|
#
|
|
# The header files generated by flex and bison cannot pass any kind of
|
|
# namespace cleanliness test, and we don't have enough control over them
|
|
# to make them pass those tests.
|
|
|
|
CHECK_HDRS = $(HAND_HDRS)
|
|
CHECK_MHDRS =
|
|
CHECK_OBJS = $(OBJS)
|
|
ALLOW_LIB_PREFIX=no
|
|
ALLOW_BROWSER_PREFIX=no
|
|
ALLOW_MDBCOMP_PREFIX=no
|
|
ALLOW_SSDB_PREFIX=no
|
|
|
|
BISON = bison
|
|
BISON_OPTS = -v
|
|
FLEX = flex
|
|
FLEX_OPTS = -8
|
|
|
|
MERCURY_DIR=..
|
|
LINK_STDLIB_ONLY=yes
|
|
include $(MERCURY_DIR)/Mmake.common
|
|
-include Mmake.trace.params
|
|
|
|
# Avoid trying to make this file with `mmc --make' if it doesn't exist.
|
|
Mmake.trace.params: ;
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
CFLAGS += $(DLL_CFLAGS)
|
|
MGNUCFLAGS += --c-debug
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Stuff for Windows DLLs
|
|
|
|
ifeq ($(USE_DLLS),yes)
|
|
|
|
DLL_CFLAGS = -Dlib$(TRACE_LIB_NAME)_DEFINE_DLL
|
|
|
|
# the following header files are created automatically by Makefile.DLLs
|
|
LIB_DLL_H = lib$(TRACE_LIB_NAME)_dll.h
|
|
LIB_GLOBALS_H = lib$(TRACE_LIB_NAME)_globals.h
|
|
|
|
include $(MERCURY_DIR)/Makefile.DLLs
|
|
|
|
else
|
|
|
|
DLL_CFLAGS =
|
|
LIB_DLL_H =
|
|
LIB_GLOBALS_H =
|
|
DLL_DEF_LIB =
|
|
|
|
endif
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Most object files do not depend on the automatically generated headers;
|
|
# for the ones that do, we list the dependency explicitly.
|
|
|
|
$(OBJS) $(PIC_OBJS): $(HAND_HDRS) $(RUNTIME_HDRS)
|
|
|
|
mercury_event_scanner.$(O): $(GEN_EVENTSPEC_HDRS)
|
|
mercury_event_scanner.$(EXT_FOR_PIC_OBJECTS): $(GEN_EVENTSPEC_HDRS)
|
|
mercury_event_parser.$(O): $(GEN_EVENTSPEC_HDRS)
|
|
mercury_event_parser.$(EXT_FOR_PIC_OBJECTS): $(GEN_EVENTSPEC_HDRS)
|
|
mercury_event_spec.$(O): $(GEN_EVENTSPEC_HDRS)
|
|
mercury_event_spec.$(EXT_FOR_PIC_OBJECTS): $(GEN_EVENTSPEC_HDRS)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
.PHONY: all
|
|
.PHONY: trace
|
|
ifneq ("$(filter csharp% java%,$(GRADE))","")
|
|
# there is no tracing in the C# or Java backends
|
|
|
|
all:
|
|
|
|
trace:
|
|
|
|
else
|
|
|
|
all: trace $(TAGS_FILE_EXISTS)
|
|
|
|
trace: lib$(EVENTSPEC_LIB_NAME).$A
|
|
trace: lib$(EVENTSPEC_LIB_NAME).$(EXT_FOR_SHARED_LIB)
|
|
trace: lib$(TRACE_LIB_NAME).$A
|
|
trace: lib$(TRACE_LIB_NAME).$(EXT_FOR_SHARED_LIB)
|
|
trace: $(LIB_DLL_H) $(LIB_GLOBALS_H)
|
|
|
|
endif
|
|
|
|
# This uses a pattern rule to express to make that the rule's recipe is
|
|
# responsible for making all of the targets, not individual targets.
|
|
mercury_event_%.c mercury_event_%.h: mercury_event_%.y
|
|
$(BISON) $(BISON_OPTS) -p mercury_event_ -d \
|
|
-o mercury_event_$*.c mercury_event_$*.y
|
|
|
|
mercury_event_scanner.c: mercury_event_scanner.l mercury_event_parser.h
|
|
$(FLEX) $(FLEX_OPTS) -s -Pmercury_event_ \
|
|
-omercury_event_scanner.c \
|
|
mercury_event_scanner.l
|
|
|
|
RPATH_1=$(SHLIB_RPATH_OPT)$(FINAL_INSTALL_MERC_LIB_DIR)
|
|
RPATH_2=$(SHLIB_RPATH_SEP)$(FINAL_INSTALL_MERC_GC_LIB_DIR)
|
|
|
|
lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).$A: \
|
|
$(TRACE_OBJS) lib$(EVENTSPEC_LIB_NAME)$(DLL_DEF_LIB).$A
|
|
rm -f lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).$A
|
|
$(AR) $(ALL_ARFLAGS) \
|
|
$(AR_LIBFILE_OPT)lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).$A \
|
|
$(TRACE_OBJS)
|
|
$(RANLIB) $(RANLIBFLAGS) lib$(TRACE_LIB_NAME)$(DLL_DEF_LIB).$A
|
|
|
|
lib$(EVENTSPEC_LIB_NAME)$(DLL_DEF_LIB).$A: $(EVENTSPEC_OBJS)
|
|
rm -f lib$(EVENTSPEC_LIB_NAME)$(DLL_DEF_LIB).$A
|
|
$(AR) $(ALL_ARFLAGS) \
|
|
$(AR_LIBFILE_OPT)lib$(EVENTSPEC_LIB_NAME)$(DLL_DEF_LIB).$A \
|
|
$(EVENTSPEC_OBJS)
|
|
$(RANLIB) lib$(EVENTSPEC_LIB_NAME)$(DLL_DEF_LIB).$A
|
|
|
|
lib$(TRACE_LIB_NAME).so: $(TRACE_PIC_OBJS) lib$(EVENTSPEC_LIB_NAME).so
|
|
$(LINK_SHARED_OBJ) $(ERROR_UNDEFINED) $(LDFLAGS_FOR_SANITIZERS) \
|
|
-o lib$(TRACE_LIB_NAME).so $(TRACE_PIC_OBJS) \
|
|
$(RPATH_1)$(RPATH_2) \
|
|
$(ALL_LD_LIBFLAGS) $(TRACE_LDFLAGS) \
|
|
$(TRACE_LDLIBS) $(THREADLIBS) \
|
|
$(SHARED_LIBS)
|
|
|
|
lib$(EVENTSPEC_LIB_NAME).so: $(EVENTSPEC_PIC_OBJS)
|
|
$(LINK_SHARED_OBJ) $(ERROR_UNDEFINED) $(LDFLAGS_FOR_SANITIZERS) \
|
|
-o lib$(EVENTSPEC_LIB_NAME).so $(EVENTSPEC_PIC_OBJS) \
|
|
$(RPATH_1)$(RPATH_2) \
|
|
$(ALL_LD_LIBFLAGS) $(EVENTSPEC_LDFLAGS) \
|
|
$(EVENTSPEC_LDLIBS) $(THREADLIBS) \
|
|
$(SHARED_LIBS)
|
|
|
|
# For Darwin:
|
|
lib$(TRACE_LIB_NAME).dylib: $(TRACE_PIC_OBJS) lib$(EVENTSPEC_LIB_NAME).dylib
|
|
$(LINK_SHARED_OBJ) $(ERROR_UNDEFINED) $(LDFLAGS_FOR_SANITIZERS) \
|
|
-o lib$(TRACE_LIB_NAME).dylib $(TRACE_PIC_OBJS) \
|
|
-install_name \
|
|
$(FINAL_INSTALL_MERC_LIB_DIR)/lib$(TRACE_LIB_NAME).dylib \
|
|
$(ALL_LD_LIBFLAGS) $(TRACE_LDFLAGS) \
|
|
$(TRACE_LDLIBS) $(THREADLIBS) \
|
|
$(SHARED_LIBS)
|
|
|
|
lib$(EVENTSPEC_LIB_NAME).dylib: $(EVENTSPEC_PIC_OBJS)
|
|
$(LINK_SHARED_OBJ) $(ERROR_UNDEFINED) $(LDFLAGS_FOR_SANITIZERS) \
|
|
-o lib$(EVENTSPEC_LIB_NAME).dylib $(EVENTSPEC_PIC_OBJS) \
|
|
-install_name \
|
|
$(FINAL_INSTALL_MERC_LIB_DIR)/lib$(EVENTSPEC_LIB_NAME).dylib \
|
|
$(ALL_LD_LIBFLAGS) $(EVENTSPEC_LDFLAGS) \
|
|
$(EVENTSPEC_LDLIBS) $(THREADLIBS) \
|
|
$(SHARED_LIBS)
|
|
|
|
.PHONY: all_cs
|
|
all_cs: $(SRCS)
|
|
|
|
tags: $(HAND_SRCS) $(HAND_HDRS)
|
|
ctags $(HAND_SRCS) $(HAND_HDRS) $(RUNTIME_DIR)/*.c $(RUNTIME_DIR)/*.h
|
|
|
|
.PHONY: tags_file_exists
|
|
tags_file_exists:
|
|
@if test ! -f tags; then echo making tags; \
|
|
ctags $(HAND_SRCS) $(HAND_HDRS) \
|
|
$(RUNTIME_DIR)/*.c $(RUNTIME_DIR)/*.h ; \
|
|
fi
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# installation rules
|
|
|
|
.PHONY: install
|
|
install: install_headers install_lib
|
|
|
|
ifneq ("$(filter csharp% java%,$(GRADE))","")
|
|
|
|
# there is no tracing in the C# or Java backends
|
|
|
|
.PHONY: install_headers
|
|
install_headers:
|
|
|
|
.PHONY: install_lib
|
|
install_lib:
|
|
|
|
else
|
|
|
|
.PHONY: install_headers
|
|
install_headers: $(HDRS) $(LIB_GLOBALS_H)
|
|
cp `vpath_find $(HDRS) $(LIB_GLOBALS_H)` $(INSTALL_INC_DIR)
|
|
|
|
.PHONY: install_lib
|
|
install_lib: \
|
|
lib$(TRACE_LIB_NAME).$A \
|
|
lib$(TRACE_LIB_NAME).$(EXT_FOR_SHARED_LIB) \
|
|
lib$(EVENTSPEC_LIB_NAME).$A \
|
|
lib$(EVENTSPEC_LIB_NAME).$(EXT_FOR_SHARED_LIB)
|
|
-test -d $(INSTALL_MERC_LIB_DIR) || mkdir -p $(INSTALL_MERC_LIB_DIR)
|
|
cp `vpath_find \
|
|
lib$(TRACE_LIB_NAME).$A \
|
|
lib$(TRACE_LIB_NAME).$(EXT_FOR_SHARED_LIB) \
|
|
lib$(EVENTSPEC_LIB_NAME).$A \
|
|
lib$(EVENTSPEC_LIB_NAME).$(EXT_FOR_SHARED_LIB) \
|
|
` \
|
|
$(INSTALL_MERC_LIB_DIR)
|
|
$(RANLIB) $(RANLIBFLAGS) \
|
|
$(INSTALL_MERC_LIB_DIR)/lib$(TRACE_LIB_NAME).$A
|
|
$(RANLIB) $(RANLIBFLAGS) \
|
|
$(INSTALL_MERC_LIB_DIR)/lib$(EVENTSPEC_LIB_NAME).$A
|
|
|
|
endif
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
clean_local: clean_o clean_check
|
|
|
|
.PHONY: clean_o
|
|
clean_o:
|
|
rm -f $(OBJS) $(PIC_OBJS)
|
|
|
|
.PHONY: realclean_local
|
|
realclean_local:
|
|
rm -f lib$(TRACE_LIB_NAME).$A
|
|
rm -f lib$(TRACE_LIB_NAME).$(EXT_FOR_SHARED_LIB)
|
|
rm -f lib$(EVENTSPEC_LIB_NAME).$A
|
|
rm -f lib$(EVENTSPEC_LIB_NAME).$(EXT_FOR_SHARED_LIB)
|
|
rm -f $(GEN_EVENTSPEC_SRCS) $(GEN_EVENTSPEC_HDRS)
|
|
|
|
#-----------------------------------------------------------------------------#
|