diff options
-rw-r--r-- | dependencies.py | 72 | ||||
-rw-r--r-- | test cases/frameworks/4 qt5/meson.build | 9 |
2 files changed, 60 insertions, 21 deletions
diff --git a/dependencies.py b/dependencies.py index 050b2bc..d4db051 100644 --- a/dependencies.py +++ b/dependencies.py @@ -550,38 +550,76 @@ class Qt5Dependency(Dependency): Dependency.__init__(self) self.name = 'qt5' self.root = '/usr' - self.modules = [] mods = kwargs.get('modules', []) + self.cargs = [] + self.largs= [] + self.is_found = False if isinstance(mods, str): mods = [mods] - for module in mods: - self.modules.append(PkgConfigDependency('Qt5' + module, kwargs)) - if len(self.modules) == 0: + if len(mods) == 0: raise DependencyException('No Qt5 modules specified.') + if shutil.which('pkg-config') is not None: + self.pkgconf_detect() + elif shutil.which('qmake') is not None: + self.qmake_detect(mods, kwargs) + if not self.is_found: + mlog.log('Qt5 dependency found: ', mlog.red('NO')) + else: + mlog.log('Qt5 dependency found: ', mlog.green('YES')) + + def pkgconfig_detect(self, mods, kwargs): + modules = [] + for module in mods: + modules.append(PkgConfigDependency('Qt5' + module, kwargs)) + self.version = modules[0].get_version() + for m in modules: + self.cargs += m.get_compile_args() + self.largs += m.get_link_args() + + + def qmake_detect(self, mods, kwargs): + pc = subprocess.Popen(['qmake', '-v'], stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + (stdo, _) = pc.communicate() + if pc.returncode != 0: + return + stdo = stdo.decode() + if not 'version 5' in stdo: + mlog.log('QMake is not for Qt5.') + return + (stdo, _) = subprocess.Popen(['qmake', '-query'], stdout=subprocess.PIPE).communicate() + qvars = {} + for line in stdo.decode().split('\n'): + line = line.strip() + if line == '': + continue + (k, v) = tuple(line.split(':', 1)) + qvars[k] = v + incdir = qvars['QT_INSTALL_HEADERS'] + self.cargs.append('-I' + incdir) + libdir = qvars['QT_INSTALL_LIBS'] + #self.largs.append('-L' + libdir) + for module in mods: + mincdir = os.path.join(incdir, 'Qt' + module) + libfile = os.path.join(libdir, 'Qt5' + module + '.lib') + self.cargs.append('-I' + mincdir) + self.largs.append(libfile) + self.is_found = True def get_version(self): - return self.modules[0].get_version() + return self.version def get_compile_args(self): - args = [] - for m in self.modules: - args += m.get_compile_args() - return args + return self.cargs def get_sources(self): return [] def get_link_args(self): - args = [] - for module in self.modules: - args += module.get_link_args() - return args + return self.largs def found(self): - for i in self.modules: - if not i.found(): - return False - return True + return self.is_found def get_exe_args(self): # Qt5 seems to require this always. diff --git a/test cases/frameworks/4 qt5/meson.build b/test cases/frameworks/4 qt5/meson.build index ae85d1d..67761e9 100644 --- a/test cases/frameworks/4 qt5/meson.build +++ b/test cases/frameworks/4 qt5/meson.build @@ -1,15 +1,16 @@ project('qt5 build test', 'cpp') qt5 = import('qt5') -qt5dep = dependency('qt5', modules : 'Widgets') +qt5dep = dependency('qt5', modules : ['Core', 'Gui', 'Widgets']) if meson.get_compiler('cpp').get_id() != 'msvc' add_global_arguments('-std=c++11', language : 'cpp') endif -prep = qt5.preprocess(moc_headers : ['mainWindow.h'], # These need to be fed through the moc tool before use. - ui_files : 'mainWindow.ui', # XML files that need to be compiled with the uic tol. - qresources : 'stuff.qrc', # Resource file for rcc compiler. +prep = qt5.preprocess( +moc_headers : ['mainWindow.h'], # These need to be fed through the moc tool before use. +ui_files : 'mainWindow.ui', # XML files that need to be compiled with the uic tol. +qresources : 'stuff.qrc', # Resource file for rcc compiler. ) q5exe = executable('qt5app', |