From 290d447cf1d51c6783ced1b53cc23190f6cdafca Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Thu, 3 Mar 2022 17:45:54 +0000 Subject: 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 --- testsuite/tests/driver/T21035/M.hs | 9 ++++++ testsuite/tests/driver/T21035/Main.hs | 9 ++++++ testsuite/tests/driver/T21035/Makefile | 43 +++++++++++++++++++++++++ testsuite/tests/driver/T21035/T21035.stderr | 15 +++++++++ testsuite/tests/driver/T21035/all.T | 9 ++++++ testsuite/tests/driver/T21035/cat-hsdep-info.sh | 26 +++++++++++++++ testsuite/tests/driver/T21035/hsdep/HsDep.hs | 6 ++++ 7 files changed, 117 insertions(+) create mode 100644 testsuite/tests/driver/T21035/M.hs create mode 100644 testsuite/tests/driver/T21035/Main.hs create mode 100644 testsuite/tests/driver/T21035/Makefile create mode 100644 testsuite/tests/driver/T21035/T21035.stderr create mode 100644 testsuite/tests/driver/T21035/all.T create mode 100755 testsuite/tests/driver/T21035/cat-hsdep-info.sh create mode 100644 testsuite/tests/driver/T21035/hsdep/HsDep.hs 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 + +: 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 + +: 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 <