forked from quickshell/quickshell
		
	build: only install necessary qml module files
This commit is contained in:
		
							parent
							
								
									2e18340995
								
							
						
					
					
						commit
						1168879d6d
					
				
					 22 changed files with 130 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -64,8 +64,7 @@ boption(SERVICE_GREETD "Greetd" ON)
 | 
			
		|||
boption(SERVICE_UPOWER "UPower" ON)
 | 
			
		||||
boption(SERVICE_NOTIFICATIONS "Notifications" ON)
 | 
			
		||||
 | 
			
		||||
set(INSTALL_QMLDIR "" CACHE STRING "QML install dir")
 | 
			
		||||
set(INSTALL_QML_PREFIX "" CACHE STRING "QML install prefix")
 | 
			
		||||
include(cmake/install-qml-module.cmake)
 | 
			
		||||
 | 
			
		||||
add_compile_options(-Wall -Wextra)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -157,23 +156,6 @@ if (USE_JEMALLOC)
 | 
			
		|||
	target_link_libraries(quickshell PRIVATE ${JEMALLOC_LIBRARIES})
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if ("${INSTALL_QMLDIR}" STREQUAL "" AND "${INSTALL_QML_PREFIX}" STREQUAL "")
 | 
			
		||||
	message(WARNING "Neither INSTALL_QMLDIR nor INSTALL_QML_PREFIX is set. QML modules will not be installed.")
 | 
			
		||||
else()
 | 
			
		||||
	if ("${INSTALL_QMLDIR}" STREQUAL "")
 | 
			
		||||
		set(INSTALLDIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_QML_PREFIX}")
 | 
			
		||||
	else()
 | 
			
		||||
		set(INSTALLDIR "${INSTALL_QMLDIR}")
 | 
			
		||||
	endif()
 | 
			
		||||
 | 
			
		||||
	message(STATUS "QML install dir: ${INSTALLDIR}")
 | 
			
		||||
	install(
 | 
			
		||||
		DIRECTORY ${CMAKE_BINARY_DIR}/qml_modules/
 | 
			
		||||
		DESTINATION ${INSTALLDIR}
 | 
			
		||||
		FILES_MATCHING PATTERN "*"
 | 
			
		||||
	)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
