From 45d7b589ebfe4f87bad175d3c2e663423b6b3377 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Wed, 29 Apr 2015 17:38:29 +0300 Subject: [PATCH] Added module for Qt4 support. --- dependencies.py | 39 +++++++ manual tests/6 qt4/main.cpp | 20 ++++ manual tests/6 qt4/mainWindow.cpp | 8 ++ manual tests/6 qt4/mainWindow.h | 20 ++++ manual tests/6 qt4/mainWindow.ui | 34 ++++++ manual tests/6 qt4/manualinclude.cpp | 20 ++++ manual tests/6 qt4/manualinclude.h | 16 +++ manual tests/6 qt4/meson.build | 41 +++++++ manual tests/6 qt4/q4core.cpp | 10 ++ manual tests/6 qt4/stuff.qrc | 7 ++ manual tests/6 qt4/thing.png | Bin 0 -> 40303 bytes manual tests/6 qt4/thing2.png | Bin 0 -> 40303 bytes modules/qt4.py | 155 +++++++++++++++++++++++++++ 13 files changed, 370 insertions(+) create mode 100644 manual tests/6 qt4/main.cpp create mode 100644 manual tests/6 qt4/mainWindow.cpp create mode 100644 manual tests/6 qt4/mainWindow.h create mode 100644 manual tests/6 qt4/mainWindow.ui create mode 100644 manual tests/6 qt4/manualinclude.cpp create mode 100644 manual tests/6 qt4/manualinclude.h create mode 100644 manual tests/6 qt4/meson.build create mode 100644 manual tests/6 qt4/q4core.cpp create mode 100644 manual tests/6 qt4/stuff.qrc create mode 100644 manual tests/6 qt4/thing.png create mode 100644 manual tests/6 qt4/thing2.png create mode 100644 modules/qt4.py diff --git a/dependencies.py b/dependencies.py index 1aa19ec25..b890149fa 100644 --- a/dependencies.py +++ b/dependencies.py @@ -588,6 +588,44 @@ class Qt5Dependency(Dependency): # Fix this to be more portable, especially to MSVC. return ['-fPIE'] +class Qt4Dependency(Dependency): + def __init__(self, kwargs): + Dependency.__init__(self) + self.name = 'qt4' + self.root = '/usr' + self.modules = [] + mods = kwargs.get('modules', []) + if isinstance(mods, str): + mods = [mods] + for module in mods: + self.modules.append(PkgConfigDependency('Qt' + module, kwargs)) + if len(self.modules) == 0: + raise DependencyException('No Qt5 modules specified.') + + def get_version(self): + return self.modules[0].get_version() + + def get_compile_args(self): + args = [] + for m in self.modules: + args += m.get_compile_args() + return args + + def get_sources(self): + return [] + + def get_link_args(self): + args = [] + for module in self.modules: + args += module.get_link_args() + return args + + def found(self): + for i in self.modules: + if not i.found(): + return False + return True + class GnuStepDependency(Dependency): def __init__(self, kwargs): Dependency.__init__(self) @@ -831,6 +869,7 @@ packages = {'boost': BoostDependency, 'gtest': GTestDependency, 'gmock': GMockDependency, 'qt5': Qt5Dependency, + 'qt4': Qt4Dependency, 'gnustep': GnuStepDependency, 'appleframeworks': AppleFrameworks, 'wxwidgets' : WxDependency, diff --git a/manual tests/6 qt4/main.cpp b/manual tests/6 qt4/main.cpp new file mode 100644 index 000000000..4c257a4ba --- /dev/null +++ b/manual tests/6 qt4/main.cpp @@ -0,0 +1,20 @@ +#include +#include "mainWindow.h" + +int main(int argc, char **argv) { + QApplication app(argc, argv); + MainWindow *win = new MainWindow(); + QImage qi(":/thing.png"); + if(qi.width() != 640) { + return 1; + } + QImage qi2(":/thing2.png"); + if(qi2.width() != 640) { + return 1; + } + win->setWindowTitle("Meson Qt5 build test"); + + win->show(); + return app.exec(); + return 0; +} diff --git a/manual tests/6 qt4/mainWindow.cpp b/manual tests/6 qt4/mainWindow.cpp new file mode 100644 index 000000000..cc82c4fb2 --- /dev/null +++ b/manual tests/6 qt4/mainWindow.cpp @@ -0,0 +1,8 @@ +#include "mainWindow.h" + +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { + setupUi(this); +} + +MainWindow::~MainWindow() { +} diff --git a/manual tests/6 qt4/mainWindow.h b/manual tests/6 qt4/mainWindow.h new file mode 100644 index 000000000..7f6d90601 --- /dev/null +++ b/manual tests/6 qt4/mainWindow.h @@ -0,0 +1,20 @@ +#ifndef MES_MAINWINDOW +#define MES_MAINWINDOW + +#include +#include +#include "ui_mainWindow.h" + +class NotificationModel; + +class MainWindow : public QMainWindow, private Ui_MainWindow { + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent=0); + ~MainWindow(); + +private: +}; + +#endif diff --git a/manual tests/6 qt4/mainWindow.ui b/manual tests/6 qt4/mainWindow.ui new file mode 100644 index 000000000..2eb226a6e --- /dev/null +++ b/manual tests/6 qt4/mainWindow.ui @@ -0,0 +1,34 @@ + + + MainWindow + + + + 0 + 0 + 270 + 115 + + + + MainWindow + + + + + + 10 + 10 + 241 + 91 + + + + I am a button + + + + + + + diff --git a/manual tests/6 qt4/manualinclude.cpp b/manual tests/6 qt4/manualinclude.cpp new file mode 100644 index 000000000..06028823f --- /dev/null +++ b/manual tests/6 qt4/manualinclude.cpp @@ -0,0 +1,20 @@ +#include"manualinclude.h" +#include + +#include + +ManualInclude::ManualInclude() { +} + +class MocClass : public QObject { + Q_OBJECT +}; + +int main(int argc, char **argv) { + ManualInclude mi; + MocClass mc; + return 0; +} + +#include"manualinclude.moc" + diff --git a/manual tests/6 qt4/manualinclude.h b/manual tests/6 qt4/manualinclude.h new file mode 100644 index 000000000..4a00b6c28 --- /dev/null +++ b/manual tests/6 qt4/manualinclude.h @@ -0,0 +1,16 @@ +#ifndef MANUALINCLUDE_H_ +#define MANUALINCLUDE_H_ + +#include + +class ManualInclude : public QObject { + Q_OBJECT + +public: + ManualInclude(); + +signals: + int mysignal(); +}; + +#endif diff --git a/manual tests/6 qt4/meson.build b/manual tests/6 qt4/meson.build new file mode 100644 index 000000000..b9694d96a --- /dev/null +++ b/manual tests/6 qt4/meson.build @@ -0,0 +1,41 @@ +project('qt5 build test', 'cpp') + +# This is a manual test rather than an automatic one +# because during Debian package builds only Qt4 or Qt5 +# can be active. + +qt4 = import('qt4') +qt4dep = dependency('qt4', modules : 'Gui') + +prep = qt4.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('qt4app', +sources : ['main.cpp', 'mainWindow.cpp', # Sources that don't need preprocessing. +prep], +dependencies : qt4dep) + +# We need a console test application because some test environments +# do not have an X server. + +qt4core = dependency('qt4', modules : 'Core') + +qt4coreapp = executable('q4core', 'q4core.cpp', +dependencies : qt4core) + +test('qt4test', qt4coreapp) + +# The build system needs to include the cpp files from +# headers but the user must manually include moc +# files from sources. +manpreprocessed = qt4.preprocess( + moc_sources : 'manualinclude.cpp', + moc_headers : 'manualinclude.h') + +q4maninclude = executable('q4maninclude', +sources : ['manualinclude.cpp', manpreprocessed], +dependencies : qt4core) + +test('q4maninclude', q4maninclude) diff --git a/manual tests/6 qt4/q4core.cpp b/manual tests/6 qt4/q4core.cpp new file mode 100644 index 000000000..706e4dc87 --- /dev/null +++ b/manual tests/6 qt4/q4core.cpp @@ -0,0 +1,10 @@ +#include + +int main(int argc, char **argv) { + QCoreApplication app(argc, argv); + + // Don't actually start the main loop so this + // can be run as a unit test. + //return app.exec(); + return 0; +} diff --git a/manual tests/6 qt4/stuff.qrc b/manual tests/6 qt4/stuff.qrc new file mode 100644 index 000000000..9152500a3 --- /dev/null +++ b/manual tests/6 qt4/stuff.qrc @@ -0,0 +1,7 @@ + + + + thing.png + thing2.png + + diff --git a/manual tests/6 qt4/thing.png b/manual tests/6 qt4/thing.png new file mode 100644 index 0000000000000000000000000000000000000000..4b001bd5ccd0565730da54997d055742b5fc078e GIT binary patch literal 40303 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 literal 0 HcmV?d00001 diff --git a/manual tests/6 qt4/thing2.png b/manual tests/6 qt4/thing2.png new file mode 100644 index 0000000000000000000000000000000000000000..4b001bd5ccd0565730da54997d055742b5fc078e GIT binary patch literal 40303 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 literal 0 HcmV?d00001 diff --git a/modules/qt4.py b/modules/qt4.py new file mode 100644 index 000000000..ddaca399e --- /dev/null +++ b/modules/qt4.py @@ -0,0 +1,155 @@ +# Copyright 2015 The Meson development team + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import dependencies, mlog +import os, subprocess +import build +from coredata import MesonException +import xml.etree.ElementTree as ET + +class Qt5Module(): + + def __init__(self): + mlog.log('Detecting Qt tools.') + # The binaries have different names on different + # distros. Joy. + self.moc = dependencies.ExternalProgram('moc', silent=True) + if not self.moc.found(): + self.moc = dependencies.ExternalProgram('moc-qt4', silent=True) + self.uic = dependencies.ExternalProgram('uic', silent=True) + if not self.uic.found(): + self.uic = dependencies.ExternalProgram('uic-qt4', silent=True) + self.rcc = dependencies.ExternalProgram('rcc', silent=True) + if not self.rcc.found(): + self.rcc = dependencies.ExternalProgram('rcc-qt4', 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'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (stdout, stderr) = mp.communicate() + stdout = stdout.decode().strip() + stderr = stderr.decode().strip() + if 'Qt Meta' in stderr: + moc_ver = stderr + else: + raise MesonException('Moc preprocessor is not for Qt 4. Output:\n%s\n%s' % + (stdout, stderr)) + mlog.log(' moc:', mlog.green('YES'), '(%s, %s)' % \ + (' '.join(self.moc.fullpath), moc_ver.split()[-1])) + else: + mlog.log(' moc:', mlog.red('NO')) + if self.uic.found(): + up = subprocess.Popen(self.uic.get_command() + ['-v'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (stdout, stderr) = up.communicate() + stdout = stdout.decode().strip() + stderr = stderr.decode().strip() + if 'version 4.' in stderr: + uic_ver = stderr + else: + raise MesonException('Uic compiler is not for Qt4. Output:\n%s\n%s' % + (stdout, stderr)) + mlog.log(' uic:', mlog.green('YES'), '(%s, %s)' % \ + (' '.join(self.uic.fullpath), uic_ver.split()[-1])) + else: + mlog.log(' uic:', mlog.red('NO')) + if self.rcc.found(): + rp = subprocess.Popen(self.rcc.get_command() + ['-v'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (stdout, stderr) = rp.communicate() + stdout = stdout.decode().strip() + stderr = stderr.decode().strip() + if 'version 4.' in stderr: + rcc_ver = stderr + else: + raise MesonException('Rcc compiler is not for Qt 4. Output:\n%s\n%s' % + (stdout, stderr)) + mlog.log(' rcc:', mlog.green('YES'), '(%s, %s)'\ + % (' '.join(self.rcc.fullpath), rcc_ver.split()[-1])) + else: + mlog.log(' rcc:', mlog.red('NO')) + + def parse_qrc(self, state, fname): + abspath = os.path.join(state.environment.source_dir, state.subdir, fname) + try: + tree = ET.parse(abspath) + root = tree.getroot() + result = [] + for child in root[0]: + if child.tag != 'file': + mlog.log("Warning, malformed rcc file: ", os.path.join(state.subdir, fname)) + break + else: + result.append(os.path.join(state.subdir, child.text)) + return result + except Exception: + return [] + + def preprocess(self, state, args, kwargs): + rcc_files = kwargs.pop('qresources', []) + if not isinstance(rcc_files, list): + rcc_files = [rcc_files] + ui_files = kwargs.pop('ui_files', []) + if not isinstance(ui_files, list): + ui_files = [ui_files] + moc_headers = kwargs.pop('moc_headers', []) + if not isinstance(moc_headers, list): + moc_headers = [moc_headers] + moc_sources = kwargs.pop('moc_sources', []) + if not isinstance(moc_sources, list): + moc_sources = [moc_sources] + srctmp = kwargs.pop('sources', []) + if not isinstance(srctmp, list): + srctmp = [srctmp] + sources = args[1:] + srctmp + if len(rcc_files) > 0: + rcc_kwargs = {'output' : '@BASENAME@.cpp', + 'arguments' : ['@INPUT@', '-o', '@OUTPUT@']} + rcc_gen = build.Generator([self.rcc], rcc_kwargs) + rcc_output = build.GeneratedList(rcc_gen) + qrc_deps = [] + for i in rcc_files: + qrc_deps += self.parse_qrc(state, i) + rcc_output.extra_depends = qrc_deps + [rcc_output.add_file(os.path.join(state.subdir, a)) for a in rcc_files] + sources.append(rcc_output) + if len(ui_files) > 0: + ui_kwargs = {'output' : 'ui_@BASENAME@.h', + 'arguments' : ['-o', '@OUTPUT@', '@INPUT@']} + ui_gen = build.Generator([self.uic], ui_kwargs) + ui_output = build.GeneratedList(ui_gen) + [ui_output.add_file(os.path.join(state.subdir, a)) for a in ui_files] + sources.append(ui_output) + if len(moc_headers) > 0: + moc_kwargs = {'output' : 'moc_@BASENAME@.cpp', + 'arguments' : ['@INPUT@', '-o', '@OUTPUT@']} + moc_gen = build.Generator([self.moc], moc_kwargs) + moc_output = build.GeneratedList(moc_gen) + [moc_output.add_file(os.path.join(state.subdir, a)) for a in moc_headers] + sources.append(moc_output) + if len(moc_sources) > 0: + moc_kwargs = {'output' : '@BASENAME@.moc', + 'arguments' : ['@INPUT@', '-o', '@OUTPUT@']} + moc_gen = build.Generator([self.moc], moc_kwargs) + moc_output = build.GeneratedList(moc_gen) + [moc_output.add_file(os.path.join(state.subdir, a)) for a in moc_sources] + sources.append(moc_output) + return sources + +def initialize(): + mlog.log('Warning, rcc dependencies will not work properly until this upstream issue is fixed:', + mlog.bold('https://bugreports.qt.io/browse/QTBUG-45460')) + return Qt5Module()