-
-#-----------------------------------------------------------------------------
-# Linking
-
-# Include libghccompat in stage1 only. In stage2 onwards, all these
-# libraries will be available from the main libraries.
-
-ifeq "$(stage)" "1"
-include $(GHC_COMPAT_DIR)/compat.mk
-endif
-
-SRC_LD_OPTS += -no-link-chk
-
-# -----------------------------------------------------------------------------
-# create ghc-inplace, a convenient way to run ghc from the build tree...
-
-all :: $(odir)/ghc-inplace ghc-inplace
-
-# MSys notes
-# Note 1
-# I'm exec'ing $(SCRIPT_SHELL), rather than the usual #!/bin/sh, to make
-# sure that the right shell is invoked. If we use /bin/sh, then
-# when ghc-inplace is invoked from a Cygwin Python (which is the only Python
-# that seems to run the test-suite correctly), we get the Cygwin shell,
-# and it in turn interprets the path-names in the second (exec) line
-# differently to the MSys shell. That's bad, because ghc-inplace must
-# also work when invoked from MSys shells
-#
-# To figure out what the MSys shell is, we cd to '/bin' and do 'pwd -W'
-# On MSys, the -W flag prints out the directory in c:/msys/bin format
-# (On other system, -W isn't a pwd flag at all.)
-
-ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
-all :: $(odir)/ghc-inplace.bat ghc-inplace.bat
-CLEAN_FILES += $(odir)/ghc-inplace.bat ghc-inplace.bat
-endif
-
-ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
-# MSys (...and cygwin with a mingw toolchain)
-SCRIPT_SHELL = $(shell cd /bin; pwd -W 2>/dev/null || echo "/bin")/sh
-else
-# Cygwin and Unix
-SCRIPT_SHELL = /bin/sh
-endif
-
-# MSys Note 2
-# On MSys, we must use the following script for ghc-inplace:
-# exec /c/darcs/fc-branch-2/compiler/stage1/ghc -Bc:/darcs/fc-branch-2 "$@"
-# That is,
-# (a) You *must* use the /c/ form for the first arg to exec. Using the
-# c:/ form makes exec complain that it can't find $pwd/c:/darcs/.../ghc
-# The /c/ form is $(FPTOOLS_TOP_ABS)
-# (b) You *must* use the c:/ form for the -B argument, else the testsuite
-# doesn't work. I think that's something to do with ghc-inplace being
-# invoked by Python
-# The c:/ form is $(FPTOOLS_TOP_ABS_PLATFORM)
-
-$(odir)/ghc-inplace : $(GHC_PROG)
- @$(RM) $@
- echo '#!$(SCRIPT_SHELL)' >>$@
-# Re SCRIPT_SHELL, see note 1 above
- echo exec $(GHC_COMPILER_DIR_ABS)/$(GHC_PROG) \
- '-B$(subst \,\\,$(FPTOOLS_TOP_ABS_PLATFORM))' '"$$@"' >>$@
-# Re exec, see note 2 above
- chmod 755 $@
-
-# MSys Note 3
-# When we generate a .bat file, we must also use the form
-# @call c:\darcs\fc-branch-2\compiler\stage1\ghc-inplace
-# else the cmd shell gets confused; indeed it seems to simply hang
-# Hence the use of $(FPTOOLS_TOP_ABS_PLATFORM) here, just like MSys Note 2
-
-ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
-ghc-inplace.bat $(odir)/ghc-inplace.bat: $(GHC_PROG)
- @$(RM) $@
- echo '@call $(subst /,\,$(FPTOOLS_TOP_ABS_PLATFORM)/$(GHC_COMPILER_DIR_REL)/$(GHC_PROG)) -B$(FPTOOLS_TOP_ABS_PLATFORM) %*' >> $@
- chmod 755 $@
-endif
-
-ghc-inplace : stage1/ghc-inplace
- $(RM) -f $@ && $(LN_S) $< $@
-
-ifeq "$(stage)" "1"
-CLEAN_FILES += ghc-inplace
-endif
-
-CLEAN_FILES += $(odir)/ghc-inplace
-
-#-----------------------------------------------------------------------------
-# install
-
-# We don't want ghc treated as an ordinary executable,
-# but put it together with the libraries.
-# Also don't want any interface files installed
-
-DESTDIR = $(INSTALL_LIBRARY_DIR_GHC)
-
-ifneq "$(HOSTPLATFORM)" "i386-unknown-mingw32"
-INSTALL_LIBEXECS += $(GHC_PROG)
-else
-INSTALL_PROGS += $(GHC_PROG)
-endif
-
-# ----------------------------------------------------------------------------
-# profiling.
-
-# rename/RnBinds_HC_OPTS += -auto-all
-# rename/RnEnv_HC_OPTS += -auto-all
-# rename/RnExpr_HC_OPTS += -auto-all
-# rename/RnHiFiles_HC_OPTS += -auto-all
-# rename/RnHsSyn_HC_OPTS += -auto-all
-# rename/Rename_HC_OPTS += -auto-all
-# rename/RnIfaces_HC_OPTS += -auto-all
-# rename/RnNames_HC_OPTS += -auto-all
-# rename/RnSource_HC_OPTS += -auto-all
-# rename/RnTypes_HC_OPTS += -auto-all
-#
-# typecheck/Inst_HC_OPTS += -auto-all
-# typecheck/TcBinds_HC_OPTS += -auto-all
-# typecheck/TcClassDcl_HC_OPTS += -auto-all
-# typecheck/TcDefaults_HC_OPTS += -auto-all
-# typecheck/TcDeriv_HC_OPTS += -auto-all
-# typecheck/TcEnv_HC_OPTS += -auto-all
-# typecheck/TcExpr_HC_OPTS += -auto-all
-# typecheck/TcForeign_HC_OPTS += -auto-all
-# typecheck/TcGenDeriv_HC_OPTS += -auto-all
-# typecheck/TcHsSyn_HC_OPTS += -auto-all
-# typecheck/TcIfaceSig_HC_OPTS += -auto-all
-# typecheck/TcInstDcls_HC_OPTS += -auto-all
-# typecheck/TcMatches_HC_OPTS += -auto-all
-# typecheck/TcMonoType_HC_OPTS += -auto-all
-# typecheck/TcMType_HC_OPTS += -auto-all
-# typecheck/TcPat_HC_OPTS += -auto-all
-# typecheck/TcRnDriver_HC_OPTS += -auto-all
-# #typecheck/TcRnMonad_HC_OPTS += -auto-all
-# #typecheck/TcRnTypes_HC_OPTS += -auto-all
-# typecheck/TcRules_HC_OPTS += -auto-all
-# typecheck/TcSimplify_HC_OPTS += -auto-all
-# typecheck/TcSplice_HC_OPTS += -auto-all
-# typecheck/TcTyClsDecls_HC_OPTS += -auto-all
-# typecheck/TcTyDecls_HC_OPTS += -auto-all
-# typecheck/TcType_HC_OPTS += -auto-all
-# typecheck/TcUnify_HC_OPTS += -auto-all
-
-coreSyn/CorePrep_HC_OPTS += -auto-all
-# parser/Parser_HC_OPTS += -fasm
-
-#-----------------------------------------------------------------------------
-# Building the GHC package
-
-# The GHC package is made from the stage 2 build and later.
-# Fortunately the package build system framework more or less does the
-# right thing for us here.
-
-ifneq "$(findstring $(stage), 2 3)" ""
-PACKAGE = ghc
-HIERARCHICAL_LIB = NO
-VERSION = $(ProjectVersion)
-PKG_DEPENDS += base haskell98
-PACKAGE_CPP_OPTS += -DPKG_DEPENDS='$(PKG_DEPENDS)'
-PACKAGE_CPP_OPTS += -DSTAGE='"$(stage)"'
-
-# Omit Main from the library, the client will want to plug their own Main in
-LIBOBJS = $(filter-out $(odir)/main/Main.o $(odir)/parser/hschooks.o, $(OBJS))
-
-# disable splitting: it won't really help with GHC, and the specialised
-# build system for compiler/ isn't set up to handle it.
-SplitObjs = NO
-
-# the package build system likes to set WAYS=$(GhcLibWays), but we don't
-# really want to build the whole of GHC multiple ways... if you do,
-# set GhcCompilerWays instead.
-GhcLibWays = $(GhcCompilerWays)
-
-# override $(GhcLibHcOpts): we want GhcStage2HcOpts to take precedence
-GhcLibHcOpts =
-
-# override default definition of HS_IFACES so we can add $(odir)
-HS_IFACES = $(addsuffix .$(way_)hi,$(basename $(HS_OBJS)))
-
-# Haddock can't handle recursive modules currently, so we disable it for now.
-HADDOCK_DOCS = NO
-
-# Tell package.mk not to set $(HC)
-NO_SET_HC = YES
-
-# The stage 2 GHC binary itself is built by compiling main/Main.hs
-# (the same as used in stage 1) against the GHC package.
-#
-# This is done by compiling Main.hs separately and linking it with
-# -package ghc. This is done using a separate Makefile, Makefile.ghcbin
-# Why? See comments in Makefile.ghcbin
-
-all :: $(GHC_PROG)
-
-# The stage 2 and stage 3 package.conf.in files are different, because they
-# point to either the stage2/ or stage3/ dirs in import-dirs. Hence before
-# linking the ghc binary we must install the correct version of the package
-# configuration. Yeuch... maybe one day this will all be done more cleanly.
-STAMP_PKG_CONF = $(GHC_DRIVER_DIR)/stamp-pkg-conf-$(PACKAGE)
-
-ifeq "$(GhcBuildDylibs)" "YES"
-ifeq "$(darwin_TARGET_OS)" "1"
-GhcLibraryName=libHS$(PACKAGE)$(_way)_dyn.dylib
-else
-GhcLibraryName=libHS$(PACKAGE)$(_way)_dyn.so
-endif
-else
-GhcLibraryName=libHS$(PACKAGE)$(_way).a
-endif
-
-ifneq "$(DOING_BIN_DIST)" "YES"
-$(GHC_PROG) : $(GhcLibraryName) main/Main.hs
- $(RM) package.conf.inplace
- $(RM) $(STAMP_PKG_CONF)
- $(MAKE) $(STAMP_PKG_CONF)
- $(MAKE) -f Makefile.ghcbin $(MFLAGS) HS_PROG=$(GHC_PROG) $@
-endif
-
-# Propagate standard targets to Makefile.ghcbin
-docs runtests $(BOOT_TARGET) TAGS clean distclean mostlyclean maintainer-clean $(INSTALL_TARGET) $(INSTALL_DOCS_TARGET) html chm HxS ps dvi txt::
- $(MAKE) -f Makefile.ghcbin $(MFLAGS) $@
-endif
-
-include $(TOP)/mk/package.mk
-