#
# * per-source-file dependencies instead of one .depend file?
# * eliminate undefined variables, and use --warn-undefined-variables?
-# * perhaps we should make all the output dirs in the .depend rule, to
-# avoid all these mkdirhier calls?
# * put outputs from different ways in different subdirs of distdir/build,
# then we don't have to use -osuf/-hisuf. We would have to install
# them in different places too, so we'd need ghc-pkg support for packages
.PHONY: default all haddock
+# We need second expansion for the way we handle directories, so that
+# | $$$$(dir $$$$@)/.
+# expands to the directoy of a rule that uses a % pattern.
+.SECONDEXPANSION:
+
default : all
+# Catch make if it runs away into an infinite loop
+ifeq "$(MAKE_RESTARTS)" ""
+else ifeq "$(MAKE_RESTARTS)" "1"
+else ifeq "$(MAKE_RESTARTS)" "2"
+else
+$(error Make has restarted itself $(MAKE_RESTARTS) times; is there a makefile bug?)
+endif
+
# Just bring makefiles up to date:
.PHONY: just-makefiles
just-makefiles:
endif
# -----------------------------------------------------------------------------
+# Directories
+
+# Don't try to delete directories:
+.PRECIOUS: %/.
+
+%/. : $(MKDIRHIER)
+ "$(MKDIRHIER)" $@
+
+# -----------------------------------------------------------------------------
# Special magic for the ghc-prim package
# We want the ghc-prim package to include the GHC.Prim module when it
PRIMOPS_TXT = $(GHC_COMPILER_DIR)/prelude/primops.txt
-libraries/ghc-prim/dist-install/build/GHC/PrimopWrappers.hs : $(GENPRIMOP_INPLACE) $(PRIMOPS_TXT)
- "$(MKDIRHIER)" $(dir $@)
+libraries/ghc-prim/dist-install/build/GHC/PrimopWrappers.hs : $(GENPRIMOP_INPLACE) $(PRIMOPS_TXT) | $$(dir $$@)/.
"$(GENPRIMOP_INPLACE)" --make-haskell-wrappers <$(PRIMOPS_TXT) >$@
libraries/ghc-prim/GHC/Prim.hs : $(GENPRIMOP_INPLACE) $(PRIMOPS_TXT)
libraries/ghc-prim/dist-install/build/autogen/GHC/PrimopWrappers.hs
libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs: \
- $(PRIMOPS_TXT) $(GENPRIMOP_INPLACE) $(MKDIRHIER)
- "$(MKDIRHIER)" $(dir $@)
+ $(PRIMOPS_TXT) $(GENPRIMOP_INPLACE) \
+ | $$(dir $$@)/.
"$(GENPRIMOP_INPLACE)" --make-haskell-source < $< > $@
libraries/ghc-prim/dist-install/build/autogen/GHC/PrimopWrappers.hs: \
- $(PRIMOPS_TXT) $(GENPRIMOP_INPLACE) $(MKDIRHIER)
- "$(MKDIRHIER)" $(dir $@)
+ $(PRIMOPS_TXT) $(GENPRIMOP_INPLACE) \
+ | $$(dir $$@)/.
"$(GENPRIMOP_INPLACE)" --make-haskell-wrappers < $< > $@
# -----------------------------------------------------------------------------
INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
endif
+INSTALLED_PACKAGES = $(filter-out haskeline mtl terminfo,$(PACKAGES))
+HIDDEN_PACKAGES = binary
+
install_packages: install_libexecs
install_packages: libffi/package.conf.install rts/package.conf.install
$(INSTALL_DIR) $(DESTDIR)$(topdir)
$(INSTALL_DIR) $(INSTALLED_PACKAGE_CONF)
"$(INSTALLED_GHC_PKG_REAL)" --force --global-conf $(INSTALLED_PACKAGE_CONF) update libffi/package.conf.install
"$(INSTALLED_GHC_PKG_REAL)" --force --global-conf $(INSTALLED_PACKAGE_CONF) update rts/package.conf.install
- $(foreach p, $(PACKAGES) $(PACKAGES_STAGE2),\
+ $(foreach p, $(INSTALLED_PACKAGES) $(PACKAGES_STAGE2),\
"$(GHC_CABAL_INPLACE)" install \
$(INSTALLED_GHC_REAL) \
$(INSTALLED_GHC_PKG_REAL) \
libraries/$p dist-install \
'$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries' \
$(RelocatableBuild) &&) true
+ $(foreach p, $(HIDDEN_PACKAGES),\
+ $(INSTALLED_GHC_PKG_REAL) --global-conf $(INSTALLED_PACKAGE_CONF) \
+ hide $p &&) true
"$(GHC_CABAL_INPLACE)" install \
$(INSTALLED_GHC_REAL) \
$(INSTALLED_GHC_PKG_REAL) \
# mk/project.mk gets an absolute path, so we manually include it in
# the bindist with a relative path
-BIN_DIST_MK = $(BIN_DIST_NAME)/bindist.mk
+BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk
-binary-dist:
- "$(RM)" $(RM_OPTS) -r $(BIN_DIST_NAME)
- mkdir $(BIN_DIST_NAME)
- set -e; for i in LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace; do ln -s ../$$i $(BIN_DIST_NAME)/; done
+unix-binary-dist-prep:
+ "$(RM)" $(RM_OPTS) -r bindistprep/*
+ mkdir $(BIN_DIST_PREP_DIR)
+ set -e; for i in LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
echo "HADDOCK_DOCS = $(HADDOCK_DOCS)" >> $(BIN_DIST_MK)
echo "LATEX_DOCS = $(LATEX_DOCS)" >> $(BIN_DIST_MK)
echo "BUILD_DOCBOOK_HTML = $(BUILD_DOCBOOK_HTML)" >> $(BIN_DIST_MK)
echo "BUILD_DOCBOOK_PS = $(BUILD_DOCBOOK_PS)" >> $(BIN_DIST_MK)
echo "BUILD_DOCBOOK_PDF = $(BUILD_DOCBOOK_PDF)" >> $(BIN_DIST_MK)
- ln -s ../distrib/configure-bin.ac $(BIN_DIST_NAME)/configure.ac
- cd $(BIN_DIST_NAME) && autoreconf
- "$(RM)" $(RM_OPTS) $(BIN_DIST_TAR)
+ ln -s ../../distrib/configure-bin.ac $(BIN_DIST_PREP_DIR)/configure.ac
+ cd $(BIN_DIST_PREP_DIR) && autoreconf
+ "$(RM)" $(RM_OPTS) $(BIN_DIST_PREP_TAR)
# h means "follow symlinks", e.g. if aclocal.m4 is a symlink to a source
# tree then we want to include the real file, not a symlink to it
- "$(TAR)" hcf - -T $(BIN_DIST_LIST) | bzip2 -c > $(BIN_DIST_TAR_BZ2)
+ cd bindistprep && "$(TAR)" hcf - -T ../$(BIN_DIST_LIST) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
-windows-binary-dist:
- "$(RM)" $(RM_OPTS) -r $(BIN_DIST_NAME)
- $(MAKE) prefix=$(BIN_DIST_DIR) install
- "$(TAR)" cf - $(BIN_DIST_NAME) | bzip2 -c > $(BIN_DIST_TAR_BZ2)
+windows-binary-dist-prep:
+ "$(RM)" $(RM_OPTS) -r bindistprep/*
+ $(MAKE) prefix=$(TOP)/$(BIN_DIST_PREP_DIR) install
+ cd bindistprep && "$(TAR)" cf - $(BIN_DIST_NAME) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
windows-installer:
- "$(ISCC)" /O. /F$(WINDOWS_INSTALLER_BASE) - < distrib/ghc.iss
+ "$(ISCC)" /O. /Fbindistprep/$(WINDOWS_INSTALLER_BASE) - < distrib/ghc.iss
nTimes = set -e; for i in `seq 1 $(1)`; do echo Try "$$i: $(2)"; if $(2); then break; fi; done
cd $(SRC_DIST_DIR) && for i in $(SRC_DIST_DIRS); do mkdir $$i; ( cd $$i && lndir $(TOP)/$$i ); done
cd $(SRC_DIST_DIR) && for i in $(SRC_DIST_FILES); do $(LN_S) $(TOP)/$$i .; done
cd $(SRC_DIST_DIR) && $(MAKE) distclean
+ rm -rf $(SRC_DIST_DIR)/libraries/tarballs/
+ rm -rf $(SRC_DIST_DIR)/libraries/stamp/
cd $(SRC_DIST_DIR) && if test -f $(TOP)/libraries/haskell-src/dist/build/Language/Haskell/Parser.hs; then "$(CP)" $(TOP)/libraries/haskell-src/dist/build/Language/Haskell/Parser.hs libraries/haskell-src/Language/Haskell/ ; mv libraries/haskell-src/Language/Haskell/Parser.ly libraries/haskell-src/Language/Haskell/Parser.ly.source ; fi
cd $(SRC_DIST_DIR) && $(call sdist_file,compiler,stage2,cmm,CmmLex,x)
cd $(SRC_DIST_DIR) && $(call sdist_file,compiler,stage2,cmm,CmmParse,y)