# * 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
# -----------------------------------------------------------------------------
# Building libraries
-# XXX generate from $(TOP)/packages
-PACKAGES = \
- ghc-prim \
- integer-gmp \
- integer \
- 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_LIBRARY)))
+$(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 += \
endif
endif
+ifeq "$(INTEGER_LIBRARY)" "integer-gmp"
+BUILD_DIRS += libraries/integer-gmp/gmp
+endif
+
BUILD_DIRS += \
- libraries/integer-gmp/gmp \
compiler \
$(GHC_HSC2HS_DIR) \
$(GHC_PKG_DIR) \
ghc_stage1_DISABLE = YES
endif
+ifneq "$(CLEANING)" "YES"
+ifeq "$(INTEGER_LIBRARY)" "integer-gmp"
+libraries/base_dist-install_CONFIGURE_OPTS += --flags=-integer-simple
+else
+ ifeq "$(INTEGER_LIBRARY)" "integer-simple"
+ libraries/base_dist-install_CONFIGURE_OPTS += --flags=integer-simple
+ else
+$(error Unknown integer library: $(INTEGER_LIBRARY))
+ endif
+endif
+endif
+
ifneq "$(findstring $(phase),0 1 2 3)" ""
# In phases 0-3, we disable stage2-3, the full libraries and haddock
utils/haddock_dist_DISABLE = YES
"$(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))