diff options
Diffstat (limited to 'testsuite/tests/ghci/linking')
-rw-r--r-- | testsuite/tests/ghci/linking/Makefile | 8 | ||||
-rw-r--r-- | testsuite/tests/ghci/linking/T1407.script | 4 | ||||
-rw-r--r-- | testsuite/tests/ghci/linking/all.T | 8 | ||||
-rw-r--r-- | testsuite/tests/ghci/linking/dyn/A.c | 17 | ||||
-rw-r--r-- | testsuite/tests/ghci/linking/dyn/Makefile | 23 | ||||
-rw-r--r-- | testsuite/tests/ghci/linking/dyn/T1407.script | 4 | ||||
-rw-r--r-- | testsuite/tests/ghci/linking/dyn/all.T | 12 |
7 files changed, 65 insertions, 11 deletions
diff --git a/testsuite/tests/ghci/linking/Makefile b/testsuite/tests/ghci/linking/Makefile index 5b8e23c66c..c833454ea7 100644 --- a/testsuite/tests/ghci/linking/Makefile +++ b/testsuite/tests/ghci/linking/Makefile @@ -40,7 +40,11 @@ ghcilink002 : .PHONY: ghcilink003 ghcilink003 : +ifeq "$(WINDOWS)" "YES" + echo ":q" | "$(TEST_HC)" --interactive -ignore-dot-ghci -v0 -lstdc++-6 +else echo ":q" | "$(TEST_HC)" --interactive -ignore-dot-ghci -v0 -lstdc++ +endif # Test 4: # package P @@ -114,7 +118,11 @@ ghcilink006 : echo "version: 1.0" >>$(PKG006) echo "id: test-XXX" >>$(PKG006) echo "key: test-1.0" >>$(PKG006) +ifeq "$(WINDOWS)" "YES" + echo "extra-libraries: stdc++-6" >>$(PKG006) +else echo "extra-libraries: stdc++" >>$(PKG006) +endif '$(GHC_PKG)' init $(LOCAL_PKGCONF006) '$(GHC_PKG)' --no-user-package-db -f $(LOCAL_PKGCONF006) register $(PKG006) -v0 # diff --git a/testsuite/tests/ghci/linking/T1407.script b/testsuite/tests/ghci/linking/T1407.script deleted file mode 100644 index 97164359d0..0000000000 --- a/testsuite/tests/ghci/linking/T1407.script +++ /dev/null @@ -1,4 +0,0 @@ -:set -ldl -import Foreign -import Foreign.C.String -foreign import ccall "dlerror" dle :: IO CString diff --git a/testsuite/tests/ghci/linking/all.T b/testsuite/tests/ghci/linking/all.T index 4d05b8f355..fc3516aafa 100644 --- a/testsuite/tests/ghci/linking/all.T +++ b/testsuite/tests/ghci/linking/all.T @@ -12,8 +12,6 @@ test('ghcilink002', test('ghcilink003', [ - # still cannot load libstdc++ on Windows. See also #4468. - when(opsys('mingw32'), expect_broken(5289)), unless(doing_ghci, skip), extra_clean(['dir003/*','dir003']) ], @@ -36,8 +34,6 @@ test('ghcilink005', test('ghcilink006', [ - # still cannot load libstdc++ on Windows. See also #4468. - when(opsys('mingw32'), expect_broken(5289)), unless(doing_ghci, skip), extra_clean(['dir006/ghcilink006.package.conf/*', 'dir006/*','dir006']) ], @@ -47,9 +43,7 @@ test('ghcilink006', test('T3333', [extra_clean(['T3333.o']), unless(doing_ghci, skip), - unless(opsys('linux') or ghci_dynamic(), expect_broken(3333))], + unless(ghci_dynamic(), expect_broken(3333))], run_command, ['$MAKE -s --no-print-directory T3333']) -test('T1407', when(opsys('mingw32'), expect_broken(1407)), - ghci_script, ['T1407.script']) diff --git a/testsuite/tests/ghci/linking/dyn/A.c b/testsuite/tests/ghci/linking/dyn/A.c new file mode 100644 index 0000000000..fec94f2829 --- /dev/null +++ b/testsuite/tests/ghci/linking/dyn/A.c @@ -0,0 +1,17 @@ +#if defined(_MSC_VER) + // Microsoft + #define EXPORT __declspec(dllexport) +#elif defined(_GCC) + // GCC + #define EXPORT __attribute__((visibility("default"))) +#else + // do nothing and hope for the best? + #define EXPORT +#endif + +extern EXPORT int foo(); + +EXPORT int foo() +{ + return 2; +} diff --git a/testsuite/tests/ghci/linking/dyn/Makefile b/testsuite/tests/ghci/linking/dyn/Makefile new file mode 100644 index 0000000000..8a3b7363e4 --- /dev/null +++ b/testsuite/tests/ghci/linking/dyn/Makefile @@ -0,0 +1,23 @@ +TOP=../../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk + +ifeq "$(WINDOWS)" "YES" +DLL = lib$1.dll +else ifeq "$(DARWIN)" "YES" +DLL = lib$1.dylib +else +DLL = lib$1.so +endif + + +.PHONY: load_short_name +load_short_name: + rm -rf bin_short + mkdir bin_short + gcc -shared A.c -o "bin_short/$(call DLL,A)" + echo ":q" | "$(TEST_HC)" --interactive -L"$(PWD)/bin_short" -lA -v0 + +.PHONY: compile_libAS +compile_libAS: + gcc -shared A.c -o $(call DLL,AS) diff --git a/testsuite/tests/ghci/linking/dyn/T1407.script b/testsuite/tests/ghci/linking/dyn/T1407.script new file mode 100644 index 0000000000..0274f8245d --- /dev/null +++ b/testsuite/tests/ghci/linking/dyn/T1407.script @@ -0,0 +1,4 @@ +:set -lAS +import Foreign +import Foreign.C.Types +foreign import ccall "foo" dle :: IO CInt diff --git a/testsuite/tests/ghci/linking/dyn/all.T b/testsuite/tests/ghci/linking/dyn/all.T new file mode 100644 index 0000000000..2810c7f29f --- /dev/null +++ b/testsuite/tests/ghci/linking/dyn/all.T @@ -0,0 +1,12 @@ +test('load_short_name', + [unless(doing_ghci, skip), + extra_clean(['bin_short/*', 'bin_short'])], + run_command, + ['$MAKE -s --no-print-directory load_short_name']) + +test('T1407', + [unless(doing_ghci, skip), + extra_clean(['libAS.*']), + pre_cmd('$MAKE -s --no-print-directory compile_libAS'), + extra_hc_opts('-L.')], + ghci_script, ['T1407.script']) |