X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=Makefile;h=870e0c4dc6f134d9a1a8b282141aa917ea6f50a3;hp=d1426c77aaad705b74beb93de3d3e111235e3f16;hb=305eb36d92e373eb3cd4803ee89c2cc8f23a5fc0;hpb=e05f9de137269701df667b69d741dfae616694f7 diff --git a/Makefile b/Makefile index d1426c7..870e0c4 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,14 @@ # binary-dist # Builds a binary distribution # +# framework-pkg [MacOS only] +# Builds /Library/Frameworks/GHC.framework wrapped into a Mac +# installer package +# +# framework-binary-dist [MacOS only] +# Builds GHC.framework encapsulating a binary distribution +# (to give a relocatable framework) +# # hc-file-bundle # Builds an HC-file bundle, for bootstrapping # @@ -59,24 +67,25 @@ include $(TOP)/mk/boilerplate.mk # We can't 'make boot' in libraries until stage1 is built ifeq "$(BootingFromHc)" "YES" -SUBDIRS_BUILD = gmp includes rts compat compiler docs utils driver +SUBDIRS_BUILD = gmp libffi includes rts compat compiler docs utils driver else -SUBDIRS_BUILD = gmp includes compat utils driver docs compiler rts +SUBDIRS_BUILD = gmp libffi includes compat utils driver docs compiler rts libraries/Cabal/doc endif -SUBDIRS = gmp includes compat utils driver docs rts libraries compiler +SUBDIRS = gmp libffi includes compat utils driver docs rts libraries compiler libraries/Cabal/doc # 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/boot-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; \ @@ -89,6 +98,7 @@ endif endif stage1 : $(GCC_LIB_DEP) check-packages + $(MAKE) -C utils mostlyclean $(MAKE) -C utils/mkdependC boot @case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \ for i in $(SUBDIRS_BUILD); do \ @@ -110,9 +120,23 @@ stage1 : $(GCC_LIB_DEP) check-packages $(MAKE) -C libraries boot $(MAKE) -C libraries all +# When making distributions (i.e., whether with binary-dist or using the +# vanilla install target to create an installer package), 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 explicitly build a second version with the stage 1 +# compiler of all utils that get installed and of all extra support binaries +# includes in binary dists. stage2 : check-packages + $(MAKE) -C utils mostlyclean + $(MAKE) -C utils stage=2 $(MAKE) -C compiler boot stage=2 $(MAKE) -C compiler stage=2 + $(RM) -f libraries/ifBuildable/ifBuildable + $(MAKE) -C libraries stage=2 ifBuildable/ifBuildable + $(RM) -f libraries/installPackage/installPackage + $(MAKE) -C libraries stage=2 installPackage/installPackage + stage3 : check-packages $(MAKE) -C compiler boot stage=3 @@ -139,7 +163,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 +185,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; \ @@ -245,15 +272,16 @@ install-docs :: binary-dist:: -rm -rf $(BIN_DIST_DIR) - -$(RM) $(BIN_DIST_DIR).tar.gz + -$(RM) $(BIN_DIST_TARBALL) 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 +298,7 @@ BIN_DIST_TOP= distrib/Makefile \ ANNOUNCE \ LICENSE \ install-sh \ - extra-gcc-opts.in \ + extra-gcc-opts.in \ config.guess \ config.sub \ aclocal.m4 @@ -279,7 +307,7 @@ ifeq "$(darwin_TARGET_OS)" "1" BIN_DIST_TOP+=mk/fix_install_names.sh endif -.PHONY: binary-dist-pre% binary-dist binary-pack +.PHONY: binary-dist-pre% binary-dist binary-dist:: binary-dist-pre @@ -293,17 +321,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 @@ -322,71 +353,18 @@ binary-dist:: echo "HaveLibGmp = $(HaveLibGmp)" >> $(VARFILE) echo "GhcLibsWithUnix = $(GhcLibsWithUnix)" >> $(VARFILE) echo "GhcWithInterpreter = $(GhcWithInterpreter)" >> $(VARFILE) - echo "GhcHasReadline = $(GhcHasReadline)" >> $(VARFILE) + echo "GhcHasEditline = $(GhcHasEditline)" >> $(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 @@ -395,7 +373,7 @@ binary-dist :: tar-binary-dist .PHONY: tar-binary-dist tar-binary-dist: ( cd $(BIN_DIST_TOPDIR_ABS); tar cf - $(BIN_DIST_NAME) | bzip2 >$(BIN_DIST_TARBALL) ) - ( cd $(BIN_DIST_TOPDIR_ABS); bunzip2 -c $(BIN_DIST_TARBALL) | tar tf - | sed "s/^ghc-$(ProjectVersion)/fptools/" | sort >bin-manifest-$(ProjectVersion) ) + ( cd $(BIN_DIST_TOPDIR_ABS); bunzip2 -c $(BIN_DIST_TARBALL) | tar tf - | sed "s/^ghc-$(ProjectVersion)/fptools/" | sort >$(FPTOOLS_TOP_ABS)/bin-manifest-$(ProjectVersion) ) PUBLISH_FILES = $(BIN_DIST_TARBALL) @@ -415,21 +393,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,12 +420,35 @@ 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!" # ----------------------------------------------------------------------------- +# Building MacOS installer packages +# +# 'framework-pkg' +# Create an installer package for /Library/Frameworks/GHC.framework +# +# 'framework-binary-dist' +# Create an installer package for GHC.framework encapsulating a +# binary-dist to make it relocatable +# FIXME: This is only partially implemented so far + +ifeq "$(darwin_TARGET_OS)" "1" + +.PHONY: framework-pkg, framework-binary-dist + +framework-pkg: + $(MAKE) -C distrib/MacOS framework-pkg + +framework-binary-dist: + $(MAKE) -C distrib/MacOS framework-binary-dist + +endif + +# ----------------------------------------------------------------------------- # Building source distributions # # Do it like this: @@ -469,7 +470,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 +507,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 +564,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 +577,7 @@ extraclean:: clean distclean :: $(MAKE) -C bindisttest $@ + if test -d testsuite; then $(MAKE) -C testsuite $@; fi # -----------------------------------------------------------------------------