diff options
author | Dominik Holland <dominik.holland@qt.io> | 2021-06-21 16:25:49 +0200 |
---|---|---|
committer | Dominik Holland <dominik.holland@qt.io> | 2021-06-28 15:32:27 +0200 |
commit | 37d87aa343f0367ab9e8456296f423031c21bb34 (patch) | |
tree | 54203785438b9e445107e73a784988a1cb82a102 | |
parent | 5784707989188dc9a60f7c6d4f76c20a59b3368d (diff) | |
download | qtapplicationmanager-37d87aa343f0367ab9e8456296f423031c21bb34.tar.gz |
Make all qml-only examples usable from within QtCreator
This adds a new qt6_am_add_systemui_wrapper cmake function
which generates a wrapper script and makes sure this is
callable from within QtCreator.
Change-Id: I8270d31167ef5572514d294d634f55962af04355
Reviewed-by: Robert Griebl <robert.griebl@qt.io>
15 files changed, 217 insertions, 126 deletions
diff --git a/examples/applicationmanager/CMakeLists.txt b/examples/applicationmanager/CMakeLists.txt index c19b0f84..3bd88f16 100644 --- a/examples/applicationmanager/CMakeLists.txt +++ b/examples/applicationmanager/CMakeLists.txt @@ -1,14 +1,14 @@ -#add_subdirectory(animated-windows) -#add_subdirectory(frame-timer) -#add_subdirectory(hello-world) -#add_subdirectory(launch-intents) -#add_subdirectory(minidesk) -#add_subdirectory(application-features) -#add_subdirectory(multi-views) -#add_subdirectory(process-status) +add_subdirectory(animated-windows) +add_subdirectory(frame-timer) +add_subdirectory(hello-world) +add_subdirectory(launch-intents) +add_subdirectory(minidesk) +add_subdirectory(application-features) +add_subdirectory(multi-views) +add_subdirectory(process-status) add_subdirectory(startup-plugin) -#add_subdirectory(intents) +add_subdirectory(intents) add_subdirectory(custom-appman) if(LINUX) add_subdirectory(softwarecontainer-plugin) diff --git a/examples/applicationmanager/animated-windows/CMakeLists.txt b/examples/applicationmanager/animated-windows/CMakeLists.txt index 31a2a51e..14c1f39d 100644 --- a/examples/applicationmanager/animated-windows/CMakeLists.txt +++ b/examples/applicationmanager/animated-windows/CMakeLists.txt @@ -17,19 +17,9 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/animated-windo find_package(Qt6 COMPONENTS Core) find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) - -set_target_properties(animated-windows PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) -target_link_libraries(animated-windows PUBLIC - Qt::Core - Qt::Gui -) - -install(TARGETS animated-windows - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(animated-windows + CONFIG_YAML am-config.yaml + EXTRA_FILES apps system-ui ) diff --git a/examples/applicationmanager/application-features/CMakeLists.txt b/examples/applicationmanager/application-features/CMakeLists.txt index 4df08997..6594ddb6 100644 --- a/examples/applicationmanager/application-features/CMakeLists.txt +++ b/examples/applicationmanager/application-features/CMakeLists.txt @@ -1,7 +1,7 @@ # Generated from application-features.pro. cmake_minimum_required(VERSION 3.14) -project(ui LANGUAGES CXX) +project(application-features LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -15,16 +15,12 @@ endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/application-features") -) -set_target_properties(ui PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) +find_package(Qt6 COMPONENTS AppManMainPrivate) -install(TARGETS ui - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(application-features + CONFIG_YAML am-config.yaml + EXTRA_FILES apps system-ui ) + add_subdirectory(imports) add_subdirectory(native) diff --git a/examples/applicationmanager/application-features/apps/compositor/compositor.qml b/examples/applicationmanager/application-features/apps/compositor/compositor.qml index 9624d353..64028fd3 100644 --- a/examples/applicationmanager/application-features/apps/compositor/compositor.qml +++ b/examples/applicationmanager/application-features/apps/compositor/compositor.qml @@ -52,6 +52,8 @@ import QtQuick 2.11 import QtApplicationManager.Application 2.0 import QtWayland.Compositor 1.3 +import QtWayland.Compositor.XdgShell +import QtWayland.Compositor.WlShell ApplicationManagerWindow { id: root @@ -83,10 +85,6 @@ ApplicationManagerWindow { onWlShellSurfaceCreated: shellSurfaces.append({shellSurface: shellSurface}); } - XdgShellV6 { - onToplevelCreated: shellSurfaces.append({shellSurface: xdgSurface}); - } - XdgShell { onToplevelCreated: shellSurfaces.append({shellSurface: xdgSurface}); } diff --git a/examples/applicationmanager/application-features/imports/terminator2/CMakeLists.txt b/examples/applicationmanager/application-features/imports/terminator2/CMakeLists.txt index 945ad301..bd2a9371 100644 --- a/examples/applicationmanager/application-features/imports/terminator2/CMakeLists.txt +++ b/examples/applicationmanager/application-features/imports/terminator2/CMakeLists.txt @@ -21,15 +21,17 @@ find_package(Qt6 COMPONENTS Qml) find_package(Qt6 COMPONENTS Quick) qt6_add_qml_module(terminator2plugin - OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CURRENT_BINARY_DIR}/../../apps/crash/Terminator" - VERSION 1.0 + OUTPUT_DIRECTORY "../../apps/crash/Terminator" + VERSION 2.0 URI "Terminator" - INSTALL_LOCATION ${INSTALL_EXAMPLEDIR} + NO_GENERATE_PLUGIN_SOURCE + PLUGIN_TARGET terminator2plugin ) target_sources(terminator2plugin PRIVATE qmlterminator2.cpp qmlterminator2.h ) + set_target_properties(terminator2plugin PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE @@ -46,3 +48,7 @@ install(TARGETS terminator2plugin BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" ) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../../apps/crash/Terminator/qmldir" + DESTINATION "${INSTALL_EXAMPLEDIR}" +) diff --git a/examples/applicationmanager/application-features/native/widgets/CMakeLists.txt b/examples/applicationmanager/application-features/native/widgets/CMakeLists.txt index 11f79f20..148cdb39 100644 --- a/examples/applicationmanager/application-features/native/widgets/CMakeLists.txt +++ b/examples/applicationmanager/application-features/native/widgets/CMakeLists.txt @@ -30,8 +30,8 @@ target_link_libraries(widgets PUBLIC Qt::Core Qt::Gui Qt::Widgets - appman_commonPrivate - appman_launcherPrivate + Qt::AppManCommonPrivate + Qt::AppManLauncherPrivate ) install(TARGETS widgets diff --git a/examples/applicationmanager/frame-timer/CMakeLists.txt b/examples/applicationmanager/frame-timer/CMakeLists.txt index bb6e0a97..45525f5d 100644 --- a/examples/applicationmanager/frame-timer/CMakeLists.txt +++ b/examples/applicationmanager/frame-timer/CMakeLists.txt @@ -17,19 +17,9 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/frame-timer") find_package(Qt6 COMPONENTS Core) find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) -) -set_target_properties(frame-timer PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) -target_link_libraries(frame-timer PUBLIC - Qt::Core - Qt::Gui -) - -install(TARGETS frame-timer - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(frame-timer + CONFIG_YAML am-config.yaml + EXTRA_FILES apps system-ui ) diff --git a/examples/applicationmanager/hello-world/CMakeLists.txt b/examples/applicationmanager/hello-world/CMakeLists.txt index d58f0387..4c8604d1 100644 --- a/examples/applicationmanager/hello-world/CMakeLists.txt +++ b/examples/applicationmanager/hello-world/CMakeLists.txt @@ -17,19 +17,10 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/hello-world") find_package(Qt6 COMPONENTS Core) find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) -) -set_target_properties(hello-world PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) -target_link_libraries(hello-world PUBLIC - Qt::Core - Qt::Gui -) - -install(TARGETS hello-world - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(hello-world + MAIN_QML_FILE system-ui.qml + EXTRA_FILES apps + EXTRA_ARGS --builtin-apps-manifest-dir apps ) diff --git a/examples/applicationmanager/intents/CMakeLists.txt b/examples/applicationmanager/intents/CMakeLists.txt new file mode 100644 index 00000000..b5b69ee0 --- /dev/null +++ b/examples/applicationmanager/intents/CMakeLists.txt @@ -0,0 +1,26 @@ +# Generated from intents.pro. + +cmake_minimum_required(VERSION 3.14) +project(intents LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/intents") + +find_package(Qt6 COMPONENTS Core) +find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) + +qt6_am_add_systemui_wrapper(intents + MAIN_QML_FILE system-ui.qml + EXTRA_FILES apps shared + EXTRA_ARGS --builtin-apps-manifest-dir apps +) diff --git a/examples/applicationmanager/launch-intents/CMakeLists.txt b/examples/applicationmanager/launch-intents/CMakeLists.txt index 82b069d1..b7d334d0 100644 --- a/examples/applicationmanager/launch-intents/CMakeLists.txt +++ b/examples/applicationmanager/launch-intents/CMakeLists.txt @@ -17,19 +17,10 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/launch-intents find_package(Qt6 COMPONENTS Core) find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) -) -set_target_properties(launch-intents PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) -target_link_libraries(launch-intents PUBLIC - Qt::Core - Qt::Gui -) - -install(TARGETS launch-intents - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(launch-intents + MAIN_QML_FILE system-ui.qml + EXTRA_FILES apps + EXTRA_ARGS --builtin-apps-manifest-dir apps ) diff --git a/examples/applicationmanager/minidesk/CMakeLists.txt b/examples/applicationmanager/minidesk/CMakeLists.txt index 014486e1..6c6ad79e 100644 --- a/examples/applicationmanager/minidesk/CMakeLists.txt +++ b/examples/applicationmanager/minidesk/CMakeLists.txt @@ -17,19 +17,10 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/minidesk") find_package(Qt6 COMPONENTS Core) find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) -) -set_target_properties(minidesk PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) -target_link_libraries(minidesk PUBLIC - Qt::Core - Qt::Gui -) - -install(TARGETS minidesk - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(minidesk + CONFIG_YAML am-config.yaml + EXTRA_FILES apps system-ui + EXTRA_ARGS --verbose ) diff --git a/examples/applicationmanager/multi-views/CMakeLists.txt b/examples/applicationmanager/multi-views/CMakeLists.txt index 92b681c8..169454b2 100644 --- a/examples/applicationmanager/multi-views/CMakeLists.txt +++ b/examples/applicationmanager/multi-views/CMakeLists.txt @@ -17,19 +17,10 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/multi-views") find_package(Qt6 COMPONENTS Core) find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) -) -set_target_properties(multi-views PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) -target_link_libraries(multi-views PUBLIC - Qt::Core - Qt::Gui -) - -install(TARGETS multi-views - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(multi-views + CONFIG_YAML am-config.yaml + EXTRA_FILES apps system-ui + EXTRA_ARGS --verbose ) diff --git a/examples/applicationmanager/process-status/CMakeLists.txt b/examples/applicationmanager/process-status/CMakeLists.txt index 2cb18fbf..7d2647b8 100644 --- a/examples/applicationmanager/process-status/CMakeLists.txt +++ b/examples/applicationmanager/process-status/CMakeLists.txt @@ -17,19 +17,10 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/applicationmanager/process-status find_package(Qt6 COMPONENTS Core) find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS AppManMainPrivate) -) -set_target_properties(process-status PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) -target_link_libraries(process-status PUBLIC - Qt::Core - Qt::Gui -) - -install(TARGETS process-status - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +qt6_am_add_systemui_wrapper(process-status + CONFIG_YAML am-config.yaml + EXTRA_FILES apps system-ui + EXTRA_ARGS --verbose ) diff --git a/src/main-lib/CMakeLists.txt b/src/main-lib/CMakeLists.txt index 4eab9378..a7214aa7 100644 --- a/src/main-lib/CMakeLists.txt +++ b/src/main-lib/CMakeLists.txt @@ -35,6 +35,8 @@ qt_internal_add_module(AppManMainPrivate Qt::AppManNotificationPrivate Qt::AppManSharedMainPrivate Qt::AppManWindowPrivate + EXTRA_CMAKE_FILES + Qt6AppManMainPrivateMacros.cmake ) qt_internal_extend_target(AppManMainPrivate CONDITION QT_FEATURE_am_widgets_support AND TARGET Qt::Widgets diff --git a/src/main-lib/Qt6AppManMainPrivateMacros.cmake b/src/main-lib/Qt6AppManMainPrivateMacros.cmake new file mode 100644 index 00000000..e163ff34 --- /dev/null +++ b/src/main-lib/Qt6AppManMainPrivateMacros.cmake @@ -0,0 +1,128 @@ +function(qt_am_internal_create_copy_command file) + if (NOT ${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) + add_custom_command(OUTPUT ${file} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${CMAKE_CURRENT_BINARY_DIR}/${file} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file} + COMMENT "Copying file: ${file}") + endif() + if (NOT ARG_NO_INSTALL) + get_filename_component(dest ${INSTALL_EXAMPLEDIR}/${file} DIRECTORY) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file} + DESTINATION ${dest} + ) + endif() +endfunction() + +function(qt6_am_add_systemui_wrapper target) + cmake_parse_arguments( + PARSE_ARGV 1 + ARG + "NO_INSTALL" "MAIN_QML_FILE" "CONFIG_YAML;EXTRA_FILES;EXTRA_ARGS" + ) + + file(CONFIGURE OUTPUT main.cpp + CONTENT "int main(int, char *[]){}" + ) + + set(CMD_ARGS) + set(ALL_EXTRA_FILES) + if (ARG_MAIN_QML_FILE) + list(APPEND ALL_EXTRA_FILES ${ARG_MAIN_QML_FILE}) + qt_am_internal_create_copy_command(${ARG_MAIN_QML_FILE}) + endif() + + if (ARG_CONFIG_YAML) + foreach(F ${ARG_CONFIG_YAML}) + list(APPEND CMD_ARGS "-c ${F}") + list(APPEND ALL_EXTRA_FILES ${F}) + qt_am_internal_create_copy_command(${F}) + endforeach() + endif() + + if (ARG_EXTRA_FILES) + foreach(F ${ARG_EXTRA_FILES}) + file(GLOB_RECURSE MY_EXTRA_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "${F}/*" + ) + list(APPEND ALL_EXTRA_FILES ${MY_EXTRA_FILES}) + foreach(B ${MY_EXTRA_FILES}) + qt_am_internal_create_copy_command(${B}) + endforeach() + endforeach() + endif() + + string(JOIN " " CMD_ARGS_STR ${CMD_ARGS}) + string(JOIN " " CMD_EXTRA_ARGS_STR ${ARG_EXTRA_ARGS}) + + if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") + set(WRAPPER_SUFFIX ".bat") + set(WRAPPER_SCRIPT "_${target}${WRAPPER_SUFFIX}") + set(bindir "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_BINDIR}") + set(plugindir "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_PLUGINSDIR}") + get_filename_component(bindir "${bindir}" REALPATH) + file(TO_NATIVE_PATH "${bindir}" bindir) + get_filename_component(plugindir "${plugindir}" REALPATH) + file(TO_NATIVE_PATH "${plugindir}" plugindir) + + file(GENERATE OUTPUT ${WRAPPER_SCRIPT} CONTENT +"@echo off +SetLocal EnableDelayedExpansion +(set PATH=${bindir};!PATH!) +if defined QT_PLUGIN_PATH ( + set QT_PLUGIN_PATH=${plugindir};!QT_PLUGIN_PATH! +) else ( + set QT_PLUGIN_PATH=${plugindir} +) +${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/$<TARGET_FILE_NAME:${QT_CMAKE_EXPORT_NAMESPACE}::appman> ${CMD_ARGS_STR} ${CMD_EXTRA_ARGS_STR} ${ARG_MAIN_QML_FILE} %* +EndLocal +" + ) + else() + set(WRAPPER_SUFFIX ".sh") + set(WRAPPER_SCRIPT "_${target}${WRAPPER_SUFFIX}") + file(GENERATE OUTPUT ${WRAPPER_SCRIPT} CONTENT +"#!/bin/sh +exec ${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/$<TARGET_FILE_NAME:${QT_CMAKE_EXPORT_NAMESPACE}::appman> ${CMD_ARGS_STR} ${CMD_EXTRA_ARGS_STR} ${ARG_MAIN_QML_FILE} \"$@\"; +" + ) + endif() + + + add_executable(${target} + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + # Add all files we copy to the build folder as sources to the main executable + # This makes all files show up in the IDE + ${ALL_EXTRA_FILES} + ) + + add_custom_target(${target}_deploy + DEPENDS ${ALL_EXTRA_FILES} + ) + + set_target_properties(${target} PROPERTIES SUFFIX "${WRAPPER_SUFFIX}") + + add_dependencies(${target} ${target}_deploy) + + set(EXTRA_COMMAND "") + if ("${WRAPPER_SUFFIX}" STREQUAL ".sh") + set(EXTRA_COMMAND COMMAND chmod +x ${WRAPPER_SCRIPT}) + endif() + + add_custom_command(TARGET ${target} POST_BUILD + ${EXTRA_COMMAND} + COMMAND ${CMAKE_COMMAND} -E copy ${WRAPPER_SCRIPT} $<TARGET_FILE_NAME:${target}> + ) + + if (NOT ARG_NO_INSTALL) + install(PROGRAMS $<TARGET_FILE:${target}> + DESTINATION "${INSTALL_EXAMPLEDIR}" + ) + endif() +endfunction() + +if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) + function(qt_am_add_systemui_wrapper) + qt6_am_add_systemui_wrapper(${ARGV}) + endfunction() +endif() |