diff options
-rw-r--r-- | testsuite/tests/driver/T21035/M.hs | 9 | ||||
-rw-r--r-- | testsuite/tests/driver/T21035/Main.hs | 9 | ||||
-rw-r--r-- | testsuite/tests/driver/T21035/Makefile | 43 | ||||
-rw-r--r-- | testsuite/tests/driver/T21035/T21035.stderr | 15 | ||||
-rw-r--r-- | testsuite/tests/driver/T21035/all.T | 9 | ||||
-rwxr-xr-x | testsuite/tests/driver/T21035/cat-hsdep-info.sh | 26 | ||||
-rw-r--r-- | testsuite/tests/driver/T21035/hsdep/HsDep.hs | 6 |
7 files changed, 117 insertions, 0 deletions
diff --git a/testsuite/tests/driver/T21035/M.hs b/testsuite/tests/driver/T21035/M.hs new file mode 100644 index 0000000000..d0564b897e --- /dev/null +++ b/testsuite/tests/driver/T21035/M.hs @@ -0,0 +1,9 @@ +{-# LANGUAGE TemplateHaskell #-} +module M(f) where + +import HsDep + +return hsDep + +f :: IO () +f = return () diff --git a/testsuite/tests/driver/T21035/Main.hs b/testsuite/tests/driver/T21035/Main.hs new file mode 100644 index 0000000000..24732423f4 --- /dev/null +++ b/testsuite/tests/driver/T21035/Main.hs @@ -0,0 +1,9 @@ +{-# LANGUAGE TemplateHaskell #-} +module Main where + +import HsDep (hsDep) +import M(f) + +return hsDep + +main = f diff --git a/testsuite/tests/driver/T21035/Makefile b/testsuite/tests/driver/T21035/Makefile new file mode 100644 index 0000000000..3e426f7e7f --- /dev/null +++ b/testsuite/tests/driver/T21035/Makefile @@ -0,0 +1,43 @@ +TOP=../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk + +BASE_VERSION = $('$GHC_PKG' field base id --simple-output) + + +a.out: Main.o M.o + '$(TEST_HC)' Main.o M.o -package-env - + +Main.o Main.hi: M.hi hsdep/pkgdb/package.cache hsdep/HsDep.hi hsdep/libHShsdep-0.1-ghc8.10.7.so + '$(TEST_HC)' -c Main.hs hsdep/libHShsdep-0.1-ghc8.10.7.so -i. -package-env - -package-db hsdep/pkgdb + +M.o M.hi: M.hs hsdep-empty-lib/pkgdb/package.cache hsdep/HsDep.hi hsdep-empty-lib/libHShsdep-0.1-ghc8.10.7.so + '$(TEST_HC)' -c M.hs hsdep/HsDep.o -package-env - -package-db hsdep-empty-lib/pkgdb + +hsdep/pkgdb/package.cache: cat-hsdep-info.sh + mkdir -p hsdep/pkgdb + ./cat-hsdep-info.sh hsdep $(BASE_VERSION) > hsdep/pkgdb/hsdep-0.1.conf + '$(GHC_PKG)' recache --package-db hsdep/pkgdb + +hsdep-empty-lib/pkgdb/package.cache: cat-hsdep-info.sh + mkdir -p hsdep-empty-lib/pkgdb + GHC_PKG='$(GHC_PKG)' ./cat-hsdep-info.sh hsdep-empty-lib > hsdep-empty-lib/pkgdb/hsdep-0.1.conf + '$(GHC_PKG)' recache --package-db hsdep-empty-lib/pkgdb + +hsdep/libHShsdep-0.1-ghc8.10.7.so: hsdep/HsDep.dyn_o + '$(TEST_HC)' $(TEST_HC_OPTS) -shared -dynamic -o hsdep/libHShsdep-0.1-ghc8.10.7.so hsdep/HsDep.dyn_o + +hsdep-empty-lib/libHShsdep-0.1-ghc8.10.7.so: + mkdir -p hsdep-empty-lib + touch empty.c + '$(TEST_HC)' -shared -dynamic -o hsdep-empty-lib/libHShsdep-0.1-ghc8.10.7.so empty.c + rm empty.c + +hsdep/HsDep.dyn_hi hsdep/HsDep.dyn_o hsdep/HsDep.hi hsdep/HsDep.o: hsdep/HsDep.hs + '$(TEST_HC)' -c -dynamic-too -this-unit-id hsdep-0.1 hsdep/HsDep.hs -dynhisuf dyn_hi -dynosuf dyn_o + +T21035: a.out + +clean: + find . \( -name "*.*hi" -o -name "*.*o" \) -delete + rm -rf hsdep/pkgdb hsdep-empty-lib a.out diff --git a/testsuite/tests/driver/T21035/T21035.stderr b/testsuite/tests/driver/T21035/T21035.stderr new file mode 100644 index 0000000000..9508132705 --- /dev/null +++ b/testsuite/tests/driver/T21035/T21035.stderr @@ -0,0 +1,15 @@ +Warning: the following files would be used as linker inputs, but linking is not being done: hsdep/HsDep.o + +<no location info>: warning: [-Wmissed-extra-shared-lib] + libHShsdep-0.1.so: cannot open shared object file: No such file or directory + It's OK if you don't want to use symbols from it directly. + (the package DLL is loaded by the system linker + which manages dependencies by itself). +Warning: -rtsopts and -with-rtsopts have no effect with -shared. + Call hs_init_ghc() from your main() function to set these options. +Warning: the following files would be used as linker inputs, but linking is not being done: hsdep/libHShsdep-0.1-ghc8.10.7.so + +<no location info>: warning: [-Wmissed-extra-shared-lib] + It's OK if you don't want to use symbols from it directly. + (the package DLL is loaded by the system linker + which manages dependencies by itself). diff --git a/testsuite/tests/driver/T21035/all.T b/testsuite/tests/driver/T21035/all.T new file mode 100644 index 0000000000..ca632dcfd4 --- /dev/null +++ b/testsuite/tests/driver/T21035/all.T @@ -0,0 +1,9 @@ +# This test checks that supplied object files are usable to run TH splices from external packages. +# Rather than necessarily relying on shared objects. +# +# We could make this test work for static ghc as well but it's a bit fiddly so +# we have the unless(ghc_dynamic(), skip) clause. + +test('T21035', [unless(ghc_dynamic(), skip) + , grep_errmsg("-Wmissed-extra-shared-lib") + ,extra_files(["cat-hsdep-info.sh", "hsdep", "Main.hs", "M.hs"])], makefile_test, []) diff --git a/testsuite/tests/driver/T21035/cat-hsdep-info.sh b/testsuite/tests/driver/T21035/cat-hsdep-info.sh new file mode 100755 index 0000000000..3892374da8 --- /dev/null +++ b/testsuite/tests/driver/T21035/cat-hsdep-info.sh @@ -0,0 +1,26 @@ +libdir=$1 +base_version=$2 +cat <<END +name: dep +version: 0.1 +id: hsdep-0.1 +key: hsdep-0.1 +license: BSD3 +exposed: True +exposed-modules: HsDep +hidden-modules: +trusted: False +import-dirs: "$(pwd)/hsdep" +library-dirs: "$(pwd)/$libdir" "$(pwd)" +hs-libraries: HShsdep-0.1 +extra-libraries: +extra-ghci-libraries: +include-dirs: +includes: +depends: $base_version +cc-options: +ld-options: +framework-dirs: +frameworks: +haddock-interfaces: +END diff --git a/testsuite/tests/driver/T21035/hsdep/HsDep.hs b/testsuite/tests/driver/T21035/hsdep/HsDep.hs new file mode 100644 index 0000000000..a9493049da --- /dev/null +++ b/testsuite/tests/driver/T21035/hsdep/HsDep.hs @@ -0,0 +1,6 @@ +module HsDep where + +import Language.Haskell.TH + +hsDep :: [Dec] +hsDep = [] |