#
# target.mk
#
-# Standard targets for fptools
+# Standard targets for GHC
#
#################################################################################
#
# This file contain three groups of target rules:
#
-# 1. FPtools targets
+# 1. GHC targets
# depend*
# runtests*
#
# 2. GNU standard targets
# all*
-# install* uninstall installcheck installdirs
+# install* installcheck installdirs
# install-docs*
# clean* distclean* mostlyclean* maintainer-clean*
# tags*
-# dvi ps (no info) FPTOOLS adds: pdf rtf html
+# dvi ps (no info) GHC adds: pdf rtf html chm HxS
# check
#
# 3. Some of the above targets have a version that
include $(TOP)/mk/suffix.mk
##################################################################
-# FPtools standard targets
+# GHC standard targets
#
# depend:
#
# will ignore any errors. This is in case there are systems that
# don't have the Unix man page documentation system installed.
#
-# `uninstall'
-# Delete all the installed files that the `install' target would
-# create (but not the noninstalled files such as `make all' would
-# create).
-#
# `clean'
#
# Delete all files from the current directory that are normally
# `TAGS'
# Update a tags table for this program.
#
-# `dvi' `ps' `pdf' `html' `rtf'
+# `dvi' `ps' `pdf' `html' `chm' `HxS' `rtf'
# Generate DVI/PS/PDF files for LaTeX/DocBook docs. Not everything is
# supported everywhere, but the intention is to standardise on DocBook
# producing all formats.
# directories where files are installed, and their parent
# directories. There is a script called `mkinstalldirs' which is
# convenient for this; find it in the Texinfo package.
-# (FPTOOLS: we use a close relative of the suggested script, situated
+# (GHC: we use a close relative of the suggested script, situated
# in glafp-utils/mkdirhier -- SOF)
# Extra stuff for compiling Haskell files with $(SplitObjs):
-HC_SPLIT_PRE = \
- $(RM) $@; if [ ! -d $(basename $@)_split ]; then mkdir $(basename $@)_split; else \
- $(FIND) $(basename $@)_split -name '*.$(way_)o' -print | xargs $(RM) __rm_food; fi
-ifeq "$(GhcWithInterpreter)" "YES"
-ifeq "$(LdIsGNULd)" "YES"
-# If ld is GNU ld, we can use a linker script to pass the names of the
-# input files. This avoids problems with limits on the length of the
-# ld command line, which we run into for large Haskell modules.
-HC_SPLIT_POST = \
- ( cd $(basename $@)_split; \
- $(RM) ld.script; \
- touch ld.script; \
- echo "INPUT(" *.$(way_)o ")" >>ld.script; \
- $(LD) -r $(LD_X) -o ../$(notdir $@) ld.script; \
- )
-else
-HC_SPLIT_POST = \
- ( cd $(basename $@)_split; \
- $(LD) -r $(LD_X) -o ../$(notdir $@) *.$(way_)o; \
- )
-endif # LdIsGNULd == YES
-else
-HC_SPLIT_POST = touch $@
-endif # GhcWithInterpreter == YES
-
-SRC_HC_PRE_OPTS += $(HC_SPLIT_PRE);
-SRC_HC_POST_OPTS += $(HC_SPLIT_POST);
-
#
# If (Haskell) object files are split, cleaning up
# consist of descending into the directories where
ifneq "$(PACKAGE) $(IS_CBITS_LIB)" "std YES"
ifneq "$(PACKAGE)" "rts"
SRC_BLD_DLL_OPTS += -lHSstd_cbits_imp -L$(GHC_LIB_DIR)/std/cbits
-SRC_BLD_DLL_OPTS += -lHSrts_$(way_)imp -L$(GHC_RUNTIME_DIR)
+SRC_BLD_DLL_OPTS += -lHSrts_$(way_)imp -L$(GHC_RTS_DIR)
ifneq "$(PACKAGE)" "std"
ifeq "$(IS_CBITS_LIB)" ""
SRC_BLD_DLL_OPTS += -lHSstd_$(way_)imp -L$(GHC_LIB_DIR)/std
endif
endif
-SRC_BLD_DLL_OPTS += -lgmp -L. -L$(GHC_RUNTIME_DIR)/gmp
+SRC_BLD_DLL_OPTS += -lgmp -L. -L$(GHC_RTS_DIR)/gmp
ifeq "$(IS_CBITS_LIB)" ""
SRC_BLD_DLL_OPTS += $(patsubst %,-lHS%_$(way_)imp, $(PACKAGE_DEPS))
SRC_BLD_DLL_OPTS += $(patsubst %,-L../%, $(PACKAGE_DEPS))
###########################################
#
-# Targets: install install-strip uninstall
+# Targets: install install-strip
#
###########################################
# friends can be overridden from their original settings in mk/config.mk.in
# || mk/build.mk
#
-.PHONY: install install-docs installdirs install-strip install-dirs uninstall install-docs show-install
+.PHONY: install install-docs installdirs install-strip install-dirs install-docs show-install
show-install :
@echo "bindir = $(bindir)"
@$(INSTALL_DIR) $(libexecdir)
-for i in $(INSTALL_LIBEXECS); do \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(libexecdir); \
+ if test "$(darwin_TARGET_OS)" = "1"; then \
+ sh $(FPTOOLS_TOP)/mk/fix_install_names.sh $(libdir) $(libexecdir)/`basename $$i` ; \
+ fi ; \
done
endif
# TODO: The following could be an entry for an Obfuscated Makefile Contest...
ifneq "$(strip $(INSTALL_XML_DOC))" ""
ifneq "$(XMLDocWays)" ""
-install-docs:: $(foreach i,$(XMLDocWays),$(INSTALL_XML_DOC)$(patsubst %.html-no-chunks,%.html,$(patsubst %.htmlhelp,%.chm,$(patsubst %.html,%/index.html,.$(i)))))
+install-docs:: $(foreach i,$(XMLDocWays),$(INSTALL_XML_DOC)$(patsubst %.html-no-chunks,%.html,$(patsubst %.html,%/index.html,.$(i))))
@$(INSTALL_DIR) $(datadir)
@for i in $(XMLDocWays); do \
if [ $$i = "html" ]; then \
echo "( cd $(INSTALL_XML_DOC) && $(CP) * $(datadir)/html/$(INSTALL_XML_DOC) )" ; \
( cd $(INSTALL_XML_DOC) && $(CP) * $(datadir)/html/$(INSTALL_XML_DOC) ) ; \
else \
- echo $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC)`echo .$$i | sed s/\.htmlhelp/.chm/ | sed s/\.html-no-chunks/.html/` $(datadir); \
- $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC)`echo .$$i | sed s/\.htmlhelp/.chm/ | sed s/\.html-no-chunks/.html/` $(datadir); \
+ $(INSTALL_DIR) $(datadir)/doc; \
+ echo $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC)`echo .$$i | sed s/\.html-no-chunks/.html/` $(datadir)/doc; \
+ $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC)`echo .$$i | sed s/\.html-no-chunks/.html/` $(datadir)/doc; \
fi; \
if [ $$i = "html-no-chunks" ]; then \
- echo $(CP) $(FPTOOLS_CSS_ABS) $(datadir); \
- $(CP) $(FPTOOLS_CSS_ABS) $(datadir); \
+ echo $(CP) $(FPTOOLS_CSS_ABS) $(datadir)/doc; \
+ $(CP) $(FPTOOLS_CSS_ABS) $(datadir)/doc; \
fi \
done
endif
endif
#
-# Use with care..
-#
-uninstall::
- @for i in $(INSTALL_PROGS) "" ; do \
- if test "$$i"; then \
- echo rm -f $(bindir)/`basename $$i`; \
- rm -f $(bindir)/`basename $$i`; \
- fi; \
- done
- @for i in $(INSTALL_LIBS) ""; do \
- if test "$$i"; then \
- echo rm -f $(libdir)/`basename $$i`; \
- rm -f $(libdir)/`basename $$i`; \
- fi; \
- done
- @for i in $(INSTALL_LIBEXECS) ""; do \
- if test "$$i"; then \
- echo rm -f $(libexecdir)/`basename $$i`; \
- rm -f $(libexecdir)/`basename $$i`; \
- fi; \
- done
- @for i in $(INSTALL_DATAS) ""; do \
- if test "$$i"; then \
- echo rm -f $(datadir)/`basename $$i`; \
- rm -f $(datadir)/`basename $$i`; \
- fi; \
- done
-
-#
# install-strip is from the GNU Makefile standard.
#
ifneq "$(way)" ""
#
################################################################################
-.PHONY: html html-no-chunks htmlhelp fo dvi ps pdf
+.PHONY: html html-no-chunks chm HxS fo dvi ps pdf
ifneq "$(XML_DOC)" ""
XML_HTML = $(addsuffix /index.html,$(basename $(XML_DOC)))
XML_HTML_NO_CHUNKS = $(addsuffix .html,$(XML_DOC))
-XML_HTMLHELP = $(addsuffix -htmlhelp/index.html,$(basename $(XML_DOC)))
+XML_CHM = $(addsuffix .chm,$(XML_DOC))
+XML_HxS = $(addsuffix .HxS,$(XML_DOC))
XML_FO = $(addsuffix .fo,$(XML_DOC))
XML_DVI = $(addsuffix .dvi,$(XML_DOC))
XML_PS = $(addsuffix .ps,$(XML_DOC))
html :: $(XML_HTML)
html-no-chunks :: $(XML_HTML_NO_CHUNKS)
-htmlhelp :: $(XML_HTMLHELP)
+chm :: $(XML_CHM)
+HxS :: $(XML_HxS)
fo :: $(XML_FO)
dvi :: $(XML_DVI)
ps :: $(XML_PS)
# Expects: $(WAYS) the possible "way" strings to one of
# which $(way) will be set
+ifneq "$(way)" ""
+ifeq "$(findstring $(way), $(WAYS))" ""
+$(error Unknown way $(way))
+endif
+endif
# So how does $(way) ever get set to anything? Answer, we recursively
# invoke make, setting $(way) on the command line.
# -------------------------------------------------------------------------
# Rules to invoke the current target recursively for each way
-ifneq "$(WAYS)" ""
+ifneq "$(strip $(WAYS))" ""
ifeq "$(way)" ""
# NB: the targets exclude
# since these are way-independent
all docs TAGS clean distclean mostlyclean maintainer-clean install ::
@echo "------------------------------------------------------------------------"
- @echo "===fptools== Recursively making \`$@' for ways: $(WAYS) ..."
+ @echo "== Recursively making \`$@' for ways: $(WAYS) ..."
@echo "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"
# Don't rely on -e working, instead we check exit return codes from sub-makes.
- @case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
+ case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
for i in $(WAYS) ; do \
echo "------------------------------------------------------------------------"; \
- echo "==fptools== $(MAKE) way=$$i $@;"; \
+ echo "== $(MAKE) way=$$i $@;"; \
echo "PWD = $(shell pwd)"; \
echo "------------------------------------------------------------------------"; \
$(MAKE) way=$$i --no-print-directory $(MFLAGS) $@ ; \
if [ $$? -eq 0 ] ; then true; else exit $$x_on_err; fi; \
done
@echo "------------------------------------------------------------------------"
- @echo "===fptools== Finished recursively making \`$@' for ways: $(WAYS) ..."
+ @echo "== Finished recursively making \`$@' for ways: $(WAYS) ..."
@echo "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"
# the --no-print-directory flag which is passed to recursive
# invocations of make.
#
-#ifeq "$(way)" ""
+ifeq "$(way)" ""
ifneq "$(SUBDIRS)" ""
# we override the 'boot', 'all' and 'install' targets in the top
INSTALL_DOCS_TARGET = install-docs
endif
-$(ALL_TARGET) docs runtests $(BOOT_TARGET) TAGS clean distclean mostlyclean maintainer-clean $(INSTALL_TARGET) $(INSTALL_DOCS_TARGET) html ps dvi txt::
+$(ALL_TARGET) docs runtests $(BOOT_TARGET) TAGS clean distclean mostlyclean maintainer-clean $(INSTALL_TARGET) $(INSTALL_DOCS_TARGET) html chm HxS ps dvi txt::
@echo "------------------------------------------------------------------------"
- @echo "===fptools== Recursively making \`$@' in $(SUBDIRS) ..."
+ @echo "== Recursively making \`$@' in $(SUBDIRS) ..."
@echo "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"
# Don't rely on -e working, instead we check exit return codes from sub-makes.
@case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
+ if [ $$x_on_err -eq 0 ]; \
+ then echo "Won't exit on error due to MFLAGS: ${MFLAGS}"; \
+ fi; \
for i in $(SUBDIRS); do \
echo "------------------------------------------------------------------------"; \
- echo "==fptools== $(MAKE) $@ $(MFLAGS);"; \
+ echo "== $(MAKE) $@ $(MFLAGS);"; \
echo " in $(shell pwd)/$$i"; \
echo "------------------------------------------------------------------------"; \
$(MAKE) --no-print-directory -C $$i $(MFLAGS) $@; \
- if [ $$? -eq 0 -o $$x_on_err -eq 0 ] ; then true; else exit 1; fi; \
+ if [ $$? -eq 0 -o $$x_on_err -eq 0 ]; \
+ then echo "Finished making $@ in $$i": $$?; \
+ else echo "Failed making $@ in $$i": $$?; exit 1; \
+ fi; \
done
@echo "------------------------------------------------------------------------"
- @echo "===fptools== Finished making \`$@' in $(SUBDIRS) ..."
+ @echo "== Finished making \`$@' in $(SUBDIRS) ..."
@echo "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"
endif
-#endif
+endif
#
# Selectively building subdirectories.