+# Don't try to delete directories:
+.PRECIOUS: %/.
+
+# Create build directories on demand. NB. the | below: this indicates
+# that $(MKDIRHIER) is an order-only dependency, which means that this
+# rule fires after building mkdirhier, but we won't try to recreate
+# directories if mkdirhier changes.
+%/. : | $(MKDIRHIER)
+ "$(MKDIRHIER)" $@
+
+# -----------------------------------------------------------------------------
+# Phase handling
+
+phase_0_or_later = YES
+ifeq "$(findstring $(phase),0)" ""
+phase_0_done = YES
+phase_1_or_later = YES
+endif
+ifeq "$(findstring $(phase),0 1)" ""
+phase_1_done = YES
+phase_2_or_later = YES
+endif
+ifeq "$(findstring $(phase),0 1 2)" ""
+phase_2_done = YES
+phase_3_or_later = YES
+endif
+ifeq "$(findstring $(phase),0 1 2 3)" ""
+phase_3_done = YES
+phase_4_or_later = YES
+endif
+ifeq "$(findstring $(phase),0 1 2 3 4)" ""
+phase_4_done = YES
+endif
+
+includes_dist-derivedconstants_CONFIGURE_PHASE = 0
+includes_dist-ghcconstants_CONFIGURE_PHASE = 0
+
+# We do these first, as making the sources for some later
+# packages needs them, and we need the sources before we can
+# work out dependencies
+utils/hsc2hs_dist_CONFIGURE_PHASE = 0
+utils/unlit_dist_CONFIGURE_PHASE = 0
+utils/genprimopcode_dist_CONFIGURE_PHASE = 0
+
+# Then the bootlibs
+libraries/hpc_dist-boot_CONFIGURE_PHASE = 1
+libraries/extensible-exceptions_dist-boot_CONFIGURE_PHASE = 1
+libraries/Cabal_dist-boot_CONFIGURE_PHASE = 1
+libraries/binary_dist-boot_CONFIGURE_PHASE = 1
+libraries/bin-package-db_dist-boot_CONFIGURE_PHASE = 1
+
+# We put the stage 1 compiler package in a later phase than the bootlibs
+# for the same reasone we have the
+# $(compiler_stage1_depfile_haskell) : $(BOOT_LIBS)
+# dependency below
+compiler_stage1_CONFIGURE_PHASE = 2
+
+# Now we make the stage 1 compiler binary. Again, in a later phase than
+# its package for the same reason as the
+# $(ghc_stage1_depfile_haskell) : $(compiler_stage1_v_LIB)
+# dep below
+ghc_stage1_CONFIGURE_PHASE = 3
+
+# Finally, the stage1 compiler is used to make the dependencies for
+# everything else, so we can now build the rest.
+compiler_stage2_CONFIGURE_PHASE = 4
+ghc_stage2_CONFIGURE_PHASE = 4
+
+libraries/ghc-prim_dist-install_CONFIGURE_PHASE = 4
+libraries/integer-gmp_dist-install_CONFIGURE_PHASE = 4
+libraries/base_dist-install_CONFIGURE_PHASE = 4
+libraries/filepath_dist-install_CONFIGURE_PHASE = 4
+libraries/array_dist-install_CONFIGURE_PHASE = 4
+libraries/bytestring_dist-install_CONFIGURE_PHASE = 4
+libraries/containers_dist-install_CONFIGURE_PHASE = 4
+libraries/unix_dist-install_CONFIGURE_PHASE = 4
+libraries/old-locale_dist-install_CONFIGURE_PHASE = 4
+libraries/old-time_dist-install_CONFIGURE_PHASE = 4
+libraries/time_dist-install_CONFIGURE_PHASE = 4
+libraries/directory_dist-install_CONFIGURE_PHASE = 4
+libraries/process_dist-install_CONFIGURE_PHASE = 4
+libraries/extensible-exceptions_dist-install_CONFIGURE_PHASE = 4
+libraries/hpc_dist-install_CONFIGURE_PHASE = 4
+libraries/pretty_dist-install_CONFIGURE_PHASE = 4
+libraries/template-haskell_dist-install_CONFIGURE_PHASE = 4
+libraries/Cabal_dist-install_CONFIGURE_PHASE = 4
+libraries/binary_dist-install_CONFIGURE_PHASE = 4
+libraries/bin-package-db_dist-install_CONFIGURE_PHASE = 4
+libraries/mtl_dist-install_CONFIGURE_PHASE = 4
+libraries/utf8-string_dist-install_CONFIGURE_PHASE = 4
+libraries/xhtml_dist-install_CONFIGURE_PHASE = 4
+libraries/terminfo_dist-install_CONFIGURE_PHASE = 4
+libraries/haskeline_dist-install_CONFIGURE_PHASE = 4
+libraries/random_dist-install_CONFIGURE_PHASE = 4
+libraries/haskell98_dist-install_CONFIGURE_PHASE = 4
+libraries/haskell2010_dist-install_CONFIGURE_PHASE = 4
+libraries/primitive_dist-install_CONFIGURE_PHASE = 4
+libraries/vector_dist-install_CONFIGURE_PHASE = 4
+libraries/dph/dph-base_dist-install_CONFIGURE_PHASE = 4
+libraries/dph/dph-prim-interface_dist-install_CONFIGURE_PHASE = 4
+libraries/dph/dph-prim-seq_dist-install_CONFIGURE_PHASE = 4
+libraries/dph/dph-prim-par_dist-install_CONFIGURE_PHASE = 4
+libraries/dph/dph-seq_dist-install_CONFIGURE_PHASE = 4
+libraries/dph/dph-par_dist-install_CONFIGURE_PHASE = 4
+
+utils/hp2ps_dist_CONFIGURE_PHASE = 4
+utils/genapply_dist_CONFIGURE_PHASE = 4
+utils/haddock_dist_CONFIGURE_PHASE = 4
+utils/hsc2hs_dist-install_CONFIGURE_PHASE = 4
+utils/ghc-pkg_dist-install_CONFIGURE_PHASE = 4
+utils/hpc_dist_CONFIGURE_PHASE = 4
+utils/runghc_dist_CONFIGURE_PHASE = 4
+utils/ghctags_dist_CONFIGURE_PHASE = 4
+utils/ghc-pwd_dist_CONFIGURE_PHASE = 4
+utils/ghc-cabal_dist-install_CONFIGURE_PHASE = 4
+utils/mkUserGuidePart_dist_CONFIGURE_PHASE = 4
+utils/compare_sizes_dist_CONFIGURE_PHASE = 4
+
+
+# -----------------------------------------------------------------------------
+# Packages
+
+# --------------------------------
+# Properties of packages
+# These lists say "if this package is built, here's a property it has"
+# They do not say "this package will be built"; see $(PACKAGES_xx) for that
+
+# Packages that are built but not installed
+INTREE_ONLY_PACKAGES := haskeline mtl terminfo utf8-string xhtml
+
+DPH_PACKAGES := dph/dph-base dph/dph-prim-interface dph/dph-prim-seq \
+ dph/dph-common dph/dph-prim-par dph/dph-par dph/dph-seq \
+ vector primitive
+
+# Packages that, if present, must be built by the stage2 compiler,
+# because they use TH and/or annotations, or depend on other stage2
+# packages:
+STAGE2_PACKAGES := $(DPH_PACKAGES) haskell98 haskell2010 random
+# Packages that we shouldn't build if we don't have TH (e.g. because
+# we're building a profiled compiler):
+TH_PACKAGES := $(DPH_PACKAGES)
+
+# Packages that are built by stage0, in addition to stage1. These
+# packages are dependencies of GHC, that we do not assume the stage0
+# compiler already has installed (or up-to-date enough).
+#
+# We assume that the stage0 compiler has a suitable bytestring package,
+# so we don't have to include it below.
+STAGE0_PACKAGES = Cabal hpc extensible-exceptions binary bin-package-db
+
+# These packages are installed, but are installed hidden
+# Why install them at all? Because the 'ghc' package depends on them
+HIDDEN_PACKAGES = binary
+
+# $(EXTRA_PACKAGES) is another classification, of packages built but
+# not installed
+# It is set in rules/extra-package.mk,
+# by $(call extra-packages) a little further down
+# this ghc.mk
+
+
+# --------------------------------
+# Packages to build
+# The lists of packages that we *actually* going to build in each stage:
+#
+# $(STAGE0_PACKAGE) does double duty; it really is the list of packages
+# we build the bootstrap compiler in stage 0
+#
+# $(PACKAGES) A list of directories relative to libraries/ containing
+# packages that will be built by stage1, in dependency
+# order.
+#
+# $(PACKAGES_STAGE2) Ditto, for stage2.
+#
+
+define addPackageGeneral
+# args: $1 = PACKAGES variable, $2 = package, $3 = condition
+ ifeq "$3" ""
+ $1 += $2
+ else