diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2022-03-03 17:45:54 +0000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-03-24 17:13:22 -0400 |
commit | a2937e2b2cadc72b78641c321398cf6b7e7a485c (patch) | |
tree | ccf285167333c7632bdf78879fc75173963b61d7 | |
parent | 21680fb05df18f4da855e1ca66e895b82cfd1e96 (diff) | |
download | haskell-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.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 = [] |