summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2022-03-03 17:45:54 +0000
committerMarge Bot <ben+marge-bot@smart-cactus.org>2022-03-24 17:13:22 -0400
commita2937e2b2cadc72b78641c321398cf6b7e7a485c (patch)
treeccf285167333c7632bdf78879fc75173963b61d7
parent21680fb05df18f4da855e1ca66e895b82cfd1e96 (diff)
downloadhaskell-a2937e2b2cadc72b78641c321398cf6b7e7a485c.tar.gz
Add test for T21035
This test checks that you are allowed to explicitly supply object files for dependencies even if you haven't got the shared object for that library yet. Fixes #21035
-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 = []