install(CODE "
 | 
			
		||||
	execute_process(
 | 
			
		||||
		COMMAND ${CMAKE_COMMAND} -E create_symlink \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										89
									
								
								cmake/install-qml-module.cmake
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								cmake/install-qml-module.cmake
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,89 @@
 | 
			
		|||
set(INSTALL_QMLDIR "" CACHE STRING "QML install dir")
 | 
			
		||||
set(INSTALL_QML_PREFIX "" CACHE STRING "QML install prefix")
 | 
			
		||||
 | 
			
		||||
# There doesn't seem to be a standard cross-distro qml install path.
 | 
			
		||||
if ("${INSTALL_QMLDIR}" STREQUAL "" AND "${INSTALL_QML_PREFIX}" STREQUAL "")
 | 
			
		||||
	message(WARNING "Neither INSTALL_QMLDIR nor INSTALL_QML_PREFIX is set. QML modules will not be installed.")
 | 
			
		||||
else()
 | 
			
		||||
	if ("${INSTALL_QMLDIR}" STREQUAL "")
 | 
			
		||||
		set(QML_FULL_INSTALLDIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_QML_PREFIX}")
 | 
			
		||||
	else()
 | 
			
		||||
		set(QML_FULL_INSTALLDIR "${INSTALL_QMLDIR}")
 | 
			
		||||
	endif()
 | 
			
		||||
 | 
			
		||||
	message(STATUS "QML install dir: ${QML_FULL_INSTALLDIR}")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Install a given target as a QML module. This is mostly pulled from ECM, as there does not seem
 | 
			
		||||
# to be an official way to do it.
 | 
			
		||||
# see https://github.com/KDE/extra-cmake-modules/blob/fe0f606bf7f222e36f7560fd7a2c33ef993e23bb/modules/ECMQmlModule6.cmake#L160
 | 
			
		||||
function(install_qml_module arg_TARGET)
 | 
			
		||||
	if (NOT DEFINED QML_FULL_INSTALLDIR)
 | 
			
		||||
		return()
 | 
			
		||||
	endif()
 | 
			
		||||
 | 
			
		||||
	qt_query_qml_module(${arg_TARGET}
 | 
			
		||||
		URI module_uri
 | 
			
		||||
		VERSION module_version
 | 
			
		||||
		PLUGIN_TARGET module_plugin_target
 | 
			
		||||
		TARGET_PATH module_target_path
 | 
			
		||||
		QMLDIR module_qmldir
 | 
			
		||||
		TYPEINFO module_typeinfo
 | 
			
		||||
		QML_FILES module_qml_files
 | 
			
		||||
		RESOURCES module_resources
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
  set(module_dir "${QML_FULL_INSTALLDIR}/${module_target_path}")
 | 
			
		||||
 | 
			
		||||
  if (NOT TARGET "${module_plugin_target}")
 | 
			
		||||
    message(FATAL_ERROR "install_qml_modules called for a target without a plugin")
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
	get_target_property(target_type "${arg_TARGET}" TYPE)
 | 
			
		||||
	if (NOT "${target_type}" STREQUAL "STATIC_LIBRARY")
 | 
			
		||||
		install(
 | 
			
		||||
			TARGETS "${arg_TARGET}"
 | 
			
		||||
			LIBRARY DESTINATION "${module_dir}"
 | 
			
		||||
			RUNTIME DESTINATION "${module_dir}"
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		install(
 | 
			
		||||
			TARGETS "${module_plugin_target}"
 | 
			
		||||
			LIBRARY DESTINATION "${module_dir}"
 | 
			
		||||
			RUNTIME DESTINATION "${module_dir}"
 | 
			
		||||
		)
 | 
			
		||||
	endif()
 | 
			
		||||
 | 
			
		||||
  install(FILES "${module_qmldir}" DESTINATION "${module_dir}")
 | 
			
		||||
  install(FILES "${module_typeinfo}" DESTINATION "${module_dir}")
 | 
			
		||||
 | 
			
		||||
  # Install QML files
 | 
			
		||||
  list(LENGTH module_qml_files num_files)
 | 
			
		||||
  if (NOT "${module_qml_files}" MATCHES "NOTFOUND" AND ${num_files} GREATER 0)
 | 
			
		||||
    qt_query_qml_module(${arg_TARGET} QML_FILES_DEPLOY_PATHS qml_files_deploy_paths)
 | 
			
		||||
 | 
			
		||||
    math(EXPR last_index "${num_files} - 1")
 | 
			
		||||
    foreach(i RANGE 0 ${last_index})
 | 
			
		||||
      list(GET module_qml_files       ${i} src_file)
 | 
			
		||||
      list(GET qml_files_deploy_paths ${i} deploy_path)
 | 
			
		||||
      get_filename_component(dst_name "${deploy_path}" NAME)
 | 
			
		||||
      get_filename_component(dest_dir "${deploy_path}" DIRECTORY)
 | 
			
		||||
      install(FILES "${src_file}" DESTINATION "${module_dir}/${dest_dir}" RENAME "${dst_name}")
 | 
			
		||||
    endforeach()
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  # Install resources
 | 
			
		||||
  list(LENGTH module_resources num_files)
 | 
			
		||||
  if (NOT "${module_resources}" MATCHES "NOTFOUND" AND ${num_files} GREATER 0)
 | 
			
		||||
    qt_query_qml_module(${arg_TARGET} RESOURCES_DEPLOY_PATHS resources_deploy_paths)
 | 
			
		||||
 | 
			
		||||
    math(EXPR last_index "${num_files} - 1")
 | 
			
		||||
    foreach(i RANGE 0 ${last_index})
 | 
			
		||||
      list(GET module_resources       ${i} src_file)
 | 
			
		||||
      list(GET resources_deploy_paths ${i} deploy_path)
 | 
			
		||||
      get_filename_component(dst_name "${deploy_path}" NAME)
 | 
			
		||||
      get_filename_component(dest_dir "${deploy_path}" DIRECTORY)
 | 
			
		||||
      install(FILES "${src_file}" DESTINATION "${module_dir}/${dest_dir}" RENAME "${dst_name}")
 | 
			
		||||
    endforeach()
 | 
			
		||||
  endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +49,8 @@ qt_add_qml_module(quickshell-core
 | 
			
		|||
	DEFAULT_IMPORTS Quickshell._Window
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-core)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-core PRIVATE ${QT_DEPS} CLI11::CLI11)
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-core)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,8 @@ qt_add_qml_module(quickshell-dbusmenu
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-dbusmenu)
 | 
			
		||||
 | 
			
		||||
# dbus headers
 | 
			
		||||
target_include_directories(quickshell-dbusmenu PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,8 @@ qt_add_qml_module(quickshell-io
 | 
			
		|||
		FileView.qml
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-io)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-io PRIVATE ${QT_DEPS})
 | 
			
		||||
target_link_libraries(quickshell-io-init PRIVATE ${QT_DEPS})
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,8 @@ qt_add_qml_module(quickshell-service-greetd
 | 
			
		|||
	DEPENDENCIES QtQml
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-service-greetd)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-service-greetd PRIVATE ${QT_DEPS})
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-service-greetd)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,6 +33,8 @@ qt_add_qml_module(quickshell-service-mpris
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-service-mpris)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-service-mpris PRIVATE ${QT_DEPS} quickshell-dbus)
 | 
			
		||||
target_link_libraries(quickshell PRIVATE quickshell-service-mprisplugin)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,8 @@ qt_add_qml_module(quickshell-service-notifications
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-service-notifications)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-service-notifications PRIVATE ${QT_DEPS} quickshell-dbus)
 | 
			
		||||
