diff options
Diffstat (limited to 'testsuite/tests/driver/Makefile')
-rw-r--r-- | testsuite/tests/driver/Makefile | 487 |
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 |