# 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
$(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 $(basename $@)_split && $(LD) -r $(LD_X) -o ../$(notdir $@) *.$(way_)o)
+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
$(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' -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
+#
+# 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 "$(INSTALL_PROGS)" ""
#
@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
$(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; \
endif
ifneq "$(INSTALL_DOCS)" ""
-ifneq "$(SGMLDocWays)" ""
-install-docs:: $(INSTALL_DOCS)
- @$(INSTALL_DIR) $(datadir)
- for i in $(INSTALL_DOCS); do \
- $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(datadir); \
- done
-endif
ifneq "$(XMLDocWays)" ""
install-docs:: $(INSTALL_DOCS)
@$(INSTALL_DIR) $(datadir)
endif
endif
-# The following could be an entry for an Obfuscated Makefile Contest...
+# TODO: The following could be an entry for an Obfuscated Makefile Contest...
ifneq "$(INSTALL_XML_DOC)" ""
ifneq "$(XMLDocWays)" ""
-install-docs:: $(foreach i,$(XMLDocWays),$(INSTALL_XML_DOC)$(patsubst %.html-no-chunks,%.html,$(patsubst %.htmlhelp,%-htmlhelp/index.html,$(patsubst %.html,%-html/index.html,.$(i)))))
+install-docs:: $(foreach i,$(XMLDocWays),$(INSTALL_XML_DOC)$(patsubst %.html-no-chunks,%.html,$(patsubst %.htmlhelp,%.chm,$(patsubst %.html,%/index.html,.$(i)))))
@$(INSTALL_DIR) $(datadir)
@for i in $(XMLDocWays); do \
if [ $$i = "html" ]; then \
$(INSTALL_DIR) $(datadir)/html; \
- echo "( cd $(INSTALL_XML_DOC)-html && $(CP) * $(datadir)/html )" ; \
- ( cd $(INSTALL_XML_DOC)-html && $(CP) * $(datadir)/html ) ; \
- elif [ $$i = "htmlhelp" ]; then \
- $(INSTALL_DIR) $(datadir)/htmlhelp; \
- echo "( cd $(INSTALL_XML_DOC)-htmlhelp && $(CP) * $(datadir)/htmlhelp )" ; \
- ( cd $(INSTALL_XML_DOC)-htmlhelp && $(CP) * $(datadir)/htmlhelp ) ; \
+ $(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_XML_DOC)`echo .$$i | sed s/\.html-no-chunks/.html/` $(datadir); \
- $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC)`echo .$$i | sed s/\.html-no-chunks/.html/` $(datadir); \
+ 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); \
fi; \
if [ $$i = "html-no-chunks" ]; then \
echo $(CP) $(FPTOOLS_CSS_ABS) $(datadir); \
endif
endif
-ifneq "$(INSTALL_SGML_DOC)" ""
-ifneq "$(SGMLDocWays)" ""
-install-docs:: $(foreach i,$(SGMLDocWays),$(INSTALL_SGML_DOC).$i)
- @$(INSTALL_DIR) $(datadir)
- @for i in $(SGMLDocWays); do \
- if [ $$i = "html" ]; then \
- $(INSTALL_DIR) $(datadir)/html; \
- echo $(CP) -r $(INSTALL_SGML_DOC) $(datadir)/html; \
- $(CP) -r $(INSTALL_SGML_DOC) $(datadir)/html; \
- else \
- echo $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$i $(datadir); \
- $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$i $(datadir); \
- fi \
- done
-endif
-endif
-
#
# Use with care..
#
################################################################################
#
-# SGML Documentation
-#
-################################################################################
-
-.PHONY: dvi ps html pdf rtf
-
-ifneq "$(SGML_DOC)" ""
-
-all :: $(SGMLDocWays)
-
-# multi-file SGML document: main document name is specified in $(SGML_DOC),
-# sub-documents (.sgml files) listed in $(SGML_SRCS).
-
-ifeq "$(SGML_SRCS)" ""
-SGML_SRCS = $(wildcard *.sgml)
-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))
-
-$(SGML_DVI) $(SGML_PS) $(SGML_HTML) $(SGML_TEXT) $(SGML_PDF) :: $(SGML_SRCS)
-
-dvi :: $(SGML_DVI)
-ps :: $(SGML_PS)
-pdf :: $(SGML_PDF)
-rtf :: $(SGML_RTF)
-html :: $(SGML_HTML)
-txt :: $(SGML_TEXT)
-
-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
-
-extraclean ::
- $(RM) -rf DBTOHTML_OUTPUT_*
- $(RM) -rf *.junk/
- $(RM) -rf $(SGML_DOC)
-endif
-
-################################################################################
-#
# DocBook XML Documentation
#
################################################################################
XML_SRCS = $(wildcard *.xml)
endif
-XML_HTML = $(addsuffix -html/index.html,$(basename $(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_FO = $(addsuffix .fo,$(XML_DOC))
CLEAN_FILES += $(XML_HTML_NO_CHUNKS) $(XML_FO) $(XML_DVI) $(XML_PS) $(XML_PDF)
extraclean ::
- $(RM) -rf $(XML_DOC).out $(FPTOOLS_CSS) $(basename $(XML_DOC))-html $(basename $(XML_DOC))-htmlhelp
+ $(RM) -rf $(XML_DOC).out $(FPTOOLS_CSS) $(basename $(XML_DOC)) $(basename $(XML_DOC))-htmlhelp
validate ::
$(XMLLINT) --valid --noout $(XMLLINT_OPTS) $(XML_DOC).xml
$(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)
+