modules/windows: add some easy type annotations

This isn't complete, it's just the easy stuff
pull/9375/head
Dylan Baker 3 years ago
parent 54e17ad597
commit e3c8257fc9
  1. 29
      mesonbuild/modules/windows.py

@ -15,40 +15,47 @@
import enum import enum
import os import os
import re import re
import typing as T
from .. import mlog
from .. import mesonlib, build
from ..mesonlib import MachineChoice, MesonException, extract_as_list
from . import ModuleReturnValue
from . import ExtensionModule from . import ExtensionModule
from . import ModuleReturnValue
from .. import mesonlib, build
from .. import mlog
from ..interpreterbase import permittedKwargs, FeatureNewKwargs, flatten from ..interpreterbase import permittedKwargs, FeatureNewKwargs, flatten
from ..mesonlib import MachineChoice, MesonException, extract_as_list
from ..programs import ExternalProgram from ..programs import ExternalProgram
if T.TYPE_CHECKING:
from . import ModuleState
from ..compilers import Compiler
from ..interpreter import Interpreter
class ResourceCompilerType(enum.Enum): class ResourceCompilerType(enum.Enum):
windres = 1 windres = 1
rc = 2 rc = 2
wrc = 3 wrc = 3
class WindowsModule(ExtensionModule): class WindowsModule(ExtensionModule):
def __init__(self, interpreter): def __init__(self, interpreter: 'Interpreter'):
super().__init__(interpreter) super().__init__(interpreter)
self._rescomp: T.Optional[T.Tuple[ExternalProgram, ResourceCompilerType]] = None
self.methods.update({ self.methods.update({
'compile_resources': self.compile_resources, 'compile_resources': self.compile_resources,
}) })
def detect_compiler(self, compilers): def detect_compiler(self, compilers: T.Dict[str, 'Compiler']) -> 'Compiler':
for l in ('c', 'cpp'): for l in ('c', 'cpp'):
if l in compilers: if l in compilers:
return compilers[l] return compilers[l]
raise MesonException('Resource compilation requires a C or C++ compiler.') raise MesonException('Resource compilation requires a C or C++ compiler.')
def _find_resource_compiler(self, state): def _find_resource_compiler(self, state: 'ModuleState') -> T.Tuple[ExternalProgram, ResourceCompilerType]:
# FIXME: Does not handle `native: true` executables, see # FIXME: Does not handle `native: true` executables, see
# See https://github.com/mesonbuild/meson/issues/1531 # See https://github.com/mesonbuild/meson/issues/1531
# Take a parameter instead of the hardcoded definition below # Take a parameter instead of the hardcoded definition below
for_machine = MachineChoice.HOST for_machine = MachineChoice.HOST
if hasattr(self, '_rescomp'): if self._rescomp:
return self._rescomp return self._rescomp
# Will try cross / native file and then env var # Will try cross / native file and then env var
@ -82,7 +89,7 @@ class WindowsModule(ExtensionModule):
@FeatureNewKwargs('windows.compile_resources', '0.47.0', ['depend_files', 'depends']) @FeatureNewKwargs('windows.compile_resources', '0.47.0', ['depend_files', 'depends'])
@permittedKwargs({'args', 'include_directories', 'depend_files', 'depends'}) @permittedKwargs({'args', 'include_directories', 'depend_files', 'depends'})
def compile_resources(self, state, args, kwargs): def compile_resources(self, state: 'ModuleState', args, kwargs):
extra_args = mesonlib.stringlistify(flatten(kwargs.get('args', []))) extra_args = mesonlib.stringlistify(flatten(kwargs.get('args', [])))
wrc_depend_files = extract_as_list(kwargs, 'depend_files', pop = True) wrc_depend_files = extract_as_list(kwargs, 'depend_files', pop = True)
wrc_depends = extract_as_list(kwargs, 'depends', pop = True) wrc_depends = extract_as_list(kwargs, 'depends', pop = True)
@ -167,5 +174,5 @@ class WindowsModule(ExtensionModule):
return ModuleReturnValue(res_targets, [res_targets]) return ModuleReturnValue(res_targets, [res_targets])
def initialize(*args, **kwargs): def initialize(interp: 'Interpreter') -> WindowsModule:
return WindowsModule(*args, **kwargs) return WindowsModule(interp)

Loading…
Cancel
Save