diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-11-13 12:38:17 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-13 12:38:17 -0500 |
commit | 08c82fd17ca1c125d66bb013154348c9ad8d4535 (patch) | |
tree | 935b32160ab2fe4c579b20e047a9cfb7abc62594 | |
parent | dd8af1b56ed5f16063539e21b5fb26fd6666efba (diff) | |
parent | 0f92b7d97cb9a791cad91bf5723cf5e90dcf571e (diff) | |
download | meson-08c82fd17ca1c125d66bb013154348c9ad8d4535.zip meson-08c82fd17ca1c125d66bb013154348c9ad8d4535.tar.gz meson-08c82fd17ca1c125d66bb013154348c9ad8d4535.tar.bz2 |
Merge pull request #1042 from centricular/fix-qt4-testcase-qtwidgets
qt: Fix qmake detection on Linux and Windows
-rw-r--r-- | mesonbuild/dependencies.py | 44 | ||||
-rw-r--r-- | test cases/frameworks/4 qt/meson.build | 18 |
2 files changed, 46 insertions, 16 deletions
diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index 46c366c..3afa08c 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -26,7 +26,7 @@ from collections import OrderedDict from . mesonlib import MesonException from . import mlog from . import mesonlib -from .environment import detect_cpu_family +from .environment import detect_cpu_family, for_windows class DependencyException(MesonException): def __init__(self, *args, **kwargs): @@ -829,6 +829,10 @@ class QtBaseDependency(Dependency): self.name = name self.qtname = name.capitalize() self.qtver = name[-1] + if self.qtver == "4": + self.qtpkgname = 'Qt' + else: + self.qtpkgname = self.qtname self.root = '/usr' self.bindir = None self.silent = kwargs.get('silent', False) @@ -846,13 +850,17 @@ class QtBaseDependency(Dependency): if len(mods) == 0: raise DependencyException('No ' + self.qtname + ' modules specified.') type_text = 'cross' if env.is_cross_build() else 'native' - found_msg = '{} {} `{{}}` dependency found:'.format(self.qtname, type_text) - from_text = 'pkg-config' + found_msg = '{} {} {{}} dependency (modules: {}) found:' \ + ''.format(self.qtname, type_text, ', '.join(mods)) + from_text = '`pkg-config`' # Prefer pkg-config, then fallback to `qmake -query` self._pkgconfig_detect(mods, env, kwargs) if not self.is_found: from_text = self._qmake_detect(mods, env, kwargs) if not self.is_found: + # Reset compile args and link args + self.cargs = [] + self.largs = [] from_text = '(checked pkg-config, qmake-{}, and qmake)' \ ''.format(self.name) self.version = 'none' @@ -863,6 +871,7 @@ class QtBaseDependency(Dependency): if not self.silent: mlog.log(found_msg.format(from_text), mlog.red('NO')) return + from_text = '`{}`'.format(from_text) if not self.silent: mlog.log(found_msg.format(from_text), mlog.green('YES')) @@ -881,17 +890,14 @@ class QtBaseDependency(Dependency): return moc, uic, rcc def _pkgconfig_detect(self, mods, env, kwargs): - if self.qtver == "4": - qtpkgname = 'Qt' - else: - qtpkgname = self.qtname modules = OrderedDict() for module in mods: - modules[module] = PkgConfigDependency(qtpkgname + module, env, kwargs) + modules[module] = PkgConfigDependency(self.qtpkgname + module, env, kwargs) self.is_found = True for m in modules.values(): if not m.found(): self.is_found = False + return self.cargs += m.get_compile_args() self.largs += m.get_link_args() self.version = m.modversion @@ -900,7 +906,7 @@ class QtBaseDependency(Dependency): core = modules['Core'] else: corekwargs = {'required': 'false', 'silent': 'true'} - core = PkgConfigDependency(qtpkgname + 'Core', env, corekwargs) + core = PkgConfigDependency(self.qtpkgname + 'Core', env, corekwargs) # Used by self.compilers_detect() self.bindir = core.get_pkgconfig_variable('host_bins') if not self.bindir: @@ -955,16 +961,24 @@ class QtBaseDependency(Dependency): libdir = qvars['QT_INSTALL_LIBS'] # Used by self.compilers_detect() self.bindir = qvars['QT_INSTALL_BINS'] - #self.largs.append('-L' + libdir) + self.is_found = True for module in mods: mincdir = os.path.join(incdir, 'Qt' + module) self.cargs.append('-I' + mincdir) - libfile = os.path.join(libdir, self.qtname + module + '.lib') - if not os.path.isfile(libfile): - # MinGW links directly to .dll, not to .lib. - libfile = os.path.join(self.bindir, self.qtname + module + '.dll') + if for_windows(env.is_cross_build(), env): + libfile = os.path.join(libdir, self.qtpkgname + module + '.lib') + if not os.path.isfile(libfile): + # MinGW can link directly to .dll + libfile = os.path.join(self.bindir, self.qtpkgname + module + '.dll') + if not os.path.isfile(libfile): + self.is_found = False + break + else: + libfile = os.path.join(libdir, 'lib{}{}.so'.format(self.qtpkgname, module)) + if not os.path.isfile(libfile): + self.is_found = False + break self.largs.append(libfile) - self.is_found = True return qmake def _framework_detect(self, qvars, modules, kwargs): diff --git a/test cases/frameworks/4 qt/meson.build b/test cases/frameworks/4 qt/meson.build index 1096c78..013f14d 100644 --- a/test cases/frameworks/4 qt/meson.build +++ b/test cases/frameworks/4 qt/meson.build @@ -1,7 +1,23 @@ project('qt4 and 5 build test', 'cpp') +qt5_modules = ['Widgets'] foreach qt : ['qt4', 'qt5'] - qtdep = dependency(qt, modules : ['Core', 'Gui', 'Widgets'], required : qt == 'qt5') + qt_modules = ['Core', 'Gui'] + if qt == 'qt5' + qt_modules += qt5_modules + endif + # Test that invalid modules are indeed not found + fakeqtdep = dependency(qt, modules : ['DefinitelyNotFound'], required : false) + if fakeqtdep.found() + error('Invalid qt dep incorrectly found!') + endif + # Test that partially-invalid modules are indeed not found + fakeqtdep = dependency(qt, modules : ['Core', 'DefinitelyNotFound'], required : false) + if fakeqtdep.found() + error('Invalid qt dep incorrectly found!') + endif + # If qt4 modules are found, test that. qt5 is required. + qtdep = dependency(qt, modules : qt_modules, required : qt == 'qt5') if qtdep.found() qtmodule = import(qt) |