From 1a0603835e3c9f1047d9b7694efc996219a422e4 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sun, 27 Sep 2020 20:21:59 +0300 Subject: Add win_subsystem kwarg. Closes #7765. --- mesonbuild/compilers/compilers.py | 7 +++++++ mesonbuild/compilers/mixins/gnu.py | 14 ++++++++++++++ mesonbuild/compilers/mixins/visualstudio.py | 3 +++ 3 files changed, 24 insertions(+) (limited to 'mesonbuild/compilers') diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 4b48e31..fa1046a 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -878,6 +878,13 @@ class Compiler(metaclass=abc.ABCMeta): def get_gui_app_args(self, value: bool) -> T.List[str]: return [] + def get_win_subsystem_args(self, value: str) -> T.List[str]: + # This returns an empty array rather than throws to simplify the code. + # Otherwise we would have to check whenever calling this function whether + # the target is for Windows. There are also many cases where this is + # a meaningless choice, such as with Jave or C#. + return [] + def has_func_attribute(self, name: str, env: 'Environment') -> T.Tuple[bool, bool]: raise EnvironmentException( 'Language {} does not support function attributes.'.format(self.get_display_language())) diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py index 41afadd..bb1fc66 100644 --- a/mesonbuild/compilers/mixins/gnu.py +++ b/mesonbuild/compilers/mixins/gnu.py @@ -219,6 +219,20 @@ class GnuLikeCompiler(Compiler, metaclass=abc.ABCMeta): return ['-mwindows' if value else '-mconsole'] return [] + def get_win_subsystem_args(self, value: str) -> T.List[str]: + args = [] + if self.info.is_windows() or self.info.is_cygwin(): + if 'windows' in value: + args = ['-Wl,--subsystem,windows'] + elif 'console' in value: + args = ['-Wl,--subsystem,console'] + else: + raise mesonlib.MesonException('Only "windows" and "console" are supported for win_subsystem with MinGW, not "{}".'.format(value)) + if ',' in value: + args[-1] = args[-1] + ':' + value.split(',')[1] + return args + + def compute_parameters_with_absolute_paths(self, parameter_list: T.List[str], build_dir: str) -> T.List[str]: for idx, i in enumerate(parameter_list): if i[:2] == '-I' or i[:2] == '-L': diff --git a/mesonbuild/compilers/mixins/visualstudio.py b/mesonbuild/compilers/mixins/visualstudio.py index 3494bee..75ab635 100644 --- a/mesonbuild/compilers/mixins/visualstudio.py +++ b/mesonbuild/compilers/mixins/visualstudio.py @@ -205,6 +205,9 @@ class VisualStudioLikeCompiler(Compiler, metaclass=abc.ABCMeta): else: return ['/SUBSYSTEM:CONSOLE'] + def get_win_subsystem_args(self, value: str) -> T.List[str]: + return ['/SUBSYSTEM:' + value.upper()] + def get_pic_args(self) -> T.List[str]: return [] # PIC is handled by the loader on Windows -- cgit v1.1