diff --git a/tests/driver/dynamicToo/dynamicToo004/Makefile b/tests/driver/dynamicToo/dynamicToo004/Makefile new file mode 100644 index 000000000..16ea1930a --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/Makefile @@ -0,0 +1,55 @@ +TOP=../../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk + +checkExists = [ -f $1 ] || echo $1 missing + +LOCAL_PKGCONF=local.package.conf + +.PHONY: clean +clean: + rm -f Setup.o Setup.hi Setup Setup.exe + rm -rf $(LOCAL_PKGCONF) + rm -rf pkg1/dist + rm -rf pkg1dyn/dist + rm -rf pkg2/dist + rm -f prog.o prog.hi progstatic progstatic.exe + rm -f prog.dyn_o prog.dyn_hi progdynamic progdynamic.exe + +.PHONY: dynamicToo004 +dynamicToo004: + $(MAKE) clean + + "$(GHC_PKG)" init $(LOCAL_PKGCONF) + "$(TEST_HC)" -v0 --make Setup.hs + +# First make the vanilla pkg1 + cd pkg1 && ../Setup configure -v0 --with-compiler="$(TEST_HC)" --with-hc-pkg="$(GHC_PKG)" --package-db=../$(LOCAL_PKGCONF) --enable-library-vanilla --disable-shared + cd pkg1 && ../Setup build + cd pkg1 && ../Setup register --inplace + +# Then the dynamic pkg1. This has different code in A.hs, so we get +# a different hash. + cd pkg1dyn && ../Setup configure -v0 --with-compiler="$(TEST_HC)" --with-hc-pkg="$(GHC_PKG)" --package-db=../$(LOCAL_PKGCONF) --disable-library-vanilla --enable-shared + cd pkg1dyn && ../Setup build + +# Now merge the dynamic outputs into the registered directory + cp pkg1dyn/dist/build/A.dyn_hi pkg1/dist/build/ + cp pkg1dyn/dist/build/A.dyn_o pkg1/dist/build/ + cp pkg1dyn/dist/build/libHSpkg1* pkg1/dist/build/ + +# Next compile pkg2 both ways, which will use -dynamic-too + cd pkg2 && ../Setup configure -v0 --with-compiler="$(TEST_HC)" --with-hc-pkg="$(GHC_PKG)" --package-db=../$(LOCAL_PKGCONF) --enable-library-vanilla --enable-shared + cd pkg2 && ../Setup build + cd pkg2 && ../Setup register --inplace + +# And then compile a program using the library both ways + "$(TEST_HC)" -package-db $(LOCAL_PKGCONF) --make prog -o progstatic + "$(TEST_HC)" -package-db $(LOCAL_PKGCONF) --make prog -o progdynamic -dynamic -osuf dyn_o -hisuf dyn_hi + +# Both should run, giving their respective outputs + echo static + ./progstatic + echo dynamic + ./progdynamic + diff --git a/tests/driver/dynamicToo/dynamicToo004/Setup.hs b/tests/driver/dynamicToo/dynamicToo004/Setup.hs new file mode 100644 index 000000000..9a994af67 --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/tests/driver/dynamicToo/dynamicToo004/pkg1/A.hs b/tests/driver/dynamicToo/dynamicToo004/pkg1/A.hs new file mode 100644 index 000000000..ff865ff1d --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/pkg1/A.hs @@ -0,0 +1,5 @@ + +module A where + +a :: Char +a = 'a' diff --git a/tests/driver/dynamicToo/dynamicToo004/pkg1/pkg1.cabal b/tests/driver/dynamicToo/dynamicToo004/pkg1/pkg1.cabal new file mode 100644 index 000000000..9d6c2d38a --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/pkg1/pkg1.cabal @@ -0,0 +1,7 @@ +Name: pkg1 +Version: 1 + +Library + Exposed-Modules: A + Build-Depends: base + diff --git a/tests/driver/dynamicToo/dynamicToo004/pkg1dyn/A.hs b/tests/driver/dynamicToo/dynamicToo004/pkg1dyn/A.hs new file mode 100644 index 000000000..ec75bb3aa --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/pkg1dyn/A.hs @@ -0,0 +1,5 @@ + +module A where + +a :: Char +a = 'x' diff --git a/tests/driver/dynamicToo/dynamicToo004/pkg1dyn/pkg1.cabal b/tests/driver/dynamicToo/dynamicToo004/pkg1dyn/pkg1.cabal new file mode 100644 index 000000000..9d6c2d38a --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/pkg1dyn/pkg1.cabal @@ -0,0 +1,7 @@ +Name: pkg1 +Version: 1 + +Library + Exposed-Modules: A + Build-Depends: base + diff --git a/tests/driver/dynamicToo/dynamicToo004/pkg2/B.hs b/tests/driver/dynamicToo/dynamicToo004/pkg2/B.hs new file mode 100644 index 000000000..abbce05f0 --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/pkg2/B.hs @@ -0,0 +1,5 @@ + +module B where + +b :: Char +b = 'b' diff --git a/tests/driver/dynamicToo/dynamicToo004/pkg2/C.hs b/tests/driver/dynamicToo/dynamicToo004/pkg2/C.hs new file mode 100644 index 000000000..a853f2fae --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/pkg2/C.hs @@ -0,0 +1,9 @@ + +module C where + +import A +import B + +c :: String +c = [a, b] + diff --git a/tests/driver/dynamicToo/dynamicToo004/pkg2/pkg2.cabal b/tests/driver/dynamicToo/dynamicToo004/pkg2/pkg2.cabal new file mode 100644 index 000000000..163dda69c --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/pkg2/pkg2.cabal @@ -0,0 +1,7 @@ +Name: pkg2 +Version: 1 + +Library + Exposed-Modules: B, C + Build-Depends: base, pkg1 + diff --git a/tests/driver/dynamicToo/dynamicToo004/prog.hs b/tests/driver/dynamicToo/dynamicToo004/prog.hs new file mode 100644 index 000000000..de674d348 --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/prog.hs @@ -0,0 +1,7 @@ + +module Main (main) where + +import C + +main :: IO () +main = putStrLn c diff --git a/tests/driver/dynamicToo/dynamicToo004/test.T b/tests/driver/dynamicToo/dynamicToo004/test.T new file mode 100644 index 000000000..d8618f546 --- /dev/null +++ b/tests/driver/dynamicToo/dynamicToo004/test.T @@ -0,0 +1,9 @@ + +test('dynamicToo004', + [only_compiler_types(['ghc']), + expect_broken(7665), + unless(have_vanilla(), skip), + unless(have_dynamic(), skip)], + run_command, + ['$MAKE -s --no-print-directory dynamicToo004']) +