Revert "disable shared libs on sparc (linux/solaris) (fixes #8857)"
[ghc.git] / mk / config.mk.in
index 0fc3a1d..392237f 100644 (file)
@@ -36,37 +36,9 @@ V = 1
 #
 ################################################################################
 
-# BootingFromHc - build GHC and the libraries from .hc files?
-# (unregisterised only)
-BootingFromHc = @BootingFromHc@
-
 NO_INCLUDE_DEPS = NO
 NO_INCLUDE_PKGDATA = NO
 
-# Should we build latex docs?
-LATEX_DOCS = NO
-
-# Mac OS X deployment target (to cross-compile for older OS versions)
-#
-MACOSX_DEPLOYMENT_VERSION = @MACOSX_DEPLOYMENT_VERSION@
-MACOSX_DEPLOYMENT_SDK = @MACOSX_DEPLOYMENT_SDK@
-
-ifneq "$(MACOSX_DEPLOYMENT_VERSION)" ""
-MACOSX_DEPLOYMENT_CC_OPTS = -mmacosx-version-min=$(MACOSX_DEPLOYMENT_VERSION) \
-                           -isysroot $(MACOSX_DEPLOYMENT_SDK) \
-                           --no-builtin-fprintf
-MACOSX_DEPLOYMENT_LD_OPTS = -mmacosx-version-min=$(MACOSX_DEPLOYMENT_VERSION) \
-                           -Wl,-syslibroot,$(MACOSX_DEPLOYMENT_SDK)
-# We don't extend SRC_CC_OPTS and friends here directly, as (a) they may get
-# overwritten in build.mk and (b) we must not use the deployment options in
-# stage 1 or we get a linker error if the bootstrap compiler is for a more 
-# recent OS version.
-#
-# We need --no-builtin-fprintf, as the use of the builtin function optimisation
-# for fprintf together with #include "PosixSource" in the RTS leads to the
-# use of fwrite$UNIX2003 (with GCC 4.0.1 on Mac OS X 10.5.2).
-endif
-
 ################################################################################
 #
 # Variables that control how the compiler itself is built
@@ -116,21 +88,23 @@ GhcDynamic=NO
 # GhcProfiled=YES means compile a profiled stage-2 compiler
 GhcProfiled=NO
 
-# Do we support shared libs?
-SharedLibsPlatformList =                        \
-    i386-unknown-linux   x86_64-unknown-linux   \
-    i386-unknown-freebsd x86_64-unknown-freebsd \
-    i386-unknown-openbsd x86_64-unknown-openbsd \
-    i386-unknown-netbsd  x86_64-unknown-netbsd  \
-    i386-unknown-mingw32 x86_64-unknown-mingw32 \
-    i386-apple-darwin    x86_64-apple-darwin    powerpc-apple-darwin
-
-ifeq "$(SOLARIS_BROKEN_SHLD)" "NO"
-SharedLibsPlatformList += i386-unknown-solaris2
+ifeq "$(findstring $(TargetOS_CPP),linux freebsd dragonfly openbsd netbsd solaris2 kfreebsdgnu haiku linux-android)" ""
+TargetElf = NO
+else
+TargetElf = YES
+endif
+
+# Some platforms don't support shared libraries
+NoSharedLibsPlatformList = powerpc-unknown-linux \
+       x86_64-unknown-mingw32 \
+       i386-unknown-mingw32
+
+ifeq "$(SOLARIS_BROKEN_SHLD)" "YES"
+NoSharedLibsPlatformList += i386-unknown-solaris2
 endif
 
 PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),\
-       $(SharedLibsPlatformList)),YES,NO)
+    $(NoSharedLibsPlatformList)),NO,YES)
 
 # DYNAMIC_BY_DEFAULT says whether this compiler will default to
 # building dynamic executables, i.e. -dynamic is on.  We do this for
@@ -152,6 +126,23 @@ endif
 # cabal-install's that are in the wild don't handle it properly.
 DYNAMIC_BY_DEFAULT = NO
 
