# install-docs*
# clean* distclean* mostlyclean* maintainer-clean*
# tags*
-# dvi ps (no info) FPTOOLS adds: pdf rtf html
+# dvi ps (no info) FPTOOLS adds: pdf rtf html chm HxS
# check
#
# 3. Some of the above targets have a version that
# Compiler produced files that are targets of the source's imports.
MKDEPENDHS_OBJ_SUFFICES=o
-ifneq "$(STAMP_PKG_CONF)" ""
+ifneq "$(BootingFromHc)" "YES"
PKGCONF_DEP = $(STAMP_PKG_CONF)
-else
-PKGCONF_DEP =
endif
-depend :: $(MKDEPENDHS_SRCS) $(MKDEPENDC_SRCS) $(STAMP_PKG_CONF)
+depend :: $(MKDEPENDHS_SRCS) $(MKDEPENDC_SRCS) $(PKGCONF_DEP)
@$(RM) .depend
@touch .depend
ifneq "$(DOC_SRCS)" ""
# `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.
all :: $(HS_PROG)
ifneq "$(BootingFromHc)" "YES"
-$(HS_PROG) :: $(HS_OBJS)
- $(HC) -o $@ $(HC_OPTS) $(LD_OPTS) $(HS_OBJS)
+$(HS_PROG) :: $(OBJS)
+ $(HC) -o $@ $(HC_OPTS) $(LD_OPTS) $(OBJS)
else
# see bootstrap.mk
-$(HS_PROG) :: $(HS_OBJS)
- $(CC) -o $@ $(HC_BOOT_CC_OPTS) $(HC_BOOT_LD_OPTS) $(HS_OBJS) $(HC_BOOT_LIBS)
+$(HS_PROG) :: $(OBJS)
+ $(CC) -o $@ $(HC_BOOT_CC_OPTS) $(HC_BOOT_LD_OPTS) $(OBJS) $(HC_BOOT_LIBS)
endif
endif
# whether HS_SRCS is empty or not.
#
+# can't split objs in way 'u', so we disable it here
+ifeq "$(way)" "u"
+SplitObjs = NO
+endif
+
ifneq "$(HS_SRCS)" ""
ifeq "$(SplitObjs)" "YES"
-# can't split objs in way 'u', so we disable it here
-ifneq "$(way)" "u"
-
SRC_HC_OPTS += -split-objs
# We generate the archive into a temporary file libfoo.a.tmp, then
# 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"
-HC_SPLIT_POST = (cd $(dir $@) && $(LD) -r $(LD_X) -o $(notdir $@) $(basename $(notdir $@))_split/*.$(way_)o)
-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
#
extraclean ::
- $(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' -print | xargs $(RM) __rm_food
+ $(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' -print -o -name ld.script -print | xargs $(RM) __rm_food
-rmdir $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) > /dev/null 2>&1
-endif # $(way) == u
endif # $(SplitObjs)
endif # $(HS_SRCS)
ifeq "$(StripLibraries)" "YES"
ifeq "$(SplitObjs)" "YES"
SRC_HC_POST_OPTS += \
- for i in $(basename $@)_split/*; do \
+ for i in $(basename $@)_split/*.$(way_)o; do \
$(LD) -r $(LD_X) -o $$i.tmp $$i; \
$(MV) $$i.tmp $$i; \
done
# within the various install targets instead.
#install:: install-dirs
-ifneq "$(INSTALL_PROGS)" ""
+#
+# Setting user/group ownership for the installed entities
+#
+ifneq "$(INSTALL_OWNER)" ""
+SRC_INSTALL_OPTS += -o $(INSTALL_OWNER)
+endif
+ifneq "$(INSTALL_GROUP)" ""
+SRC_INSTALL_OPTS += -g $(INSTALL_GROUP)
+endif
+
+
+ifneq "$(strip $(INSTALL_PROGS))" ""
#
# Here's an interesting one - when using the win32 version
@for i in $(INSTALL_PROGS); do \
echo $(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(bindir); \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(bindir) ; \
+ if test "$(darwin_TARGET_OS)" = "1"; then \
+ sh $(FPTOOLS_TOP)/mk/fix_install_names.sh $(libdir) $(bindir)/$$i ; \
+ fi ; \
done
endif
# Just like INSTALL_PROGS, but prefix with install sites bin/lib/data and
# install without stripping.
#
-ifneq "$(INSTALL_SCRIPTS)" ""
+ifneq "$(strip $(INSTALL_SCRIPTS))" ""
install:: $(INSTALL_SCRIPTS)
@$(INSTALL_DIR) $(bindir)
for i in $(INSTALL_SCRIPTS); do \
done
endif
-ifneq "$(INSTALL_LIB_SCRIPTS)" ""
+ifneq "$(strip $(INSTALL_LIB_SCRIPTS))" ""
install:: $(INSTALL_LIB_SCRIPTS)
@$(INSTALL_DIR) $(libdir)
for i in $(INSTALL_LIB_SCRIPTS); do \
done
endif
-ifneq "$(INSTALL_LIBEXEC_SCRIPTS)" ""
+ifneq "$(strip $(INSTALL_LIBEXEC_SCRIPTS))" ""
install:: $(INSTALL_LIBEXEC_SCRIPTS)
@$(INSTALL_DIR) $(libexecdir)
for i in $(INSTALL_LIBEXEC_SCRIPTS); do \
done
endif
-ifneq "$(INSTALL_LIBS)" ""
+ifneq "$(strip $(INSTALL_LIBS))" ""
install:: $(INSTALL_LIBS)
@$(INSTALL_DIR) $(libdir)
for i in $(INSTALL_LIBS); do \
$(INSTALL_DATA) -s $(INSTALL_OPTS) $$i $(libdir) ;; \
*.so) \
$(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(libdir) ;; \
+ *.dylib) \
+ $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(libdir); \
+ install_name_tool -id $(libdir)/`basename $$i` $(libdir)/`basename $$i` ;; \
*) \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(libdir); \
esac; \
done
endif
-ifneq "$(INSTALL_LIBEXECS)" ""
+ifneq "$(strip $(INSTALL_LIBEXECS))" ""
#
# See above comment next to defn of INSTALL_PROGS for what
# the purpose of this one-liner is.
@$(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
-ifneq "$(INSTALL_DATAS)" ""
+ifneq "$(strip $(INSTALL_DATAS))" ""
install:: $(INSTALL_DATAS)
@$(INSTALL_DIR) $(datadir)
for i in $(INSTALL_DATAS); do \
done
endif
-ifneq "$(INSTALL_IFACES)" ""
+ifneq "$(strip $(INSTALL_IFACES))" ""
install:: $(INSTALL_IFACES)
@$(INSTALL_DIR) $(ifacedir)
for i in $(INSTALL_IFACES); do \
done
endif
-ifneq "$(INSTALL_IFACES_WITH_DIRS)" ""
+ifneq "$(strip $(INSTALL_IFACES_WITH_DIRS))" ""
install:: $(INSTALL_IFACES_WITH_DIRS)
@$(INSTALL_DIR) $(ifacedir)
for i in $(INSTALL_IFACES_WITH_DIRS); do \
done
endif
-ifneq "$(INSTALL_INCLUDES)" ""
+ifneq "$(strip $(INSTALL_INCLUDES))" ""
install:: $(INSTALL_INCLUDES)
@$(INSTALL_DIR) $(includedir)
for i in $(INSTALL_INCLUDES); do \
done
endif
-ifneq "$(INSTALL_DOCS)" ""
+ifneq "$(strip $(INSTALL_DOCS))" ""
+ifneq "$(XMLDocWays)" ""
install-docs:: $(INSTALL_DOCS)
@$(INSTALL_DIR) $(datadir)
for i in $(INSTALL_DOCS); do \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(datadir); \
done
endif
+endif
-ifneq "$(INSTALL_SGML_DOC)" ""
-ifneq "$(SGMLDocWays)" ""
-install-docs:: $(foreach i,$(SGMLDocWays),$(INSTALL_SGML_DOC).$i)
+# 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 %.html,%/index.html,.$(i))))
@$(INSTALL_DIR) $(datadir)
- @for i in $(SGMLDocWays); do \
+ @for i in $(XMLDocWays); do \
if [ $$i = "html" ]; then \
$(INSTALL_DIR) $(datadir)/html; \
- echo $(CP) -r $(INSTALL_SGML_DOC) $(datadir)/html; \
- $(CP) -r $(INSTALL_SGML_DOC) $(datadir)/html; \
+ $(INSTALL_DIR) $(datadir)/html/$(INSTALL_XML_DOC); \
+ 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_SGML_DOC).$$i $(datadir); \
- $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$i $(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)/doc; \
+ $(CP) $(FPTOOLS_CSS_ABS) $(datadir)/doc; \
fi \
done
endif
################################################################################
#
-# SGML Documentation
+# DocBook XML Documentation
#
################################################################################
-.PHONY: dvi ps html pdf rtf
+.PHONY: html html-no-chunks chm HxS fo dvi ps pdf
-ifneq "$(SGML_DOC)" ""
+ifneq "$(XML_DOC)" ""
-all :: $(SGMLDocWays)
+all :: $(XMLDocWays)
-# multi-file SGML document: main document name is specified in $(SGML_DOC),
-# sub-documents (.sgml files) listed in $(SGML_SRCS).
+# multi-file XML document: main document name is specified in $(XML_DOC),
+# sub-documents (.xml files) listed in $(XML_SRCS).
-ifeq "$(SGML_SRCS)" ""
-SGML_SRCS = $(wildcard *.sgml)
+ifeq "$(XML_SRCS)" ""
+XML_SRCS = $(wildcard *.xml)
endif
-SGML_TEX = $(addsuffix .tex,$(SGML_DOC))
-SGML_DVI = $(addsuffix .dvi,$(SGML_DOC))
-SGML_PS = $(addsuffix .ps,$(SGML_DOC))
-SGML_PDF = $(addsuffix .pdf,$(SGML_DOC))
-SGML_RTF = $(addsuffix .rtf,$(SGML_DOC))
-SGML_HTML = $(addsuffix .html,$(SGML_DOC))
-# HTML output goes in a subdirectory on its own.
-SGML_TEXT = $(addsuffix .txt,$(SGML_DOC))
+XML_HTML = $(addsuffix /index.html,$(basename $(XML_DOC)))
+XML_HTML_NO_CHUNKS = $(addsuffix .html,$(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))
+XML_PDF = $(addsuffix .pdf,$(XML_DOC))
-$(SGML_DVI) $(SGML_PS) $(SGML_HTML) $(SGML_TEXT) $(SGML_PDF) :: $(SGML_SRCS)
+$(XML_HTML) $(XML_NO_CHUNKS_HTML) $(XML_FO) $(XML_DVI) $(XML_PS) $(XML_PDF) :: $(XML_SRCS)
-dvi :: $(SGML_DVI)
-ps :: $(SGML_PS)
-pdf :: $(SGML_PDF)
-rtf :: $(SGML_RTF)
-html :: $(SGML_HTML)
-txt :: $(SGML_TEXT)
+html :: $(XML_HTML)
+html-no-chunks :: $(XML_HTML_NO_CHUNKS)
+chm :: $(XML_CHM)
+HxS :: $(XML_HxS)
+fo :: $(XML_FO)
+dvi :: $(XML_DVI)
+ps :: $(XML_PS)
+pdf :: $(XML_PDF)
-CLEAN_FILES += $(SGML_TEXT) $(SGML_TEX) $(SGML_PS) $(SGML_DVI) $(SGML_PDF) $(SGML_RTF) $(SGML_HTML) $(SGML_DOC)-*.html
-# can't use $(SGML_SRCS) here, it was maybe used elsewhere
+CLEAN_FILES += $(XML_HTML_NO_CHUNKS) $(XML_FO) $(XML_DVI) $(XML_PS) $(XML_PDF)
extraclean ::
- $(RM) -rf DBTOHTML_OUTPUT_*
- $(RM) -rf *.junk/
- $(RM) -rf $(SGML_DOC)
+ $(RM) -rf $(XML_DOC).out $(FPTOOLS_CSS) $(basename $(XML_DOC)) $(basename $(XML_DOC))-htmlhelp
+
+validate ::
+ $(XMLLINT) --valid --noout $(XMLLINT_OPTS) $(XML_DOC).xml
endif
##############################################################################
# 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.
# 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 "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"
endif
-#endif
+endif
#
# Selectively building subdirectories.
$(SUBDIRS) ::
$(MAKE) -C $@ $(MFLAGS)
endif
+
+# -----------------------------------------------------------------------------
+# Further cleaning
+
+# Sometimes we want to clean things only after the recursve cleaning
+# has heppened (eg. if the files we're about to remove would affect
+# the recursive traversal).
+
+distclean::
+ rm -f $(LATE_DIST_CLEAN_FILES)
+
+maintainer-clean::
+ rm -f $(LATE_DIST_CLEAN_FILES)
+