mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-06 07:49:02 +00:00
Mmakefile:
Ensure that the mercury_{compile,profile} executables exist
*before* attempting to build the manual pages.
doc/Mmakefile:
Rebuild the mprof.1 manual page if the profiler options.m
file changes.
928 lines
28 KiB
Plaintext
928 lines
28 KiB
Plaintext
#-----------------------------------------------------------------------------#
|
|
# vim: ts=8 sw=8 noexpandtab
|
|
#-----------------------------------------------------------------------------#
|
|
# Copyright (C) 1995-2012 The University of Melbourne.
|
|
# This file may only be copied under the terms of the GNU General
|
|
# Public Licence - see the file COPYING in the Mercury distribution.
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Mmakefile - the top-level Mmake file for the Mercury implementation
|
|
|
|
# We need to explicitly include scripts/Mmake.vars here, even though `mmake'
|
|
# includes that file automatically, to make sure that we get the right
|
|
# version of that file. The settings in that file include values set
|
|
# by parameters to configure (e.g. --prefix), and we need to make sure
|
|
# that we pick up the values from the Mmake.vars that we're going to install,
|
|
# rather than from the old version of mmake that we're installing with,
|
|
# which may have been configured with a different --prefix.
|
|
include scripts/Mmake.vars
|
|
|
|
MAIN_TARGET=all
|
|
|
|
MERCURY_DIR=.
|
|
include Mmake.common
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# NOTE: if you add another subdirectory here, then you may need to also update
|
|
# scripts/prepare_tmp_dir.in and the `tar' target below.
|
|
# If the directory you are adding will contain C files generated by the
|
|
# Mercury compiler when included in the source distribution, then you will
|
|
# also need to update the code in configure.ac that deletes those C files
|
|
# before reinstalling the compiler in a more efficient grade.
|
|
|
|
SUBDIRS = \
|
|
scripts \
|
|
util \
|
|
boehm_gc \
|
|
runtime \
|
|
robdd \
|
|
library \
|
|
trace \
|
|
ssdb \
|
|
mdbcomp \
|
|
browser \
|
|
grade_lib \
|
|
compiler \
|
|
doc \
|
|
slice \
|
|
profiler \
|
|
deep_profiler \
|
|
tools \
|
|
mfilterjavac
|
|
|
|
MMAKEFLAGS =
|
|
|
|
ifneq ($(CROSS_COMPILING),yes)
|
|
# We include ../../mfilterjavac in this path because $(SUBDIR_MMAKE) is
|
|
# used from the grade install directories, and we need mfilterjavac in
|
|
# our path when executing in install_grade_dir.java/library and others.
|
|
SUBDIR_MMAKE_PATH=../scripts:../util:../mfilterjavac:../../mfilterjavac:$$PATH
|
|
SUBSUBDIR_MMAKE_PATH=../../scripts:../../util:../../mfilterjavac:$$PATH
|
|
else
|
|
# When cross-compiling, exclude util and mfilterjavac from the PATH so
|
|
# mmake does not try to execute binaries from those directories.
|
|
SUBDIR_MMAKE_PATH=../scripts:$$PATH
|
|
SUBSUBDIR_MMAKE_PATH=../../scripts:$$PATH
|
|
endif
|
|
|
|
SUBDIR_MMAKE = \
|
|
PATH=$(SUBDIR_MMAKE_PATH) \
|
|
MMAKE_VPATH=. \
|
|
MMAKE_DIR=../scripts \
|
|
DESTDIR=$(DESTDIR) \
|
|
../scripts/mmake $(MMAKEFLAGS)
|
|
|
|
SUBSUBDIR_MMAKE = \
|
|
PATH=$(SUBSUBDIR_MMAKE_PATH) \
|
|
MMAKE_VPATH=. \
|
|
MMAKE_DIR=../../scripts \
|
|
DESTDIR=$(DESTDIR) \
|
|
../../scripts/mmake $(MMAKEFLAGS)
|
|
|
|
GENERATED_DOCS = README INSTALL WORK_IN_PROGRESS TODO
|
|
|
|
# If you change these, you will also need to change the files indicated
|
|
# in scripts/c2init.in.
|
|
RT_LIB_NAME = mer_rt
|
|
STD_LIB_NAME = mer_std
|
|
TRACE_LIB_NAME = mer_trace
|
|
EVENTSPEC_LIB_NAME = mer_eventspec
|
|
SSDB_LIB_NAME = mer_ssdb
|
|
MDBCOMP_LIB_NAME = mer_mdbcomp
|
|
BROWSER_LIB_NAME = mer_browser
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# `mmake dep' ensures that the .dep files exist;
|
|
# `mmake depend' forces them to be remade to ensure that they are up-to-date.
|
|
|
|
.PHONY: dep
|
|
dep: dep_library \
|
|
dep_ssdb \
|
|
dep_mdbcomp \
|
|
dep_browser \
|
|
dep_grade_lib \
|
|
dep_compiler \
|
|
dep_slice \
|
|
dep_profiler \
|
|
dep_deep_profiler \
|
|
dep_mfilterjavac
|
|
|
|
.PHONY: dep_library
|
|
dep_library: library/$(deps_subdir)$(STD_LIB_NAME).dep
|
|
|
|
library/$(deps_subdir)$(STD_LIB_NAME).dep:
|
|
+cd library && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: dep_mdbcomp
|
|
dep_mdbcomp: \
|
|
mdbcomp/$(deps_subdir)$(MDBCOMP_LIB_NAME).dep
|
|
|
|
mdbcomp/$(deps_subdir)$(MDBCOMP_LIB_NAME).dep:
|
|
+cd mdbcomp && $(SUBDIR_MMAKE) $(MDBCOMP_LIB_NAME).depend
|
|
|
|
.PHONY: dep_browser
|
|
dep_browser: \
|
|
browser/$(deps_subdir)$(BROWSER_LIB_NAME).dep
|
|
|
|
.PHONY: dep_browser_aux
|
|
dep_browser_aux: \
|
|
browser/$(deps_subdir)browse_test.dep \
|
|
browser/$(deps_subdir)declarative_test.dep
|
|
|
|
.PHONY: dep_browser_all
|
|
dep_browser_all: \
|
|
browser/$(deps_subdir)$(BROWSER_LIB_NAME).dep \
|
|
browser/$(deps_subdir)browse_test.dep \
|
|
browser/$(deps_subdir)declarative_test.dep
|
|
|
|
browser/$(deps_subdir)$(BROWSER_LIB_NAME).dep:
|
|
+cd browser && $(SUBDIR_MMAKE) $(BROWSER_LIB_NAME).depend
|
|
|
|
browser/$(deps_subdir)browse_test.dep:
|
|
+cd browser && $(SUBDIR_MMAKE) browse_test.depend
|
|
|
|
browser/$(deps_subdir)declarative_test.dep:
|
|
+cd browser && $(SUBDIR_MMAKE) declarative_test.depend
|
|
|
|
.PHONY: dep_ssdb
|
|
dep_ssdb: \
|
|
ssdb/$(deps_subdir)$(SSDB_LIB_NAME).dep
|
|
|
|
ssdb/$(deps_subdir)$(SSDB_LIB_NAME).dep:
|
|
+cd ssdb && $(SUBDIR_MMAKE) $(SSDB_LIB_NAME).depend
|
|
|
|
.PHONY: dep_compiler
|
|
dep_compiler: compiler/$(deps_subdir)mercury_compile.dep
|
|
|
|
compiler/$(deps_subdir)mercury_compile.dep: library/$(deps_subdir)$(STD_LIB_NAME).dep
|
|
+cd compiler && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: dep_grade_lib
|
|
dep_grade_lib: grade_lib/$(deps_subdir)/choose_grade.dep \
|
|
grade_lib/$(deps_subdir)/test_grades.dep \
|
|
grade_lib/$(deps_subdir)/try_all_grade_structs.dep
|
|
|
|
grade_lib/$(deps_subdir)/choose_grade.dep \
|
|
grade_lib/$(deps_subdir)/test_grades.dep \
|
|
grade_lib/$(deps_subdir)/try_all_grade_structs.dep:
|
|
+cd grade_lib && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: dep_slice
|
|
dep_slice: slice/$(deps_subdir)mcov.dep \
|
|
slice/$(deps_subdir)mslice.dep \
|
|
slice/$(deps_subdir)mdice.dep \
|
|
slice/$(deps_subdir)mtc_union.dep \
|
|
slice/$(deps_subdir)mtc_diff.dep
|
|
|
|
slice/$(deps_subdir)mslice.dep \
|
|
slice/$(deps_subdir)mdice.dep \
|
|
slice/$(deps_subdir)mcov.dep \
|
|
slice/$(deps_subdir)mtc_union.dep \
|
|
slice/$(deps_subdir)mtc_diff.dep:
|
|
+cd slice && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: dep_profiler
|
|
dep_profiler: profiler/$(deps_subdir)mercury_profile.dep
|
|
|
|
profiler/$(deps_subdir)mercury_profile.dep: \
|
|
library/$(deps_subdir)$(STD_LIB_NAME).dep
|
|
+cd profiler && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: dep_profiler_aux
|
|
dep_profiler_aux: profiler/$(deps_subdir)/demangle_test.dep
|
|
|
|
profiler/$(deps_subdir)/demangle_test.dep: \
|
|
library/$(deps_subdir)$(STD_LIB_NAME).dep
|
|
+cd profiler && $(SUBDIR_MMAKE) depend_aux
|
|
|
|
.PHONY: dep_deep_profiler
|
|
dep_deep_profiler: deep_profiler/$(deps_subdir)mdprof_cgi.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_test.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_dump.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_create_feedback.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_report_feedback.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_procrep.dep
|
|
|
|
deep_profiler/$(deps_subdir)mdprof_cgi.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_test.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_dump.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_create_feedback.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_report_feedback.dep \
|
|
deep_profiler/$(deps_subdir)mdprof_procrep.dep: \
|
|
library/$(deps_subdir)$(STD_LIB_NAME).dep
|
|
+cd deep_profiler && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: dep_mfilterjavac
|
|
dep_mfilterjavac: mfilterjavac/$(deps_subdir)mfilterjavac.dep
|
|
|
|
mfilterjavac/$(deps_subdir)mfilterjavac.dep: \
|
|
library/$(deps_subdir)$(STD_LIB_NAME).dep
|
|
+cd mfilterjavac && $(SUBDIR_MMAKE) depend
|
|
|
|
# depend_library MUST be done before depend_compiler and depend_profiler
|
|
|
|
.PHONY: depend
|
|
depend: depend_library \
|
|
depend_mdbcomp \
|
|
depend_browser \
|
|
depend_ssdb \
|
|
depend_grade_lib \
|
|
depend_compiler \
|
|
depend_slice \
|
|
depend_profiler \
|
|
depend_deep_profiler \
|
|
depend_mfilterjavac
|
|
|
|
.PHONY: depend_library
|
|
depend_library:
|
|
+cd library && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_mdbcomp
|
|
depend_mdbcomp:
|
|
+cd mdbcomp && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_browser
|
|
depend_browser:
|
|
+cd browser && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_ssdb
|
|
depend_ssdb:
|
|
+cd ssdb && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_grade_lib
|
|
depend_grade_lib:
|
|
+cd grade_lib && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_compiler
|
|
depend_compiler:
|
|
+cd compiler && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_slice
|
|
depend_slice:
|
|
+cd slice && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_profiler
|
|
depend_profiler:
|
|
+cd profiler && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_deep_profiler
|
|
depend_deep_profiler:
|
|
+cd deep_profiler && $(SUBDIR_MMAKE) depend
|
|
|
|
.PHONY: depend_mfilterjavac
|
|
depend_mfilterjavac:
|
|
+cd mfilterjavac && $(SUBDIR_MMAKE) depend
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# NOTE: there are two targets that concern the util directory here. The first
|
|
# is the "util_no_rt" target (short for "util no runtime") and the second is the
|
|
# "util" target. The first target builds those programs in the util directory
|
|
# that do *not* depend on the runtime directory, at present just mfiltercc.
|
|
# The second target builds the rest. Things are arranged in this fashion so
|
|
# that when building the source distribution we can build mfiltercc before
|
|
# it is required.
|
|
|
|
.PHONY: all
|
|
all: $(GENERATED_DOCS) util_no_rt $(SUBDIRS)
|
|
|
|
.PHONY: util_no_rt
|
|
util_no_rt: scripts
|
|
+cd util && $(SUBDIR_MMAKE) mfiltercc$(EXT_FOR_EXE)
|
|
|
|
.PHONY: util
|
|
util: scripts runtime
|
|
+cd util && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: scripts
|
|
scripts:
|
|
+cd scripts && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: boehm_gc
|
|
boehm_gc: scripts util_no_rt
|
|
+gc_grade=`scripts/ml --grade $(GRADE) --print-gc-grade`; \
|
|
cd boehm_gc && $(SUBDIR_MMAKE) GC_GRADE=$$gc_grade
|
|
|
|
.PHONY: runtime
|
|
runtime: scripts util_no_rt boehm_gc
|
|
+cd runtime && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: robdd
|
|
robdd: scripts boehm_gc runtime
|
|
cd robdd && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: library
|
|
library: dep_library scripts util boehm_gc runtime
|
|
+cd library && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: mdbcomp
|
|
mdbcomp: dep_mdbcomp scripts util boehm_gc runtime library
|
|
+cd mdbcomp && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: browser
|
|
browser: dep_browser scripts util boehm_gc runtime library mdbcomp
|
|
+cd browser && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: ssdb
|
|
ssdb: dep_ssdb scripts boehm_gc runtime library mdbcomp browser
|
|
+cd ssdb && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: runtime
|
|
trace: scripts boehm_gc runtime library mdbcomp browser
|
|
+cd trace && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: grade_lib
|
|
grade_lib: dep_grade_lib scripts util boehm_gc runtime library \
|
|
mdbcomp browser ssdb trace
|
|
+cd grade_lib && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: compiler
|
|
compiler: dep_compiler scripts util boehm_gc runtime library \
|
|
mdbcomp browser ssdb trace
|
|
+cd compiler && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: doc
|
|
doc: scripts util compiler profiler
|
|
+cd doc && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: slice
|
|
slice: dep_slice scripts util boehm_gc runtime library \
|
|
mdbcomp browser ssdb trace
|
|
+cd slice && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: profiler
|
|
profiler: dep_profiler scripts util boehm_gc runtime library \
|
|
mdbcomp browser ssdb trace
|
|
+cd profiler && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: deep_profiler
|
|
deep_profiler: dep_deep_profiler scripts util boehm_gc runtime library \
|
|
mdbcomp browser ssdb trace
|
|
+cd deep_profiler && $(SUBDIR_MMAKE)
|
|
|
|
.PHONY: mfilterjavac
|
|
mfilterjavac: dep_mfilterjavac scripts util boehm_gc runtime library \
|
|
mdbcomp browser ssdb trace
|
|
+cd mfilterjavac && $(SUBDIR_MMAKE)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
.PHONY: tags
|
|
tags: \
|
|
tags_library \
|
|
tags_mdbcomp \
|
|
tags_browser \
|
|
tags_ssdb \
|
|
tags_grade_lib \
|
|
tags_compiler \
|
|
tags_slice \
|
|
tags_profiler \
|
|
tags_deep_profiler \
|
|
tags_runtime \
|
|
tags_trace \
|
|
tags_mfilterjavac
|
|
|
|
.PHONY: tags_compiler
|
|
tags_compiler:
|
|
+cd compiler && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_library
|
|
tags_library:
|
|
+cd library && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_mdbcomp
|
|
tags_mdbcomp:
|
|
+cd mdbcomp && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_browser
|
|
tags_browser:
|
|
+cd browser && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_ssdb
|
|
tags_ssdb:
|
|
+cd ssdb && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_grade_lib
|
|
tags_grade_lib:
|
|
+cd grade_lib && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_slice
|
|
tags_slice:
|
|
+cd slice && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_profiler
|
|
tags_profiler:
|
|
+cd profiler && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_deep_profiler
|
|
tags_deep_profiler:
|
|
+cd deep_profiler && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_runtime
|
|
tags_runtime:
|
|
+cd runtime && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_trace
|
|
tags_trace:
|
|
+cd trace && $(SUBDIR_MMAKE) tags
|
|
|
|
.PHONY: tags_mfilterjavac
|
|
tags_mfilterjavac:
|
|
+cd mfilterjavac && $(SUBDIR_MMAKE) tags
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Remove from each of the listed directories mmc-generated files that don't
|
|
# belong there.
|
|
cleanint:
|
|
for dir in library mdbcomp browser ssdb grade_lib compiler \
|
|
slice profiler deep_profiler; \
|
|
do \
|
|
echo Looking for inappropriate files in the $$dir directory: ; \
|
|
( cd $$dir && ../tools/cleanint > .cleanint ) ; \
|
|
if test -s $$dir/.cleanint ; then \
|
|
cat $$dir/.cleanint ; \
|
|
else \
|
|
echo none found. ; \
|
|
fi \
|
|
done
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
aclocal.m4: configure.ac $(wildcard m4/*.m4)
|
|
aclocal -I m4
|
|
|
|
configure: configure.ac aclocal.m4
|
|
autoconf
|
|
|
|
config.status: configure VERSION
|
|
if [ -f ./config.status ]; then \
|
|
./config.status --recheck; \
|
|
else \
|
|
echo "======> You need to run configure!"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
Mmake.common: Mmake.common.in config.status
|
|
./config.status --file Mmake.common
|
|
|
|
README: .README.in VERSION
|
|
sed 's/@VERSION@/$(VERSION)/g' .README.in > README
|
|
|
|
INSTALL: .INSTALL.in VERSION
|
|
sed 's/@VERSION@/$(VERSION)/g' .INSTALL.in > INSTALL
|
|
chmod a+x INSTALL
|
|
|
|
ifeq ("$(LYNX)","")
|
|
HTML_TO_TEXT = cat
|
|
else
|
|
HTML_TO_TEXT = TERM=vt100 lynx -dump
|
|
endif
|
|
|
|
WORK_IN_PROGRESS: compiler/notes/work_in_progress.html
|
|
$(HTML_TO_TEXT) compiler/notes/work_in_progress.html > WORK_IN_PROGRESS
|
|
|
|
TODO: compiler/notes/todo.html
|
|
$(HTML_TO_TEXT) compiler/notes/todo.html > TODO
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Generally you should do a `mmake realclean' before doing `mmake tar'.
|
|
|
|
TAR = tar
|
|
|
|
.PHONY: tar
|
|
tar: $(GENERATED_DOCS)
|
|
touch Mmake.params
|
|
cd util && mmake
|
|
+cd runtime && $(SUBDIR_MMAKE) cs $(RT_LIB_NAME).init
|
|
+cd library && $(SUBDIR_MMAKE) depend
|
|
+cd library && $(SUBDIR_MMAKE) all-ints cs $(STD_LIB_NAME).init tags
|
|
+cd mdbcomp && $(SUBDIR_MMAKE) depend
|
|
+cd mdbcomp && $(SUBDIR_MMAKE) all-ints cs \
|
|
$(MDBCOMP_LIB_NAME).init tags
|
|
+cd browser && $(SUBDIR_MMAKE) depend
|
|
+cd browser && $(SUBDIR_MMAKE) all-ints cs \
|
|
$(BROWSER_LIB_NAME).init tags
|
|
+cd ssdb && $(SUBDIR_MMAKE) depend
|
|
+cd ssdb && $(SUBDIR_MMAKE) all-ints cs \
|
|
$(SSDB_LIB_NAME).init tags
|
|
+cd trace && $(SUBDIR_MMAKE) cs
|
|
+cd compiler && $(SUBDIR_MMAKE) depend
|
|
+cd compiler && $(SUBDIR_MMAKE) cs tags
|
|
+cd slice && $(SUBDIR_MMAKE) depend
|
|
+cd slice && $(SUBDIR_MMAKE) cs tags
|
|
+cd profiler && $(SUBDIR_MMAKE) depend
|
|
+cd profiler && $(SUBDIR_MMAKE) cs tags
|
|
+cd deep_profiler && $(SUBDIR_MMAKE) depend
|
|
+cd deep_profiler && $(SUBDIR_MMAKE) cs tags
|
|
+cd mfilterjavac && $(SUBDIR_MMAKE) depend
|
|
+cd mfilterjavac && $(SUBDIR_MMAKE) cs tags
|
|
+cd grade_lib && $(SUBDIR_MMAKE) depend
|
|
+cd grade_lib && $(SUBDIR_MMAKE) cs tags
|
|
+cd doc && $(SUBDIR_MMAKE) info html dvi mdb_doc
|
|
# the following commands might fail on Windows?
|
|
-cd bindist && $(SUBDIR_MMAKE) bindist.Makefile
|
|
-cd bindist && $(SUBDIR_MMAKE) bindist.INSTALL
|
|
+cd extras/dynamic_linking && $(SUBSUBDIR_MMAKE) sources
|
|
# clean up
|
|
cd scripts && mmake realclean
|
|
cd scripts && mmake canonical_grade
|
|
cd util && mmake realclean
|
|
cd doc && mmake distclean
|
|
-rm -f errs errs2 update.log
|
|
-rm -f config.status config.cache config.log configure.log a.out
|
|
-rm -f scripts/config.log
|
|
-rm -f runtime/mercury_conf.h boehm_gc/mercury_boehm_gc_conf.h
|
|
-rm -f Mmake.common
|
|
-rm -f extras/Mmake.params
|
|
-rm -rf autom4te.cache
|
|
-rm -rf bytecode
|
|
-rm -rf extras/quickcheck
|
|
-rm -rf .git
|
|
-rm -f .gitignore
|
|
-rm -f boehm_gc/.git boehm_gc/.gitignore boehm_gc/.gitattributes
|
|
-rm -f boehm_gc/.gitmodules
|
|
-rm -f boehm_gc/libatomic_ops/.git
|
|
-rm -f boehm_gc/libatomic_ops/.gitignore
|
|
-rm -f boehm_gc/libatomic_ops/.gitattributes
|
|
chmod -R a+r *
|
|
# Our invoker should have passed to us in ${SRCDIST_NAME}
|
|
# the name of the current directory in its parent directory.
|
|
# This name should have the form mercury-srcdist-$(VERSION),
|
|
# which matters, because it will also be the name of the directory
|
|
# that the tar file we are creating here will unpack into.
|
|
#
|
|
# Our invoker should also have put into ${TAR_FILE_NAME}
|
|
# the pathname of the .tar file we are creating.
|
|
# This should be an absolute pathname, and it must be
|
|
# outside the directory we are packing up.
|
|
cd .. && ( \
|
|
$(TAR) --dereference \
|
|
-cf ${TAR_FILE_NAME} ${SRCDIST_NAME} \
|
|
)
|
|
|
|
.PHONY: version
|
|
version:
|
|
@echo $(VERSION)
|
|
|
|
.PHONY: fullarch
|
|
fullarch:
|
|
@echo $(FULLARCH)
|
|
|
|
.PHONY: echo_libgrades
|
|
echo_libgrades:
|
|
@echo $(LIBGRADES)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# The code of the install rule is duplicated in bindist/bindist.Makefile.in.
|
|
|
|
.PHONY: install
|
|
install: install_main install_grades
|
|
@echo
|
|
@echo "-- Installation complete."
|
|
@echo
|
|
@if test -n "$(DESTDIR)"; then \
|
|
echo "-- The installation was placed in $(DESTDIR)."; \
|
|
echo "-- to complete installation copy the contents of"; \
|
|
echo "-- $(DESTDIR) to the root directory of your system(s)."; \
|
|
echo; \
|
|
fi
|
|
@echo "-- Don't forget to add $(FINAL_INSTALL_BINDIR) to your PATH,"
|
|
@echo "-- $(FINAL_INSTALL_MAN_DIR) to your MANPATH,"
|
|
@echo "-- and $(FINAL_INSTALL_INFO_DIR) to your INFOPATH,"
|
|
@if test $(ENABLE_DEEP_PROFILER) != yes || \
|
|
cmp -s deep_profiler/mdprof_cgi \
|
|
$(INSTALL_CGI_DIR)/mdprof_cgi; \
|
|
then true ; else \
|
|
echo "-- to copy deep_profiler/mdprof_cgi" \
|
|
"to $(FINAL_INSTALL_CGI_DIR),"; \
|
|
fi
|
|
@echo "-- and to add the following lines to the \`.emacs' file"
|
|
@echo "-- in your home directory:"
|
|
@echo " (add-to-list 'load-path "
|
|
@echo " \"$(FINAL_INSTALL_ELISP_DIR)\")"
|
|
@echo " (autoload 'mdb \"gud\" \"Invoke the Mercury debugger\" t)"
|
|
|
|
.PHONY: install_main
|
|
install_main: all \
|
|
install_scripts \
|
|
install_util \
|
|
install_runtime \
|
|
install_boehm_gc \
|
|
install_library \
|
|
install_mdbcomp \
|
|
install_browser \
|
|
install_ssdb \
|
|
install_trace \
|
|
install_compiler \
|
|
install_mfilterjavac \
|
|
install_slice \
|
|
install_profiler \
|
|
install_deep_profiler \
|
|
install_doc \
|
|
install_config
|
|
|
|
.PHONY: install_scripts
|
|
install_scripts: scripts
|
|
+cd scripts && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_util
|
|
install_util: util
|
|
+cd util && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_config
|
|
install_config:
|
|
[ -d $(INSTALL_RECONF_DIR) ] || mkdir -p $(INSTALL_RECONF_DIR)
|
|
cp VERSION aclocal.m4 configure configure.ac config.guess \
|
|
config.sub install-sh $(INSTALL_RECONF_DIR)
|
|
|
|
.PHONY: install_runtime
|
|
install_runtime: runtime
|
|
+cd runtime && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_trace
|
|
install_trace: trace
|
|
+cd trace && $(SUBDIR_MMAKE) install
|
|
|
|
# When building the compiler in a non-C grade the header files for the Boehm GC
|
|
# still need to be installed, otherwise an installed non-C grade compiler won't
|
|
# be able to compile anything in .gc grades.
|
|
#
|
|
.PHONY: install_boehm_gc
|
|
ifeq ("$(filter csharp% java%,$(GRADE))","")
|
|
install_boehm_gc: boehm_gc
|
|
+gc_grade=`scripts/ml --grade $(GRADE) --print-gc-grade`; \
|
|
cd boehm_gc && $(SUBDIR_MMAKE) install GC_GRADE=$$gc_grade
|
|
else
|
|
install_boehm_gc: boehm_gc
|
|
cd boehm_gc && $(SUBDIR_MMAKE) install_headers GC_GRADE=gc
|
|
endif
|
|
|
|
.PHONY: install_library
|
|
install_library: dep_library library
|
|
+cd library && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_mdbcomp
|
|
install_mdbcomp: dep_mdbcomp mdbcomp
|
|
+cd mdbcomp && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_browser
|
|
install_browser: dep_browser browser
|
|
+cd browser && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_ssdb
|
|
install_ssdb: dep_ssdb ssdb
|
|
+cd ssdb && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_compiler
|
|
install_compiler: dep_compiler compiler
|
|
+cd compiler && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_mfilterjavac
|
|
install_mfilterjavac: dep_mfilterjavac mfilterjavac
|
|
+cd mfilterjavac && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_doc
|
|
install_doc: doc
|
|
+cd doc && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_slice
|
|
install_slice: slice
|
|
+cd slice && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_profiler
|
|
install_profiler: profiler
|
|
+cd profiler && $(SUBDIR_MMAKE) install
|
|
|
|
.PHONY: install_deep_profiler
|
|
install_deep_profiler: deep_profiler
|
|
+cd deep_profiler && $(SUBDIR_MMAKE) install
|
|
|
|
# LIBGRADE_SUFFIXES = .m .int3 .date3 .int2 .int .date .opt .optdate \
|
|
# .trans_opt .trans_opt_date .d .mh .mih .c_date .c .o .pic_o
|
|
|
|
ifeq ($(CROSS_COMPILING),yes)
|
|
OVERRIDE_MC_FOR_LIBGRADE =
|
|
else
|
|
# We must override the paths in the mmc script in case the compiler was
|
|
# installed to a temporary location, using DESTDIR.
|
|
OVERRIDE_MC_FOR_LIBGRADE = MC=mmc \
|
|
MERCURY_COMPILER=$(INSTALL_BINDIR)/mercury_compile \
|
|
MERCURY_CONFIG_DIR=$(INSTALL_LIBDIR)
|
|
endif
|
|
|
|
.PHONY: install_grades
|
|
install_grades: install_main
|
|
# Use the newly installed compiler to build the libraries in various
|
|
# different grades. Except when cross-compiling, we override MC=mmc so
|
|
# that we use the mmc from the scripts directory, which runs the newly
|
|
# installed compiler, rather than using the bootstrap compiler.
|
|
#
|
|
# Compile different grades in different directories, so that we can
|
|
# optionally preserve all the directories, and include them in
|
|
# a distribution.
|
|
#
|
|
# Force mmc --make for grades which require it.
|
|
+for grade in x $(LIBGRADES); do \
|
|
if [ "$${grade}" = "x" -o "$${grade}" = "$(GRADE)" ]; then \
|
|
continue; \
|
|
fi; \
|
|
gc_grade=`scripts/ml --grade $${grade} --print-gc-grade`; \
|
|
IWS=`/bin/pwd`/install_grade_dir.$${grade}; \
|
|
( \
|
|
case $${grade} in \
|
|
csharp*|java*) MMAKE_USE_MMC_MAKE=yes; \
|
|
esac; \
|
|
scripts/prepare_install_dir $${IWS} && \
|
|
( cd $${IWS}/boehm_gc && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
GC_GRADE=$${gc_grade} install_lib ) && \
|
|
( cd $${IWS}/runtime && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
install_lib ) && \
|
|
( cd $${IWS}/library && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
depend && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
install_library ) && \
|
|
( cd $${IWS}/mdbcomp && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
depend && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
install_library ) && \
|
|
( cd $${IWS}/browser && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
depend && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
install_library ) && \
|
|
( cd $${IWS}/ssdb && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
depend && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
install_library ) && \
|
|
( cd $${IWS}/trace && \
|
|
$(SUBDIR_MMAKE) $(OVERRIDE_MC_FOR_LIBGRADE) \
|
|
GRADE=$${grade} WORKSPACE=$${IWS} \
|
|
install_lib ) && \
|
|
true \
|
|
) || \
|
|
{ echo "To clean up from failed install, remove $${IWS}"; \
|
|
exit 1; }; \
|
|
if test ! -f .leave_tmp_dir; then rm -fr $${IWS}; fi; \
|
|
done;
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
#
|
|
# Various horrible hacks for gnu-win32 on Windows.
|
|
#
|
|
|
|
# `make touch_files' is a work-around for the broken gnu-win32 `tar'
|
|
# that loses all the file dates.
|
|
.PHONY: touch_files
|
|
touch_files:
|
|
-find . | xargs touch
|
|
sleep 1
|
|
touch library/*.date*
|
|
touch library/*.optdate
|
|
chmod +w library/*.dep
|
|
touch library/*.dep
|
|
touch mdbcomp/*.date*
|
|
touch mdbcomp/*.optdate
|
|
chmod +w mdbcomp/*.dep
|
|
touch mdbcomp/*.dep
|
|
touch browser/*.date*
|
|
touch browser/*.optdate
|
|
chmod +w browser/*.dep
|
|
touch browser/*.dep
|
|
touch ssdb/*.date*
|
|
touch ssdb/*.optdate
|
|
chmod +w ssdb/*.dep
|
|
touch ssdb/*.dep
|
|
touch grade_lib/*.date*
|
|
chmod +w grade_lib/*.dep
|
|
touch grade_lib/*.dep
|
|
touch compiler/*.date*
|
|
chmod +w compiler/*.dep
|
|
touch compiler/*.dep
|
|
touch slice/*.date*
|
|
chmod +w slice/*.dep
|
|
touch slice/*.date*
|
|
touch profiler/*.date*
|
|
chmod +w profiler/*.dep
|
|
touch profiler/*.dep
|
|
touch deep_profiler/*.date*
|
|
chmod +w deep_profiler/*.dep
|
|
touch deep_profiler/*.dep
|
|
touch doc/*.texi configure
|
|
sleep 1
|
|
touch boehm_gc/*.c
|
|
touch runtime/*.c
|
|
touch library/*.c
|
|
touch mdbcomp/*.c
|
|
touch browser/*.c
|
|
touch ssdb/*.c
|
|
touch trace/*.c
|
|
touch compiler/*.c
|
|
touch slice/*.c
|
|
touch profiler/*.c
|
|
touch deep_profiler/*.c
|
|
touch mfilterjavac/*.c
|
|
touch doc/*.info doc/*.dvi doc/*.html config.status
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
.PHONY: uninstall
|
|
uninstall:
|
|
+cd compiler; $(SUBDIR_MMAKE) uninstall
|
|
+cd deep_profiler; $(SUBDIR_MMAKE) uninstall
|
|
+cd doc; $(SUBDIR_MMAKE) uninstall
|
|
+cd mfilterjavac; $(SUBDIR_MMAKE) uninstall
|
|
+cd profiler; $(SUBDIR_MMAKE) uninstall
|
|
+cd scripts; $(SUBDIR_MMAKE) uninstall
|
|
+cd slice; $(SUBDIR_MMAKE) uninstall
|
|
+cd util; $(SUBDIR_MMAKE) uninstall
|
|
-rm -r $(INSTALL_LIBDIR)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
.PHONY: bindist
|
|
bindist: WORK_IN_PROGRESS TODO
|
|
cd bindist; \
|
|
PATH="$(INSTALL_PREFIX)/bin:$$PATH" \
|
|
MMAKE_DIR="$(INSTALL_MMAKE_DIR)" \
|
|
mmake -v binary_distribution
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
clean: clean_tests clean_subdirs clean_extras
|
|
|
|
.PHONY: clean_subdirs
|
|
clean_subdirs:
|
|
+for dir in $(SUBDIRS); do \
|
|
if [ "$$dir" = scripts ]; then continue; fi; \
|
|
(cd $$dir; $(SUBDIR_MMAKE) clean) \
|
|
done
|
|
|
|
.PHONY: clean_tests
|
|
clean_tests:
|
|
+if test -d tests; then \
|
|
(cd tests; $(MMAKE) $(MMAKEFLAGS) clean) \
|
|
fi
|
|
|
|
realclean: realclean_tests realclean_subdirs realclean_local
|
|
+cd scripts; $(SUBDIR_MMAKE) realclean
|
|
|
|
.PHONY: clean_extras
|
|
clean_extras:
|
|
+if test -d extras; then \
|
|
(cd extras; $(MMAKE) $(MMAKEFLAGS) clean) \
|
|
fi
|
|
|
|
.PHONY: realclean_local
|
|
realclean_local: realclean_config realclean_docs realclean_extras
|
|
|
|
.PHONY: realclean_subdirs
|
|
realclean_subdirs: clean_subdirs
|
|
rm -rf stage[1-3] stage[1-3].*
|
|
rm -rf tests/PASSED_TC_DIR tests/FAILED_TC_DIR
|
|
+for dir in $(SUBDIRS); do \
|
|
if [ "$$dir" = scripts ]; then continue; fi; \
|
|
(cd $$dir; $(SUBDIR_MMAKE) realclean) \
|
|
done
|
|
|
|
.PHONY: realclean_docs
|
|
realclean_docs:
|
|
rm -f $(GENERATED_DOCS)
|
|
|
|
.PHONY: realclean_config
|
|
realclean_config:
|
|
rm -f config.cache config.status config.log configure.log configure.help
|
|
|
|
.PHONY: realclean_tests
|
|
realclean_tests:
|
|
+if test -d tests; then \
|
|
(cd tests; $(MMAKE) $(MMAKEFLAGS) realclean) \
|
|
fi
|
|
|
|
.PHONY: realclean_extras
|
|
realclean_extras:
|
|
+if test -d extras; then \
|
|
(cd extras; $(MMAKE) $(MMAKEFLAGS) realclean) \
|
|
fi
|
|
|
|
#-----------------------------------------------------------------------------#
|