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-09-29 19:44:20 +0300
commitbf125b0779f07e9d65f83da99d16accdad72b08b (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. Signed-off-by: Marius Vlad <marius.vlad@collabora.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')