target_link_libraries(quickshell PRIVATE quickshell-service-notificationsplugin)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,8 @@ qt_add_qml_module(quickshell-service-pam
 | 
			
		|||
	DEPENDENCIES QtQml
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-service-pam)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-service-pam PRIVATE ${QT_DEPS} pam ${PAM_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-service-pam)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,8 @@ qt_add_qml_module(quickshell-service-pipewire
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-service-pipewire)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-service-pipewire PRIVATE ${QT_DEPS} PkgConfig::pipewire)
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-service-pipewire)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,6 +44,8 @@ qt_add_qml_module(quickshell-service-statusnotifier
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell Quickshell.DBusMenu
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-service-statusnotifier)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-service-statusnotifier PRIVATE ${QT_DEPS} quickshell-dbus quickshell-dbusmenuplugin)
 | 
			
		||||
target_link_libraries(quickshell PRIVATE quickshell-service-statusnotifierplugin)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,6 +33,8 @@ qt_add_qml_module(quickshell-service-upower
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-service-upower)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-service-upower PRIVATE ${QT_DEPS} quickshell-dbus)
 | 
			
		||||
target_link_libraries(quickshell PRIVATE quickshell-service-upowerplugin)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -110,6 +110,8 @@ qt_add_qml_module(quickshell-wayland
 | 
			
		|||
	IMPORTS ${WAYLAND_MODULES}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-wayland)
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-wayland)
 | 
			
		||||
qs_pch(quickshell-waylandplugin)
 | 
			
		||||
qs_pch(quickshell-wayland-init)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,8 @@ qt_add_qml_module(quickshell-hyprland
 | 
			
		|||
	IMPORTS ${HYPRLAND_MODULES}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-hyprland)
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-hyprland)
 | 
			
		||||
qs_pch(quickshell-hyprlandplugin)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,8 @@ qt_add_qml_module(quickshell-hyprland-focus-grab
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-hyprland-focus-grab)
 | 
			
		||||
 | 
			
		||||
wl_proto(quickshell-hyprland-focus-grab
 | 
			
		||||
	hyprland-focus-grab-v1
 | 
			
		||||
	"${CMAKE_CURRENT_SOURCE_DIR}/hyprland-focus-grab-v1.xml"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,8 @@ qt_add_qml_module(quickshell-hyprland-global-shortcuts
 | 
			
		|||
	DEPENDENCIES QtQml
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-hyprland-global-shortcuts)
 | 
			
		||||
 | 
			
		||||
wl_proto(quickshell-hyprland-global-shortcuts
 | 
			
		||||
	hyprland-global-shortcuts-v1
 | 
			
		||||
	"${CMAKE_CURRENT_SOURCE_DIR}/hyprland-global-shortcuts-v1.xml"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,8 @@ qt_add_qml_module(quickshell-hyprland-ipc
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-hyprland-ipc)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-hyprland-ipc PRIVATE ${QT_DEPS})
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-hyprland-ipc)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,8 @@ qt_add_qml_module(quickshell-wayland-toplevel-management
 | 
			
		|||
	DEPENDENCIES QtQml Quickshell Quickshell.Wayland
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-wayland-toplevel-management)
 | 
			
		||||
 | 
			
		||||
wl_proto(quickshell-wayland-toplevel-management
 | 
			
		||||
	wlr-foreign-toplevel-management-unstable-v1
 | 
			
		||||
	"${CMAKE_CURRENT_SOURCE_DIR}/wlr-foreign-toplevel-management-unstable-v1.xml"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,8 @@ qt_add_qml_module(quickshell-wayland-layershell
 | 
			
		|||
	DEPENDENCIES QtQuick Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-wayland-layershell)
 | 
			
		||||
 | 
			
		||||
wl_proto(quickshell-wayland-layershell wlr-layer-shell-unstable-v1 "${CMAKE_CURRENT_SOURCE_DIR}/wlr-layer-shell-unstable-v1.xml")
 | 
			
		||||
target_link_libraries(quickshell-wayland-layershell PRIVATE ${QT_DEPS} wayland-client)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,8 @@ qt_add_qml_module(quickshell-widgets
 | 
			
		|||
		IconImage.qml
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-widgets)
 | 
			
		||||
 | 
			
		||||
qs_pch(quickshell-widgets)
 | 
			
		||||
qs_pch(quickshell-widgetsplugin)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,8 @@ qt_add_qml_module(quickshell-window
 | 
			
		|||
	DEPENDENCIES QtQuick Quickshell
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-window)
 | 
			
		||||
 | 
			
		||||
add_library(quickshell-window-init OBJECT init.cpp)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-window PRIVATE ${QT_DEPS} Qt6::QuickPrivate)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,8 @@ qt_add_qml_module(quickshell-x11
 | 
			
		|||
	VERSION 0.1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install_qml_module(quickshell-x11)
 | 
			
		||||
 | 
			
		||||
add_library(quickshell-x11-init OBJECT init.cpp)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(quickshell-x11 PRIVATE ${QT_DEPS} ${XCB_LIBRARIES})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue