aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/build.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2020-09-27 20:21:59 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2020-10-07 18:55:25 +0300
commit1a0603835e3c9f1047d9b7694efc996219a422e4 (patch)
tree17262dcb1829ebad6a9817ce8571beb342eaad75 /mesonbuild/build.py
parent8b20852b0ff35a9e19b3b26c04decdef35036fd5 (diff)
downloadmeson-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.py23
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']