Files
mercury/ssdb/Mmakefile
Zoltan Somogyi c148ce54fe Update style in a bunch of Mmakefiles.
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.
2024-09-17 11:09:18 +02:00

260 lines
7.7 KiB
Makefile

#-----------------------------------------------------------------------------#
# vim: ts=8 sw=8 noexpandtab ft=make
#-----------------------------------------------------------------------------#
# Copyright (C) 2007, 2009-2010, 2012 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.
#-----------------------------------------------------------------------------#
# ssdb/Mmakefile - this is the Mmakefile for building the Mercury
# ssdb library, which also includes other functionality needed
# by the source to source Mercury debugger.
# Since the code in this directory is intended to be invoked only from
# the trace library, which turns off tracing in the Mercury code it calls,
# compiling the modules in this directory with tracing on only makes
# the generated code much bigger. However, since all Mercury code
# in an executable must be of the same grade, we need to be able to
# compile the modules in this directory in debug grades as well.
# Specify which files to check for namespace cleanliness, and which name
# prefixes are allowed.
CHECK_HDRS =
CHECK_MHDRS = $(mer_ssdb.mhs)
CHECK_OBJS = $(mer_ssdb.all_os)
ALLOW_LIB_PREFIX=yes
ALLOW_BROWSER_PREFIX=yes
ALLOW_MDBCOMP_PREFIX=yes
ALLOW_SSDB_PREFIX=yes
MERCURY_DIR=..
LINK_STDLIB_ONLY=yes
include $(MERCURY_DIR)/Mmake.common
-include Mmake.ssdb.params
# Override the default rule in `mmake --use-mmc-make' that asks `mmc' to
# create a missing optional params file.
Mmake.ssdb.params:
# Module-specific options should go in Mercury.options so they
# can be found by `mmc --make'.
include Mercury.options
MAIN_TARGET=main
MERCURY_MAIN_LIB_MODULES=$(SSDB_LIB_NAME)
MERCURY_MAIN_MODULES=$(MERCURY_MAIN_LIB_MODULES)
VPATH = $(LIBRARY_DIR) $(MDBCOMP_DIR) $(BROWSER_DIR)
DEPENDS = $(patsubst %,%.depend,$(MERCURY_MAIN_MODULES))
DEPEND_INTS = $(patsubst %,%.depend_ints,$(MERCURY_MAIN_MODULES))
INTS_TARGETS = $(patsubst %,%.ints,$(MERCURY_MAIN_MODULES))
INT3S_TARGETS = $(patsubst %,%.int3s,$(MERCURY_MAIN_MODULES))
LIBS = $(patsubst %,lib%,$(MERCURY_MAIN_LIB_MODULES))
CHECKS = $(patsubst %,%.check,$(MERCURY_MAIN_LIB_MODULES))
#-----------------------------------------------------------------------------#
# Specify which compilers to use to compile the library.
# Don't change these without good reason - if you want to do a temporary
# change, change ../Mmake.params, or create Mmake.ssdb.params.
CFLAGS += $(DLL_CFLAGS)
ifeq ($(INSTALLABLE_PREFIX),yes)
MLFLAGS += -R$(FINAL_INSTALL_MERC_LIB_DIR) \
-R$(FINAL_INSTALL_MERC_GC_LIB_DIR)
MCFLAGS += -R$(FINAL_INSTALL_MERC_LIB_DIR) \
-R$(FINAL_INSTALL_MERC_GC_LIB_DIR)
endif
ifeq ("$(filter csharp% java%,$(GRADE))","")
MLLIBS += $(SOCKET_LIBRARY) $(NSL_LIBRARY) $(DL_LIBRARY) \
$(READLINE_LIBRARIES)
endif
MCFLAGS += --flags SSDB_FLAGS $(CONFIG_OVERRIDE)
#-----------------------------------------------------------------------------#
# Set the install name for Darwin shared libraries. We disable the
# --shlib-linker-use-install-name mmc option so that the -install_name linker
# option is not passed in the .dep files. We do this to avoid a problem when
# building from the C source distribution: if the C source distribution is
# generated on a non-Darwin system then the -install_name option is not passed
# in the .dep files, so it must be passed here, however if a C source
# distribution is generated on a Darwin system then by default the
# -install_name option will be passed in the .dep files which will cause it to
# be passed twice (here and in the .dep files) which is not allowed by the
# linker, so we disable the mmc option which causes the -install_name option
# to be passed in the .dep files.
ifeq "$(findstring apple-darwin,$(FULLARCH))" "apple-darwin"
ifeq ($(MMAKE_USE_MMC_MAKE),yes)
MCFLAGS += --ld-libflags \
"-install_name $(FINAL_INSTALL_MERC_LIB_DIR)/lib$(SSDB_LIB_NAME).dylib"
else
LD_LIBFLAGS-libmer_ssdb.dylib = -install_name \
$(FINAL_INSTALL_MERC_LIB_DIR)/lib$(SSDB_LIB_NAME).dylib
endif
endif
#-----------------------------------------------------------------------------#
MTAGS = $(SCRIPTS_DIR)/mtags
LN = ln
#-----------------------------------------------------------------------------#
# The C# and Java implementations of the standard library are not yet
# complete, so we need to pass `--allow-stubs' to get them to compile.
# Since the standard library is compiled with `--halt-at-warn',
# we also need `--no-warn-stubs'.
# XXX That comment seems out of place: this is not the directory
# of the standard library.
ifneq ("$(filter csharp% java%,$(GRADE))","")
MCFLAGS += --allow-stubs --no-warn-stubs
endif
#-----------------------------------------------------------------------------#
# Stuff for Windows DLLS using gnu-win32.
ifeq ($(USE_DLLS),yes)
# XXX what do we need here for MDBCOMP_LIB_NAME?
DLL_CFLAGS = -Dlib$(SSDB_LIB_NAME)_DEFINE_DLL
include $(MERCURY_DIR)/Makefile.DLLs
else
DLL_CFLAGS =
DLL_DEF_LIB =
endif
#-----------------------------------------------------------------------------#
# targets
.PHONY: main
main: library $(TAGS_FILE_EXISTS)
.PHONY: all
all: library $(TAGS_FILE_EXISTS) browse_test declarative_test
.PHONY: library
library: $(LIBS)
.PHONY: depend
depend: $(DEPEND_INTS)
$(DEPENDS): SSDB_FLAGS Mercury.modules
$(DEPEND_INTS): SSDB_FLAGS Mercury.modules
# This directory contains source files for which the module
# name doesn't match the file name, so smart recompilation
# won't work without the Mercury.modules file.
Mercury.modules: SSDB_FLAGS
$(MC) $(ALL_GRADEFLAGS) $(ALL_MCFLAGS) -f *.m
.PHONY: check
check: $(CHECKS)
.PHONY: all-ints
all-ints: int3s ints
.PHONY: ints
ints: $(INTS_TARGETS)
.PHONY: int3s
int3s: $(INT3S_TARGETS)
#-----------------------------------------------------------------------------#
tags: .ssdb_tags
.ssdb_tags: $(MTAGS) $($(SSDB_LIB_NAME).ms) \
$(wildcard $(MDBCOMP_DIR)/*.m) $(wildcard $(LIBRARY_DIR)/*.m)
$(MTAGS) $($(SSDB_LIB_NAME).ms) ../mdbcomp/*.m ../library/*.m
@touch .ssdb_tags
.PHONY: tags_file_exists
tags_file_exists:
@if test ! -f tags; then echo making tags; \
$(MTAGS) $($(SSDB_LIB_NAME).ms) ../mdbcomp/*.m ../library/*.m; \
touch .ssdb_tags; \
fi
$(SSDB_LIB_NAME).stats: $(COMPILER_DIR)/source_stats.awk \
$($(SSDB_LIB_NAME).ms)
awk -f $(COMPILER_DIR)/source_stats.awk \
`vpath_find $($(SSDB_LIB_NAME).ms)` > $@
#-----------------------------------------------------------------------------#
.PHONY: dates
dates:
touch $($(SSDB_LIB_NAME).dates)
#-----------------------------------------------------------------------------#
# The documentation of the reason for this set of rules
# can be found in library/Mmakefile.
.PHONY: os cs css javas
ifeq ($(MMAKE_USE_MMC_MAKE),yes)
all_os: $(SSDB_LIB_NAME).all_os
all_cs: $(SSDB_LIB_NAME).all_cs
all_css: $(SSDB_LIB_NAME).all_css
all_javas: $(SSDB_LIB_NAME).all_javas
else
ifneq ($(origin $(SSDB_LIB_NAME).all_os),undefined)
all_os: $($(SSDB_LIB_NAME).all_os)
all_cs: $($(SSDB_LIB_NAME).all_cs)
all_css: $($(SSDB_LIB_NAME).all_css)
all_javas: $($(SSDB_LIB_NAME).all_javas)
else
all_os:
mmake depend; mmake all_os
all_cs:
mmake depend; mmake all_cs
all_css:
mmake depend; mmake all_css
all_javas:
mmake depend; mmake all_javas
endif
endif
#-----------------------------------------------------------------------------#
realclean_local:
rm -f Mercury.modules tags SSDB_FLAGS SSDB_FLAGS.date
#-----------------------------------------------------------------------------#
# Installation targets
.PHONY: install
install: install_library
ifeq ($(MMAKE_USE_MMC_MAKE),yes)
.PHONY: install_library
install_library: lib$(SSDB_LIB_NAME).install
else
.PHONY: install_library
install_library: \
lib$(SSDB_LIB_NAME).install_library \
lib$(SSDB_LIB_NAME).install_ints \
lib$(SSDB_LIB_NAME).install_hdrs
endif