Files
mercury/scripts/Mmakefile
Julien Fischer 03d0ca4712 Improve and update documentation of the MSVC port.
Branches: 11.07, main

Improve and update documentation of the MSVC port.

Add batch files for invoking mdb and mprof; avoid problem with mercury.bat.

README.MS-VisualC:
	Rewrite this file, it was very much out-of-date.
	The major changes are:

	+ we now describe how to set up a Cygwin or MSYS shell
  	  with MSVC available.

	+ the source distribution now works with MSVC.

	+ a list of the limitations of the MSVC port has been added.

	+ a description of how to set up the compiler so that it
	  works from the Windows command prompt has been added.

scripts/mercury/mercury.bat.in:
	Delete support for the MERCURY_COMPILER and MERCURY_CONFIG_DIR
	enviorment variables; the handling of them in this batch file
	doesn't appear to be portable across different versions of
	Windows and it's more important that this file work in the
	normal case.  (Keeping it simple is the way to ensure this.)

scripts/mdb.bat.in:
scripts/mprof.bat.in:
	Templates for invoking mdb and mprof on Windows.
	(I'm not sure how to reproduce all the functionality of the mdb
	script in a batch file, so the command line options provided by
	the mdb script aren't currently replicated here.)

configure.in:
scripts/Mmakefile:
	Add the new batch files.

scripts/Mercury.config.in:
	Use the Windows-style installation prefix on Cygwin systems.

browser/util.m:
	Use the conventional name for the I/O state.

	Use don't-care variables for the I/O state in foreign procs.
	This avoids suprious warnings from MSVC.
2011-11-08 03:11:42 +00:00

181 lines
5.5 KiB
Plaintext

#-----------------------------------------------------------------------------#
#-----------------------------------------------------------------------------#
# Copyright (C) 1996-2009, 2011 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 Mercury scripts
MAIN_TARGET=all
MERCURY_DIR=..
include $(MERCURY_DIR)/Mmake.common
#-----------------------------------------------------------------------------#
NONCONF_SCRIPTS = \
mprof_merge_runs \
mtc \
vpath_find
CONF_SCRIPTS = \
c2init \
canonical_grade \
mdb \
mdb.bat \
mdprof \
mercury.bat \
mercury_config \
mercury_update_interface \
mgnuc \
mkfifo_using_mknod \
ml \
mmake \
mmc \
mprof \
mprof.bat \
mtags \
prepare_install_dir
SCRIPTS = $(NONCONF_SCRIPTS) $(CONF_SCRIPTS)
CONF_FILES = \
Mercury.config.bootstrap \
Mercury.config \
Mmake.vars \
parse_ml_options.sh-subr
CONF_DEBUG_SCRIPTS = \
mdbrc
DEBUGGER_SCRIPTS = $(CONF_DEBUG_SCRIPTS) \
xul_tree.xsl \
mdb_open \
mdb_grep \
mdb_track
EMACS_SCRIPTS = gud.el
#-----------------------------------------------------------------------------#
# .SUFFIXES: .in
# we test membership of CONF_SCRIPTS and CONF_FILES, because testing $(@D)
# (the directory part of $*) does the wrong thing for Mercury.config.
# Not testing anything would make this rule apply even to ../Mmake.common.
# The grep is there to ensure that there were no mispelt autoconf variable
# names.
%:: %.in $(MERCURY_DIR)/config.status
@for file in $(CONF_SCRIPTS) ; do \
if test "$*" = "$$file" ; then \
$(MERCURY_DIR)/config.status --file=$* ; \
if grep -n '[^$$]@' $@ > /dev/null; \
then false; \
else true; \
fi ; \
chmod a+x $* ; \
fi \
done
@for file in $(CONF_FILES) $(CONF_DEBUG_SCRIPTS) ; do \
if test "$*" = "$$file" ; then \
$(MERCURY_DIR)/config.status --file=$* ; \
if grep -n '[^$$]@' $@ > /dev/null; \
then false; \
else true; \
fi \
fi \
done
#-----------------------------------------------------------------------------#
.PHONY: all
all: $(CONF_FILES) $(SCRIPTS) $(DEBUGGER_SCRIPTS) $(EMACS_SCRIPTS)
#-----------------------------------------------------------------------------#
parse_ml_options.sh-subr mgnuc canonical_grade: init_grade_options.sh-subr
parse_ml_options.sh-subr mgnuc canonical_grade: parse_grade_options.sh-subr
parse_ml_options.sh-subr mgnuc canonical_grade: final_grade_options.sh-subr
ml c2init: parse_ml_options.sh-subr
ml c2init canonical_grade: canonical_grade.sh-subr
mercury_config: ../configure.help
#-----------------------------------------------------------------------------#
.PHONY: install
install: install_mmake install_scripts install_config \
install_debugger_scripts install_emacs_scripts
.PHONY: install_dirs
install_dirs:
[ -d $(INSTALL_BINDIR) ] || mkdir -p $(INSTALL_BINDIR)
[ -d $(INSTALL_LIBDIR)/mmake ] || mkdir -p $(INSTALL_LIBDIR)/mmake
[ -d $(INSTALL_LIBDIR)/mdb ] || mkdir -p $(INSTALL_LIBDIR)/mdb
[ -d $(INSTALL_CONF_DIR) ] || mkdir -p $(INSTALL_CONF_DIR)
[ -d $(INSTALL_ELISP_DIR) ] || mkdir -p $(INSTALL_ELISP_DIR)
[ -d $(INSTALL_RECONF_DIR)/scripts ] || \
mkdir -p $(INSTALL_RECONF_DIR)/scripts
.PHONY: install_mmake
install_mmake: Mmake.vars Mmake.rules install_dirs
rm -f $(INSTALL_LIBDIR)/mmake/Mmake.vars
cp `vpath_find Mmake.vars Mmake.rules` $(INSTALL_LIBDIR)/mmake
.PHONY: install_scripts
install_scripts: $(SCRIPTS) install_dirs
# we move the installed `mmake' script before (re)installing it
# to avoid overwriting the script while it is running
# (just removing it doesn't work very well on win32, which will
# deny you permission to write the file while mmake is running).
-mv $(INSTALL_BINDIR)/mmake $(INSTALL_BINDIR)/mmake.old
cp $(SCRIPTS) $(INSTALL_BINDIR)
-for file in $(SCRIPTS); do \
chmod u+w $(INSTALL_BINDIR)/$$file ;\
done
cp *.in *.sh-subr $(SCRIPTS) $(INSTALL_RECONF_DIR)/scripts
-rm -f $(INSTALL_BINDIR)/mmake.old
.PHONY: install_config
install_config: Mercury.config install_dirs
rm -f $(INSTALL_CONF_DIR)/Mercury.config
cp `vpath_find Mercury.config` $(INSTALL_CONF_DIR)
.PHONY: install_debugger_scripts
install_debugger_scripts: $(DEBUGGER_SCRIPTS) install_dirs
# Reportedly old versions of Mercury
# used to install mdbrc as read-only.
# If that is the case, then we need to make sure
# that it gets made writable before we install the
# new version.
-chmod u+w $(INSTALL_LIBDIR)/mdb/*
cp $(DEBUGGER_SCRIPTS) $(INSTALL_LIBDIR)/mdb
.PHONY: install_emacs_scripts
install_emacs_scripts: $(EMACS_SCRIPTS) install_dirs
cp $(EMACS_SCRIPTS) $(INSTALL_ELISP_DIR)
#-----------------------------------------------------------------------------#
.PHONY: uninstall
uninstall:
-rm -r $(INSTALL_LIBDIR)/mmake
-cd $(INSTALL_BINDIR) && rm $(SCRIPTS)
-cd $(INSTALL_LIBDIR)/mdb && rm $(DEBUGGER_SCRIPTS)
# The reason why we don't uninstall $(EMACS_SCRIPTS) specifically here
# is that the uninstall rule in the top-level Mmakefile does an "rm -r"
# on $(INSTALL_LIBDIR), and the directory into which $(EMACS_SCRIPTS)
# is installed, $(INSTALL_ELISP_DIR), is configured to be a
# subdirectory of $(INSTALL_LIBDIR).
#-----------------------------------------------------------------------------#
realclean_local: clean_scripts
.PHONY: clean_scripts
clean_scripts:
for file in *.in; do rm -f `basename $$file .in`; done
#-----------------------------------------------------------------------------#