+# If building both v and dyn ways, then use -dynamic-too to build them.
+# This makes the build faster.
+DYNAMIC_TOO = YES
+
+# Use the dynamic way when building programs in the GHC tree. In
+# particular, this means that GHCi will use DLLs rather than loading
+# object files directly.
+ifeq "$(TargetOS_CPP)" "mingw32"
+# This doesn't work on Windows yet
+DYNAMIC_GHC_PROGRAMS = NO
+DYNAMIC_TOO=NO
+else ifeq "$(PlatformSupportsSharedLibs)" "NO"
+DYNAMIC_GHC_PROGRAMS = NO
+else
+DYNAMIC_GHC_PROGRAMS = YES
+endif
+
 # Build a compiler that will build *unregisterised* libraries and
 # binaries by default.  Unregisterised code is supposed to compile and
 # run without any support for architecture-specific assembly mangling,
@@ -169,9 +160,9 @@ GhcUnregisterised=@Unregisterised@
 #
 # Target platforms supported:
 #   i386, powerpc
-#   AIX is not supported 
+#   IOS and AIX are not supported
 ArchSupportsNCG=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc sparc)))
-OsSupportsNCG=$(strip $(patsubst $(TargetOS_CPP), YES, $(patsubst aix,,$(TargetOS_CPP))))
+OsSupportsNCG=$(strip $(patsubst $(TargetOS_CPP), YES, $(patsubst ios,,$(patsubst aix,,$(TargetOS_CPP)))))
 
 GhcWithNativeCodeGen := $(strip\
     $(if $(filter YESYESNO,\
@@ -193,8 +184,8 @@ ArchSupportsGHCi=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(Targe
 
 ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES"
 GhcWithInterpreter=YES
-else 
-GhcWithInterpreter=$(if $(findstring YES,$(DYNAMIC_BY_DEFAULT)),YES,NO)
+else
+GhcWithInterpreter=$(if $(findstring YES,$(DYNAMIC_GHC_PROGRAMS)),YES,NO)
 endif
 
 # GhcEnableTablesNextToCode tells us whether the target architecture
@@ -220,7 +211,7 @@ endif
 
 # On Windows we normally want to make a relocatable bindist, to we
 # ignore flags like libdir
-ifeq "$(Windows)" "YES"
+ifeq "$(Windows_Host)" "YES"
 RelocatableBuild = YES
 else
 RelocatableBuild = NO
@@ -235,12 +226,6 @@ BeConservative = NO
 
 ExtraMakefileSanityChecks = NO
 
-#
-# Building various ways?
-# (right now, empty if not).
-BuildingParallel=$(subst mp,YES,$(filter mp,$(WAYS)))
-BuildingGranSim=$(subst mg,YES,$(filter mg,$(WAYS)))
-
 #------------------------------------------------------------------------------
 # Options for Libraries
 
@@ -251,10 +236,8 @@ INTEGER_LIBRARY=integer-gmp
 GhcLibWays = v
 
 # In addition to the normal sequential way, the default is to also build
-# profiled prelude libraries unless we are booting from .hc files
-ifneq "$(BootingFromHc)" "YES"
+# profiled prelude libraries
 GhcLibWays += p
-endif
 
 ifeq "$(PlatformSupportsSharedLibs)" "YES"
 GhcLibWays += dyn
@@ -265,7 +248,7 @@ BuildSharedLibs=$(strip $(if $(findstring dyn,$(GhcLibWays)),YES,NO))
 
 # In addition, the RTS is built in some further variations.  Ways that
 # make sense here:
-# 
+#
 #   thr         : threaded
 #   thr_p       : threaded profiled
 #   debug       : debugging (compile with -g for the C compiler, and -DDEBUG)
@@ -278,9 +261,7 @@ BuildSharedLibs=$(strip $(if $(findstring dyn,$(GhcLibWays)),YES,NO))
 GhcRTSWays=l
 
 # Usually want the debug version
-ifeq "$(BootingFromHc)" "NO"
-GhcRTSWays += debug 
-endif
+GhcRTSWays += debug
 
 # We always have the threaded versions, but note that SMP support may be disabled
 # (see GhcWithSMP).
@@ -306,10 +287,6 @@ GhcLibHcOpts=-O2
 #
 StripLibraries=NO
 
-# These are the URL patterns that Haddock uses to generate the "Source
-# File" links on each page.
-PackageSourceURL = http://darcs.haskell.org/packages/$(PACKAGE)/%{FILE}
-
 # ----------------------------------------------------------------------------
 # Object-file splitting
 #
@@ -327,7 +304,6 @@ SupportsSplitObjs := $(strip \
                     $(if $(and $(filter YES,$(ArchSupportsSplitObjs)),\
                                $(filter YES,$(OsSupportsSplitObjs)),\
                                $(filter NO,$(SplitObjsBroken)),\
-                               $(filter NO,$(BootingFromHc)),\
                                $(filter NO,$(GhcUnregisterised))),\
                           YES,NO))
 
@@ -337,10 +313,7 @@ SplitObjs=$(SupportsSplitObjs)
 # ----------------------------------------------------------------------------
 # Package-related things
 
-# Extra packages to add to the build, in dependency order
-EXTRA_PACKAGES =
-
-# Whether to install $(EXTRA_PACKAGES)
+# Whether to install the extra packages
 InstallExtraPackages = NO
 
 # Run "ghc-pkg check" on each package
@@ -373,9 +346,6 @@ LAX_DEPENDENCIES = NO
 GhcRtsHcOpts=-O2
 GhcRtsCcOpts=-O2 -fomit-frame-pointer
 
-# Include the front panel code?  Needs GTK+.
-GhcRtsWithFrontPanel = NO
-
 # Include support for CPU performance counters via the PAPI library in the RTS?
 # (PAPI: http://icl.cs.utk.edu/papi/)
 GhcRtsWithPapi = NO
@@ -416,15 +386,11 @@ endif
 BIN_DIST_NAME         = ghc-$(ProjectVersion)
 BIN_DIST_PREP_DIR     = bindistprep/$(BIN_DIST_NAME)
 BIN_DIST_PREP_TAR     = bindistprep/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
-BIN_DIST_PREP_TAR_BZ2 = $(BIN_DIST_PREP_TAR).bz2
-BIN_DIST_TAR_BZ2      = $(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.bz2
-BIN_DIST_LIST         = bindist-list
-
-WINDOWS_INSTALLER_BASE = ghc-$(ProjectVersion)-$(TargetArch_CPP)-windows
-WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
+BIN_DIST_PREP_TAR_COMP = $(BIN_DIST_PREP_TAR).$(TAR_COMP_EXT)
+BIN_DIST_TAR_COMP     = $(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.$(TAR_COMP_EXT)
 
 # -----------------------------------------------------------------------------
-# Utilities programs: flags 
+# Utilities programs: flags
 
 # If you want to give any standard flags to pretty much any utility
 # (see utils.mk for a complete list), by adding a line here
@@ -432,7 +398,7 @@ WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
 #      SRC_P_OPTS += ...
 #
 # where P is the utility. For example, to add -O to all Haskell
-# compilations, 
+# compilations,
 #
 #      SRC_HC_OPTS += -O
 
@@ -440,7 +406,7 @@ WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
 # SRC_HC_OPTS includes flags to be added to *every* Haskell
 # compilation.  Setting SRC_HC_OPTS is a good way to set the default
 # optimisation level (-O) and heap size (-H<size>).
-# 
+#
 # SRC_HC_OPTS is *not* for adding flags that are required to make your
 # build work.  Examples:
 #
@@ -455,57 +421,20 @@ WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
 #
 SRC_HC_OPTS += -H32m -O
 
-# These flags make flex 8-bit
-SRC_FLEX_OPTS  += -8
-
-# Flags for CPP when running GreenCard on .pgc files
-GC_CPP_OPTS += -P -E -x c -traditional -D__GLASGOW_HASKELL__
-
+# Disable -O2 optimization. Otherwise amount of generated C code
+# makes things very slow to compile (~5 minutes on core-i7 for 'compiler/hsSyn/HsExpr.lhs')
+# and sometimes not compile at all (powerpc64 overflows something
+# on 'compiler/hsSyn/HsExpr.lhs').
+ifeq "$(GhcUnregisterised)" "YES"
+GhcStage1HcOpts=
+GhcStage2HcOpts=
+GhcStage3HcOpts=
+endif
 
 # -----------------------------------------------------------------------------
 # Names of programs in the GHC tree
-#
-#      xxx_PGM          the name of an executable, without the path
-#      xxx              the executable relative to the current dir
-
-GHC_UNLIT_PGM           = unlit$(exeext)
-GHC_HP2PS_PGM           = hp2ps$(exeext)
-GHC_GHCTAGS_PGM         = ghctags$(exeext)
-GHC_HSC2HS_PGM          = hsc2hs$(exeext)
-GHC_TOUCHY_PGM          = touchy$(exeext)
-GHC_SPLIT_PGM           = ghc-split
-GHC_SYSMAN_PGM          = SysMan
-GHC_GENPRIMOP_PGM       = genprimopcode$(exeext)
-GHC_GENAPPLY_PGM        = genapply$(exeext)
-GHC_CABAL_PGM           = ghc-cabal$(exeext)
-GHC_PKG_PGM             = ghc-pkg$(exeext)
-GHC_LTX_PGM             = ltx$(exeext)
-GHC_MKDIRHIER_PGM       = mkdirhier
-GHC_LNDIR_PGM           = lndir
-
-ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
-GHC_CP                 = "xcopy /y"
-GHC_PERL               = perl
-else
-GHC_CP                 = $(CP)
-GHC_PERL               = $(PERL)
-endif
 
-HP2PS                  = $(GHC_HP2PS_DIR)/$(GHC_HP2PS_PGM)
-SPLIT                  = $(INPLACE_LIB)/$(GHC_SPLIT_PGM)
-SYSMAN                         = $(GHC_SYSMAN_DIR)/$(GHC_SYSMAN_PGM)
-LTX                    = $(GHC_LTX_DIR)/$(GHC_LTX_PGM)
-LNDIR                  = $(GHC_LNDIR_DIR)/$(GHC_LNDIR_PGM)
-
-UNLIT                  = $(INPLACE_LIB)/$(GHC_UNLIT_PGM)
-TOUCHY                  = $(INPLACE_LIB)/$(GHC_TOUCHY_PGM)
-MKDIRHIER              = $(INPLACE_BIN)/$(GHC_MKDIRHIER_PGM)
-GHC_CABAL_INPLACE      = $(INPLACE_BIN)/$(GHC_CABAL_PGM)
-GENAPPLY_INPLACE       = $(INPLACE_BIN)/$(GHC_GENAPPLY_PGM)
-GHC_PKG_INPLACE                = $(INPLACE_BIN)/$(GHC_PKG_PGM)
-GHCTAGS_INPLACE                = $(INPLACE_BIN)/$(GHC_GHCTAGS_PGM)
-HSC2HS_INPLACE         = $(INPLACE_BIN)/$(GHC_HSC2HS_PGM)
-GENPRIMOP_INPLACE      = $(INPLACE_BIN)/$(GHC_GENPRIMOP_PGM)
+MKDIRHIER           = $(INPLACE_BIN)/mkdirhier
 
 GENERATED_FILE  = chmod a-w
 EXECUTABLE_FILE = chmod +x
@@ -526,21 +455,10 @@ ifneq "$(wildcard $(GHC).exe)" ""
 GHC := $(GHC).exe
 endif
 
-# Sometimes we want to invoke ghc from the build tree in different
-# places (eg. it's handy to have a nofib & a ghc build in the same
-# tree).  We can refer to "this ghc" as $(GHC_INPLACE):
-
-GHC_INPLACE = $(GHC_STAGE1)
-
-GHC_STAGE0_ABS = $(GHC)
-GHC_STAGE1_ABS = $(TOP)/$(INPLACE_BIN)/ghc-stage1$(exeext)
-GHC_STAGE2_ABS = $(TOP)/$(INPLACE_BIN)/ghc-stage2$(exeext)
-GHC_STAGE3_ABS = $(TOP)/$(INPLACE_BIN)/ghc-stage3$(exeext)
-
 GHC_STAGE0  = $(GHC)
-GHC_STAGE1  = $(INPLACE_BIN)/ghc-stage1$(exeext)
-GHC_STAGE2  = $(INPLACE_BIN)/ghc-stage2$(exeext)
-GHC_STAGE3  = $(INPLACE_BIN)/ghc-stage3$(exeext)
+GHC_STAGE1  = $(ghc-stage1_INPLACE)
+GHC_STAGE2  = $(ghc-stage2_INPLACE)
+GHC_STAGE3  = $(ghc-stage3_INPLACE)
 
 BOOTSTRAPPING_CONF = libraries/bootstrapping.conf
 
@@ -562,6 +480,10 @@ endif
 
 GHC_PACKAGE_DB_FLAG = @GHC_PACKAGE_DB_FLAG@
 
+CMM_SINK_BOOTSTRAP_IS_NEEDED = @CMM_SINK_BOOTSTRAP_IS_NEEDED@
+
+SUPPORTS_PACKAGE_KEY = @SUPPORTS_PACKAGE_KEY@
+
 #-----------------------------------------------------------------------------
 # C compiler
 #
@@ -571,7 +493,6 @@ GHC_PACKAGE_DB_FLAG = @GHC_PACKAGE_DB_FLAG@
 
 WhatGccIsCalled       = @WhatGccIsCalled@
 GccVersion            = @GccVersion@
-GlobalCrossCompilePrefix = @CrossCompilePrefix@
 ifeq "$(phase)" "0"
 CrossCompilePrefix    =
 else
@@ -582,6 +503,7 @@ endif
 TargetPlatformFull    = @TargetPlatformFull@
 GccLT34         = @GccLT34@
 GccLT46         = @GccLT46@
+GccIsClang      = @GccIsClang@
 
 CC              = $(WhatGccIsCalled)
 CC_STAGE0       = @CC_STAGE0@
@@ -637,14 +559,27 @@ endif
 # The .hsc files aren't currently safe for cross-compilation on Windows:
 #     libraries\haskeline\.\System\Console\Haskeline\Backend\Win32.hsc:160
 #     directive "let" is not safe for cross-compilation
-ifneq "$(Windows)" "YES"
+ifneq "$(Windows_Host)" "YES"
 SRC_HSC2HS_OPTS += --cross-safe
 endif
-SRC_HSC2HS_OPTS += $(addprefix --cflag=,$(filter-out -O,$(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE0)))
 SRC_HSC2HS_OPTS += $(foreach d,$(GMP_INCLUDE_DIRS),-I$(d))
+
+define set_stage_HSC2HS_OPTS
+# $1 = stage
+SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(filter-out -O,$$(SRC_CC_OPTS) $$(CONF_CC_OPTS_STAGE$1)))
+SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(CONF_CPP_OPTS_STAGE$1))
+SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --lflag=,$$(CONF_GCC_LINKER_OPTS_STAGE$1))
+endef
+$(eval $(call set_stage_HSC2HS_OPTS,0))
+$(eval $(call set_stage_HSC2HS_OPTS,1))
+$(eval $(call set_stage_HSC2HS_OPTS,2))
 ifeq "$(CrossCompiling)" "YES"
-SRC_HSC2HS_OPTS += --cross-compile
+SRC_HSC2HS_OPTS_STAGE1 += --cross-compile
+SRC_HSC2HS_OPTS_STAGE2 += --cross-compile
 endif
+SRC_HSC2HS_OPTS_STAGE0 += --cflag=-D$(HostArch_CPP)_HOST_ARCH=1 --cflag=-D$(HostOS_CPP)_HOST_OS=1
+SRC_HSC2HS_OPTS_STAGE1 += --cflag=-D$(TargetArch_CPP)_HOST_ARCH=1 --cflag=-D$(TargetOS_CPP)_HOST_OS=1
+SRC_HSC2HS_OPTS_STAGE2 += --cflag=-D$(TargetArch_CPP)_HOST_ARCH=1 --cflag=-D$(TargetOS_CPP)_HOST_OS=1
 
 ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
 WINDRES = $(INPLACE_MINGW)/bin/windres
@@ -663,14 +598,6 @@ DLLTOOL                    = inplace/mingw/bin/dlltool.exe
 endif
 
 #-----------------------------------------------------------------------------
-# Flex (currently unused, could be moved to glafp-utils)
-
-# FLEX                 = @LEX@
-# Don't bother with -lfl, we define our own yywrap()s anyway.
-# FLEX_LIB             = 
-#WAS:FLEX_LIB          = @LEXLIB@
-
-#-----------------------------------------------------------------------------
 # Other standard (ha!) Unix utilities
 
 AR                     = @ArCmd@
@@ -699,34 +626,34 @@ CP                        = cp
 # It's not easy to separate the CPP program from its flags, as
 # AC_PROG_CPP defines CPP as "/usr/bin/gcc -E"
 CPP                    = @CPP@ @CPPFLAGS@
-CTAGS                  = $(ETAGS)
 #
 # RAWCPP_FLAGS are the flags to give to cpp (viz, gcc -E) to persuade it to
 # behave plausibly on Haskell sources.
 #
+# Clang in particular is a bit more annoying, so we suppress some warnings.
 RAWCPP_FLAGS            = -undef -traditional
+ifeq "$(CC_CLANG_BACKEND)" "1"
+RAWCPP_FLAGS           += -Wno-invalid-pp-token -Wno-unicode -Wno-trigraphs
+endif
+
 FIND                   = @FindCmd@
 
 #
 # Sigh - the autoconf macro for INSTALL will subst a relative path to the fallback
 # install-sh script (if chosen). This not terribly useful to us, so we convert
 # it into an abs. path.
-# 
+#
 INSTALL                        = @INSTALL@
 INSTALL                        := $(subst .././install-sh,$(TOP)/install-sh,$(INSTALL))
 
-LATEX                  = latex
-PDFLATEX                = pdflatex
-BIBTEX                  = bibtex
 LN_S                   = @LN_S@
 MV                     = mv
-NROFF                  = nroff
 PERL                   = @PerlCmd@
 PIC                    = pic
-RANLIB                 = @RANLIB@
+RANLIB_CMD = @RANLIB_CMD@
+REAL_RANLIB_CMD = @REAL_RANLIB_CMD@
 SED                    = @SedCmd@
-TR                     = tr
-SHELL                  = /bin/sh
+SHELL                  = @SHELL@
 
 HaveDtrace             = @HaveDtrace@
 USE_DTRACE = $(HaveDtrace)
@@ -734,6 +661,7 @@ DTRACE                      = @DtraceCmd@
 
 LD = @LdCmd@
 NM = @NmCmd@
+AR = @ArCmd@
 OBJDUMP = @ObjdumpCmd@
 
 LLC = @LlcCmd@
@@ -751,41 +679,17 @@ LdHasBuildId              = @LdHasBuildId@
 # and compiler/main/DriverPipeline.hs.
 LdHasNoCompactUnwind   = @LdHasNoCompactUnwind@
 
-# On MSYS, building with SplitObjs=YES fails with 
+# On MSYS, building with SplitObjs=YES fails with
 #   ar: Bad file number
 # see #3201.  We need to specify a smaller max command-line size
 # to work around it.  32767 doesn't work; 30000 does, but says
 #     xargs: value for -s option should be < 28153
 # so we now use 20000 to be comfortably below this bound
 XARGS = xargs
-ifeq "$(Windows)" "YES"
+ifeq "$(Windows_Host)" "YES"
 XARGS_OPTS = -s 20000
 endif
 
-#
-# In emergency situations, REAL_SHELL is used to perform shell commands
-# from within the ghc driver script, by scribbling the command line to
-# a temp file and then having $(REAL_SHELL) execute it. 
-#
-# The reason for having to do this is that overly long command lines
-# cause unnecessary trouble with some shells (e.g., /bin/sh on Solaris
-# 2.5.1), which is why this backdoor is provided. The situation of overly
-# long command lines is either encountered while doing `make boot' in compiler/, 
-# or when linking the compiler binary (`hsc'). 
-#
-# We do not use SHELL to execute long commands, as `make' will more than likely
-# override whatever setting you have in your environment while executing. 
-
-# By default, REAL_SHELL is set equal to SHELL, which is not really a smart move
-# as it is SHELL that will show up the bogosity in the first place, but setting
-# it to anything else isn't really portable.
-#
-#  ====> If long command lines cause you trouble, invoke `ghc' (via `make' or otherwise)
-# with REAL_SHELL set to something else than /bin/sh, for instance, your favourite
-# command shell.
-#
-REAL_SHELL     = $(SHELL)
-
 ifeq "$(TARGETPLATFORM)" "x86_64-unknown-mingw32"
 STRIP_CMD      = $(TOP)/inplace/mingw/bin/strip.exe
 else
@@ -795,8 +699,26 @@ PATCH_CMD      = @PatchCmd@
 TAR_CMD        = @TarCmd@
 BZIP2_CMD      = bzip2
 GZIP_CMD       = gzip
+XZ_CMD         = xz -9e
+
+# bzip2 is default compression
+TAR_COMP      = bzip2
+
+# select compression command and .tar extension based on TAR_COMP value
+ifeq "$(TAR_COMP)" "bzip2"
+TAR_COMP_CMD  = $(BZIP2_CMD)
+TAR_COMP_EXT  = bz2
+else ifeq "$(TAR_COMP)" "gzip"
+TAR_COMP_CMD  = $(GZIP_CMD)
+TAR_COMP_EXT  = gz
+else ifeq "$(TAR_COMP)" "xz"
+TAR_COMP_CMD  = $(XZ_CMD)
+TAR_COMP_EXT  = xz
+else
+$(error $$(TAR_COMP) set to unknown value "$(TAR_COMP)" (supported: "bzip2", "gzip", "xz"))
+endif
 
-ifeq "$(Windows)" "YES"
+ifeq "$(Windows_Host)" "YES"
 TOUCH_CMD      = $(utils/touchy_dist_INPLACE)
 TOUCH_DEP      = $(TOUCH_CMD)
 else
@@ -808,13 +730,6 @@ HSCOLOUR_CMD   = @HSCOLOUR@
 
 TIME_CMD       = @TimeCmd@
 
-# GTK+
-GTK_CONFIG_CMD = @GTK_CONFIG@
-
-# Set this if you want to use Inno Setup to build a Windows installer
-# when you make a bindist
-ISCC_CMD       =
-
 #-----------------------------------------------------------------------------
 # DocBook XML stuff
 
@@ -844,7 +759,7 @@ GHC_PKG                     = @GhcPkgCmd@
 # Happy
 #
 HAPPY                  = @HappyCmd@
-HAPPY_VERSION          = @HappyVersion@                
+HAPPY_VERSION          = @HappyVersion@
 #
 # Options to pass to Happy when we're going to compile the output with GHC
 #
@@ -854,17 +769,16 @@ SRC_HAPPY_OPTS            = -agc --strict
 # Alex
 #
 ALEX                   = @AlexCmd@
-ALEX_VERSION           = @AlexVersion@         
+ALEX_VERSION           = @AlexVersion@
 Alex3                  = @Alex3@
 #
-# Options to pass to Happy when we're going to compile the output with GHC
+# Options to pass to Alex when we're going to compile the output with GHC
 #
+SRC_ALEX_OPTS = -g
 ifeq "$(Alex3)" "YES"
-# We aren't using the Unicode support in Alex 3.0 yet, in fact we do our own
+# The compiler isn't using the Unicode support in Alex 3.0 yet, in fact we do our own
 # Unicode handling, so diable Alex's.
-SRC_ALEX_OPTS          = -g --latin1
-else
-SRC_ALEX_OPTS          = -g
+compiler_ALEX_OPTS = --latin1
 endif
 
 # Should we build haddock docs?
@@ -876,24 +790,8 @@ else
 HSCOLOUR_SRCS = YES
 endif
 
-################################################################################
-#
-#              31-bit-Int Core files
-#
-################################################################################
-
-# 
-# It is possible to configure the compiler and prelude to support 31-bit
-# integers, suitable for a back-end and RTS using a tag bit on a 32-bit
-# architecture.  Currently the only useful output from this option is external Core
-# files.  The following additions to your build.mk will produce the
-# 31-bit core output.  Note that this is *not* just a library "way"; the
-# compiler must be built a special way too.
-
-# GhcCppOpts +=-DWORD_SIZE_IN_BITS=31
-# GhcLibHcOpts +=-fext-core -fno-code -DWORD_SIZE_IN_BITS=31
-# GhcLibCppOpts += -DWORD_SIZE_IN_BITS=31
-# SplitObjs=NO
+# Build DPH?
+BUILD_DPH = NO
 
 ################################################################################
 #