compiler_CONFIG_HS = compiler/main/Config.hs
+# This is just to avoid generating a warning when generating deps
+# involving RtsFlags.h
+compiler_stage1_MKDEPENDC_OPTS = -DMAKING_GHC_BUILD_SYSTEM_DEPENDENCIES
+compiler_stage2_MKDEPENDC_OPTS = -DMAKING_GHC_BUILD_SYSTEM_DEPENDENCIES
+compiler_stage3_MKDEPENDC_OPTS = -DMAKING_GHC_BUILD_SYSTEM_DEPENDENCIES
+
+compiler_stage1_C_FILES_NODEPS = compiler/parser/cutils.c
+
ifneq "$(BINDIST)" "YES"
compiler/stage1/package-data.mk : $(compiler_CONFIG_HS)
compiler/stage2/package-data.mk : $(compiler_CONFIG_HS)
@echo "cGHC_SYSMAN_PGM = \"$(GHC_SYSMAN)\"" >> $@
@echo "cGHC_SYSMAN_DIR :: String" >> $@
@echo "cGHC_SYSMAN_DIR = \"$(GHC_SYSMAN_DIR)\"" >> $@
- @echo "cGHC_CP :: String" >> $@
- @echo "cGHC_CP = \"$(GHC_CP)\"" >> $@
@echo "cGHC_PERL :: String" >> $@
@echo "cGHC_PERL = \"$(GHC_PERL)\"" >> $@
- @echo "cEnableWin32DLLs :: String" >> $@
- @echo "cEnableWin32DLLs = \"$(EnableWin32DLLs)\"" >> $@
- @echo "cCONTEXT_DIFF :: String" >> $@
- @echo "cCONTEXT_DIFF = \"$(CONTEXT_DIFF)\"" >> $@
- @echo "cUSER_WAY_NAMES :: String" >> $@
- @echo "cUSER_WAY_NAMES = \"$(USER_WAY_NAMES)\"" >> $@
- @echo "cUSER_WAY_OPTS :: String" >> $@
- @echo "cUSER_WAY_OPTS = \"$(USER_WAY_OPTS)\"" >> $@
@echo "cDEFAULT_TMPDIR :: String" >> $@
@echo "cDEFAULT_TMPDIR = \"$(DEFAULT_TMPDIR)\"" >> $@
@echo "cRelocatableBuild :: Bool" >> $@
$(eval $(call clean-target,compiler,primop, $(PRIMOPS_TXT) compiler/parser/Parser.y $(PRIMOP_BITS)))
+ifneq "$(BootingFromHc)" "YES"
compiler/primop-data-decl.hs-incl: $(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
"$(GENPRIMOP_INPLACE)" --data-decl < $< > $@
compiler/primop-tag.hs-incl: $(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
# can still generate them if we want them back
compiler/primop-usage.hs-incl: $(PRIMOPS_TXT)
"$(GENPRIMOP_INPLACE)" --usage < $< > $@
+endif
# -----------------------------------------------------------------------------
# Configuration
compiler_stage1_CONFIGURE_OPTS += --ghc-option=-DSTAGE=1
compiler_stage2_CONFIGURE_OPTS += --ghc-option=-DSTAGE=2
compiler_stage3_CONFIGURE_OPTS += --ghc-option=-DSTAGE=3
-compiler_stage2_HADDOCK_OPTS += --haddock-option=--optghc=-DSTAGE=2
+compiler_stage2_HADDOCK_OPTS += --optghc=-DSTAGE=2
compiler_stage1_CONFIGURE_OPTS += --ghc-options='$(GhcStage1HcOpts)'
compiler_stage2_CONFIGURE_OPTS += --ghc-options='$(GhcStage2HcOpts)'
# Note: we also have to tweak the version number of the package itself
# when it gets registered; see Note [munge-stage1-package-config]
# below.
-ifneq "$(ProjectPatchLevel)" "0"
+# The ProjectPatchLevel > 20000000 iff it's a date. If it's e.g. 6.12.1
+# then we don't want to remove it
+ifneq "$(CLEANING)" "YES"
+ifeq "$(shell [ $(ProjectPatchLevel) -gt 20000000 ] && echo YES)" "YES"
+compiler_stage1_VERSION_MUNGED = YES
+endif
+endif
+ifeq "$(compiler_stage1_VERSION_MUNGED)" "YES"
define compiler_PACKAGE_MAGIC
compiler_stage1_VERSION = $(subst .$(ProjectPatchLevel),,$(ProjectVersion))
endef
compiler_stage2_SplitObjs = NO
compiler_stage3_SplitObjs = NO
-# For now, bindists always use stage 2
-ifneq "$(BINDIST)" "YES"
-# stage 1 is enabled unless $(stage) is set to something other than 1
-ifeq "$(filter-out 1,$(stage))" ""
-$(eval $(call build-package,compiler,stage1,0))
+# if stage is set to something other than "1" or "", disable stage 1
+ifneq "$(filter-out 1,$(stage))" ""
+compiler_stage1_NOT_NEEDED = YES
endif
+# if stage is set to something other than "2" or "", disable stage 2
+ifneq "$(filter-out 2,$(stage))" ""
+compiler_stage2_NOT_NEEDED = YES
endif
-
-# stage 2 is enabled unless $(stage) is set to something other than 2
-ifeq "$(filter-out 2,$(stage))" ""
-$(eval $(call build-package,compiler,stage2,1))
+# stage 3 has to be requested explicitly with stage=3
+ifneq "$(stage)" "3"
+compiler_stage3_NOT_NEEDED = YES
endif
+$(eval $(call build-package,compiler,stage1,0))
+$(eval $(call build-package,compiler,stage2,1))
+$(eval $(call build-package,compiler,stage3,2))
ifneq "$(BINDIST)" "YES"
-# stage 3 has to be requested explicitly with stage=3
-ifeq "$(stage)" "3"
-$(eval $(call build-package,compiler,stage3,2))
-endif
-$(compiler_stage1_depfile) : compiler/stage1/$(PLATFORM_H)
-$(compiler_stage2_depfile) : compiler/stage2/$(PLATFORM_H)
-$(compiler_stage3_depfile) : compiler/stage3/$(PLATFORM_H)
+compiler_stage2_TAGS_HC_OPTS = -package ghc
+$(eval $(call tags-package,compiler,stage2))
+
+$(compiler_stage1_depfile_haskell) : compiler/stage1/$(PLATFORM_H)
+$(compiler_stage2_depfile_haskell) : compiler/stage2/$(PLATFORM_H)
+$(compiler_stage3_depfile_haskell) : compiler/stage3/$(PLATFORM_H)
-$(compiler_stage1_depfile) : $(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
-$(compiler_stage2_depfile) : $(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
-$(compiler_stage3_depfile) : $(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
+$(compiler_stage1_depfile_haskell) : $(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
+$(compiler_stage2_depfile_haskell) : $(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
+$(compiler_stage3_depfile_haskell) : $(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
# Every Constants.o object file depends on includes/GHCConstants.h:
$(eval $(call compiler-hs-dependency,Constants,$(includes_GHCCONSTANTS) includes/HaskellConstants.hs))
compiler/prelude/PrimOps_HC_OPTS += -fforce-recomp
compiler/main/Constants_HC_OPTS += -fforce-recomp
+# Workaround for #4003 in GHC 6.12.2. It didn't happen in 6.12.1, and
+# will be fixed in 6.12.3. Unfortunately we don't have a way to do
+# this for just stage1 in the build system.
+ifeq "$(GhcVersion)" "6.12.2"
+compiler/hsSyn/HsLit_HC_OPTS += -fomit-interface-pragmas
+endif
+
# Note [munge-stage1-package-config]
# Strip the date/patchlevel from the version of stage1. See Note
# [fiddle-stage1-version] above.
-ifneq "$(ProjectPatchLevel)" "0"
+ifeq "$(compiler_stage1_VERSION_MUNGED)" "YES"
compiler/stage1/inplace-pkg-config-munged: compiler/stage1/inplace-pkg-config
sed -e 's/^\(version: .*\)\.$(ProjectPatchLevel)$$/\1/' \
-e 's/^\(id: .*\)\.$(ProjectPatchLevel)$$/\1/' \