Combine treatment of vanialla/GADT data decls, and fix assert failure
[ghc-hetmet.git] / ghc.mk
diff --git a/ghc.mk b/ghc.mk
index 7f653d0..9dba678 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
 
 default : all
 
+# Catch make if it runs away into an infinite loop
+ifeq      "$(MAKE_RESTARTS)" ""
+else ifeq "$(MAKE_RESTARTS)" "1"
+else ifeq "$(MAKE_RESTARTS)" "2"
+else
+$(error Make has restarted itself $(MAKE_RESTARTS) times; is there a makefile bug?)
+endif
+
 # Just bring makefiles up to date:
 .PHONY: just-makefiles
 just-makefiles:
@@ -124,6 +132,8 @@ $(error Please run ./configure first)
 endif
 endif
 
+include mk/ways.mk
+
 # (Optional) build-specific configuration
 include mk/custom-settings.mk
 
@@ -163,14 +173,13 @@ NO_INCLUDE_DEPS = YES
 # We want package-data.mk for show
 endif
 
-# We don't haddock base3-compat, as it has the same package name as base
-libraries/base3-compat_dist-install_DO_HADDOCK = NO
-
 # We don't haddock the bootstrapping libraries
 libraries/hpc_dist-boot_DO_HADDOCK = NO
 libraries/Cabal_dist-boot_DO_HADDOCK = NO
 libraries/extensible-exceptions_dist-boot_DO_HADDOCK = NO
 libraries/filepath_dist-boot_DO_HADDOCK = NO
+libraries/binary_dist-boot_DO_HADDOCK = NO
+libraries/bin-package-db_dist-boot_DO_HADDOCK = NO
 
 # -----------------------------------------------------------------------------
 # Ways
@@ -316,10 +325,10 @@ $(eval $(call addPackage,extensible-exceptions))
 $(eval $(call addPackage,haskell98))
 $(eval $(call addPackage,hpc))
 $(eval $(call addPackage,pretty))
-$(eval $(call addPackage,syb))
 $(eval $(call addPackage,template-haskell))
-$(eval $(call addPackage,base3-compat))
 $(eval $(call addPackage,Cabal))
+$(eval $(call addPackage,binary))
+$(eval $(call addPackage,bin-package-db))
 $(eval $(call addPackage,mtl))
 $(eval $(call addPackage,utf8-string))
 
@@ -337,7 +346,9 @@ PACKAGES_STAGE2 += \
        dph/dph-par
 endif
 
-BOOT_PKGS = Cabal hpc extensible-exceptions
+# We assume that the stage0 compiler has a suitable bytestring package,
+# so we don't have to include it below.
+BOOT_PKGS = Cabal hpc extensible-exceptions binary bin-package-db
 
 # The actual .a and .so/.dll files: needed for dependencies.
 ALL_STAGE1_LIBS  = $(foreach lib,$(PACKAGES),$(libraries/$(lib)_dist-install_v_LIB))
@@ -490,9 +501,11 @@ BUILD_DIRS += \
    $(GHC_GENAPPLY_DIR)
 endif
 
+ifneq "$(HADDOCK_DOCS)" "NO"
 BUILD_DIRS += \
    utils/haddock \
    utils/haddock/doc
+endif
 
 ifneq "$(CLEANING)" "YES"
 BUILD_DIRS += \
