X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=mk%2Ftarget.mk;h=a6793c985762748c656274f1edd74090985e0d77;hb=451365f9af74f40d403906e113b733e42187aa1d;hp=ab4a8995c7e7f12842e26754c70aec77e0e181eb;hpb=13aca089b924f6ac3cd598e17b471ab38a1e3e78;p=ghc-hetmet.git diff --git a/mk/target.mk b/mk/target.mk index ab4a899..a6793c9 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -19,7 +19,7 @@ # 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 @@ -178,7 +178,7 @@ endif # `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. @@ -288,12 +288,14 @@ 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 @@ -324,7 +326,23 @@ 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 $(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 @@ -339,10 +357,9 @@ SRC_HC_POST_OPTS += $(HC_SPLIT_POST); # 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) @@ -353,7 +370,7 @@ 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 @@ -692,7 +709,7 @@ SRC_INSTALL_OPTS += -g $(INSTALL_GROUP) endif -ifneq "$(INSTALL_PROGS)" "" +ifneq "$(strip $(INSTALL_PROGS))" "" # # Here's an interesting one - when using the win32 version @@ -710,6 +727,9 @@ install:: $(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 @@ -717,7 +737,7 @@ 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 \ @@ -725,7 +745,7 @@ install:: $(INSTALL_SCRIPTS) 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 \ @@ -733,7 +753,7 @@ install:: $(INSTALL_LIB_SCRIPTS) 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 \ @@ -741,7 +761,7 @@ install:: $(INSTALL_LIBEXEC_SCRIPTS) done endif -ifneq "$(INSTALL_LIBS)" "" +ifneq "$(strip $(INSTALL_LIBS))" "" install:: $(INSTALL_LIBS) @$(INSTALL_DIR) $(libdir) for i in $(INSTALL_LIBS); do \ @@ -753,13 +773,16 @@ install:: $(INSTALL_LIBS) $(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. @@ -770,10 +793,13 @@ install:: $(INSTALL_LIBEXECS) @$(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 \ @@ -781,7 +807,7 @@ install:: $(INSTALL_DATAS) done endif -ifneq "$(INSTALL_IFACES)" "" +ifneq "$(strip $(INSTALL_IFACES))" "" install:: $(INSTALL_IFACES) @$(INSTALL_DIR) $(ifacedir) for i in $(INSTALL_IFACES); do \ @@ -789,7 +815,7 @@ install:: $(INSTALL_IFACES) 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 \ @@ -797,7 +823,7 @@ install:: $(INSTALL_IFACES_WITH_DIRS) done endif -ifneq "$(INSTALL_INCLUDES)" "" +ifneq "$(strip $(INSTALL_INCLUDES))" "" install:: $(INSTALL_INCLUDES) @$(INSTALL_DIR) $(includedir) for i in $(INSTALL_INCLUDES); do \ @@ -805,14 +831,7 @@ install:: $(INSTALL_INCLUDES) done 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 "$(strip $(INSTALL_DOCS))" "" ifneq "$(XMLDocWays)" "" install-docs:: $(INSTALL_DOCS) @$(INSTALL_DIR) $(datadir) @@ -823,39 +842,24 @@ endif endif # TODO: The following could be an entry for an Obfuscated Makefile Contest... -ifneq "$(INSTALL_XML_DOC)" "" +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,%-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 \ $(INSTALL_DIR) $(datadir)/html; \ - echo "( cd $(INSTALL_XML_DOC)-html && $(CP) * $(datadir)/html )" ; \ - ( cd $(INSTALL_XML_DOC)-html && $(CP) * $(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_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); \ - fi \ - done -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); \ + echo $(CP) $(FPTOOLS_CSS_ABS) $(datadir)/doc; \ + $(CP) $(FPTOOLS_CSS_ABS) $(datadir)/doc; \ fi \ done endif @@ -944,57 +948,11 @@ show: ################################################################################ # -# 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 # ################################################################################ -.PHONY: html html-no-chunks htmlhelp fo dvi ps pdf +.PHONY: html html-no-chunks chm HxS fo dvi ps pdf ifneq "$(XML_DOC)" "" @@ -1007,9 +965,10 @@ ifeq "$(XML_SRCS)" "" 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_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)) @@ -1019,7 +978,8 @@ $(XML_HTML) $(XML_NO_CHUNKS_HTML) $(XML_FO) $(XML_DVI) $(XML_PS) $(XML_PDF) :: $ 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) @@ -1028,7 +988,7 @@ pdf :: $(XML_PDF) 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 @@ -1077,6 +1037,11 @@ maintainer-clean:: extraclean # 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. @@ -1206,7 +1171,7 @@ endif # 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 @@ -1232,7 +1197,7 @@ INSTALL_TARGET = install 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)" @@ -1253,7 +1218,7 @@ $(ALL_TARGET) docs runtests $(BOOT_TARGET) TAGS clean distclean mostlyclean main @echo "------------------------------------------------------------------------" endif -#endif +endif # # Selectively building subdirectories. @@ -1263,3 +1228,17 @@ ifneq "$(SUBDIRS)" "" $(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) +