From d4f3ddfbad7a64937f00f13ba964e18d33effbb0 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Thu, 29 Sep 2022 14:22:11 +0300 Subject: 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 Suggested-by: Scott Murray Change-Id: Id64bf3d5b41912d32df7f78e94ab04d231bb0c83 --- homescreen.pro | 20 ------- 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 +- meson.build | 33 +++++++++++ 9 files changed, 149 insertions(+), 87 deletions(-) delete mode 100644 homescreen.pro delete mode 100644 homescreen/homescreen.pro create mode 100644 homescreen/meson.build create mode 100644 meson.build diff --git a/homescreen.pro b/homescreen.pro deleted file mode 100644 index bf0d4bb..0000000 --- a/homescreen.pro +++ /dev/null @@ -1,20 +0,0 @@ -# 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 = subdirs - -load(configure) - -SUBDIRS = \ - homescreen 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/meson.build b/meson.build new file mode 100644 index 0000000..3d77b36 --- /dev/null +++ b/meson.build @@ -0,0 +1,33 @@ +# +# 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. +# 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. +# + +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' + ], +) + +qt5 = import('qt5') +subdir('homescreen') -- cgit 1.2.3-korg