@@ -585,12 +598,6 @@ $(foreach pkg,$(PACKAGES) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-instal
 # XXX Hack; remove this
 $(foreach pkg,$(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS += -Wwarn))
 
-# XXX we configure packages with the bootstrapping compiler (for
-# dependency reasons, see the phase ordering), which doesn't
-# necessarily support all the extensions we need, and Cabal filters
-# out the ones it thinks aren't supported.
-libraries/base3-compat_dist-install_HC_OPTS += -XPackageImports
-
 # A useful pseudo-target
 .PHONY: stage1_libs
 stage1_libs : $(ALL_STAGE1_LIBS)
@@ -600,6 +607,8 @@ libraries/index.html: $(ALL_HADDOCK_FILES)
        cd libraries && sh gen_contents_index --inplace
 $(eval $(call all-target,library_doc_index,libraries/index.html))
 INSTALL_LIBRARY_DOCS += libraries/*.html libraries/*.gif libraries/*.css libraries/*.js
+CLEAN_FILES += libraries/doc-index* libraries/haddock*.css \
+              libraries/haddock*.js libraries/index*.html libraries/*.gif
 endif
 
 ifeq "$(CHECK_PACKAGES)" "YES"
@@ -628,6 +637,8 @@ $(eval $(call clean-target,$(BOOTSTRAPPING_CONF),,$(BOOTSTRAPPING_CONF)))
 $(eval $(call build-package,libraries/hpc,dist-boot,0))
 $(eval $(call build-package,libraries/extensible-exceptions,dist-boot,0))
 $(eval $(call build-package,libraries/Cabal,dist-boot,0))
+$(eval $(call build-package,libraries/binary,dist-boot,0))
+$(eval $(call build-package,libraries/bin-package-db,dist-boot,0))
 
 # register the boot packages in strict sequence, because running
 # multiple ghc-pkgs in parallel doesn't work (registrations may get
@@ -638,13 +649,23 @@ $(foreach pkg,$(BOOT_PKGS),$(eval $(call fixed_pkg_dep,$(pkg),dist-boot)))
 compiler/stage1/package-data.mk : \
     libraries/Cabal/dist-boot/package-data.mk \
     libraries/hpc/dist-boot/package-data.mk \
-    libraries/extensible-exceptions/dist-boot/package-data.mk
+    libraries/extensible-exceptions/dist-boot/package-data.mk \
+    libraries/bin-package-db/dist-boot/package-data.mk
 
 # These are necessary because the bootstrapping compiler may not know
 # about cross-package dependencies:
 $(compiler_stage1_depfile) : $(BOOT_LIBS)
 $(ghc_stage1_depfile) : $(compiler_stage1_v_LIB)
 
+# A few careful dependencies between bootstrapping packages.  When we
+# can rely on the stage 0 compiler being able to generate
+# cross-package dependencies with -M (fixed in GHC 6.12.1) we can drop
+# these, and also some of the phases.
+#
+# If you miss any out here, then 'make -j8' will probably tell you.
+#
+libraries/bin-package-db/dist-boot/build/Distribution/InstalledPackageInfo/Binary.$(v_osuf) : libraries/binary/dist-boot/build/Data/Binary.$(v_hisuf) libraries/Cabal/dist-boot/build/Distribution/InstalledPackageInfo.$(v_hisuf)
+
 $(foreach pkg,$(BOOT_PKGS),$(eval libraries/$(pkg)_dist-boot_HC_OPTS += $$(GhcBootLibHcOpts)))
 
 endif
@@ -770,7 +791,7 @@ install_docs: $(INSTALL_HEADERS)
                $(INSTALL_DOC) $(INSTALL_OPTS) $$i/* $(DESTDIR)$(docdir)/html/`basename $$i`; \
        done
 
-INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf
+INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf.d
 
 # Install packages in the right order, so that ghc-pkg doesn't complain.
 # Also, install ghc-pkg first.
@@ -778,31 +799,38 @@ ifeq "$(Windows)" "NO"
 INSTALLED_GHC_REAL=$(DESTDIR)$(ghclibexecdir)/ghc-stage2
 INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/ghc-pkg
 else
-INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc-stage2.exe
+INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe
 INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
 endif
 
+INSTALLED_PACKAGES = $(filter-out haskeline mtl terminfo,$(PACKAGES))
+HIDDEN_PACKAGES = binary
+
 install_packages: install_libexecs
 install_packages: libffi/package.conf.install rts/package.conf.install
        $(INSTALL_DIR) $(DESTDIR)$(topdir)
-       "$(RM)" $(RM_OPTS) $(INSTALLED_PACKAGE_CONF)
-       $(CREATE_DATA)     $(INSTALLED_PACKAGE_CONF)
-       echo "[]"       >> $(INSTALLED_PACKAGE_CONF)
+       "$(RM)" -r $(RM_OPTS) $(INSTALLED_PACKAGE_CONF)
+       $(INSTALL_DIR) $(INSTALLED_PACKAGE_CONF)
        "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf $(INSTALLED_PACKAGE_CONF) update libffi/package.conf.install
        "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf $(INSTALLED_PACKAGE_CONF) update rts/package.conf.install
-       $(foreach p, $(PACKAGES) $(PACKAGES_STAGE2),\
+       $(foreach p, $(INSTALLED_PACKAGES) $(PACKAGES_STAGE2),\
            "$(GHC_CABAL_INPLACE)" install \
                 $(INSTALLED_GHC_REAL) \
                 $(INSTALLED_GHC_PKG_REAL) \
                 $(DESTDIR)$(topdir) \
                 libraries/$p dist-install \
-                '$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries' &&) true
+                '$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries' \
+                $(RelocatableBuild) &&) true
+       $(foreach p, $(HIDDEN_PACKAGES),\
+           $(INSTALLED_GHC_PKG_REAL) --global-conf $(INSTALLED_PACKAGE_CONF) \
+                                     hide $p &&) true
        "$(GHC_CABAL_INPLACE)" install \
                 $(INSTALLED_GHC_REAL) \
                 $(INSTALLED_GHC_PKG_REAL) \
                 $(DESTDIR)$(topdir) \
                 compiler stage2 \
-                '$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries'
+                '$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries' \
+                $(RelocatableBuild)
 
 # -----------------------------------------------------------------------------
 # Binary distributions
@@ -824,6 +852,10 @@ $(eval $(call bindist,.,\
        $(BINDIST_LIBS) \
        $(BINDIST_HI) \
        $(BINDIST_EXTRAS) \
+       $(includes_H_CONFIG) \
+       $(includes_H_PLATFORM) \
+       includes/ghcconfig.h \
+       includes/rts/Config.h \
     $(INSTALL_HEADERS) \
     $(INSTALL_LIBEXECS) \
     $(INSTALL_LIBEXEC_SCRIPTS) \
@@ -847,28 +879,28 @@ endif
 # mk/project.mk gets an absolute path, so we manually include it in
 # the bindist with a relative path
 
-BIN_DIST_MK = $(BIN_DIST_NAME)/bindist.mk
+BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk
 
-binary-dist:
-       "$(RM)" $(RM_OPTS) -r $(BIN_DIST_NAME)
-       mkdir $(BIN_DIST_NAME)
-       set -e; for i in LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace; do ln -s ../$$i $(BIN_DIST_NAME)/; done
+unix-binary-dist-prep:
+       "$(RM)" $(RM_OPTS) -r bindistprep/*
+       mkdir $(BIN_DIST_PREP_DIR)
+       set -e; for i in LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
        echo "HADDOCK_DOCS       = $(HADDOCK_DOCS)"       >> $(BIN_DIST_MK)
        echo "LATEX_DOCS         = $(LATEX_DOCS)"         >> $(BIN_DIST_MK)
        echo "BUILD_DOCBOOK_HTML = $(BUILD_DOCBOOK_HTML)" >> $(BIN_DIST_MK)
        echo "BUILD_DOCBOOK_PS   = $(BUILD_DOCBOOK_PS)"   >> $(BIN_DIST_MK)
        echo "BUILD_DOCBOOK_PDF  = $(BUILD_DOCBOOK_PDF)"  >> $(BIN_DIST_MK)
-       ln -s ../distrib/configure-bin.ac $(BIN_DIST_NAME)/configure.ac
-       cd $(BIN_DIST_NAME) && autoreconf
-       "$(RM)" $(RM_OPTS) $(BIN_DIST_TAR)
+       ln -s ../../distrib/configure-bin.ac $(BIN_DIST_PREP_DIR)/configure.ac
+       cd $(BIN_DIST_PREP_DIR) && autoreconf
+       "$(RM)" $(RM_OPTS) $(BIN_DIST_PREP_TAR)
 # h means "follow symlinks", e.g. if aclocal.m4 is a symlink to a source
 # tree then we want to include the real file, not a symlink to it
-       "$(TAR)" hcf - -T $(BIN_DIST_LIST) | bzip2 -c > $(BIN_DIST_TAR_BZ2)
+       cd bindistprep && "$(TAR)" hcf - -T ../$(BIN_DIST_LIST) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
 
-windows-binary-dist:
-       "$(RM)" $(RM_OPTS) -r $(BIN_DIST_NAME)
-       $(MAKE) prefix=$(BIN_DIST_DIR) install
-       "$(TAR)" cf - $(BIN_DIST_NAME) | bzip2 -c > $(BIN_DIST_TAR_BZ2)
+windows-binary-dist-prep:
+       "$(RM)" $(RM_OPTS) -r bindistprep/*
+       $(MAKE) prefix=$(TOP)/$(BIN_DIST_PREP_DIR) install
+       cd bindistprep && "$(TAR)" cf - $(BIN_DIST_NAME) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
 
 windows-installer:
        "$(ISCC)" /O. /F$(WINDOWS_INSTALLER_BASE) - < distrib/ghc.iss
@@ -937,7 +969,7 @@ sdist_file = \
     "$(CP)" $(TOP)/$1/$2/build/$4.hs $1/$3/ ; \
     mv $1/$3/$4.$5 $1/$3/$4.$5.source ;\
   else \
-    echo "does not exist: $1/$2//build/$4.hs"; \
+    echo "does not exist: $1/$2/build/$4.hs"; \
     exit 1; \
   fi
 
@@ -946,25 +978,22 @@ sdist-prep :
        "$(RM)" $(RM_OPTS) -r $(SRC_DIST_DIR)
        "$(RM)" $(RM_OPTS) $(SRC_DIST_TARBALL)
        mkdir $(SRC_DIST_DIR)
-       ( cd $(SRC_DIST_DIR) \
-         && for i in $(SRC_DIST_DIRS); do mkdir $$i; (cd $$i && lndir $(TOP)/$$i ); done \
-         && for i in $(SRC_DIST_FILES); do $(LN_S) $(TOP)/$$i .; done \
-         && $(MAKE) distclean \
-         && if test -f $(TOP)/libraries/haskell-src/dist/build/Language/Haskell/Parser.hs; then "$(CP)" $(TOP)/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 \
-         && $(call sdist_file,compiler,stage2,cmm,CmmLex,x) \
-         && $(call sdist_file,compiler,stage2,cmm,CmmParse,y) \
-         && $(call sdist_file,compiler,stage2,main,ParsePkgConf,y) \
-         && $(call sdist_file,compiler,stage2,parser,HaddockLex,x) \
-         && $(call sdist_file,compiler,stage2,parser,HaddockParse,y) \
-         && $(call sdist_file,compiler,stage2,parser,Lexer,x) \
-         && $(call sdist_file,compiler,stage2,parser,Parser,y.pp) \
-         && $(call sdist_file,compiler,stage2,parser,ParserCore,y) \
-         && $(call sdist_file,utils/hpc,dist,,HpcParser,y) \
-         && $(call sdist_file,utils/genprimopcode,dist,,Lexer,x) \
-         && $(call sdist_file,utils/genprimopcode,dist,,Parser,y) \
-         && "$(RM)" $(RM_OPTS) -r 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" -o -name "*-darcs-backup*" \) -print | xargs "$(RM)" $(RM_OPTS) -r \
-       )
+       cd $(SRC_DIST_DIR) && for i in $(SRC_DIST_DIRS); do mkdir $$i; ( cd $$i && lndir $(TOP)/$$i ); done
+       cd $(SRC_DIST_DIR) && for i in $(SRC_DIST_FILES); do $(LN_S) $(TOP)/$$i .; done
+       cd $(SRC_DIST_DIR) && $(MAKE) distclean
+       rm -rf $(SRC_DIST_DIR)/libraries/tarballs/
+       rm -rf $(SRC_DIST_DIR)/libraries/stamp/
+       cd $(SRC_DIST_DIR) && if test -f $(TOP)/libraries/haskell-src/dist/build/Language/Haskell/Parser.hs; then "$(CP)" $(TOP)/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
+       cd $(SRC_DIST_DIR) && $(call sdist_file,compiler,stage2,cmm,CmmLex,x)
+       cd $(SRC_DIST_DIR) && $(call sdist_file,compiler,stage2,cmm,CmmParse,y)
+       cd $(SRC_DIST_DIR) && $(call sdist_file,compiler,stage2,parser,Lexer,x)
+       cd $(SRC_DIST_DIR) && $(call sdist_file,compiler,stage2,parser,Parser,y.pp)
+       cd $(SRC_DIST_DIR) && $(call sdist_file,compiler,stage2,parser,ParserCore,y)
+       cd $(SRC_DIST_DIR) && $(call sdist_file,utils/hpc,dist,,HpcParser,y)
+       cd $(SRC_DIST_DIR) && $(call sdist_file,utils/genprimopcode,dist,,Lexer,x)
+       cd $(SRC_DIST_DIR) && $(call sdist_file,utils/genprimopcode,dist,,Parser,y)
+       cd $(SRC_DIST_DIR) && "$(RM)" $(RM_OPTS) -r compiler/stage[123] mk/build.mk
+       cd $(SRC_DIST_DIR) && "$(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" -o -name "*-darcs-backup*" \) -print | xargs "$(RM)" $(RM_OPTS) -r
 
 .PHONY: sdist
 sdist : sdist-prep