aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2022-09-29 14:22:11 +0300
committerMarius Vlad <marius.vlad@collabora.com>2022-10-07 21:28:01 +0300
commitd4f3ddfbad7a64937f00f13ba964e18d33effbb0 (patch)
tree8c13fc7de204e9a463c3dffa7033f021a2139df2
parent52c767388614e2ec6fa26851840bf01d97c5d49e (diff)
homescreen: Change from qmake to meson
This change will basically make way for adding grpc/protobuf support into homescreen, which turns out it's a pain to do with either qmake or cmake. Eventually, we'll move all our demos to using meson, which have gained a lot of support for building and support different technologies to allow far more saner configurations to take place. Based heavily on the work done by Scott Murray in libqtappfw, in the applauncher module. Bug-AGL: SPEC-4584 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Suggested-by: Scott Murray <scott.murray@konsulko.com> Change-Id: Id64bf3d5b41912d32df7f78e94ab04d231bb0c83
-rw-r--r--homescreen/homescreen.pro60
-rw-r--r--homescreen/meson.build107
-rw-r--r--homescreen/src/hmi-debug.h1
-rw-r--r--homescreen/src/homescreenhandler.cpp3
-rw-r--r--homescreen/src/main.cpp5
-rw-r--r--homescreen/src/shell.cpp5
-rw-r--r--homescreen/src/shell.h2
-rw-r--r--meson.build (renamed from homescreen.pro)25
8 files changed, 135 insertions, 73 deletions
diff --git a/homescreen/homescreen.pro b/homescreen/homescreen.pro
deleted file mode 100644
index 16a01f6..0000000
--- a/homescreen/homescreen.pro
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH
-# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
-#
-# 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.
-
-TEMPLATE = app
-TARGET = homescreen
-QT = qml quick gui-private
-CONFIG += c++11 link_pkgconfig wayland-scanner
-PKGCONFIG += wayland-client
-PKGCONFIG += qtappfw-weather qtappfw-network qtappfw-bt qtappfw-vehicle-signals qtappfw-applauncher
-
-SOURCES += \
- src/main.cpp \
- src/shell.cpp \
- src/statusbarmodel.cpp \
- src/statusbarserver.cpp \
- src/applicationlauncher.cpp \
- src/mastervolume.cpp \
- src/homescreenhandler.cpp
-
-HEADERS += \
- src/shell.h \
- src/constants.h \
- src/statusbarmodel.h \
- src/statusbarserver.h \
- src/applicationlauncher.h \
- src/mastervolume.h \
- src/homescreenhandler.h
-
-OTHER_FILES += \
- README.md
-
-RESOURCES += \
- qml/images/MediaPlayer/mediaplayer.qrc \
- qml/images/MediaMusic/mediamusic.qrc \
- qml/images/Weather/weather.qrc \
- qml/images/Shortcut/shortcut.qrc \
- qml/images/Status/status.qrc \
- qml/images/images.qrc \
- qml/qml.qrc
-
-AGL_SHELL_PATH = $$system(pkg-config --variable=pkgdatadir agl-compositor-0.0.20-protocols)
-WAYLANDCLIENTSOURCES += $$AGL_SHELL_PATH/agl-shell.xml
-
-target.path = $${PREFIX}/usr/bin
-target.files += $${OUT_PWD}/$${TARGET}
-target.CONFIG = no_check_exist executable
-
-INSTALLS += target
diff --git a/homescreen/meson.build b/homescreen/meson.build
new file mode 100644
index 0000000..fc93d06
--- /dev/null
+++ b/homescreen/meson.build
@@ -0,0 +1,107 @@
+cpp = meson.get_compiler('cpp')
+qt5_dep = dependency('qt5', modules: ['Qml', 'Quick', 'Gui'])
+dep_wayland_client = dependency('wayland-client', version: '>= 1.20.0')
+dep_qtappfw = [
+ dependency('qtappfw-weather'),
+ dependency('qtappfw-network'),
+ dependency('qtappfw-bt'),
+ dependency('qtappfw-vehicle-signals'),
+ dependency('qtappfw-applauncher')
+]
+
+qt_defines = []
+qpa_header_path = join_paths(qt5_dep.version(), 'QtGui')
+qpa_header = join_paths(qpa_header_path, 'qpa/qplatformnativeinterface.h')
+# we pass this QT_QPA_HEADER straight in the code as there's no easy
+# way to pass the correct header
+if cpp.has_header(qpa_header, dependencies : qt5_dep)
+ qt_defines += [ '-DQT_QPA_HEADER=<@0@>'.format(qpa_header) ]
+ message('Found QtGui QPA header in ' + qpa_header_path)
+endif
+
+dep_scanner = dependency('wayland-scanner')
+prog_scanner = find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner'))
+agl_compositor_dep = dependency('agl-compositor-0.0.20-protocols')
+dir_agl_compositor_base = agl_compositor_dep.get_pkgconfig_variable('pkgdatadir')
+
+homescreen_dep = [
+ qt5_dep,
+ dep_wayland_client,
+ dep_qtappfw,
+]
+
+homescreen_resources = [
+ 'qml/images/MediaPlayer/mediaplayer.qrc',
+ 'qml/images/MediaMusic/mediamusic.qrc',
+ 'qml/images/Weather/weather.qrc',
+ 'qml/images/Shortcut/shortcut.qrc',
+ 'qml/images/Status/status.qrc',
+ 'qml/images/images.qrc',
+ 'qml/qml.qrc'
+]
+
+resource_files = qt5.compile_resources(sources: homescreen_resources)
+
+protocols = [
+ [ 'agl-shell', 'agl-compositor' ],
+]
+
+foreach proto: protocols
+ proto_name = proto[0]
+ if proto[1] == 'agl-compositor'
+ base_file = proto_name
+ xml_path = join_paths(dir_agl_compositor_base, '@0@.xml'.format(base_file))
+ endif
+
+ foreach output_type: [ 'client-header', 'server-header', 'private-code' ]
+ if output_type == 'client-header'
+ output_file = '@0@-client-protocol.h'.format(base_file)
+ elif output_type == 'server-header'
+ output_file = '@0@-server-protocol.h'.format(base_file)
+ else
+ output_file = '@0@-protocol.c'.format(base_file)
+ if dep_scanner.version().version_compare('< 1.14.91')
+ output_type = 'code'
+ endif
+ endif
+
+ var_name = output_file.underscorify()
+ target = custom_target(
+ '@0@ @1@'.format(base_file, output_type),
+ command: [ prog_scanner, output_type, '@INPUT@', '@OUTPUT@' ],
+ input: xml_path,
+ output: output_file,
+ )
+ message('protocol name is ' + var_name)
+ set_variable(var_name, target)
+ endforeach
+endforeach
+
+homescreen_src_headers = [
+ 'src/applicationlauncher.h',
+ 'src/mastervolume.h',
+ 'src/statusbarmodel.h',
+ 'src/statusbarserver.h',
+ 'src/homescreenhandler.h',
+ 'src/shell.h'
+]
+
+moc_files = qt5.compile_moc(headers: homescreen_src_headers,
+ dependencies: qt5_dep)
+
+homescreen_src = [
+ 'src/shell.cpp',
+ 'src/statusbarserver.cpp',
+ 'src/statusbarmodel.cpp',
+ 'src/applicationlauncher.cpp',
+ 'src/mastervolume.cpp',
+ 'src/homescreenhandler.cpp',
+ 'src/main.cpp',
+ agl_shell_client_protocol_h,
+ agl_shell_protocol_c
+]
+
+executable('homescreen', homescreen_src, resource_files, moc_files,
+ cpp_args: qt_defines,
+ dependencies : homescreen_dep,
+ install: true)
diff --git a/homescreen/src/hmi-debug.h b/homescreen/src/hmi-debug.h
index 47ae1f7..ea9bae8 100644
--- a/homescreen/src/hmi-debug.h
+++ b/homescreen/src/hmi-debug.h
@@ -49,7 +49,6 @@ static void _HMI_LOG(enum LOG_LEVEL level, const char* file, const char* func, c
struct timespec tp;
uint32_t time;
va_list args;
- int ret;
const int log_level = (getenv("USE_HMI_DEBUG") == NULL) ? LOG_LEVEL_ERROR : atoi(getenv("USE_HMI_DEBUG"));
if(log_level < level) {
diff --git a/homescreen/src/homescreenhandler.cpp b/homescreen/src/homescreenhandler.cpp
index 920c054..2858ef4 100644
--- a/homescreen/src/homescreenhandler.cpp
+++ b/homescreen/src/homescreenhandler.cpp
@@ -11,7 +11,8 @@
#include "homescreenhandler.h"
#include "hmi-debug.h"
-#include <qpa/qplatformnativeinterface.h>
+// defined by meson build file
+#include QT_QPA_HEADER
// LAUNCHER_APP_ID shouldn't be started by applaunchd as it is started as
// a user session by systemd
diff --git a/homescreen/src/main.cpp b/homescreen/src/main.cpp
index 8c3391f..c910727 100644
--- a/homescreen/src/main.cpp
+++ b/homescreen/src/main.cpp
@@ -25,10 +25,11 @@
#include "homescreenhandler.h"
#include "hmi-debug.h"
-#include <qpa/qplatformnativeinterface.h>
+// meson will define these
+#include QT_QPA_HEADER
#include <wayland-client.h>
-#include "wayland-agl-shell-client-protocol.h"
+#include "agl-shell-client-protocol.h"
#include "shell.h"
#ifndef MIN
diff --git a/homescreen/src/shell.cpp b/homescreen/src/shell.cpp
index 1427b7c..ffb4439 100644
--- a/homescreen/src/shell.cpp
+++ b/homescreen/src/shell.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright © 2019 Collabora Ltd.
+ * Copyright © 2019, 2022 Collabora Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
@@ -26,7 +26,8 @@
#include <QGuiApplication>
#include <QDebug>
#include "shell.h"
-#include <qpa/qplatformnativeinterface.h>
+// defined by meson build file
+#include QT_QPA_HEADER
#include <stdio.h>
static struct wl_output *
diff --git a/homescreen/src/shell.h b/homescreen/src/shell.h
index 8bf0e9b..a6e3f7e 100644
--- a/homescreen/src/shell.h
+++ b/homescreen/src/shell.h
@@ -32,7 +32,7 @@
#include <QScreen>
#include <QWindow>
#include <memory>
-#include "wayland-agl-shell-client-protocol.h"
+#include "agl-shell-client-protocol.h"
/*
* Basic type to wrap the agl_shell wayland object into a QObject, so that it
diff --git a/homescreen.pro b/meson.build
index bf0d4bb..3d77b36 100644
--- a/homescreen.pro
+++ b/meson.build
@@ -1,4 +1,5 @@
-# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+#
+# Copyright ©, 2022 Collabora, Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -11,10 +12,22 @@
# 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.
+#
-TEMPLATE = subdirs
-
-load(configure)
+project (
+ 'homescreen',
+ ['c', 'cpp'],
+ version : '1.0.0',
+ license : 'Apache-2.0',
+ meson_version : '>= 0.60.0',
+ default_options :
+ [
+ 'warning_level=1',
+ 'buildtype=debugoptimized',
+ 'c_std=c17',
+ 'cpp_std=c++17'
+ ],
+)
-SUBDIRS = \
- homescreen
+qt5 = import('qt5')
+subdir('homescreen')