X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=utils%2Fghc-pkg%2FMakefile;h=d456750c3aa1ce1a5190b3a6ead5346c00c53df6;hb=c140c1415a91991c617f8ba153b54e6e69cf9640;hp=e4c8b7494822333d17a0e40c126019b017b18ca9;hpb=430453c5131592b6147a80202dc5f7fbe3f3d5fd;p=ghc-hetmet.git diff --git a/utils/ghc-pkg/Makefile b/utils/ghc-pkg/Makefile index e4c8b74..d456750 100644 --- a/utils/ghc-pkg/Makefile +++ b/utils/ghc-pkg/Makefile @@ -16,6 +16,10 @@ SRC_HC_OPTS += $(PACKAGE_CABAL) # we must also build with $(GhcHcOpts) here: SRC_HC_OPTS += $(GhcHcOpts) $(GhcStage1HcOpts) +ifeq "$(ghc_ge_607)" "YES" +SRC_HC_OPTS += -package containers +endif + # On Windows, ghc-pkg is a standalone program # ($bindir/ghc-pkg.exe), whereas on Unix it needs a wrapper script # to pass the appropriate flag to the real binary @@ -48,31 +52,34 @@ Version.hs : Makefile $(TOP)/mk/config.mk DIST_CLEAN_FILES += $(VERSION_HS) # ----------------------------------------------------------------------------- -# ghc-pkg script +# ghc-pkg and ghc-pkg-inplace scripts -ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32" -# See "MSys Note 3" in compiler/Makefile -INPLACE_SCRIPT=ghc-pkg-inplace.bat -all:: - $(RM) -f $(INPLACE_SCRIPT) - echo '@call $(subst /,\,$(FPTOOLS_TOP_ABS_PLATFORM)/utils/ghc-pkg/$(HS_PROG)) --global-conf $(FPTOOLS_TOP_ABS_PLATFORM)/driver/package.conf.inplace %*' >> $(INPLACE_SCRIPT) - $(EXECUTABLE_FILE) $(INPLACE_SCRIPT) -else -INPLACE_SCRIPT=ghc-pkg-inplace -all:: - $(RM) -f $(INPLACE_SCRIPT) - echo "#!$(SHELL)" >> $(INPLACE_SCRIPT) - echo "GHCPKGBIN=$(FPTOOLS_TOP_ABS)/utils/ghc-pkg/$(HS_PROG)" >> $(INPLACE_SCRIPT) - echo "PKGCONF=$(FPTOOLS_TOP_ABS_PLATFORM)/driver/package.conf.inplace" >> $(INPLACE_SCRIPT) - echo 'exec $$GHCPKGBIN --global-conf $$PKGCONF $${1+"$$@"}' >> $(INPLACE_SCRIPT) - $(EXECUTABLE_FILE) $(INPLACE_SCRIPT) -endif -CLEAN_FILES += $(INPLACE_SCRIPT) +# ghc-pkg-inplace used to be either a /bin/sh script, or a .bat script +# on Windows. It is now a real binary, compiled from a tiny .hs +# file. The problem with using scripts here was that the .bat script +# cannot be executed by /bin/sh on MSYS (it can on Cygwin), but the +# /bin/sh script cannot be executed by Cabal. So we would have needed +# both. A single binary is therefore simpler. + +INPLACE_HS=ghc-pkg-inplace.hs +INPLACE_PROG=ghc-pkg-inplace +EXCLUDED_SRCS+=$(INPLACE_HS) + +$(INPLACE_HS): Makefile $(FPTOOLS_TOP)/mk/config.mk + echo "import System.Cmd; import System.Environment; import System.Exit" > $@ + echo "main = do args <- getArgs; rawSystem \"$(FPTOOLS_TOP_ABS)/$(GHC_PKG_DIR_REL)/$(HS_PROG)\" (\"--global-conf\":\"$(FPTOOLS_TOP_ABS)/driver/package.conf.inplace\":args) >>= exitWith" >> $@ + +$(INPLACE_PROG): $(INPLACE_HS) + $(HC) --make $< -o $@ + +all :: $(INPLACE_PROG) + +CLEAN_FILES += $(INPLACE_HS) $(INPLACE_PROG) ifneq "$(HOSTPLATFORM)" "i386-unknown-mingw32" LINK = ghc-pkg LINK_TARGET = $(LINK)-$(ProjectVersion) -INSTALLED_SCRIPT=$(bindir)/$(LINK_TARGET) +INSTALLED_SCRIPT=$(DESTDIR)$(bindir)/$(LINK_TARGET) install:: $(RM) -f $(INSTALLED_SCRIPT) echo "#!$(SHELL)" >> $(INSTALLED_SCRIPT) @@ -90,4 +97,9 @@ boot :: depend $(MAKE) all endif +binary-dist: + $(INSTALL_DIR) $(BIN_DIST_DIR)/utils/ghc-pkg + $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/ghc-pkg/ + $(INSTALL_PROGRAM) $(HS_PROG) $(BIN_DIST_DIR)/utils/ghc-pkg/ + include $(TOP)/mk/target.mk