diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2020-09-27 20:21:59 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2020-10-07 18:55:25 +0300 |
commit | 1a0603835e3c9f1047d9b7694efc996219a422e4 (patch) | |
tree | 17262dcb1829ebad6a9817ce8571beb342eaad75 /mesonbuild/build.py | |
parent | 8b20852b0ff35a9e19b3b26c04decdef35036fd5 (diff) | |
download | meson-1a0603835e3c9f1047d9b7694efc996219a422e4.zip meson-1a0603835e3c9f1047d9b7694efc996219a422e4.tar.gz meson-1a0603835e3c9f1047d9b7694efc996219a422e4.tar.bz2 |
Add win_subsystem kwarg. Closes #7765.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r-- | mesonbuild/build.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index be97634..8d2a22f 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -88,6 +88,7 @@ buildtarget_kwargs = set([ 'sources', 'gnu_symbol_visibility', 'link_language', + 'win_subsystem', ]) known_build_target_kwargs = ( @@ -924,11 +925,21 @@ This will become a hard error in a future Meson release.''') raise InvalidArguments('Main class must be a string') self.main_class = main_class if isinstance(self, Executable): - self.gui_app = kwargs.get('gui_app', False) - if not isinstance(self.gui_app, bool): - raise InvalidArguments('Argument gui_app must be boolean.') + # This kwarg is deprecated. The value of "none" means that the kwarg + # was not specified and win_subsystem should be used instead. + self.gui_app = None + if 'gui_app' in kwargs: + mlog.deprecation('The gui_app kwarg is deprecated, use win_subsystem instead.') + if 'win_subsystem' in kwargs: + raise InvalidArguments('Can specify only gui_app or win_subsystem for a target, not both.') + self.gui_app = kwargs['gui_app'] + if not isinstance(self.gui_app, bool): + raise InvalidArguments('Argument gui_app must be boolean.') + self.win_subsystem = self.validate_win_subsystem(kwargs.get('win_subsystem', 'console')) elif 'gui_app' in kwargs: raise InvalidArguments('Argument gui_app can only be used on executables.') + elif 'win_subsystem' in kwargs: + raise InvalidArguments('Argument win_subsystem can only be used on executables.') extra_files = extract_as_list(kwargs, 'extra_files') for i in extra_files: assert(isinstance(i, File)) @@ -1000,6 +1011,12 @@ This will become a hard error in a future Meson release.''') if self.gnu_symbol_visibility not in permitted: raise InvalidArguments('GNU symbol visibility arg {} not one of: {}'.format(self.symbol_visibility, ', '.join(permitted))) + def validate_win_subsystem(self, value: str) -> str: + value = value.lower() + if re.fullmatch(r'(boot_application|console|efi_application|efi_boot_service_driver|efi_rom|efi_runtime_driver|native|posix|windows)(,\d+(\.\d+)?)?', value) is None: + raise InvalidArguments('Invalid value for win_subsystem: {}.'.format(value)) + return value + def _extract_pic_pie(self, kwargs, arg): # Check if we have -fPIC, -fpic, -fPIE, or -fpie in cflags all_flags = self.extra_args['c'] + self.extra_args['cpp'] |