Go back to using -no-user-package-conf for a while
[ghc.git] / testsuite / mk / test.mk
index ea84af8..e6873cb 100644 (file)
 # -----------------------------------------------------------------------------
 # 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
+#  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
 #
 # -----------------------------------------------------------------------------
 
-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_INPLACE_ABS        = $(FPTOOLS_TOP_ABS)/ghc/compiler/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
-CONFIG       = $(TOP)/config/ghc
+COMPILER     = ghc
+CONFIGDIR    = $(TOP)/config
+CONFIG       = $(CONFIGDIR)/$(COMPILER)
 
-# can be overriden from the command line
-TEST_HC = $(GHC_INPLACE_ABS)
+# 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 =
 
+ifeq "$(filter $(TargetOS_CPP), cygwin32 mingw32)" ""
+exeext =
+else
+exeext = .exe
+endif
+
+RUNTEST_OPTS += -e ghc_compiler_always_flags="'$(TEST_HC_OPTS)'"
+
 ifeq "$(GhcWithNativeCodeGen)" "YES"
 RUNTEST_OPTS += -e ghc_with_native_codegen=1
 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 "$(GhcWithInterpreter)" "YES"
-RUNTEST_OPTS += -e ghc_with_interpreter=1
+ifeq "$(filter thr, $(GhcRTSWays))" "thr"
+RUNTEST_OPTS += -e ghc_with_threaded_rts=1
+else
+RUNTEST_OPTS += -e ghc_with_threaded_rts=0
+endif
+
+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"
+RUNTEST_OPTS += -e ghc_with_smp=1
+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 += --threads=$(THREADS)
+endif
+
+ifneq "$(CLEAN_ONLY)" ""
+RUNTEST_OPTS += -e clean_only=True
+else
+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.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
+else
+setfast = 
+endif
+
+ifeq "$(accept)" "YES"
+setaccept = -e config.accept=1
+else
+setaccept = 
+endif
+
 TESTS       = 
 TEST        = 
-WAY          =
+WAY =
+
+.PHONY: all boot test verbose accept fast
+
+all: test
 
-all :: test
+TIMEOUT_PROGRAM = $(TOP)/timeout/install-inplace/bin/timeout$(exeext)
 
-test:
+boot: $(TIMEOUT_PROGRAM)
+
+$(TIMEOUT_PROGRAM) :
+       @echo "Looks like you don't have timeout, building it first..."
+       $(MAKE) -C $(TOP)/timeout all
+
+test: $(TIMEOUT_PROGRAM)
        $(PYTHON) $(RUNTESTS) $(RUNTEST_OPTS) \
                $(patsubst %, --only=%, $(TEST)) \
                $(patsubst %, --only=%, $(TESTS)) \
-               $(patsubst %, --way=%, $(WAY))
+               $(patsubst %, --way=%, $(WAY)) \
+               $(patsubst %, --skipway=%, $(SKIPWAY)) \
+               $(setfast) \
+               $(setaccept)
 
 verbose: test
 
 accept:
-       $(PYTHON) $(RUNTESTS) $(RUNTEST_OPTS) \
-               $(patsubst %, --only=%, $(TEST)) \
-               $(patsubst %, --only=%, $(TESTS)) \
-               $(patsubst %, --way=%, $(WAY)) \
-               -e config.accept=1
+       $(MAKE) accept=YES
+
+fast:
+       $(MAKE) fast=YES