X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=utils%2Fghc-pkg%2FMakefile;h=adce82949b77cbd5a38bd68eeb1f5a6074a21198;hb=eae65ca88fc09342e295874fb253f83775c61051;hp=47b4ebed36d4bf2a917405666544dd96c0fe28c5;hpb=e58f0bfbdc3d8459e9546aad293ed46aec5ca66b;p=ghc-hetmet.git diff --git a/utils/ghc-pkg/Makefile b/utils/ghc-pkg/Makefile index 47b4ebe..adce829 100644 --- a/utils/ghc-pkg/Makefile +++ b/utils/ghc-pkg/Makefile @@ -4,6 +4,15 @@ include $(TOP)/mk/boilerplate.mk # ----------------------------------------------------------------------------- # ghc-pkg.bin +# Beyond stage 1, honour any Mac OS X depolyment target options. If we use +# these options in stage 1 we get a linker error if the bootstrap compiler is +# for a more recent OS version +ifeq "$(stage)" "2" +SRC_CC_OPTS += $(MACOSX_DEPLOYMENT_CC_OPTS) +SRC_HC_OPTS += $(addprefix -optc, $(MACOSX_DEPLOYMENT_CC_OPTS)) +SRC_LD_OPTS += $(addprefix -optl, $(MACOSX_DEPLOYMENT_LD_OPTS)) +endif + SRC_HC_OPTS += -cpp -Wall -fno-warn-name-shadowing -fno-warn-unused-matches # This causes libghccompat.a to be used: @@ -16,16 +25,44 @@ SRC_HC_OPTS += $(PACKAGE_CABAL) # we must also build with $(GhcHcOpts) here: SRC_HC_OPTS += $(GhcHcOpts) $(GhcStage1HcOpts) +ifeq "$(Windows)" "NO" +SRC_HC_OPTS += -package unix +endif + +ifeq "$(ghc_ge_607)" "YES" +SRC_HC_OPTS += -package containers +endif + +SRC_HC_OPTS += -package Cabal + # 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 # ($libexecdir/ghc-pkg.bin) so that it can find package.conf. +# on Windows, we need to take control of filename globbing ourselves ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32" HS_PROG = ghc-pkg.exe INSTALL_PROGS += $(HS_PROG) +EXCLUDE_SRCS += CRT_noglob.c +NOGLOB_O = CRT_noglob.o else + +# We have two version: the inplace version compiled by the bootstrap compiler +# and the install version compiled by the stage 1 compiler. +# When creating or using bindists we always want the final binary, as built +# by the stage 1 compiler. +ifeq "$(DOING_BIN_DIST)" "YES" HS_PROG = ghc-pkg.bin +else +ifeq "$(stage)" "2" +HS_PROG = ghc-pkg.bin +else +HS_PROG = ghc-pkg-inplace.bin +endif +endif INSTALL_LIBEXECS += $(HS_PROG) +NOGLOB_O = + endif # ----------------------------------------------------------------------------- @@ -61,16 +98,12 @@ INPLACE_HS=ghc-pkg-inplace.hs INPLACE_PROG=ghc-pkg-inplace EXCLUDED_SRCS+=$(INPLACE_HS) -# FPTOOLS_TOP_ABS platform uses backslashes, at least on Cygwin, but that -# will go wrong when we use it in a Haskell string below. -TOP_ABS=$(subst \\,/,$(FPTOOLS_TOP_ABS_PLATFORM)) - -$(INPLACE_HS): Makefile $(FPTOOLS_TOP)/mk/config.mk +$(INPLACE_HS): Makefile $(FPTOOLS_TOP)/mk/config.mk $(NOGLOB_O) echo "import System.Cmd; import System.Environment; import System.Exit" > $@ - echo "main = do args <- getArgs; rawSystem \"$(TOP_ABS)/$(GHC_PKG_DIR_REL)/$(HS_PROG)\" (\"--global-conf\":\"$(TOP_ABS)/driver/package.conf.inplace\":args) >>= exitWith" >> $@ + 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) - $(GHC) --make $< -o $@ + $(HC) --make $< -o $@ $(LD_OPTS) $(NOGLOB_O) all :: $(INPLACE_PROG) @@ -79,8 +112,9 @@ 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:: + $(INSTALL_DIR) $(DESTDIR)$(bindir) $(RM) -f $(INSTALLED_SCRIPT) echo "#!$(SHELL)" >> $(INSTALLED_SCRIPT) echo "GHCPKGBIN=$(libexecdir)/$(HS_PROG)" >> $(INSTALLED_SCRIPT)