aboutsummaryrefslogtreecommitdiffstats
path: root/meson/test cases/common/148 shared module resolving symbol in executable/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson/test cases/common/148 shared module resolving symbol in executable/meson.build')
-rw-r--r--meson/test cases/common/148 shared module resolving symbol in executable/meson.build20
1 files changed, 20 insertions, 0 deletions
diff --git a/meson/test cases/common/148 shared module resolving symbol in executable/meson.build b/meson/test cases/common/148 shared module resolving symbol in executable/meson.build
new file mode 100644
index 000000000..4e5188f12
--- /dev/null
+++ b/meson/test cases/common/148 shared module resolving symbol in executable/meson.build
@@ -0,0 +1,20 @@
+project('shared module resolving symbol in executable', 'c')
+
+# The shared module contains a reference to the symbol 'func_from_executable',
+# which is always provided by the executable which loads it. This symbol can be
+# resolved at run-time by an ELF loader. But when building PE/COFF objects, all
+# symbols must be resolved at link-time, so an implib is generated for the
+# executable, and the shared module linked with it.
+#
+# See testcase 125 for an example of the more complex portability gymnastics
+# required if we do not know (at link-time) what provides the symbol.
+
+cc = meson.get_compiler('c')
+if cc.get_id() == 'pgi'
+ error('MESON_SKIP_TEST PGI has its own unique set of macros that would need to be handled')
+endif
+
+dl = meson.get_compiler('c').find_library('dl', required: false)
+e = executable('prog', 'prog.c', dependencies: dl, export_dynamic: true)
+m = shared_module('module', 'module.c', link_with: e)
+test('test', e, args: m.full_path())