Qt5 apps compile with only a slight amount of cheating.

pull/15/head
Jussi Pakkanen 12 years ago
parent 9abf5ec89a
commit e3184c4f94
  1. 15
      backends.py
  2. 19
      dependencies.py
  3. 2
      test cases/frameworks/4 qt5/mainWindow.h
  4. 2
      test cases/frameworks/4 qt5/meson.build

@ -142,7 +142,7 @@ class Backend():
else:
header_deps.append(src)
for src in gen_src_deps:
obj_list.append(self.generate_single_compile(target, outfile, src, True, []))
obj_list.append(self.generate_single_compile(target, outfile, src, True))
for src in target.get_sources():
if not self.environment.is_header(src):
obj_list.append(self.generate_single_compile(target, outfile, src, False, header_deps))
@ -540,14 +540,17 @@ class NinjaBackend(Backend):
commands = self.generate_basic_compiler_flags(target, compiler)
commands.append(compiler.get_include_arg(self.get_target_private_dir(target)))
if is_generated:
rel_src = os.path.join(self.get_target_private_dir(target), src)
if '/' in src:
rel_src = src
else:
rel_src = os.path.join(self.get_target_private_dir(target), src)
else:
rel_src = os.path.join(self.build_to_src, target.get_source_subdir(), src)
if os.path.isabs(src):
src_filename = os.path.basename(src)
else:
src_filename = src
rel_obj = os.path.join(self.get_target_private_dir(target), src_filename)
rel_obj = os.path.join(self.get_target_private_dir(target), os.path.basename(src_filename))
rel_obj += '.' + self.environment.get_object_suffix()
dep_file = rel_obj + '.' + compiler.get_depfile_suffix()
pchlist = target.get_pch()
@ -573,8 +576,10 @@ class NinjaBackend(Backend):
compiler_name = '%s_COMPILER' % compiler.get_language()
element = NinjaBuildElement(rel_obj, compiler_name, rel_src)
if len(header_deps) > 0:
element.add_dep([os.path.join(self.get_target_private_dir(target), d) for d in header_deps])
for d in header_deps:
if not '/' in d:
d = os.path.join(self.get_target_private_dir(target), d)
element.add_dep(d)
element.add_orderdep(pch_dep)
element.add_item('DEPFILE', dep_file)
element.add_item('FLAGS', commands)

@ -298,8 +298,26 @@ class Qt5Dependency(Dependency):
self.modules.append(PkgConfigDependency('Qt5' + module, False))
if len(self.modules) == 0:
raise DependencyException('No Qt5 modules specified.')
self.find_exes()
def find_exes(self):
self.moc = ExternalProgram('moc')
self.uic = ExternalProgram('uic')
# Moc and uic write their version strings to stderr.
# Moc returns a non-zero result when doing so.
# What kind of an idiot thought that was a good idea?
if self.moc.found():
mp = subprocess.Popen([self.moc.get_command(), '-v'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
moc_ver = mp.communicate()[1].decode()
if 'Qt 5' not in moc_ver:
raise DependencyException('Moc preprocessor is not for Qt 5.')
if self.uic.found():
up = subprocess.Popen([self.uic.get_command(), '-v'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
uic_ver = up.communicate()[1].decode()
if 'version 5.' not in uic_ver:
raise DependencyException('Uic compiler is not for Qt 5.')
def get_version(self):
return self.modules[0].get_version()
@ -354,4 +372,5 @@ packages = {'boost': BoostDependency,
'gtest': GTestDependency,
'gmock': GMockDependency,
'qt5': Qt5Dependency,
'Qt5': Qt5Dependency, # Qt people sure do love their upper case.
}

@ -8,7 +8,7 @@ class MainWindow : public QMainWindow, private Ui_MainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent=nullptr);
MainWindow(QWidget *parent=0);
~MainWindow();
private:

@ -1,6 +1,6 @@
project('qt5 build test', 'cxx')
qt5dep = find_dep('qt5', modules : 'Gui', required : true)
qt5dep = find_dep('qt5', modules : 'Widgets', required : true)
q5exe = executable('qt5test',
sources : ['main.cpp', 'mainWindow.cpp'],

Loading…
Cancel
Save