Go back to using -no-user-package-conf for a while
[ghc.git] / testsuite / mk / test.mk
index 3ecb052..e6873cb 100644 (file)
@@ -1,50 +1,43 @@
 # -----------------------------------------------------------------------------
 # Examples of use:
 #
-#      make            -- run all the tests in the current directory
-#      make verbose    -- as make test, but up the verbosity
-#      make accept     -- run the tests, accepting the current output
+#  make           -- run all the tests in the current directory
+#  make verbose   -- as make test, but up the verbosity
+#  make accept    -- run the tests, accepting the current output
 #
 # The following variables may be set on the make command line:
 #
-#      TEST            -- specific test to run
-#      TESTS           -- specific tests to run (same as $TEST really)
-#      EXTRA_HC_OPTS   -- extra flags to send to the Haskell compiler
-#      EXTRA_RUNTEST_OPTS -- extra flags to give the test driver
-#      CONFIG          -- use a different configuration file
-#      COMPILER        -- select a configuration file from config/
-#       THREADS         -- run n tests at once
+#  TEST      -- specific test to run
+#  TESTS     -- specific tests to run (same as $TEST really)
+#  EXTRA_HC_OPTS      -- extra flags to send to the Haskell compiler
+#  EXTRA_RUNTEST_OPTS -- extra flags to give the test driver
+#  CONFIG    -- use a different configuration file
+#  COMPILER  -- select a configuration file from config/
+#  THREADS   -- run n tests at once
 #
 # -----------------------------------------------------------------------------
 
-include $(TOP)/mk/wordsize.mk
-
-ifeq "$(PYTHON)" ""
-$(error Python must be installed in order to use the testsuite)
-endif
-
-# export the value of $MAKE for invocation in ghc-regress/driver/
+# export the value of $MAKE for invocation in tests/driver/
 export MAKE
 
-# ghastly hack, because the driver requires that $tool be an absolute path name.
-GHC_STAGE1_ABS = $(GHC_COMPILER_DIR_ABS)/stage1/ghc-inplace
-GHC_STAGE2_ABS = $(GHC_COMPILER_DIR_ABS)/stage2/ghc-inplace
-GHC_STAGE3_ABS = $(GHC_COMPILER_DIR_ABS)/stage3/ghc-inplace
-
-EXTRA_HC_OPTS += -D$(HostPlatform_CPP)
-  # ideally TargetPlatform_CPP, but that doesn't exist; they're always the same anyway
 RUNTESTS     = $(TOP)/driver/runtests.py
 COMPILER     = ghc
-CONFIG       = $(TOP)/config/$(COMPILER)
+CONFIGDIR    = $(TOP)/config
+CONFIG       = $(CONFIGDIR)/$(COMPILER)
+
+# TEST_HC_OPTS is passed to every invocation of TEST_HC 
+# in nested Makefiles
+TEST_HC_OPTS = -fforce-recomp -dcore-lint -dcmm-lint -dno-debug-output -no-user-package-conf -rtsopts $(EXTRA_HC_OPTS)
+
+RUNTEST_OPTS =
 
-# can be overriden from the command line
-ifneq "$(stage)" ""
-TEST_HC = $(GHC_STAGE$(stage)_ABS)
+ifeq "$(filter $(TargetOS_CPP), cygwin32 mingw32)" ""
+exeext =
 else
-TEST_HC = $(GHC_STAGE1_ABS)
+exeext = .exe
 endif
 
-RUNTEST_OPTS =
+RUNTEST_OPTS += -e ghc_compiler_always_flags="'$(TEST_HC_OPTS)'"
 
 ifeq "$(GhcWithNativeCodeGen)" "YES"
 RUNTEST_OPTS += -e ghc_with_native_codegen=1
@@ -52,28 +45,39 @@ else
 RUNTEST_OPTS += -e ghc_with_native_codegen=0
 endif
 
-ifeq "$(filter p, $(GhcLibWays))" "p"
+HASKELL98_LIBDIR := $(shell "$(GHC_PKG)" field haskell98 library-dirs | sed 's/^[^:]*: *//')
+HAVE_PROFILING := $(shell if [ -f $(subst \,/,$(HASKELL98_LIBDIR))/libHShaskell98-*_p.a ]; then echo YES; else echo NO; fi)
+
+ifeq "$(HAVE_PROFILING)" "YES"
 RUNTEST_OPTS += -e ghc_with_profiling=1
 else
 RUNTEST_OPTS += -e ghc_with_profiling=0
 endif
 
-ifeq "$(filter u, $(GhcLibWays))" "u"
-RUNTEST_OPTS += -e ghc_with_unreg=1
+ifeq "$(filter thr, $(GhcRTSWays))" "thr"
+RUNTEST_OPTS += -e ghc_with_threaded_rts=1
 else
-RUNTEST_OPTS += -e ghc_with_unreg=0
+RUNTEST_OPTS += -e ghc_with_threaded_rts=0
 endif
 
-ifeq "$(GhcWithInterpreter)" "YES"
-RUNTEST_OPTS += -e ghc_with_interpreter=1
+ifeq "$(filter dyn, $(GhcRTSWays))" "dyn"
+RUNTEST_OPTS += -e ghc_with_dynamic_rts=1
 else
+RUNTEST_OPTS += -e ghc_with_dynamic_rts=0
+endif
+
+ifeq "$(GhcWithInterpreter)" "NO"
 RUNTEST_OPTS += -e ghc_with_interpreter=0
