diff options
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 7 | ||||
-rw-r--r-- | mesonbuild/backend/vs2010backend.py | 10 | ||||
-rw-r--r-- | mesonbuild/build.py | 18 | ||||
-rw-r--r-- | mesonbuild/compilers/compilers.py | 4 | ||||
-rw-r--r-- | mesonbuild/compilers/mixins/gnu.py | 3 | ||||
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 12 | ||||
-rw-r--r-- | mesonbuild/linkers/linkers.py | 13 |
7 files changed, 23 insertions, 44 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 8776796..3ddc197 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -3277,16 +3277,13 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) def get_target_type_link_args_post_dependencies(self, target, linker): commands = [] if isinstance(target, build.Executable): - # If gui_app is significant on this platform, add the appropriate linker arguments. + # If win_subsystem is significant on this platform, add the appropriate linker arguments. # Unfortunately this can't be done in get_target_type_link_args, because some misguided # libraries (such as SDL2) add -mwindows to their link flags. m = self.environment.machines[target.for_machine] if m.is_windows() or m.is_cygwin(): - if target.gui_app is not None: - commands += linker.get_gui_app_args(target.gui_app) - else: - commands += linker.get_win_subsystem_args(target.win_subsystem) + commands += linker.get_win_subsystem_args(target.win_subsystem) return commands def get_link_whole_args(self, linker, target): diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index 340c1a5..0a382be 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -1645,13 +1645,9 @@ class Vs2010Backend(backends.Backend): conftype = 'Makefile' elif isinstance(target, build.Executable): conftype = 'Application' - if target.gui_app is not None: - if not target.gui_app: - subsystem = 'Console' - else: - # If someone knows how to set the version properly, - # please send a patch. - subsystem = target.win_subsystem.split(',')[0] + # If someone knows how to set the version properly, + # please send a patch. + subsystem = target.win_subsystem.split(',')[0] elif isinstance(target, build.StaticLibrary): conftype = 'StaticLibrary' elif isinstance(target, build.SharedLibrary): diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 025af15..cfb3a54 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1147,19 +1147,12 @@ class BuildTarget(Target): (str, bool)) self.install_mode = kwargs.get('install_mode', None) self.install_tag = stringlistify(kwargs.get('install_tag', [None])) - if isinstance(self, Executable): - # 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 not isinstance(self, Executable): + # build_target will always populate these as `None`, which is fine if kwargs.get('gui_app') is not None: - if kwargs.get('win_subsystem') is not None: - raise InvalidArguments('Can specify only gui_app or win_subsystem for a target, not both.') - self.gui_app = kwargs['gui_app'] - self.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.') + raise InvalidArguments('Argument gui_app can only be used on executables.') + if kwargs.get('win_subsystem') is not None: + 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) @@ -1901,6 +1894,7 @@ class Executable(BuildTarget): kwargs['pie'] = environment.coredata.options[key].value super().__init__(name, subdir, subproject, for_machine, sources, structured_sources, objects, environment, compilers, kwargs) + self.win_subsystem = kwargs.get('win_subsystem') or 'console' # Check for export_dynamic self.export_dynamic = kwargs.get('export_dynamic', False) if not isinstance(self.export_dynamic, bool): diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index cb8eae5..7a8ae72 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -980,10 +980,6 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta): def gnu_symbol_visibility_args(self, vistype: str) -> T.List[str]: return [] - def get_gui_app_args(self, value: bool) -> T.List[str]: - # Only used on Windows - return self.linker.get_gui_app_args(value) - def get_win_subsystem_args(self, value: str) -> T.List[str]: # By default the dynamic linker is going to return an empty # array in case it either doesn't support Windows subsystems diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py index 2b18732..b62435b 100644 --- a/mesonbuild/compilers/mixins/gnu.py +++ b/mesonbuild/compilers/mixins/gnu.py @@ -451,9 +451,6 @@ class GnuLikeCompiler(Compiler, metaclass=abc.ABCMeta): def get_profile_use_args(self) -> T.List[str]: return ['-fprofile-use'] - def get_gui_app_args(self, value: bool) -> T.List[str]: - return ['-mwindows' if value else '-mconsole'] - 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/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 125562f..67203bd 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -3280,6 +3280,18 @@ class Interpreter(InterpreterBase, HoldableObject): outputs.update(o) kwargs['include_directories'] = self.extract_incdirs(kwargs) + + if targetclass is build.Executable: + if kwargs['gui_app'] is not None: + if kwargs['win_subsystem'] is not None: + raise InvalidArguments.from_node( + 'Executable got both "gui_app", and "win_subsystem" arguments, which are mutually exclusive', + node=node) + if kwargs['gui_app']: + kwargs['win_subsystem'] = 'windows' + if kwargs['win_subsystem'] is None: + kwargs['win_subsystem'] = 'console' + target = targetclass(name, self.subdir, self.subproject, for_machine, srcs, struct, objs, self.environment, self.compilers[for_machine], kwargs) diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py index 8948347..9176090 100644 --- a/mesonbuild/linkers/linkers.py +++ b/mesonbuild/linkers/linkers.py @@ -279,10 +279,6 @@ class DynamicLinker(metaclass=abc.ABCMeta): # Only used by the Apple linker return [] - def get_gui_app_args(self, value: bool) -> T.List[str]: - # Only used by VisualStudioLikeLinkers - return [] - def get_win_subsystem_args(self, value: str) -> T.List[str]: # Only used if supported by the dynamic linker and # only when targeting Windows @@ -1318,9 +1314,6 @@ class MSVCDynamicLinker(VisualStudioLikeLinkerMixin, DynamicLinker): def get_always_args(self) -> T.List[str]: return self._apply_prefix(['/nologo', '/release']) + super().get_always_args() - def get_gui_app_args(self, value: bool) -> T.List[str]: - return self.get_win_subsystem_args("windows" if value else "console") - def get_win_subsystem_args(self, value: str) -> T.List[str]: return self._apply_prefix([f'/SUBSYSTEM:{value.upper()}']) @@ -1347,9 +1340,6 @@ class ClangClDynamicLinker(VisualStudioLikeLinkerMixin, DynamicLinker): return super().get_output_args(outputname) - def get_gui_app_args(self, value: bool) -> T.List[str]: - return self.get_win_subsystem_args("windows" if value else "console") - def get_win_subsystem_args(self, value: str) -> T.List[str]: return self._apply_prefix([f'/SUBSYSTEM:{value.upper()}']) @@ -1370,9 +1360,6 @@ class XilinkDynamicLinker(VisualStudioLikeLinkerMixin, DynamicLinker): direct: bool = True): super().__init__(['xilink.exe'], for_machine, '', always_args, version=version) - def get_gui_app_args(self, value: bool) -> T.List[str]: - return self.get_win_subsystem_args("windows" if value else "console") - def get_win_subsystem_args(self, value: str) -> T.List[str]: return self._apply_prefix([f'/SUBSYSTEM:{value.upper()}']) |