aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-10-05 00:12:47 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-10-05 00:12:47 +0300
commit0f2d43669d9c34dcce8f4ec754396538254893af (patch)
tree87fbf79a8e8028beb860444013da9364361ee383
parent509340d1ec425677c57e1e07a4bea6b64b1ee0e4 (diff)
downloadmeson-0f2d43669d9c34dcce8f4ec754396538254893af.zip
meson-0f2d43669d9c34dcce8f4ec754396538254893af.tar.gz
meson-0f2d43669d9c34dcce8f4ec754396538254893af.tar.bz2
Added support for Qt resource compiler.
-rw-r--r--dependencies.py36
-rw-r--r--test cases/frameworks/4 qt5/main.cpp4
-rw-r--r--test cases/frameworks/4 qt5/meson.build1
-rw-r--r--test cases/frameworks/4 qt5/stuff.qrc5
-rw-r--r--test cases/frameworks/4 qt5/thing.pngbin0 -> 40303 bytes
5 files changed, 36 insertions, 10 deletions
diff --git a/dependencies.py b/dependencies.py
index fb80718..3734b12 100644
--- a/dependencies.py
+++ b/dependencies.py
@@ -127,16 +127,17 @@ class PkgConfigDependency(Dependency):
return self.is_found
class ExternalProgram():
- def __init__(self, name, fullpath=None):
+ def __init__(self, name, fullpath=None, silent=False):
self.name = name
if fullpath is not None:
self.fullpath = fullpath
else:
self.fullpath = shutil.which(name)
- if self.found():
- mlog.log('Program', name, 'found:', mlog.green('YES'), '(%s)' % self.fullpath)
- else:
- mlog.log('Program', name, 'found:,', mlog.red('NO'))
+ if not silent:
+ if self.found():
+ mlog.log('Program', name, 'found:', mlog.green('YES'), '(%s)' % self.fullpath)
+ else:
+ mlog.log('Program', name, 'found:,', mlog.red('NO'))
def found(self):
return self.fullpath is not None
@@ -389,10 +390,11 @@ class Qt5Dependency(Dependency):
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.
+ self.moc = ExternalProgram('moc', silent=True)
+ self.uic = ExternalProgram('uic', silent=True)
+ self.rcc = ExternalProgram('rcc', silent=True)
+ # Moc, uic and rcc write their version strings to stderr.
+ # Moc and rcc return 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'],
@@ -412,6 +414,15 @@ class Qt5Dependency(Dependency):
mlog.log(' uic:', mlog.green('YES'), '(%s)' % uic_ver)
else:
mlog.log(' uic:', mlog.red('NO'))
+ if self.rcc.found():
+ up = subprocess.Popen([self.rcc.get_command(), '-v'],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ rcc_ver = up.communicate()[1].decode().strip()
+ if 'version 5.' not in rcc_ver:
+ raise DependencyException('Rcc compiler is not for Qt 5. Output: %s' % rcc_ver)
+ mlog.log(' rcc:', mlog.green('YES'), '(%s)' % rcc_ver)
+ else:
+ mlog.log(' rcc:', mlog.red('NO'))
def get_version(self):
return self.modules[0].get_version()
@@ -436,6 +447,8 @@ class Qt5Dependency(Dependency):
return False
if not self.uic.found():
return False
+ if not self.rcc.found():
+ return False
for i in self.modules:
if not i.found():
return False
@@ -448,7 +461,10 @@ class Qt5Dependency(Dependency):
ui_rule = CustomRule([self.uic.get_command(), '@INFILE@', '-o', '@OUTFILE@'],
'ui_@BASENAME@.h', 'ui_files', 'ui_compile',
'Compiling @INFILE@ with the ui compiler')
- return [moc_rule, ui_rule]
+ rrc_rule = CustomRule([self.rcc.get_command(), '@INFILE@', '-o', '@OUTFILE@'],
+ '@BASENAME@.cpp', 'resources', 'rc_compile',
+ 'Compiling @INFILE@ with the rrc compiler')
+ return [moc_rule, ui_rule, rrc_rule]
def get_exe_flags(self):
# Qt5 seems to require this always.
diff --git a/test cases/frameworks/4 qt5/main.cpp b/test cases/frameworks/4 qt5/main.cpp
index 95cc1f9..51d83b4 100644
--- a/test cases/frameworks/4 qt5/main.cpp
+++ b/test cases/frameworks/4 qt5/main.cpp
@@ -4,6 +4,10 @@
int main(int argc, char **argv) {
QApplication app(argc, argv);
MainWindow *win = new MainWindow();
+ QImage qi(":/thing.png");
+ if(qi.width() != 640) {
+ return 1;
+ }
win->setWindowTitle("Meson Qt5 build test");
// Don't actually start the GUI so this
diff --git a/test cases/frameworks/4 qt5/meson.build b/test cases/frameworks/4 qt5/meson.build
index a630d73..f9591f0 100644
--- a/test cases/frameworks/4 qt5/meson.build
+++ b/test cases/frameworks/4 qt5/meson.build
@@ -6,6 +6,7 @@ q5exe = executable('qt5test',
sources : ['main.cpp', 'mainWindow.cpp'], # Sources that don't need preprocessing.
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.
+resources : 'stuff.qrc', # Resource file for rcc compiler.
deps : qt5dep)
test('qt5test', q5exe)
diff --git a/test cases/frameworks/4 qt5/stuff.qrc b/test cases/frameworks/4 qt5/stuff.qrc
new file mode 100644
index 0000000..cd1c6b5
--- /dev/null
+++ b/test cases/frameworks/4 qt5/stuff.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>thing.png</file>
+</qresource>
+</RCC>
diff --git a/test cases/frameworks/4 qt5/thing.png b/test cases/frameworks/4 qt5/thing.png
new file mode 100644
index 0000000..4b001bd
--- /dev/null
+++ b/test cases/frameworks/4 qt5/thing.png
Binary files differ