X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=utils%2Fhsc2hs%2FMakefile;h=c30269dd20d8c33677c3ed83b6bfa65594d499e8;hp=29995d0480a3c7e377090d0b696a40e14b5b1770;hb=526c3af1dc98987b6949f4df73c0debccf9875bd;hpb=7ef211e8d6aed14f77b344d976e207bc77e365a7 diff --git a/utils/hsc2hs/Makefile b/utils/hsc2hs/Makefile index 29995d0..c30269d 100644 --- a/utils/hsc2hs/Makefile +++ b/utils/hsc2hs/Makefile @@ -5,6 +5,15 @@ TOP=../.. include $(TOP)/mk/boilerplate.mk +# 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 + # This causes libghccompat.a to be used: include $(GHC_COMPAT_DIR)/compat.mk @@ -13,7 +22,14 @@ include $(GHC_COMPAT_DIR)/compat.mk # we must also build with $(GhcHcOpts) here: SRC_HC_OPTS += $(GhcHcOpts) $(GhcStage1HcOpts) -HS_PROG = hsc2hs-bin +# We have two version: the inplace version compiled by the bootstrap compiler +# and the install version compiled by the stage 1 compiler +ifeq "$(stage)" "2" +HS_PROG = hsc2hs.bin +else +HS_PROG = hsc2hs-inplace.bin +endif + ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32" HS_PROG = hsc2hs$(exeext) endif @@ -33,19 +49,23 @@ INPLACE_HS=hsc2hs-inplace.hs INPLACE_PROG=hsc2hs-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)) - ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32" extra_flags=$(addprefix --cflag=,$(filter-out -O,$(SRC_CC_OPTS))) else extra_flags= endif +nothing= +space=$(nothing) $(nothing) +# Given +# foo bar +# make +# :\"-Ifoo\":\"-Ibar\" +GMP_INCLUDE_DIRS_STRINGS = $(subst $(space),,$(foreach d,$(GMP_INCLUDE_DIRS),:\"-I$(d)\")) + $(INPLACE_HS): Makefile $(FPTOOLS_TOP)/mk/config.mk echo "import System.Cmd; import System.Environment; import System.Exit" > $@ - echo "main = do args <- getArgs; rawSystem \"$(TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/$(HS_PROG)\" (\"--template=$(TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/template-hsc.h\":\"--cc=$(CC)\":\"--ld=$(CC)\"$(patsubst %,:\"%\",$(extra_flags)):\"--cflag=-D__GLASGOW_HASKELL__=$(ProjectVersionInt)\":\"-I$(TOP_ABS)/$(GHC_INCLUDE_DIR_REL)\":\"-I$(TOP_ABS)/gmp/gmpbuild\":args) >>= exitWith" >> $@ + echo "main = do args <- getArgs; rawSystem \"$(FPTOOLS_TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/$(HS_PROG)\" (\"--template=$(FPTOOLS_TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/template-hsc.h\":\"--cc=$(CC)\":\"--ld=$(CC)\"$(patsubst %,:\"%\",$(extra_flags)):\"--cflag=-D__GLASGOW_HASKELL__=$(ProjectVersionInt)\":\"-I$(FPTOOLS_TOP_ABS)/$(GHC_INCLUDE_DIR_REL)\":\"-I$(FPTOOLS_TOP_ABS)/gmp/gmpbuild\"$(GMP_INCLUDE_DIRS_STRINGS):args) >>= exitWith" >> $@ $(INPLACE_PROG): $(INPLACE_HS) $(HC) --make $< -o $@ @@ -58,7 +78,7 @@ ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32" INSTALL_PROGS += $(HS_PROG) else INSTALL_LIBEXECS += $(HS_PROG) -LINK = hsc2hs +LINK = hsc2hs-ghc LINK_TARGET = $(LINK)-$(ProjectVersion) INSTALLED_SCRIPT=$(DESTDIR)$(bindir)/$(LINK_TARGET) install:: @@ -70,6 +90,19 @@ install:: echo "HSC2HS_EXTRA=" >> $(INSTALLED_SCRIPT) cat hsc2hs.sh >> $(INSTALLED_SCRIPT) $(EXECUTABLE_FILE) $(INSTALLED_SCRIPT) + +ifneq "$(NO_INSTALL_HSC2HS)" "YES" +install:: + $(CP) $(INSTALLED_SCRIPT) $(DESTDIR)/$(bindir)/hsc2hs +endif +endif + +# hsc2hs-inplace is needed to 'make boot' in compiler. +# Do a recursive 'make all' after generating dependencies, because this +# will work with 'make -j'. +ifneq "$(BootingFromHc)" "YES" +boot :: depend + $(MAKE) all endif # -----------------------------------------------------------------------------