diff options
author | Nikita Churaev <lamefun.x0r@gmail.com> | 2018-01-09 22:36:13 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-01-09 21:36:13 +0200 |
commit | de8018a17d9b84b2a57761ad624cc669c4e136a4 (patch) | |
tree | 171b7c8b1b342d4aec99a371d05fbac9fddfc25d /mesonbuild/build.py | |
parent | 398aed6e4991016c0bba4ee829bf65f98f1a6447 (diff) | |
download | meson-de8018a17d9b84b2a57761ad624cc669c4e136a4.zip meson-de8018a17d9b84b2a57761ad624cc669c4e136a4.tar.gz meson-de8018a17d9b84b2a57761ad624cc669c4e136a4.tar.bz2 |
Add `export_dynamic` argument to `executable`. (#2662)
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r-- | mesonbuild/build.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 8a2e716..16a18a9 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -82,6 +82,7 @@ known_lib_kwargs.update({'version': True, # Only for shared libs known_exe_kwargs = known_basic_kwargs.copy() known_exe_kwargs.update({'implib': True, + 'export_dynamic': True }) class InvalidArguments(MesonException): @@ -1160,23 +1161,33 @@ class Executable(BuildTarget): # The import library that GCC would generate (and prefer) self.gcc_import_filename = None - # if implib appears, this target is linkwith:-able, but that only means - # something on Windows platforms. - self.is_linkwithable = False - if 'implib' in kwargs and kwargs['implib']: + # Check for export_dynamic + self.export_dynamic = False + if kwargs.get('export_dynamic'): + if not isinstance(kwargs['export_dynamic'], bool): + raise InvalidArguments('"export_dynamic" keyword argument must be a boolean') + self.export_dynamic = True + if kwargs.get('implib'): + self.export_dynamic = True + if self.export_dynamic and kwargs.get('implib') is False: + raise InvalidArguments('"implib" keyword argument must not be false for if "export_dynamic" is true') + + # If using export_dynamic, set the import library name + if self.export_dynamic: implib_basename = self.name + '.exe' - if not isinstance(kwargs['implib'], bool): + if not isinstance(kwargs.get('implib', False), bool): implib_basename = kwargs['implib'] - self.is_linkwithable = True if for_windows(is_cross, environment) or for_cygwin(is_cross, environment): self.vs_import_filename = '{0}.lib'.format(implib_basename) self.gcc_import_filename = 'lib{0}.a'.format(implib_basename) - if self.get_using_msvc(): self.import_filename = self.vs_import_filename else: self.import_filename = self.gcc_import_filename + # Only linkwithable if using export_dynamic + self.is_linkwithable = self.export_dynamic + def type_suffix(self): return "@exe" |