X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=Makefile;h=6643151861322e4cbc1a162297cca2f10f3f0a59;hp=302c522dd03fd1f223fa11068092bdf769b6a0d4;hb=e3971de1fe67e414060047c09c4d5c64c7083981;hpb=33c2369367f33de4f5754454bd099afc3811ad1a diff --git a/Makefile b/Makefile index 302c522..6643151 100644 --- a/Makefile +++ b/Makefile @@ -61,22 +61,23 @@ include $(TOP)/mk/boilerplate.mk ifeq "$(BootingFromHc)" "YES" SUBDIRS_BUILD = gmp includes rts compat compiler docs utils driver else -SUBDIRS_BUILD = gmp includes compat utils driver docs compiler rts +SUBDIRS_BUILD = gmp includes compat utils driver docs compiler rts libraries/Cabal/doc endif -SUBDIRS = gmp includes compat utils driver docs rts libraries compiler +SUBDIRS = gmp includes compat utils driver docs rts libraries compiler libraries/Cabal/doc -# Sanity check that all the core libraries are in the tree, to catch +# Sanity check that all the boot libraries are in the tree, to catch # failure to run darcs-all. check-packages : - @for d in `cat libraries/core-packages`; do \ + @ds=`cat libraries/boot-packages`;\ + for d in $$ds; do \ if test ! -d libraries/$$d; then \ echo "Looks like you're missing libraries/$$d,"; \ echo "maybe you haven't done './darcs-all get'?"; \ exit 1; \ fi \ done - @if test ! -e libraries/base/configure; then \ + @if test ! -f libraries/base/configure; then \ echo "Looks like you're missing base's configure script."; \ echo "Did you run 'sh boot' at the top level?"; \ exit 1; \ @@ -139,7 +140,7 @@ all :: stamp.inplace-gcc-lib stamp.inplace-gcc-lib: $(RM) -r compiler/gcc-lib mkdir compiler/gcc-lib - cp $(GccDir)ld.exe compiler/gcc-lib + cp $(LD) compiler/gcc-lib touch $@ clean :: @@ -161,6 +162,9 @@ else INSTALL_STAGE = endif +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install + # Same as default rule, but we pass $(INSTALL_STAGE) to $(MAKE) too install :: check-packages @case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \ @@ -247,13 +251,29 @@ binary-dist:: -rm -rf $(BIN_DIST_DIR) -$(RM) $(BIN_DIST_DIR).tar.gz +# When making bindists, we can have problems if some things (e.g. ghc-pkg) +# are compiled with the bootstrapping compiler and some (e.g. the stage 2 +# compiler) with the stage1 compiler. See #1860 for an example. +# Thus we rebuild the utils with stage 1 here. This is a bit unpleasant, +# as binary-dist really shouldn't actually build anything, but it works. +# We need to do the same for utilities used during library package installation. +binary-dist:: + $(MAKE) -C utils clean + $(MAKE) -C utils UseStage1=YES boot + $(MAKE) -C utils UseStage1=YES + $(RM) -f libraries/ifBuildable/ifBuildable + $(MAKE) -C libraries UseStage1=YES ifBuildable/ifBuildable + $(RM) -f libraries/installPackage/installPackage + $(MAKE) -C libraries UseStage1=YES installPackage/installPackage + ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32" binary-dist:: - $(MAKE) DESTDIR=$(BIN_DIST_DIR) prefix=/. install + $(MAKE) prefix=$(BIN_DIST_DIR) install + $(MAKE) prefix=$(BIN_DIST_DIR) install-docs binary-dist:: - cd $(BIN_DIST_DIR) && ../distrib/prep-bin-dist-mingw + cd $(BIN_DIST_DIR) && $(SHELL) ../distrib/prep-bin-dist-mingw binary-dist:: $(MKDIRHIER) $(BIN_DIST_DIR)/icons @@ -270,7 +290,7 @@ BIN_DIST_TOP= distrib/Makefile \ ANNOUNCE \ LICENSE \ install-sh \ - extra-gcc-opts.in \ + extra-gcc-opts.in \ config.guess \ config.sub \ aclocal.m4 @@ -293,17 +313,20 @@ binary-dist-pre:: cp mk/package.mk $(BIN_DIST_DIR)/mk/ cp mk/install.mk $(BIN_DIST_DIR)/mk/ cp mk/recurse.mk $(BIN_DIST_DIR)/mk/ + cp mk/fptools.css $(BIN_DIST_DIR)/mk/ $(MKDIRHIER) $(BIN_DIST_DIR)/lib/$(TARGETPLATFORM) $(MKDIRHIER) $(BIN_DIST_DIR)/share binary-dist:: - $(MAKE) -C gmp binary-dist DOING_BIN_DIST=YES - $(MAKE) -C includes binary-dist DOING_BIN_DIST=YES - $(MAKE) -C compiler binary-dist DOING_BIN_DIST=YES $(INSTALL_STAGE) - # XXX $(MAKE) -C docs binary-dist DOING_BIN_DIST=YES - $(MAKE) -C rts binary-dist DOING_BIN_DIST=YES - $(MAKE) -C driver binary-dist DOING_BIN_DIST=YES - $(MAKE) -C utils binary-dist DOING_BIN_DIST=YES + $(MAKE) -C gmp binary-dist DOING_BIN_DIST=YES + $(MAKE) -C includes binary-dist DOING_BIN_DIST=YES + $(MAKE) -C compiler binary-dist DOING_BIN_DIST=YES $(INSTALL_STAGE) + $(MAKE) -C rts binary-dist DOING_BIN_DIST=YES + $(MAKE) -C driver binary-dist DOING_BIN_DIST=YES + $(MAKE) -C utils binary-dist DOING_BIN_DIST=YES + $(MAKE) -C docs binary-dist DOING_BIN_DIST=YES + $(MAKE) -C libraries binary-dist DOING_BIN_DIST=YES + $(MAKE) -C libraries/Cabal/doc binary-dist DOING_BIN_DIST=YES VARFILE=$(BIN_DIST_DIR)/Makefile-vars.in @@ -324,69 +347,16 @@ binary-dist:: echo "GhcWithInterpreter = $(GhcWithInterpreter)" >> $(VARFILE) echo "GhcHasReadline = $(GhcHasReadline)" >> $(VARFILE) echo "BootingFromHc = $(BootingFromHc)" >> $(VARFILE) + echo "XMLDocWays = $(XMLDocWays)" >> $(VARFILE) + # We won't actually use xsltproc, but we need to know if it's "" or not + echo "XSLTPROC = $(XSLTPROC)" >> $(VARFILE) + echo "TARGETPLATFORM = $(TARGETPLATFORM)" >> $(VARFILE) + echo "HADDOCK_DOCS = $(HADDOCK_DOCS)" >> $(VARFILE) + cat distrib/Makefile-bin-vars.in >> $(VARFILE) @echo "Generating a shippable configure script.." $(MV) $(BIN_DIST_DIR)/configure-bin.ac $(BIN_DIST_DIR)/configure.ac ( cd $(BIN_DIST_DIR); autoreconf ) - -# -# binary dist'ing the documentation. -# The default documentation to build/install is given below; overrideable -# via build.mk or the 'make' command-line. -# -# If BINDIST_DOC_WAYS is set, use that -# If XMLDocWays is set, use that -# Otherwise, figure out what we can build based on configure results - -ifndef BINDIST_DOC_WAYS - -ifneq "$(XMLDocWays)" "" -BINDIST_DOC_WAYS = $(XMLDocWays) -else -ifneq "$(XSLTPROC)" "" -BINDIST_DOC_WAYS = html -ifneq "$(FOP)" "" -BINDIST_DOC_WAYS += ps pdf -else -ifneq "$(PDFXMLTEX)" "" -BINDIST_DOC_WAYS += pdf -endif -ifneq "$(XMLTEX)" "" -ifneq "$(DVIPS)" "" -BINDIST_DOC_WAYS += ps -endif # DVIPS -endif # XMLTEX -endif # FOP -endif # XSLTPROC -endif # XMLDocWays - -endif # BINDIST_DOC_WAYS - -ifneq "$(DIR_DOCBOOK_XSL)" "" -.PHONY: binary-dist-doc-% - -BINARY_DIST_DOC_RULES=$(foreach d,$(BinDistDirs),binary-dist-doc-$d) - -binary-dist :: $(BINARY_DIST_DOC_RULES) - -$(BINARY_DIST_DOC_RULES): binary-dist-doc-%: - $(MAKE) -C $* $(MFLAGS) $(BINDIST_DOC_WAYS) - $(MAKE) -C $* $(MFLAGS) install-docs \ - MAKING_BIN_DIST=1 \ - XMLDocWays="$(BINDIST_DOC_WAYS)" \ - prefix=$(BIN_DIST_DIR) \ - exec_prefix=$(BIN_DIST_DIR) \ - bindir=$(BIN_DIST_DIR)/bin/$(TARGETPLATFORM) \ - libdir=$(BIN_DIST_DIR)/lib/$(TARGETPLATFORM) \ - libexecdir=$(BIN_DIST_DIR)/lib/$(TARGETPLATFORM) \ - datadir=$(BIN_DIST_DIR)/share -endif - -.PHONY: binary-dist-doc-% - -binary-dist:: - $(MAKE) -C libraries binary-dist - endif # Tar up the distribution and build a manifest @@ -415,21 +385,21 @@ endif # Upload the distribution and documentation ifneq "$(PublishLocation)" "" -publish :: publish-binary-dist +publish :: + make publish-binary-dist 'prefix=$(BIN_DIST_INST_DIR)' endif +nTimes = set -e; for i in `seq 1 $(1)`; do echo Try "$$i: $(2)"; if $(2); then break; fi; done + .PHONY: publish-binary-dist publish-binary-dist :: - @for f in $(PUBLISH_FILES); do \ - for i in 0 1 2 3 4 5 6 7 8 9; do \ - echo "Try $$i: $(PublishCp) $$f $(PublishLocation)/dist"; \ - if $(PublishCp) $$f $(PublishLocation)/dist; then break; fi; \ - done \ + @for f in $(PUBLISH_FILES); \ + do $(call nTimes,10,$(PublishCp) $$f $(PublishLocation)/dist); \ done -# You need to first make binddisttest, and then run -# make publish 'prefix=$(BIN_DIST_INST_DIR)' -# for this to find the right place. +# You need to "make binddisttest" before publishing the docs, as it +# works by publish setting $(prefix) to inside the binddisttest +# directory so $(docdir) points to the right place. # We assume that Windows means Cygwin, as we can't just use docdir # unchanged or rsync (really SSH?) thinks that c:/foo means /foo on @@ -442,7 +412,7 @@ PUBLISH_DOCDIR = $(docdir) endif publish-binary-dist :: - $(PublishCp) -r $(PUBLISH_DOCDIR)/* $(PublishLocation)/docs + $(call nTimes,10,$(PublishCp) -r "$(PUBLISH_DOCDIR)"/* $(PublishLocation)/docs) binary-dist:: @echo "Mechanical and super-natty! Inspect the result and *if* happy; freeze, sell and get some sleep!" @@ -469,7 +439,7 @@ SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAME) # # Files to include in source distributions # -SRC_DIST_DIRS += mk docs distrib bindisttest $(filter-out docs distrib,$(SUBDIRS)) +SRC_DIST_DIRS += mk docs distrib bindisttest $(filter-out docs distrib libraries/Cabal/doc,$(SUBDIRS)) SRC_DIST_FILES += \ configure.ac config.guess config.sub configure \ aclocal.m4 README ANNOUNCE HACKING LICENSE Makefile install-sh \ @@ -506,6 +476,7 @@ dist :: && for i in $(SRC_DIST_DIRS); do mkdir $$i; (cd $$i && lndir $(FPTOOLS_TOP_ABS)/$$i ); done \ && for i in $(SRC_DIST_FILES); do $(LN_S) $(FPTOOLS_TOP_ABS)/$$i .; done \ && $(MAKE) distclean \ + && if test -f $(FPTOOLS_TOP_ABS)/libraries/haskell-src/dist/build/Language/Haskell/Parser.hs; then $(CP) $(FPTOOLS_TOP_ABS)/libraries/haskell-src/dist/build/Language/Haskell/Parser.hs libraries/haskell-src/Language/Haskell/ ; mv libraries/haskell-src/Language/Haskell/Parser.ly libraries/haskell-src/Language/Haskell/Parser.ly.source ; fi \ && $(RM) -rf compiler/stage[123] mk/build.mk \ && $(FIND) $(SRC_DIST_DIRS) \( -name _darcs -o -name SRC -o -name "autom4te*" -o -name "*~" -o -name ".cvsignore" -o -name "\#*" -o -name ".\#*" -o -name "log" -o -name "*-SAVE" -o -name "*.orig" -o -name "*.rej" \) -print | xargs $(RM) -rf \ ) @@ -562,7 +533,7 @@ hc-file-bundle : CLEAN_FILES += hc-files-to-go *-hc.tar.gz DIST_CLEAN_FILES += config.cache config.status mk/config.h mk/stamp-h \ - ghc.spec docs/users_guide/ug-book.xml + ghc.spec docs/users_guide/ug-book.xml extra-gcc-opts # don't clean config.mk: it's needed when cleaning stuff later on LATE_DIST_CLEAN_FILES += mk/config.mk @@ -575,6 +546,7 @@ extraclean:: clean distclean :: $(MAKE) -C bindisttest $@ + if test -d testsuite; then $(MAKE) -C testsuite $@; fi # -----------------------------------------------------------------------------