aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules/qt.py
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2021-09-10 17:56:46 -0400
committerEli Schwartz <eschwartz@archlinux.org>2021-09-10 17:57:28 -0400
commitf291b637b13ba32e20d1081906e68780d2a5ae5a (patch)
treebbf9de2b607d5051c9cfaf52a376dec8ba664a2a /mesonbuild/modules/qt.py
parentad3bf77ff0f599594b417da8d437501c44410987 (diff)
downloadmeson-f291b637b13ba32e20d1081906e68780d2a5ae5a.zip
meson-f291b637b13ba32e20d1081906e68780d2a5ae5a.tar.gz
meson-f291b637b13ba32e20d1081906e68780d2a5ae5a.tar.bz2
qt module: consolidate on one list of bins
Diffstat (limited to 'mesonbuild/modules/qt.py')
-rw-r--r--mesonbuild/modules/qt.py50
1 files changed, 25 insertions, 25 deletions
diff --git a/mesonbuild/modules/qt.py b/mesonbuild/modules/qt.py
index 4557183..19d9a63 100644
--- a/mesonbuild/modules/qt.py
+++ b/mesonbuild/modules/qt.py
@@ -96,7 +96,6 @@ if T.TYPE_CHECKING:
rcc_extra_arguments: T.List[str]
ts_files: T.List[T.Union[str, File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList]]
-
class QtBaseModule(ExtensionModule):
_tools_detected = False
_rcc_supports_depfiles = False
@@ -104,10 +103,12 @@ class QtBaseModule(ExtensionModule):
def __init__(self, interpreter: 'Interpreter', qt_version: int = 5):
ExtensionModule.__init__(self, interpreter)
self.qt_version = qt_version
- self.moc: ExternalProgram = NonExistingExternalProgram('moc')
- self.uic: ExternalProgram = NonExistingExternalProgram('uic')
- self.rcc: ExternalProgram = NonExistingExternalProgram('rcc')
- self.lrelease: ExternalProgram = NonExistingExternalProgram('lrelease')
+ self.tools: T.Dict[str, ExternalProgram] = {
+ 'moc': NonExistingExternalProgram('moc'),
+ 'uic': NonExistingExternalProgram('uic'),
+ 'rcc': NonExistingExternalProgram('rcc'),
+ 'lrelease': NonExistingExternalProgram('lrelease'),
+ }
self.methods.update({
'has_tools': self.has_tools,
'preprocess': self.preprocess,
@@ -121,11 +122,10 @@ class QtBaseModule(ExtensionModule):
"""Detect Qt (4 or 5) moc, uic, rcc in the specified bindir or in PATH"""
# It is important that this list does not change order as the order of
# the returned ExternalPrograms will change as well
- bins = ['moc', 'uic', 'rcc', 'lrelease']
wanted = f'== {qt_dep.version}'
def gen_bins() -> T.Generator[T.Tuple[str, str], None, None]:
- for b in bins:
+ for b in self.tools:
if qt_dep.bindir:
yield os.path.join(qt_dep.bindir, b), b
# prefer the <tool>-qt<version> of the tool to the plain one, as we
@@ -134,7 +134,7 @@ class QtBaseModule(ExtensionModule):
yield b, b
for b, name in gen_bins():
- if getattr(self, name).found():
+ if self.tools[name].found():
continue
if name == 'lrelease':
@@ -157,7 +157,7 @@ class QtBaseModule(ExtensionModule):
version_func=get_version,
wanted=wanted)
if p.found():
- setattr(self, name, p)
+ self.tools[name] = p
def _detect_tools(self, state: 'ModuleState', method: str, required: bool = True) -> None:
if self._tools_detected:
@@ -177,10 +177,10 @@ class QtBaseModule(ExtensionModule):
mlog.bold('https://bugreports.qt.io/browse/QTBUG-45460'), fatal=False)
else:
suffix = f'-qt{self.qt_version}'
- self.moc = NonExistingExternalProgram(name='moc' + suffix)
- self.uic = NonExistingExternalProgram(name='uic' + suffix)
- self.rcc = NonExistingExternalProgram(name='rcc' + suffix)
- self.lrelease = NonExistingExternalProgram(name='lrelease' + suffix)
+ self.tools['moc'] = NonExistingExternalProgram(name='moc' + suffix)
+ self.tools['uic'] = NonExistingExternalProgram(name='uic' + suffix)
+ self.tools['rcc'] = NonExistingExternalProgram(name='rcc' + suffix)
+ self.tools['lrelease'] = NonExistingExternalProgram(name='lrelease' + suffix)
@staticmethod
def _qrc_nodes(state: 'ModuleState', rcc_file: 'FileOrString') -> T.Tuple[str, T.List[str]]:
@@ -262,7 +262,7 @@ class QtBaseModule(ExtensionModule):
mlog.log('qt.has_tools skipped: feature', mlog.bold(feature), 'disabled')
return False
self._detect_tools(state, method, required=False)
- for tool in (self.moc, self.uic, self.rcc, self.lrelease):
+ for tool in self.tools.values():
if not tool.found():
if required:
raise MesonException('Qt tools not found')
@@ -296,7 +296,7 @@ class QtBaseModule(ExtensionModule):
def _compile_resources_impl(self, state: 'ModuleState', kwargs: 'ResourceCompilerKwArgs') -> T.List[build.CustomTarget]:
# Avoid the FeatureNew when dispatching from preprocess
self._detect_tools(state, kwargs['method'])
- if not self.rcc.found():
+ if not self.tools['rcc'].found():
err_msg = ("{0} sources specified and couldn't find {1}, "
"please check your qt{2} installation")
raise MesonException(err_msg.format('RCC', f'rcc-qt{self.qt_version}', self.qt_version))
@@ -326,7 +326,7 @@ class QtBaseModule(ExtensionModule):
rcc_kwargs: T.Dict[str, T.Any] = { # TODO: if CustomTarget had typing information we could use that here...
'input': sources,
'output': name + '.cpp',
- 'command': self.rcc.get_command() + ['-name', name, '-o', '@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
+ 'command': self.tools['rcc'].get_command() + ['-name', name, '-o', '@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
'depend_files': qrc_deps,
'depfile': f'{name}.d',
}
@@ -343,7 +343,7 @@ class QtBaseModule(ExtensionModule):
rcc_kwargs = {
'input': rcc_file,
'output': f'{name}.cpp',
- 'command': self.rcc.get_command() + ['-name', '@BASENAME@', '-o', '@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
+ 'command': self.tools['rcc'].get_command() + ['-name', '@BASENAME@', '-o', '@OUTPUT@'] + extra_args + ['@INPUT@'] + DEPFILE_ARGS,
'depend_files': qrc_deps,
'depfile': f'{name}.d',
}
@@ -375,14 +375,14 @@ class QtBaseModule(ExtensionModule):
def _compile_ui_impl(self, state: 'ModuleState', kwargs: 'UICompilerKwArgs') -> build.GeneratedList:
# Avoid the FeatureNew when dispatching from preprocess
self._detect_tools(state, kwargs['method'])
- if not self.uic.found():
+ if not self.tools['uic'].found():
err_msg = ("{0} sources specified and couldn't find {1}, "
"please check your qt{2} installation")
raise MesonException(err_msg.format('UIC', f'uic-qt{self.qt_version}', self.qt_version))
# TODO: This generator isn't added to the generator list in the Interpreter
gen = build.Generator(
- self.uic,
+ self.tools['uic'],
kwargs['extra_args'] + ['-o', '@OUTPUT@', '@INPUT@'],
['ui_@BASENAME@.h'],
name=f'Qt{self.qt_version} ui')
@@ -420,7 +420,7 @@ class QtBaseModule(ExtensionModule):
def _compile_moc_impl(self, state: 'ModuleState', kwargs: 'MocCompilerKwArgs') -> T.List[build.GeneratedList]:
# Avoid the FeatureNew when dispatching from preprocess
self._detect_tools(state, kwargs['method'])
- if not self.moc.found():
+ if not self.tools['moc'].found():
err_msg = ("{0} sources specified and couldn't find {1}, "
"please check your qt{2} installation")
raise MesonException(err_msg.format('MOC', f'uic-qt{self.qt_version}', self.qt_version))
@@ -438,12 +438,12 @@ class QtBaseModule(ExtensionModule):
arguments = kwargs['extra_args'] + inc + compile_args + ['@INPUT@', '-o', '@OUTPUT@']
if kwargs['headers']:
moc_gen = build.Generator(
- self.moc, arguments, ['moc_@BASENAME@.cpp'],
+ self.tools['moc'], arguments, ['moc_@BASENAME@.cpp'],
name=f'Qt{self.qt_version} moc header')
output.append(moc_gen.process_files(kwargs['headers'], state))
if kwargs['sources']:
moc_gen = build.Generator(
- self.moc, arguments, ['@BASENAME@.moc'],
+ self.tools['moc'], arguments, ['@BASENAME@.moc'],
name=f'Qt{self.qt_version} moc source')
output.append(moc_gen.process_files(kwargs['sources'], state))
@@ -543,9 +543,9 @@ class QtBaseModule(ExtensionModule):
self._detect_tools(state, kwargs['method'])
translations: T.List[build.CustomTarget] = []
for ts in ts_files:
- if not self.lrelease.found():
+ if not self.tools['lrelease'].found():
raise MesonException('qt.compile_translations: ' +
- self.lrelease.name + ' not found')
+ self.tools['lrelease'].name + ' not found')
if qresource:
# In this case we know that ts_files is always a List[str], as
# it's generated above and no ts_files are passed in. However,
@@ -556,7 +556,7 @@ class QtBaseModule(ExtensionModule):
ts = os.path.basename(ts)
else:
outdir = state.subdir
- cmd = [self.lrelease, '@INPUT@', '-qm', '@OUTPUT@']
+ cmd = [self.tools['lrelease'], '@INPUT@', '-qm', '@OUTPUT@']
lrelease_kwargs = {'output': '@BASENAME@.qm',
'input': ts,
'install': kwargs['install'],