aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-11-13 12:38:17 -0500
committerGitHub <noreply@github.com>2016-11-13 12:38:17 -0500
commit08c82fd17ca1c125d66bb013154348c9ad8d4535 (patch)
tree935b32160ab2fe4c579b20e047a9cfb7abc62594
parentdd8af1b56ed5f16063539e21b5fb26fd6666efba (diff)
parent0f92b7d97cb9a791cad91bf5723cf5e90dcf571e (diff)
downloadmeson-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.py44
-rw-r--r--test cases/frameworks/4 qt/meson.build18
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)