-$(foreach SUBDIR,$(SUBDIRS),$(SUBDIR)/setup/Setup): \
-%/setup/Setup: $(BOOTSTRAPPING_STAMPS)
- -$(RM) -rf $*/setup
- mkdir $*/setup
- $(CP) $*/Setup.*hs $*/setup
- cd $*/setup && $(GHC) -i../../bootstrapping.Cabal \
- -i../../bootstrapping.filepath \
- -Wall -cpp --make Setup.*hs -o Setup
+.PHONY: boot
+
+boot: ifBuildable/ifBuildable cabal-bin bootstrapping.conf
+
+cabal-bin: cabal-bin.hs
+ -mkdir bootstrapping
+ $(GHC) $(BOOTSTRAPPING_FLAGS) --make cabal-bin -o cabal-bin
+
+bootstrapping.conf: cabal-bin
+ echo "[]" > $@.tmp
+ -cd extensible-exceptions && $(CABAL) clean --distpref=dist-bootstrapping
+ cd extensible-exceptions && $(CABAL) configure --distpref=dist-bootstrapping --with-compiler=$(GHC) --with-hc-pkg=$(GHC_PKG) --package-db=$(HERE_ABS)/$@.tmp
+ cd extensible-exceptions && $(CABAL) build --distpref=dist-bootstrapping
+ cd extensible-exceptions && $(CABAL) install --distpref=dist-bootstrapping --inplace
+ -cd filepath && $(CABAL) clean --distpref=dist-bootstrapping
+ cd filepath && $(CABAL) configure --distpref=dist-bootstrapping --with-compiler=$(GHC) --with-hc-pkg=$(GHC_PKG) --package-db=$(HERE_ABS)/$@.tmp
+ cd filepath && $(CABAL) build --distpref=dist-bootstrapping
+ cd filepath && $(CABAL) install --distpref=dist-bootstrapping --inplace
+ -cd Cabal && $(CABAL) clean --distpref=dist-bootstrapping
+ cd Cabal && $(CABAL) configure --distpref=dist-bootstrapping --with-compiler=$(GHC) --with-hc-pkg=$(GHC_PKG) --package-db=$(HERE_ABS)/$@.tmp
+ cd Cabal && $(CABAL) build --distpref=dist-bootstrapping
+ cd Cabal && $(CABAL) install --distpref=dist-bootstrapping --inplace
+ -cd hpc && $(CABAL) clean --distpref=dist-bootstrapping
+ cd hpc && $(CABAL) configure --distpref=dist-bootstrapping --with-compiler=$(GHC) --with-hc-pkg=$(GHC_PKG) --package-db=$(HERE_ABS)/$@.tmp
+ cd hpc && $(CABAL) build --distpref=dist-bootstrapping
+ cd hpc && $(CABAL) install --distpref=dist-bootstrapping --inplace
+ mv $@.tmp $@