summaryrefslogtreecommitdiff
path: root/testsuite/tests/driver/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/driver/Makefile')
-rw-r--r--testsuite/tests/driver/Makefile487
1 files changed, 487 insertions, 0 deletions
diff --git a/testsuite/tests/driver/Makefile b/testsuite/tests/driver/Makefile
new file mode 100644
index 0000000000..e407fd80de
--- /dev/null
+++ b/testsuite/tests/driver/Makefile
@@ -0,0 +1,487 @@
+TOP=../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+# A set of driver tests
+
+# Things to test:
+#
+# - one-shot vs. --make
+# - hierarchical vs. flat
+# - -odir vs. no -odir
+# - -hidir vs. no -hidir
+# - root module vs. found modules
+
+OBJSUFFIX = .o
+
+# -----------------------------------------------------------------------------
+# One-shot compilations, non-hierarchical modules
+
+test011:
+ $(RM) A011.hi
+ $(RM) A011$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) $(TEST_HC_OPTS) -c A011.hs
+ test -f A011.hi
+ test -f A011$(OBJSUFFIX)
+
+# test -o
+test012:
+ $(RM) A012.hi
+ $(RM) A012$(OBJSUFFIX)oo
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c A012.hs -o A012$(OBJSUFFIX)oo
+ test -f A012$(OBJSUFFIX)oo
+
+# test -ohi
+test013:
+ $(RM) A013.xhi
+ $(RM) A013$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c A013.hs -ohi A013.xhi
+ test -f A013.xhi
+
+# test -odir
+test014:
+ $(RM) -f A014.hi
+ $(RM) -rf obj014
+ mkdir obj014
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c A014.hs -odir obj014
+ test -f obj014/A014$(OBJSUFFIX)
+ test -f A014.hi
+
+# test -hidir
+test015:
+ $(RM) -f A015$(OBJSUFFIX)
+ $(RM) -rf hi015
+ mkdir hi015
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c A015.hs -hidir hi015
+ test -f A015$(OBJSUFFIX)
+ test -f hi015/A015.hi
+
+# test stub generation
+test016:
+ $(RM) F016.hi F016$(OBJSUFFIX) F016_stub.h
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c F016.hs
+ test -f F016_stub.h
+
+# test -stubdir (filename differs from module name)
+test017:
+ $(RM) F017.hi F017$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c F017.hs -stubdir stub017
+ test -f stub017/TestStub017_stub.h
+
+# test -odir with stubs (filename differs from module name)
+test018:
+ $(RM) -f F018.hi F018$(OBJSUFFIX) F018_stub.h
+ $(RM) -rf obj018
+ mkdir obj018
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c F018.hs -odir obj018
+
+# test for bug #3093
+test018a:
+ $(RM) -f F018a.hi F018a_stub.h *.obj.018
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c F018a.hs -osuf obj.018
+ test -f F018a.obj.018
+
+# test -outputdir
+test019:
+ $(RM) -rf out019
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c F019.hs -outputdir out019
+ test -f out019/TestStub019.hi
+ test -f out019/TestStub019_stub.h
+
+# -----------------------------------------------------------------------------
+# One-shot compilation, hierarchical modules
+
+test021:
+ $(RM) B021/C.hi
+ $(RM) B021/C$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B021/C.hs
+ test -f B021/C.hi
+ test -f B021/C$(OBJSUFFIX)
+
+# test -o
+test022:
+ $(RM) B022/C.hi
+ $(RM) B022/C$(OBJSUFFIX)oo
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B022/C.hs -o B022/C$(OBJSUFFIX)oo
+ test -f B022/C$(OBJSUFFIX)oo
+
+# test -ohi
+test023:
+ $(RM) B023/C.xhi
+ $(RM) B023/C$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B023/C.hs -ohi B023/C.xhi
+ test -f B023/C.xhi
+
+# test -odir
+test024:
+ $(RM) -f B024/C.hi
+ $(RM) -rf obj024
+ mkdir obj024
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B024/C.hs -odir obj024
+ test -f obj024/B024/C$(OBJSUFFIX)
+
+# test -odir with non-Haskell compilation
+test024a:
+ $(RM) -rf B024a
+ $(RM) -rf obj024a
+ mkdir B024a
+ mkdir obj024a
+ echo >B024a/stub.c
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B024a/stub.c -odir obj024a
+ test -f obj024a/B024a/stub$(OBJSUFFIX)
+
+# test -hidir
+test025:
+ $(RM) -rf hi025
+ mkdir hi025
+ $(RM) B025/C$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B025/C.hs -hidir hi025
+ test -f hi025/B025/C.hi
+
+# This is a hierarchical module that lives in a subdirectory.
+test026:
+ $(RM) d026/P/Q.hi
+ $(RM) d026/P/Q$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c d026/P/Q.hs
+ test -f d026/P/Q.hi
+ test -f d026/P/Q$(OBJSUFFIX)
+
+# test stub generation
+# -fvia-C, because we want to check that the .hc file can #include the stub.h
+test027:
+ $(RM) B027/F.hi B027/F$(OBJSUFFIX) B027/F_stub.h
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B027/F.hs -fno-warn-deprecated-flags -fvia-C
+ test -f B027/F_stub.h
+
+# test -stubdir
+# -fvia-C, because we want to check that the .hc file can #include the stub.h
+test028:
+ $(RM) B028/F.hi B028/F$(OBJSUFFIX)
+ $(RM) stub028/B028/F_stub.h
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c B028/F.hs -stubdir stub028 -fno-warn-deprecated-flags -fvia-C
+ test -f stub028/B028/F_stub.h
+
+# -----------------------------------------------------------------------------
+# Compilation-manager compilations, flat modules
+
+test031:
+ $(RM) A031.hi
+ $(RM) A031$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make A031.hs
+ test -f A031.hi
+ test -f A031$(OBJSUFFIX)
+
+# test -odir
+test032:
+ $(RM) A032.hi
+ $(RM) -rf obj032
+ mkdir obj032
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make A032.hs -odir obj032
+ test -f obj032/A032$(OBJSUFFIX)
+
+# test -hidir
+test033:
+ $(RM) -rf hi033
+ $(RM) A033$(OBJSUFFIX)
+ mkdir hi033
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make A033.hs -hidir hi033
+ test -f hi033/A033.hi
+
+# test stub generation
+test034:
+ $(RM) F034.hi F034$(OBJSUFFIX) F034_stub.h
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make F034.hs
+ test -f F034_stub.h
+
+# test -stubdir (filename differs from module name)
+test035:
+ $(RM) F035.hi F$(OBJSUFFIX) stub035/Stubs_stub.h
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make F035.hs -stubdir stub035
+ test -f stub035/TestStub035_stub.h
+
+# -----------------------------------------------------------------------------
+# Compilation-manager compilations, hierarchical modules
+
+test041:
+ $(RM) B041/C.hi
+ $(RM) B041/C$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make B041/C.hs
+ test -f B041/C.hi
+ test -f B041/C$(OBJSUFFIX)
+
+# test -odir
+test042:
+ $(RM) -rf obj042
+ mkdir obj042
+ $(RM) B042/C.hi
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make B042/C.hs -odir obj042
+ test -f obj042/B042/C$(OBJSUFFIX)
+
+# test -hidir
+test043:
+ $(RM) -f B043/C$(OBJSUFFIX)
+ $(RM) -rf hi043
+ mkdir hi043
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make B043/C.hs -hidir hi043
+ test -f hi043/B043/C.hi
+
+# test stub generation
+test044:
+ $(RM) B044/F.hi B044/F$(OBJSUFFIX) B044/F_stub.h
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make B044/F.hs
+ test -f B044/F_stub.h
+
+# test -stubdir
+test045:
+ $(RM) B045/F.hi B045/F$(OBJSUFFIX)
+ $(RM) stub045/B045/F_stub.h
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make B045/F.hs -stubdir stub045
+ test -f stub045/B045/F_stub.h
+
+# -----------------------------------------------------------------------------
+# Compilation-manager compilations, hierarchical modules, non-root modules
+
+test051:
+ $(RM) d051_2/R/S.hi
+ $(RM) d051_2/R/S$(OBJSUFFIX)
+ $(RM) d051_1/P/Q.hi
+ $(RM) d051_1/P/Q$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -id051_1 -id051_2 R.S
+ test -f d051_2/R/S.hi
+ test -f d051_2/R/S$(OBJSUFFIX)
+ test -f d051_1/P/Q.hi
+ test -f d051_1/P/Q$(OBJSUFFIX)
+
+# test -odir
+test052:
+ $(RM) d052_2/R/S.hi
+ $(RM) d052_1/P/Q.hi
+ $(RM) -rf obj052
+ mkdir obj052
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -id052_1 -id052_2 -odir obj052 R.S
+ test -f d052_2/R/S.hi
+ test -f obj052/R/S$(OBJSUFFIX)
+ test -f d052_1/P/Q.hi
+ test -f obj052/P/Q$(OBJSUFFIX)
+
+# test -hidir
+test053:
+ $(RM) hi053/R/S.hi
+ $(RM) d053_2/R/S$(OBJSUFFIX)
+ $(RM) hi053/P/Q.hi
+ $(RM) d053_1/P/Q$(OBJSUFFIX)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -id053_1 -id053_2 -hidir hi053 R.S
+ test -f hi053/R/S.hi
+ test -f d053_2/R/S$(OBJSUFFIX)
+ test -f hi053/P/Q.hi
+ test -f d053_1/P/Q$(OBJSUFFIX)
+
+# -----------------------------------------------------------------------------
+# Other tests
+
+# Test that -keep-s-files works with --make and -fvia-C
+test061a:
+ $(RM) A061a.hi A061a$(OBJSUFFIX) A061a.s
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -keep-s-files -fno-warn-deprecated-flags -fvia-C A061a.hs
+ test -f A061a.s
+
+# Test that -keep-s-files works without --make
+test061b:
+ $(RM) A061b.hi A061b$(OBJSUFFIX) A061b.s
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c -keep-s-files -fno-warn-deprecated-flags -fvia-C A061b.hs
+ test -f A061b.s
+
+# Test that -main-is works with --make
+test062a:
+ $(RM) Hello062a.hs Hello062a.hi Hello062a$(OBJSUFFIX) Hello062a.hc hello062a
+ echo "module Hello062a where { hello062a = putStrLn \"ok\" }" >Hello062a.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -main-is Hello062a.hello062a Hello062a -o hello062a
+ ./hello062a
+test062b:
+ $(RM) Hello062b.hs Hello062b.hi Hello062b$(OBJSUFFIX) Hello062b.hc hello062b
+ echo "module Hello062b where { main = putStrLn \"ok\" }" >Hello062b.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -main-is Hello062b Hello062b -o hello062b
+ ./hello062b
+test062c:
+ $(RM) Hello062c.hs Hello062c.hi Hello062c$(OBJSUFFIX) Hello062c.hc hello062c
+ echo "module Main (hello062c) where { hello062c = putStrLn \"ok\" }" >Hello062c.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -main-is hello062c Hello062c.hs -o hello062c
+ ./hello062c
+test062d:
+ $(RM) -rf B062d
+ $(RM) hello062d
+ mkdir B062d
+ echo "module B062d.Hello062d (hello062d) where { hello062d = putStrLn \"ok\" }" >B062d/Hello062d.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -main-is B062d.Hello062d.hello062d B062d/Hello062d.hs -o hello062d
+ ./hello062d
+test062e:
+ $(RM) -rf B062e
+ $(RM) Hello062e.hc hello062e
+ mkdir B062e
+ echo "module B062e.Hello062e (main) where { main = putStrLn \"ok\" }" >B062e/Hello062e.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -main-is B062e.Hello062e B062e/Hello062e.hs -o hello062e
+ ./hello062e
+
+# Test that -i deletes the list of search paths.
+# The compilation will fail, but we ignore the failure and just
+# compare the output, because make might give us a different exit code.
+test063:
+ $(RM) A063.hi A063$(OBJSUFFIX) A063.hc D063.hi D063$(OBJSUFFIX) D063.hc
+ -"$(TEST_HC)" $(TEST_HC_OPTS) --make -i -v0 D063.hs
+
+# Test -E
+test064:
+ $(RM) A064.hi A064.hspp
+ "$(TEST_HC)" $(TEST_HC_OPTS) -E A064.hs
+ test -f A064.hspp
+
+# Test -E/-cpp
+test065:
+ $(RM) A065.hi A065.hspp
+ "$(TEST_HC)" $(TEST_HC_OPTS) -E -cpp A065.hs
+ test -f A065.hspp
+
+# Test -E/-o
+test066:
+ $(RM) A066.hi A066.tmp
+ "$(TEST_HC)" $(TEST_HC_OPTS) -E A066.hs -o A066.tmp
+ test -f A066.tmp
+
+# Test -E/-cpp/-o
+test067:
+ $(RM) A067.hi A067.tmp
+ "$(TEST_HC)" $(TEST_HC_OPTS) -cpp -E A067.hs -o A067.tmp
+ test -f A067.tmp
+
+# Test -S
+test070:
+ $(RM) A070.hi A070.s
+ "$(TEST_HC)" $(TEST_HC_OPTS) -S A070.hs
+ test -f A070.s
+
+# Test -S/-o
+test071:
+ $(RM) A071.hi A071.tmp
+ "$(TEST_HC)" $(TEST_HC_OPTS) -S A071.hs -o A071.tmp
+ test -f A071.tmp
+
+
+# Tests for #2248, -o and .exe
+
+define test081
+$(RM) $(1).hs $(1).hi $(1)$(OBJSUFFIX) $(1).hc $(1)$(exeext)
+echo "module Main where { main = putStrLn \"ok\" }" >$(1).hs
+"$(TEST_HC)" $(TEST_HC_OPTS) --make -v0 $(1).hs
+test -f $(1)$(exeext)
+endef
+
+test081a:
+ $(call test081, Test_081a)
+test081b:
+ $(call test081, Test.081b)
+
+# -----------------------------------------------------------------------------
+# --make tests
+
+# Test for overlap between home module and package module
+test100:
+ $(RM) overlap/List.hi overlap/List.o
+ $(RM) overlap/Overlap.hi overlap/Overlap.o
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make -ioverlap Overlap
+
+# -----------------------------------------------------------------------------
+# dependency-generation tests
+
+DEPFILE200 = depend200
+
+# Test that we can create a dependency file, and that we can
+# modify an existing dependency file.
+test200:
+ $(RM) $(DEPFILE200)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -M -dep-makefile $(DEPFILE200) D200
+ test -f $(DEPFILE200)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -M -dep-makefile $(DEPFILE200) D200 B200.C A200
+ test -f $(DEPFILE200)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -M -dep-makefile $(DEPFILE200) D200.hs B200/C.hs A200.hs
+ test -f $(DEPFILE200)
+
+# -----------------------------------------------------------------------------
+
+2566::
+ if "$(TEST_HC)" $(TEST_HC_OPTS) -c foo2566.bar; then false else true; fi
+
+.PHONY: mode001
+# We use
+# sed '2,$$d'
+# rather than
+# head -1
+# as the latter gives
+# ghc: <stdout>: hFlush: resource vanished (Broken pipe)
+# on OS X
+mode001:
+ "$(TEST_HC)" $(TEST_HC_OPTS) --make --help | sed '2,$$d'
+ "$(TEST_HC)" $(TEST_HC_OPTS) --help --make | sed '2,$$d'
+ "$(TEST_HC)" $(TEST_HC_OPTS) --interactive --help | sed '2,$$d'
+ "$(TEST_HC)" $(TEST_HC_OPTS) --help --interactive | sed '2,$$d'
+ "$(TEST_HC)" $(TEST_HC_OPTS) --version --help | sed "s/, version.*//"
+ "$(TEST_HC)" $(TEST_HC_OPTS) --help --version | sed '2,$$d'
+ "$(TEST_HC)" $(TEST_HC_OPTS) --interactive --version | sed "s/, version.*//"
+ "$(TEST_HC)" $(TEST_HC_OPTS) --version --interactive | sed "s/, version.*//"
+
+# Test for building DLLs with ghc -shared, see #2745
+shared001:
+ $(RM) Shared001.hi Shared001.o HSdll.dll.a HSdll.dll Shared001_stub.*
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 -shared Shared001.hs
+
+# -----------------------------------------------------------------------------
+
+3674:
+ $(RM) 3674*.o 3674*.hi 3674_pre
+ "$(TEST_HC)" $(TEST_HC_OPTS) --make 3674_pre.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) --make 3674.hs
+
+.PHONY: rtsopts001
+rtsopts001:
+ $(RM) rtsOpts$(exeext) rtsOpts.hi rtsOpts.o
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make rtsOpts -rtsopts
+ echo "Normal"
+ -./rtsOpts +RTS -C0 2>&1
+ $(RM) rtsOpts$(exeext) rtsOpts.hi rtsOpts.o
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make rtsOpts
+ echo "No RTS opts"
+ -./rtsOpts +RTS -C0 2>&1
+
+.PHONY: rtsopts002
+rtsopts002:
+ $(RM) rtsopts002$(exeext) rtsopts002.hi rtsopts002.o
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make rtsopts002 -rtsopts=some
+ ./rtsopts002
+ ./rtsopts002 +RTS --info >/dev/null
+ if ./rtsopts002 +RTS -C0; then exit 1; else exit 0; fi
+ GHCRTS= ./rtsopts002
+ GHCRTS=--info ./rtsopts002 >/dev/null
+ if GHCRTS=-C0 ./rtsopts002; then exit 1; else exit 0; fi
+
+.PHONY: withRtsOpts
+withRtsOpts:
+ $(RM) withRtsOpts$(exeext) withRtsOpts.hi withRtsOpts.o withRtsOpts.out
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make withRtsOpts -with-rtsopts=--info
+ ./withRtsOpts | head -1
+ # Also test for non-safe RTS opts, these should be allowed too,
+ # since the author has explicitly requested them. (#5114)
+ $(RM) withRtsOpts$(exeext) withRtsOpts.hi withRtsOpts.o withRtsOpts.out
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 --make withRtsOpts -with-rtsopts=-twithRtsOpts.out
+ ./withRtsOpts | head -1
+ test -f withRtsOpts.out
+
+.PHONY: T3364
+T3364:
+ -"$(TEST_HC)" $(TEST_HC_OPTS) -H
+
+.PHONY: T706
+T706:
+ cp T706a.hs T706.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c T706.hs
+ cp T706b.hs T706.hs
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c T706.hs
+ echo "test" | "$(TEST_HC)" $(TEST_HC_OPTS) --interactive -ignore-dot-ghci -v0 T706