aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-06-14 22:59:14 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-06-14 22:59:14 +0300
commit81b478e03108d341f1021bfe7db18e21a758a9fc (patch)
treea568f76ac0e003c10718a5b9849217ad4065bc19
parent34f1042a7e0c52f9038851beb6497af013e8ef25 (diff)
downloadmeson-81b478e03108d341f1021bfe7db18e21a758a9fc.zip
meson-81b478e03108d341f1021bfe7db18e21a758a9fc.tar.gz
meson-81b478e03108d341f1021bfe7db18e21a758a9fc.tar.bz2
Shared library linking works with MSVC.
-rwxr-xr-xbackends.py9
-rw-r--r--test cases/common/6 linkshared/libfile.c13
-rw-r--r--test cases/common/6 linkshared/main.c8
3 files changed, 25 insertions, 5 deletions
diff --git a/backends.py b/backends.py
index ec2ebd1..df7a2cb 100755
--- a/backends.py
+++ b/backends.py
@@ -199,14 +199,17 @@ class Backend():
return commands
- def build_target_link_arguments(self, deps):
+ def build_target_link_arguments(self, compiler, deps):
args = []
for d in deps:
if not isinstance(d, interpreter.StaticLibrary) and\
not isinstance(d, interpreter.SharedLibrary):
raise RuntimeError('Tried to link with a non-library target "%s".' % d.get_basename())
fname = self.get_target_filename(d)
- fname = './' + fname # Hack to make ldd find the library.
+ if compiler.id == 'msvc':
+ if fname.endswith('dll'):
+ fname = fname[:-3] + 'lib'
+ fname = os.path.join('.', fname) # Hack to make ldd find the library.
args.append(fname)
return args
@@ -671,7 +674,7 @@ class NinjaBackend(Backend):
for dep in target.get_external_deps():
commands += dep.get_link_flags()
dependencies = target.get_dependencies()
- commands += self.build_target_link_arguments(dependencies)
+ commands += self.build_target_link_arguments(linker, dependencies)
if self.environment.coredata.coverage:
commands += linker.get_coverage_link_flags()
dep_targets = [self.get_dependency_filename(t) for t in dependencies]
diff --git a/test cases/common/6 linkshared/libfile.c b/test cases/common/6 linkshared/libfile.c
index 6f1c172..44f7667 100644
--- a/test cases/common/6 linkshared/libfile.c
+++ b/test cases/common/6 linkshared/libfile.c
@@ -1,3 +1,14 @@
-int func() {
+#if defined _WIN32 || defined __CYGWIN__
+ #define DLL_PUBLIC __declspec(dllexport)
+#else
+ #if defined __GNUC__
+ #define DLL_PUBLIC __attribute__ ((visibility("default")))
+ #else
+ #pragma message ("Compiler does not support symbol visibility.")
+ #define DLL_PUBLIC
+ #endif
+#endif
+
+int DLL_PUBLIC func() {
return 0;
}
diff --git a/test cases/common/6 linkshared/main.c b/test cases/common/6 linkshared/main.c
index 8aadb0c..12f9c98 100644
--- a/test cases/common/6 linkshared/main.c
+++ b/test cases/common/6 linkshared/main.c
@@ -1,4 +1,10 @@
-int func();
+#if defined _WIN32 || defined __CYGWIN__
+ #define DLL_IMPORT __declspec(dllimport)
+#else
+ #define DLL_IMPORT
+#endif
+
+int DLL_IMPORT func();
int main(int argc, char **arg) {
return func();