summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--testsuite/tests/driver/T21035/M.hs9
-rw-r--r--testsuite/tests/driver/T21035/Main.hs9
-rw-r--r--testsuite/tests/driver/T21035/Makefile43
-rw-r--r--testsuite/tests/driver/T21035/T21035.stderr15
-rw-r--r--testsuite/tests/driver/T21035/all.T9
-rwxr-xr-xtestsuite/tests/driver/T21035/cat-hsdep-info.sh26
-rw-r--r--testsuite/tests/driver/T21035/hsdep/HsDep.hs6
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 = []