X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc.mk;h=8f2737dd63d311514ddd33a6ace6d29966b822fc;hb=3b03f47bbeb96c12351ebd11f6565e1f8cec4241;hp=ab3351dd1df90e7f94ffc88926325e9f9966a441;hpb=3388ec10d647189e7d1172bfae27d1c447d42d1c;p=ghc-hetmet.git diff --git a/ghc.mk b/ghc.mk index ab3351d..8f2737d 100644 --- a/ghc.mk +++ b/ghc.mk @@ -83,6 +83,11 @@ .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 @@ -398,6 +403,12 @@ rts/package.conf.inplace : libffi/package.conf.inplace endif # ----------------------------------------------------------------------------- +# Directories + +%/. : $(MKDIRHIER) + "$(MKDIRHIER)" $@ + +# ----------------------------------------------------------------------------- # Special magic for the ghc-prim package # We want the ghc-prim package to include the GHC.Prim module when it @@ -417,8 +428,7 @@ endef 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) @@ -702,13 +712,13 @@ libraries/ghc-prim/dist-install/doc/html/ghc-prim/ghc-prim.haddock: \ 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 < $< > $@ # ----------------------------------------------------------------------------- @@ -803,6 +813,9 @@ INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe 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) @@ -810,7 +823,7 @@ install_packages: libffi/package.conf.install rts/package.conf.install $(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) \ @@ -818,6 +831,9 @@ install_packages: libffi/package.conf.install rts/package.conf.install 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) \ @@ -873,28 +889,28 @@ endif # mk/project.mk gets an absolute path, so we manually include it in # the bindist with a relative path -BIN_DIST_MK = $(BIN_DIST_DIR)/bindist.mk +BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk unix-binary-dist-prep: "$(RM)" $(RM_OPTS) -r bindistprep/* - mkdir $(BIN_DIST_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_DIR)/; done + 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_DIR)/configure.ac - cd $(BIN_DIST_DIR) && 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 - cd bindistprep && "$(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-prep: "$(RM)" $(RM_OPTS) -r bindistprep/* - $(MAKE) prefix=$(BIN_DIST_DIR) install - "$(TAR)" cf - $(BIN_DIST_NAME) | bzip2 -c > $(BIN_DIST_TAR_BZ2) + $(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 @@ -975,6 +991,8 @@ sdist-prep : 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)