X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=mk%2Ftarget.mk;h=4ec8345ab40a55b43f048788e5b98f83ab819413;hb=f302d61cd080cc3f50e12bc881de338a3dc0b8f4;hp=be37c9346eb9cc22c57df25b6ebd5954ce0b601d;hpb=ef31e4e41a76c88d534b0dc19391df22dfaa4511;p=ghc-hetmet.git diff --git a/mk/target.mk b/mk/target.mk index be37c93..4ec8345 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -16,6 +16,7 @@ # 2. GNU standard targets # all* # install* uninstall installcheck installdirs +# install-docs* # clean* distclean* mostlyclean* maintainer-clean* # tags* # dvi ps (no info) FPTOOLS adds: pdf rtf html @@ -73,20 +74,32 @@ # the --no-print-directory flag which is passed to recursive # invocations of make. # -# NOTE: Truly weird use of exit below to stop the for loop dead in -# its tracks should any of the sub-makes fail. By my reckoning, -# "cmd || exit $?" should be equivalent to "cmd" - ifneq "$(SUBDIRS)" "" -# we override the boot & all targets in the top level Makefile -ifneq "$(NO_ALL_TARGETS)" "YES" +# we override the 'boot', 'all' and 'install' targets in the top +# level Makefile. Some of the sub-projects also set 'boot' to empty. + +ifeq "$(NO_ALL_TARGET)" "YES" +ALL_TARGET = +else ALL_TARGET = all +endif + +ifeq "$(NO_BOOT_TARGET)" "YES" +BOOT_TARGET = +else BOOT_TARGET = boot +endif + +ifeq "$(NO_INSTALL_TARGET)" "YES" +INSTALL_TARGET = +INSTALL_DOCS_TARGET = +else INSTALL_TARGET = install +INSTALL_DOCS_TARGET = install-docs endif -$(ALL_TARGET) docs runtests $(BOOT_TARGET) TAGS clean distclean mostlyclean maintainer-clean $(INSTALL_TARGET) html ps dvi txt:: +$(ALL_TARGET) docs runtests $(BOOT_TARGET) TAGS clean distclean mostlyclean maintainer-clean $(INSTALL_TARGET) $(INSTALL_DOCS_TARGET) html ps dvi txt:: @echo "------------------------------------------------------------------------" @echo "===fptools== Recursively making \`$@' in $(SUBDIRS) ..." @echo "PWD = $(shell pwd)" @@ -165,8 +178,12 @@ endif # The boot target, at a minimum generates dependency information .PHONY: boot -boot :: depend +ifeq "$(NO_BOOT_TARGET)" "YES" +boot :: +else +boot :: depend +endif ################################################################## # GNU Standard targets @@ -297,7 +314,7 @@ ifneq "$(BootingFromHc)" "YES" $(HS_PROG) :: $(HS_OBJS) $(HC) -o $@ $(HC_OPTS) $(LD_OPTS) $(HS_OBJS) else -# see bootstrp.mk +# see bootstrap.mk $(HS_PROG) :: $(HS_OBJS) $(CC) -o $@ $(HC_BOOT_CC_OPTS) $(HC_BOOT_LD_OPTS) $(HS_OBJS) $(HC_BOOT_LIBS) endif @@ -348,6 +365,7 @@ C_SRCS += $(wildcard ../*_hsc.c) # Make .hsc.h include files from the directory above visible # (and the cbits/ library too). SRC_CC_OPTS += -I.. -I. +SRC_HSC2HS_OPTS += -I.. -I. endif ifneq "$(way)" "i" @@ -371,7 +389,6 @@ endif ifeq "$(IS_CBITS_LIB)" "YES" override datadir:=$(libdir)/include -INSTALL_DATAS += Hs$(shell perl -e 'print ucfirst "$(PACKAGE)"').h else SRC_CC_OPTS += -Icbits endif @@ -421,20 +438,25 @@ ifneq "$(way)" "u" SRC_HC_OPTS += -split-objs +# We generate the archive into a temporary file libfoo.a.tmp, then +# rename it at the end. This avoids the problem that ar may sometimes +# fail, leaving a partially built archive behind. ifeq "$(ArSupportsInput)" "" define BUILD_LIB -$(RM) $@ -(echo $(STUBOBJS); $(FIND) $(patsubst %.$(way_)o,%,$(LIBOBJS)) -name '*.$(way_)o') | xargs ar q $@ -$(RANLIB) $@ +$(RM) $@ $@.tmp +(echo $(STUBOBJS); $(FIND) $(patsubst %.$(way_)o,%,$(LIBOBJS)) -name '*.$(way_)o') | xargs ar q $@.tmp +$(RANLIB) $@.tmp +$(MV) $@.tmp $@ endef else define BUILD_LIB -$(RM) $@ +$(RM) $@ $@.tmp echo $(STUBOBJS) > $@.list $(FIND) $(patsubst %.$(way_)o,%,$(LIBOBJS)) -name '*.$(way_)o' >> $@.list -$(AR) $(AR_OPTS) $@ $(ArSupportsInput) $@.list +$(AR) $(AR_OPTS) $@.tmp $(ArSupportsInput) $@.list $(RM) $@.list -$(RANLIB) $@ +$(RANLIB) $@.tmp +$(MV) $@.tmp $@ endef endif @@ -444,7 +466,7 @@ HC_SPLIT_PRE = \ $(RM) $@; if [ ! -d $(basename $@) ]; then mkdir $(basename $@); else \ $(FIND) $(basename $@) -name '*.$(way_)o' | xargs $(RM) __rm_food; fi ifeq "$(GhcWithInterpreter)" "YES" -HC_SPLIT_POST = $(LD) -r -x -o $@ $(basename $@)/*.$(way_)o +HC_SPLIT_POST = $(LD) -r $(LD_X) -o $@ $(basename $@)/*.$(way_)o else HC_SPLIT_POST = touch $@ endif # GhcWithInterpreter == YES @@ -474,12 +496,12 @@ ifeq "$(StripLibraries)" "YES" ifeq "$(SplitObjs)" "YES" SRC_HC_POST_OPTS += \ for i in $(basename $@)/*; do \ - $(LD) -r -x -o $$i.tmp $$i; \ + $(LD) -r $(LD_X) -o $$i.tmp $$i; \ $(MV) $$i.tmp $$i; \ done else SRC_HC_POST_OPTS += \ - $(LD) -r -x -o $@.tmp $@; $(MV) $@.tmp $@ + $(LD) -r $(LD_X) -o $@.tmp $@; $(MV) $@.tmp $@ endif # SplitObjs endif # StripLibraries @@ -521,7 +543,7 @@ ifneq "$(DONT_WANT_STD_GHCI_LIB_RULE)" "YES" # hslibs/Win32 uses this 'feature'. # $(GHCI_LIBRARY) :: $(LIBOBJS) - $(LD) -r -x -o $@ $(LIBOBJS) $(STUBOBJS) + $(LD) -r $(LD_X) -o $@ $(LIBOBJS) $(STUBOBJS) endif # DONT_WANT_STD_GHCI_LIB_RULE endif # GhcWithInterpreter @@ -816,7 +838,7 @@ endif # LINK # friends can be overridden from their original settings in mk/config.mk.in # || mk/build.mk # -.PHONY: install installdirs install-strip install-dirs uninstall install-docs show-install +.PHONY: install install-docs installdirs install-strip install-dirs uninstall install-docs show-install show-install : @echo "bindir = $(bindir)" @@ -860,13 +882,7 @@ ifneq "$(INSTALL_PROGS)" "" # entry in the INSTALL_PROGS list. If there's no suffix, use # $(exeext). # -# This is bit of a pain to express since GNU make doesn't have -# something like $(if ...), but possible using $(subst ...) -# [Aside: I added support for $(if ...) to my local copy of GNU -# make at one stage, perhaps I should propagate the patch to -# the GNU make maintainers...] -# -INSTALL_PROGS := $(foreach p, $(INSTALL_PROGS), $(addsuffix $(subst _,,$(subst __,$(exeext),_$(suffix $(p))_)), $(basename $(p)))) +INSTALL_PROGS := $(foreach p, $(INSTALL_PROGS), $(addsuffix $(if $(suffix $(p)),,$(exeext)), $(basename $(p)))) install:: $(INSTALL_PROGS) @$(INSTALL_DIR) $(bindir) @@ -950,6 +966,28 @@ install:: $(INSTALL_INCLUDES) done endif +ifneq "$(INSTALL_DOCS)" "" +install-docs:: $(INSTALL_DOCS) + @$(INSTALL_DIR) $(datadir) + for i in $(INSTALL_DOCS); do \ + $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(datadir); \ + done +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 \ + $(CP) -r $(INSTALL_SGML_DOC) $(datadir); \ + else \ + $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$i $(datadir); \ + fi \ + done +endif +endif + # # Use with care.. # @@ -1041,6 +1079,8 @@ show: 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).