aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/backends.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-02-21 13:25:51 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2016-02-21 13:25:51 +0200
commit560d9d73755e02265377706840efc63e50c693b1 (patch)
tree9072b798735135c76d8fc797ee7d7357df3146b1 /mesonbuild/backend/backends.py
parent0469128f46f9d7239426868b168323d0d5adb9b8 (diff)
parent21d471673addc6f61329ffe8ac6d4d919c6c70c6 (diff)
downloadmeson-560d9d73755e02265377706840efc63e50c693b1.zip
meson-560d9d73755e02265377706840efc63e50c693b1.tar.gz
meson-560d9d73755e02265377706840efc63e50c693b1.tar.bz2
Merge pull request #398 from nirbheek/target-link-implib
Re-introduce patch to fix linking with MSVC by linking with import library.
Diffstat (limited to 'mesonbuild/backend/backends.py')
-rw-r--r--mesonbuild/backend/backends.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 052603a..8256cee 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -89,6 +89,14 @@ class Backend():
filename = os.path.join(targetdir, fname)
return filename
+ def get_target_filename_for_linking(self, target):
+ # On some platforms (msvc for instance), the file that is used for
+ # dynamic linking is not the same as the dynamic library itself. This
+ # file is called an import library, and we want to link against that.
+ # On platforms where this distinction is not important, the import
+ # library is the same as the dynamic library itself.
+ return os.path.join(self.get_target_dir(target), target.get_import_filename())
+
def get_target_dir(self, target):
if self.environment.coredata.get_builtin_option('layout') == 'mirror':
dirname = target.get_subdir()
@@ -267,11 +275,7 @@ class Backend():
if not isinstance(d, build.StaticLibrary) and\
not isinstance(d, build.SharedLibrary):
raise RuntimeError('Tried to link with a non-library target "%s".' % d.get_basename())
- fname = self.get_target_filename(d)
- if compiler.id == 'msvc':
- if fname.endswith('dll'):
- fname = fname[:-3] + 'lib'
- args.append(fname)
+ args.append(self.get_target_filename_for_linking(d))
# If you have executable e that links to shared lib s1 that links to shared library s2
# you have to specify s2 as well as s1 when linking e even if e does not directly use
# s2. Gcc handles this case fine but Clang does not for some reason. Thus we need to