From bf125b0779f07e9d65f83da99d16accdad72b08b Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Thu, 29 Sep 2022 14:22:11 +0300 Subject: [PATCH] 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 Change-Id: Id64bf3d5b41912d32df7f78e94ab04d231bb0c83 --- homescreen/homescreen.pro | 60 -------------------- homescreen/meson.build | 107 +++++++++++++++++++++++++++++++++++ homescreen/src/hmi-debug.h | 1 - homescreen/src/homescreenhandler.cpp | 3 +- homescreen/src/main.cpp | 5 +- homescreen/src/shell.cpp | 5 +- homescreen/src/shell.h | 2 +- homescreen.pro => meson.build | 25 ++++++-- 8 files changed, 135 insertions(+), 73 deletions(-) delete mode 100644 homescreen/homescreen.pro create mode 100644 homescreen/meson.build rename homescreen.pro => meson.build (61%) 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 +// 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 +// meson will define these +#include QT_QPA_HEADER #include -#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 #include #include "shell.h" -#include +// defined by meson build file +#include QT_QPA_HEADER #include 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 #include #include -#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 similarity index 61% rename from homescreen.pro rename to 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') -- 2.16.6