summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghci/linking
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/ghci/linking')
-rw-r--r--testsuite/tests/ghci/linking/Makefile8
-rw-r--r--testsuite/tests/ghci/linking/T1407.script4
-rw-r--r--testsuite/tests/ghci/linking/all.T8
-rw-r--r--testsuite/tests/ghci/linking/dyn/A.c17
-rw-r--r--testsuite/tests/ghci/linking/dyn/Makefile23
-rw-r--r--testsuite/tests/ghci/linking/dyn/T1407.script4
-rw-r--r--testsuite/tests/ghci/linking/dyn/all.T12
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'])