-boot ::
- @echo "Please use \`make all' only from the top-level, or \`make boot' followed"
- @echo "by \`make all' in an individual project subdirectory (ghc, hslibs etc.)."
-
-install ::
- @case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
- for i in $(filter-out $(ProjectsDontInstall), $(SUBDIRS)); do \
- if [ -d $$i ]; then \
- $(MAKE) -C $$i $(INSTALL_STAGE) install; \
- if [ $$? -eq 0 -o $$x_on_err -eq 0 ] ; then true; else exit 1; fi; \
- fi; \
- done
-
-install-docs ::
- @case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
- for i in $(filter-out $(ProjectsDontInstall), $(SUBDIRS)); do \
- if [ -d $$i ]; then \
- $(MAKE) -C $$i $(INSTALL_STAGE) install-docs; \
- if [ $$? -eq 0 -o $$x_on_err -eq 0 ] ; then true; else exit 1; fi; \
- fi; \
- done
-
-# -----------------------------------------------------------------------------
-# Making a binary distribution
-#
-# To make a particular binary distribution:
-# set $(Project) to the name of the project, capitalised (eg. Ghc or Happy).
-
-# `dist' `binary-dist'
-# Create a distribution tar file for this program. The tar file
-# should be set up so that the file names in the tar file start with
-# a subdirectory name which is the name of the package it is a
-# distribution for. This name can include the version number.
-#
-# For example, the distribution tar file of GCC version 1.40 unpacks
-# into a subdirectory named `gcc-1.40'.
-#
-# The easiest way to do this is to create a subdirectory
-# appropriately named, use ln or cp to install the proper files in
-# it, and then tar that subdirectory.
-#
-# The dist target should explicitly depend on all non-source files
-# that are in the distribution, to make sure they are up to date in
-# the distribution. See Making Releases.
-#
-# binary-dist is an FPtools addition for binary distributions
-#
-
-binary-dist :: project-check
-
-BIN_DIST_TMPDIR=$(FPTOOLS_TOP_ABS)
-BIN_DIST_NAME=$(ProjectNameShort)-$(ProjectVersion)
-
-#
-# list of toplevel directories to include in binary distrib.
-#
-BIN_DIST_MAIN_DIR=$($(Project)MainDir)
-BIN_DIST_DIRS=$($(Project)BinDistDirs)
-
-binary-dist:: binary-dist-pre
-
-BIN_DIST_TOP= distrib/Makefile-bin.in \
- distrib/configure-bin.ac \
- distrib/INSTALL \
- $(BIN_DIST_MAIN_DIR)/ANNOUNCE \
- $(BIN_DIST_MAIN_DIR)/VERSION \
- $(BIN_DIST_MAIN_DIR)/LICENSE \
- $(BIN_DIST_MAIN_DIR)/README \
- glafp-utils/mkdirhier/mkdirhier \
- install-sh \
- config.guess \
- config.sub \
- aclocal.m4
-
-#
-# binary-dist creates a binary bundle, set BIN_DIST_NAME
-# to package name and do `make binary-dist Project=<project-name>'
-# (normally this just a thing you would do from the toplevel of fptools)
-#
-.PHONY: binary-dist-pre binary-dist binary-pack
-
-BIN_DIST_NAME=$(ProjectNameShort)-$(ProjectVersion)
-BIN_DIST_TMPDIR=$(FPTOOLS_TOP_ABS)
-
-binary-dist-pre::
-ifeq "$(BIN_DIST)" ""
- echo "WARNING: To run the binary-dist target, you need to set BIN_DIST=1 in your build.mk" && exit 1
+include mk/custom-settings.mk
+
+# No need to update makefiles for these targets:
+REALGOALS=$(filter-out binary-dist binary-dist-prep bootstrapping-files framework-pkg clean clean_% distclean maintainer-clean show help install-docs test fulltest,$(MAKECMDGOALS))
+
+# configure touches certain files even if they haven't changed. This
+# can mean a lot of unnecessary recompilation after a re-configure, so
+# here we cache the old versions of these files so we can restore the
+# timestamps.
+%.old: %
+ @set -x && test -f $@ && cmp -s $< $@ || cp -p $< $@
+ touch -r $@ $<
+
+
+# NB. not the same as saying '%: ...', which doesn't do the right thing:
+# it does nothing if we specify a target that already exists.
+.PHONY: $(REALGOALS)
+$(REALGOALS) all: mk/config.mk.old mk/project.mk.old compiler/ghc.cabal.old
+ @echo "===--- building phase 0"
+ $(MAKE) -r --no-print-directory -f ghc.mk phase=0 phase_0_builds
+ifneq "$(OMIT_PHASE_1)" "YES"
+ @echo "===--- building phase 1"
+ $(MAKE) -r --no-print-directory -f ghc.mk phase=1 phase_1_builds