New syntax for GADT-style record declarations, and associated refactoring
[ghc-hetmet.git] / ghc.mk
diff --git a/ghc.mk b/ghc.mk
index 816efc6..84c3774 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
 
 # ToDo List.
 #
-# Before we can merge the new build system into HEAD:
-#
 #   * finish installation
 #     * other documentation
 #     * create doc index and contents
 #     * Windows: should we have ghc-pkg-<version>?
 #     * should we be stripping things?
 #     * install libgmp.a, gmp.h
-#   * finish binary distributions
 #   * need to fix Cabal for new Windows layout, see
 #     Distribution/Simple/GHC.configureToolchain.
-#
-# Once the new build system is in HEAD, and before 6.12:
-#
-#   * separate the logic of whether to do something from the test for
-#     existence of the tool to do it. For example, rather than checking
-#     if $DIR_DOCBOOK_XSL or $XSLTPROC is "", we should have a variable
-#     for controlling the building of the docs.
 #   * remove old Makefiles, add new stubs for building in subdirs
 #     * utils/hsc2hs/Makefile
 #     * utils/haddock/Makefile
@@ -45,7 +35,6 @@
 #   * GhcProfiled
 #   * optionally install stage3?
 #   * shared libraries, way dyn
-#   * get HC bootstrapping working
 #   * add Makefiles for the rest of the utils/ programs that aren't built
 #     by default (need to exclude them from 'make all' too)
 #
@@ -213,6 +202,7 @@ include rules/c-sources.mk
 include rules/includes-sources.mk
 include rules/hs-objs.mk
 include rules/c-objs.mk
+include rules/cmm-objs.mk
 
 # -----------------------------------------------------------------------------
 # Suffix rules
@@ -237,6 +227,11 @@ $(foreach way,$(ALL_WAYS),\
 
 include rules/c-suffix-rules.mk
 
+#-----------------------------------------------------------------------------
+# CMM-related suffix rules
+
+include rules/cmm-suffix-rules.mk
+
 endif
 
 # -----------------------------------------------------------------------------
@@ -294,6 +289,7 @@ include rules/bindist.mk
 PACKAGES = \
        ghc-prim \
        integer-gmp \
+       integer \
        base \
        filepath \
        array \
@@ -315,7 +311,6 @@ PACKAGES += \
        extensible-exceptions \
        haskell98 \
        hpc \
-       packedstring \
        pretty \
        syb \
        template-haskell \
@@ -353,10 +348,6 @@ OTHER_LIBS = libffi/libHSffi$(v_libsuf) libffi/HSffi.o
 ifeq "$(BuildSharedLibs)" "YES"
 OTHER_LIBS  += libffi/libHSffi$(dyn_libsuf)
 endif
-ifeq "$(HaveLibGmp)" "NO"
-GMP_LIB = gmp/libgmp.a
-OTHER_LIBS += $(GMP_LIB)
-endif
 
 # We cannot run ghc-cabal to configure a package until we have
 # configured and registered all of its dependencies.  So the following
@@ -467,7 +458,6 @@ BUILD_DIRS += \
 endif
 
 BUILD_DIRS += \
-   gmp \
    docs/users_guide \
    libraries/Cabal/doc \
    $(GHC_UNLIT_DIR) \
@@ -512,6 +502,7 @@ endif
 endif
 
 BUILD_DIRS += \
+   libraries/integer-gmp/gmp \
    compiler \
    $(GHC_HSC2HS_DIR) \
    $(GHC_PKG_DIR) \
@@ -575,6 +566,10 @@ $(foreach pkg,$(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS +=
 # 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)
+
 # -----------------------------------------------------------------------------
 # Bootstrapping libraries
 
@@ -771,19 +766,30 @@ $(eval $(call bindist,.,\
 binary-dist:
        "$(RM)" $(RM_OPTS) -r $(BIN_DIST_NAME)
        mkdir $(BIN_DIST_NAME)
-       set -e; for i in LICENSE compiler ghc rts libraries utils gmp 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
+       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
        ln -s ../distrib/configure-bin.ac $(BIN_DIST_NAME)/configure.ac
        cd $(BIN_DIST_NAME) && autoreconf
        "$(RM)" $(RM_OPTS) $(BIN_DIST_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)
+       "$(TAR)" hcf - -T $(BIN_DIST_LIST) | bzip2 -c > $(BIN_DIST_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-installer:
+       "$(ISCC)" /O. /F$(WINDOWS_INSTALLER_BASE) - < distrib/ghc.iss
 
 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:
        $(call nTimes,10,$(PublishCp) $(BIN_DIST_TAR_BZ2) $(PublishLocation)/dist)
+ifeq "$(mingw32_TARGET_OS)" "1"
+       $(call nTimes,10,$(PublishCp) $(WINDOWS_INSTALLER) $(PublishLocation)/dist)
+endif
 
 # -----------------------------------------------------------------------------
 # Source distributions
@@ -813,13 +819,14 @@ SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAME)
 #
 # Files to include in source distributions
 #
-SRC_DIST_DIRS = mk rules docs distrib bindisttest gmp libffi includes utils docs rts compiler ghc driver libraries
+SRC_DIST_DIRS = mk rules docs distrib bindisttest libffi includes utils docs rts compiler ghc driver libraries
 SRC_DIST_FILES += \
        configure.ac config.guess config.sub configure \
        aclocal.m4 README ANNOUNCE HACKING LICENSE Makefile install-sh \
-       ghc.spec.in ghc.spec extra-gcc-opts.in VERSION boot ghc.mk
+       ghc.spec.in ghc.spec extra-gcc-opts.in VERSION \
+       boot boot-pkgs packages ghc.mk
 
-SRC_DIST_TARBALL = ghc-$(ProjectVersion)-src.tar.bz2
+SRC_DIST_TARBALL = $(SRC_DIST_NAME)-src.tar.bz2
 
 VERSION :
        echo $(ProjectVersion) >VERSION
@@ -842,7 +849,7 @@ sdist_file = \
 .PHONY: sdist-prep
 sdist-prep :
        "$(RM)" $(RM_OPTS) -r $(SRC_DIST_DIR)
-       "$(RM)" $(SRC_DIST_NAME).tar.gz
+       "$(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 \
@@ -905,6 +912,7 @@ clean_libraries:
        "$(RM)" $(RM_OPTS) -r $(patsubst %, libraries/%/dist, $(PACKAGES) $(PACKAGES_STAGE2))
        "$(RM)" $(RM_OPTS) -r $(patsubst %, libraries/%/dist-install, $(PACKAGES) $(PACKAGES_STAGE2))
        "$(RM)" $(RM_OPTS) -r $(patsubst %, libraries/%/dist-boot, $(PACKAGES) $(PACKAGES_STAGE2))
+       "$(RM)" $(RM_OPTS) $(patsubst %, libraries/%/*.buildinfo, $(PACKAGES) $(PACKAGES_STAGE2))
 
 distclean : clean
        "$(RM)" $(RM_OPTS) config.cache config.status config.log mk/config.h mk/stamp-h
@@ -944,3 +952,5 @@ bootstrapping-files: includes/ghcautoconf.h
 bootstrapping-files: includes/DerivedConstants.h
 bootstrapping-files: includes/GHCConstants.h
 
+.DELETE_ON_ERROR:
+