thenIO, bindIO, returnIO moved to GHC.Base
[ghc-hetmet.git] / ghc.mk
diff --git a/ghc.mk b/ghc.mk
index c243903..491f2d1 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
 #   * need to fix Cabal for new Windows layout, see
 #     Distribution/Simple/GHC.configureToolchain.
 #   * remove old Makefiles, add new stubs for building in subdirs
-#     * utils/hsc2hs/Makefile
-#     * utils/haddock/Makefile
 #     * docs/Makefile
 #     * docs/docbook-cheat-sheet/Makefile
 #     * docs/ext-core/Makefile
 #     * docs/man/Makefile
 #     * docs/storage-mgmt/Makefile
 #     * docs/vh/Makefile
-#     * driver/Makefile
 #     * rts/dotnet/Makefile
 #     * utils/Makefile
 #   * GhcProfiled
@@ -285,44 +282,52 @@ include rules/bindist.mk
 # -----------------------------------------------------------------------------
 # Building libraries
 
-# XXX generate from $(TOP)/packages
-PACKAGES = \
-       ghc-prim \
-       integer-gmp \
-       base \
-       filepath \
-       array \
-       bytestring \
-       containers
-
-ifeq "$(Windows)" "YES"
-PACKAGES += Win32
-else
-PACKAGES += unix
-endif
-
-PACKAGES += \
-       old-locale \
-       old-time \
-       directory \
-       process \
-       random \
-       extensible-exceptions \
-       haskell98 \
-       hpc \
-       pretty \
-       syb \
-       template-haskell \
-       base3-compat \
-       Cabal \
-       mtl \
-       utf8-string
-
-ifneq "$(Windows)" "YES"
-PACKAGES += terminfo
-endif
+define addPackage # args: $1 = package, $2 = condition
+    ifneq "$2" ""
+        ifeq "$$(CLEANING)" "YES"
+            PACKAGES += $1
+        else
+            ifeq $2
+                PACKAGES += $1
+            endif
+        endif
+    else
+        PACKAGES += $1
+    endif
+endef
 
-PACKAGES += haskeline
+$(eval $(call addPackage,ghc-prim))
+$(eval $(call addPackage,integer-gmp))
+$(eval $(call addPackage,integer))
+$(eval $(call addPackage,base))
+$(eval $(call addPackage,filepath))
+$(eval $(call addPackage,array))
+$(eval $(call addPackage,bytestring))
+$(eval $(call addPackage,containers))
+
+$(eval $(call addPackage,Win32,($$(Windows),YES)))
+$(eval $(call addPackage,unix,($$(Windows),NO)))
+
+$(eval $(call addPackage,old-locale))
+$(eval $(call addPackage,old-time))
+$(eval $(call addPackage,time))
+$(eval $(call addPackage,directory))
+$(eval $(call addPackage,process))
+$(eval $(call addPackage,random))
+$(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,mtl))
+$(eval $(call addPackage,utf8-string))
+
+$(eval $(call addPackage,terminfo,($$(Windows),NO)))
+
+$(eval $(call addPackage,haskeline))
 
 ifneq "$(BootingFromHc)" "YES"
 PACKAGES_STAGE2 += \
@@ -822,7 +827,8 @@ SRC_DIST_DIRS = mk rules docs distrib bindisttest libffi includes utils docs rts
 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 = $(SRC_DIST_NAME)-src.tar.bz2
 
@@ -906,22 +912,33 @@ clean_files :
        "$(RM)" $(RM_OPTS) $(CLEAN_FILES)
 
 .PHONY: clean_libraries
+clean_libraries: $(patsubst %,clean_libraries/%_dist-install,$(PACKAGES) $(PACKAGES_STAGE2))
+clean_libraries: $(patsubst %,clean_libraries/%_dist-boot,$(BOOT_PKGS))
+
 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))
 
+# We have to define a clean target for each library manually, because the
+# libraries/*/ghc.mk files are not included when we're cleaning.
+ifeq "$(CLEANING)" "YES"
+$(foreach lib,$(PACKAGES) $(PACKAGES_STAGE2),\
+  $(eval $(call clean-target,libraries/$(lib),dist-install,libraries/$(lib)/dist-install)))
+endif
+
 distclean : clean
        "$(RM)" $(RM_OPTS) config.cache config.status config.log mk/config.h mk/stamp-h
        "$(RM)" $(RM_OPTS) mk/config.mk mk/are-validating.mk mk/project.mk
+       "$(RM)" $(RM_OPTS) mk/config.mk.old mk/project.mk.old
        "$(RM)" $(RM_OPTS) extra-gcc-opts docs/users_guide/ug-book.xml
-       "$(RM)" $(RM_OPTS) compiler/ghc.cabal ghc/ghc-bin.cabal
+       "$(RM)" $(RM_OPTS) compiler/ghc.cabal compiler/ghc.cabal.old
+       "$(RM)" $(RM_OPTS) ghc/ghc-bin.cabal
        "$(RM)" $(RM_OPTS) libraries/base/include/HsBaseConfig.h
        "$(RM)" $(RM_OPTS) libraries/directory/include/HsDirectoryConfig.h
        "$(RM)" $(RM_OPTS) libraries/process/include/HsProcessConfig.h
        "$(RM)" $(RM_OPTS) libraries/unix/include/HsUnixConfig.h
        "$(RM)" $(RM_OPTS) libraries/old-time/include/HsTimeConfig.h
+
        "$(RM)" $(RM_OPTS) $(patsubst %, libraries/%/config.log, $(PACKAGES) $(PACKAGES_STAGE2))
        "$(RM)" $(RM_OPTS) $(patsubst %, libraries/%/config.status, $(PACKAGES) $(PACKAGES_STAGE2))
        "$(RM)" $(RM_OPTS) $(patsubst %, libraries/%/include/Hs*Config.h, $(PACKAGES) $(PACKAGES_STAGE2))