+else ifeq "$(GhcStage)" "1"
+RUNTEST_OPTS += -e ghc_with_interpreter=0
+else
+RUNTEST_OPTS += -e ghc_with_interpreter=1
 endif
 
-ifeq "$(filter thr, $(GhcRTSWays))" "thr"
-RUNTEST_OPTS += -e ghc_with_threaded_rts=1
+ifeq "$(GhcUnregisterised)" "YES"
+RUNTEST_OPTS += -e ghc_unregisterised=1
 else
-RUNTEST_OPTS += -e ghc_with_threaded_rts=0
+RUNTEST_OPTS += -e ghc_unregisterised=0
 endif
 
 ifeq "$(GhcWithSMP)" "YES"
@@ -82,24 +86,71 @@ else
 RUNTEST_OPTS += -e ghc_with_smp=0
 endif
 
+ifneq "$(shell $(SHELL) -c 'llc --version | grep version' 2> /dev/null)" ""
+RUNTEST_OPTS += -e ghc_with_llvm=1
+else
+RUNTEST_OPTS += -e ghc_with_llvm=0
+endif
+
+ifeq "$(WINDOWS)" "YES"
+RUNTEST_OPTS += -e windows=True
+else
+RUNTEST_OPTS += -e windows=False
+endif
+
+ifeq "$(DARWIN)" "YES"
+RUNTEST_OPTS += -e darwin=True
+else
+RUNTEST_OPTS += -e darwin=False
+endif
+
+ifeq "$(IN_TREE_COMPILER)" "YES"
+RUNTEST_OPTS += -e in_tree_compiler=True
+else
+RUNTEST_OPTS += -e in_tree_compiler=False
+endif
+
 ifneq "$(THREADS)" ""
-RUNTEST_OPTS += --thread=$(THREADS)
+RUNTEST_OPTS += --threads=$(THREADS)
+endif
+
+ifneq "$(CLEAN_ONLY)" ""
+RUNTEST_OPTS += -e clean_only=True
 else
-USETHREADS=0
+RUNTEST_OPTS += -e clean_only=False
+endif
+
+ifneq "$(CHECK_FILES_WRITTEN)" ""
+RUNTEST_OPTS += --check-files-written
 endif
 
 RUNTEST_OPTS +=  \
+       --rootdir=. \
        --config=$(CONFIG) \
-       -e config.compiler=\"$(TEST_HC)\" \
-       -e config.compiler_always_flags.append"(\"$(EXTRA_HC_OPTS)\")" \
-       -e config.platform=\"$(TARGETPLATFORM)\" \
-       -e config.wordsize=\"$(WORDSIZE)\" \
-       -e default_testopts.cleanup=\"$(CLEANUP)\" \
-       -e "if '$(USETHREADS)': config.use_threads=int($(USETHREADS))" \
-       -e config.timeout="int($(TIMEOUT)) or config.timeout" \
-       -e config.timeout_prog=\"$(TOP)/timeout/timeout\" \
-       $(EXTRA_RUNTEST_OPTS)
+       -e 'config.confdir="$(CONFIGDIR)"' \
+       -e 'config.compiler="$(TEST_HC)"' \
+       -e 'config.compiler_always_flags.append("$(EXTRA_HC_OPTS)")' \
+       -e 'config.ghc_pkg="$(GHC_PKG)"' \
+       -e 'config.hp2ps="$(HP2PS_ABS)"' \
+       -e 'config.hpc="$(HPC)"' \
+       -e 'config.gs="$(GS)"' \
+       -e 'config.platform="$(TARGETPLATFORM)"' \
+       -e 'config.os="$(TargetOS_CPP)"' \
+       -e 'config.arch="$(TargetARCH_CPP)"' \
+       -e 'config.wordsize="$(WORDSIZE)"' \
+       -e 'default_testopts.cleanup="$(CLEANUP)"' \
+       -e 'config.timeout=int($(TIMEOUT)) or config.timeout' \
+       -e 'config.timeout_prog="$(TIMEOUT_PROGRAM)"' \
+       -e 'config.exeext="$(exeext)"' \
+       -e 'config.top="$(TOP_ABS)"'
+
+ifneq "$(OUTPUT_SUMMARY)" ""
+RUNTEST_OPTS +=  \
+       --output-summary "$(OUTPUT_SUMMARY)"
+endif
 
+RUNTEST_OPTS +=  \
+       $(EXTRA_RUNTEST_OPTS)
 
 ifeq "$(fast)" "YES"
 setfast = -e config.fast=1
@@ -117,13 +168,24 @@ TESTS          =
 TEST        = 
 WAY =
 
-all :: test
+.PHONY: all boot test verbose accept fast
+
+all: test
+
+TIMEOUT_PROGRAM = $(TOP)/timeout/install-inplace/bin/timeout$(exeext)
+
+boot: $(TIMEOUT_PROGRAM)
+
+$(TIMEOUT_PROGRAM) :
+       @echo "Looks like you don't have timeout, building it first..."
+       $(MAKE) -C $(TOP)/timeout all
 
-test:
+test: $(TIMEOUT_PROGRAM)
        $(PYTHON) $(RUNTESTS) $(RUNTEST_OPTS) \
                $(patsubst %, --only=%, $(TEST)) \
                $(patsubst %, --only=%, $(TESTS)) \
                $(patsubst %, --way=%, $(WAY)) \
+               $(patsubst %, --skipway=%, $(SKIPWAY)) \
                $(setfast) \
                $(setaccept)