diff options
author | Gregor Kleen <gkleen@yggdrasil.li> | 2025-08-29 23:06:55 +0200 |
---|---|---|
committer | Gregor Kleen <gkleen@yggdrasil.li> | 2025-08-29 23:06:55 +0200 |
commit | c3a8a171734bfeced58f4611365e85a6daed7db9 (patch) | |
tree | 235296a43af10ce96b5dd74e0523e59f4c1a8b12 /accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt | |
parent | 218ac55d86ee49d151c0ba2dfbca6da104c66703 (diff) | |
download | nixos-c3a8a171734bfeced58f4611365e85a6daed7db9.tar nixos-c3a8a171734bfeced58f4611365e85a6daed7db9.tar.gz nixos-c3a8a171734bfeced58f4611365e85a6daed7db9.tar.bz2 nixos-c3a8a171734bfeced58f4611365e85a6daed7db9.tar.xz nixos-c3a8a171734bfeced58f4611365e85a6daed7db9.zip |
...quickshell
Diffstat (limited to 'accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt')
-rw-r--r-- | accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt b/accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt new file mode 100644 index 00000000..aa363c4c --- /dev/null +++ b/accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt | |||
@@ -0,0 +1,116 @@ | |||
1 | set(INSTALL_QMLDIR "" CACHE STRING "QML install dir") | ||
2 | set(INSTALL_QML_PREFIX "" CACHE STRING "QML install prefix") | ||
3 | |||
4 | # There doesn't seem to be a standard cross-distro qml install path. | ||
5 | if ("${INSTALL_QMLDIR}" STREQUAL "" AND "${INSTALL_QML_PREFIX}" STREQUAL "") | ||
6 | message(WARNING "Neither INSTALL_QMLDIR nor INSTALL_QML_PREFIX is set. QML modules will not be installed.") | ||
7 | else() | ||
8 | if ("${INSTALL_QMLDIR}" STREQUAL "") | ||
9 | set(QML_FULL_INSTALLDIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_QML_PREFIX}") | ||
10 | else() | ||
11 | set(QML_FULL_INSTALLDIR "${INSTALL_QMLDIR}") | ||
12 | endif() | ||
13 | |||
14 | message(STATUS "QML install dir: ${QML_FULL_INSTALLDIR}") | ||
15 | endif() | ||
16 | |||
17 | # Install a given target as a QML module. This is mostly pulled from ECM, as there does not seem | ||
18 | # to be an official way to do it. | ||
19 | # see https://github.com/KDE/extra-cmake-modules/blob/fe0f606bf7f222e36f7560fd7a2c33ef993e23bb/modules/ECMQmlModule6.cmake#L160 | ||
20 | function(install_qml_module arg_TARGET) | ||
21 | if (NOT DEFINED QML_FULL_INSTALLDIR) | ||
22 | return() | ||
23 | endif() | ||
24 | |||
25 | qt_query_qml_module(${arg_TARGET} | ||
26 | URI module_uri | ||
27 | VERSION module_version | ||
28 | PLUGIN_TARGET module_plugin_target | ||
29 | TARGET_PATH module_target_path | ||
30 | QMLDIR module_qmldir | ||
31 | TYPEINFO module_typeinfo | ||
32 | QML_FILES module_qml_files | ||
33 | RESOURCES module_resources | ||
34 | ) | ||
35 | |||
36 | set(module_dir "${QML_FULL_INSTALLDIR}/${module_target_path}") | ||
37 | |||
38 | if (NOT TARGET "${module_plugin_target}") | ||
39 | message(FATAL_ERROR "install_qml_modules called for a target without a plugin") | ||
40 | endif() | ||
41 | |||
42 | get_target_property(target_type "${arg_TARGET}" TYPE) | ||
43 | if (NOT "${target_type}" STREQUAL "STATIC_LIBRARY") | ||
44 | install( | ||
45 | TARGETS "${arg_TARGET}" | ||
46 | LIBRARY DESTINATION "${module_dir}" | ||
47 | RUNTIME DESTINATION "${module_dir}" | ||
48 | ) | ||
49 | |||
50 | install( | ||
51 | TARGETS "${module_plugin_target}" | ||
52 | LIBRARY DESTINATION "${module_dir}" | ||
53 | RUNTIME DESTINATION "${module_dir}" | ||
54 | ) | ||
55 | endif() | ||
56 | |||
57 | install(FILES "${module_qmldir}" DESTINATION "${module_dir}") | ||
58 | install(FILES "${module_typeinfo}" DESTINATION "${module_dir}") | ||
59 | |||
60 | # Install QML files | ||
61 | list(LENGTH module_qml_files num_files) | ||
62 | if (NOT "${module_qml_files}" MATCHES "NOTFOUND" AND ${num_files} GREATER 0) | ||
63 | qt_query_qml_module(${arg_TARGET} QML_FILES_DEPLOY_PATHS qml_files_deploy_paths) | ||
64 | |||
65 | math(EXPR last_index "${num_files} - 1") | ||
66 | foreach(i RANGE 0 ${last_index}) | ||
67 | list(GET module_qml_files ${i} src_file) | ||
68 | list(GET qml_files_deploy_paths ${i} deploy_path) | ||
69 | get_filename_component(dst_name "${deploy_path}" NAME) | ||
70 | get_filename_component(dest_dir "${deploy_path}" DIRECTORY) | ||
71 | install(FILES "${src_file}" DESTINATION "${module_dir}/${dest_dir}" RENAME "${dst_name}") | ||
72 | endforeach() | ||
73 | endif() | ||
74 | |||
75 | # Install resources | ||
76 | list(LENGTH module_resources num_files) | ||
77 | if (NOT "${module_resources}" MATCHES "NOTFOUND" AND ${num_files} GREATER 0) | ||
78 | qt_query_qml_module(${arg_TARGET} RESOURCES_DEPLOY_PATHS resources_deploy_paths) | ||
79 | |||
80 | math(EXPR last_index "${num_files} - 1") | ||
81 | foreach(i RANGE 0 ${last_index}) | ||
82 | list(GET module_resources ${i} src_file) | ||
83 | list(GET resources_deploy_paths ${i} deploy_path) | ||
84 | get_filename_component(dst_name "${deploy_path}" NAME) | ||
85 | get_filename_component(dest_dir "${deploy_path}" DIRECTORY) | ||
86 | install(FILES "${src_file}" DESTINATION "${module_dir}/${dest_dir}" RENAME "${dst_name}") | ||
87 | endforeach() | ||
88 | endif() | ||
89 | endfunction() | ||
90 | |||
91 | |||
92 | cmake_minimum_required(VERSION 3.20) | ||
93 | project(custom LANGUAGES CXX) | ||
94 | |||
95 | find_package(Qt6 REQUIRED COMPONENTS Core Qml) | ||
96 | |||
97 | qt_standard_project_setup(REQUIRES 6.6) | ||
98 | |||
99 | qt6_policy(SET QTP0001 NEW) | ||
100 | qt6_add_qml_module(customplugin | ||
101 | URI "Custom" | ||
102 | PLUGIN_TARGET customplugin | ||
103 | ) | ||
104 | |||
105 | target_sources(customplugin PRIVATE | ||
106 | Chrono.cpp Chrono.hpp | ||
107 | ) | ||
108 | |||
109 | target_compile_features(customplugin PUBLIC cxx_std_26) | ||
110 | |||
111 | target_link_libraries(customplugin PRIVATE | ||
112 | Qt6::Core | ||
113 | Qt6::Qml | ||
114 | ) | ||
115 | |||
116 | install_qml_module(customplugin) | ||