-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
202 lines (162 loc) · 7.12 KB
/
CMakeLists.txt
File metadata and controls
202 lines (162 loc) · 7.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
cmake_minimum_required(VERSION 3.25.0)
project(DDM
VERSION 0.3.3
LANGUAGES CXX C)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# Set version
add_compile_definitions("DDM_VERSION=\"${DDM_VERSION}\"")
# Standard installation paths
include(GNUInstallDirs)
# Macros
include(FeatureSummary)
# Options
option(BUILD_MAN_PAGES "Build man pages" OFF)
option(WERROR "Build with -Werror" OFF)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# ECM
find_package(ECM 1.4.0 REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH};${ECM_MODULE_PATH}")
# Definitions
add_definitions(-Wall -Wextra)
if (WERROR)
add_definitions(-Werror)
endif()
# Default build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
# Handle build type
if(CMAKE_BUILD_TYPE MATCHES [Dd]ebug)
message(STATUS "Debug build")
add_definitions(-DDEBUG)
else()
message(STATUS "Release build")
add_definitions(-DNDEBUG)
endif()
# Default absolute paths
if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
set(CMAKE_INSTALL_SYSCONFDIR "/etc")
endif()
if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)
set(CMAKE_INSTALL_LOCALSTATEDIR "/var")
endif()
# PKG-CONFIG
find_package(PkgConfig REQUIRED)
# PAM
pkg_search_module(Pam REQUIRED IMPORTED_TARGET pam)
# Systemd
pkg_search_module(Systemd REQUIRED IMPORTED_TARGET systemd)
# libsystemd
pkg_search_module(LibSystemd REQUIRED IMPORTED_TARGET libsystemd)
# XAU
pkg_search_module(LibXau REQUIRED IMPORTED_TARGET xau)
# Wayland client
pkg_search_module(WaylandClient REQUIRED IMPORTED_TARGET wayland-client)
# TreelandProtocols
find_package(TreelandProtocols 0.5.3 REQUIRED)
# Qt6
find_package(Qt6 CONFIG REQUIRED Core DBus Network)
qt_standard_project_setup(REQUIRES 6.6)
# Uninstall target
if ("${ECM_VERSION}" VERSION_LESS "1.7.0")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
endif()
if (NOT DEFINED SYSTEMD_SYSTEM_UNIT_DIR)
pkg_get_variable(SYSTEMD_SYSTEM_UNIT_DIR systemd systemdsystemunitdir)
endif()
if (NOT DEFINED SYSTEMD_SYSUSERS_DIR)
pkg_get_variable(SYSTEMD_SYSUSERS_DIR systemd sysusersdir)
endif()
if (NOT DEFINED SYSTEMD_TMPFILES_DIR)
pkg_get_variable(SYSTEMD_TMPFILES_DIR systemd tmpfilesdir)
endif()
set(HALT_COMMAND "/usr/bin/systemctl poweroff")
set(REBOOT_COMMAND "/usr/bin/systemctl reboot")
set(RUNTIME_DIR_DEFAULT "/run/ddm")
# Set constants
set(DATA_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/ddm" CACHE PATH "System application data install directory")
set(DBUS_CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/dbus-1/system.d" CACHE PATH "DBus config files directory")
set(STATE_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/ddm" CACHE PATH "State directory")
set(RUNTIME_DIR "${RUNTIME_DIR_DEFAULT}" CACHE PATH "Runtime data storage directory")
set(SESSION_COMMAND "${DATA_INSTALL_DIR}/scripts/Xsession" CACHE PATH "Script to execute when starting the X11 desktop session")
set(WAYLAND_SESSION_COMMAND "${DATA_INSTALL_DIR}/scripts/wayland-session" CACHE PATH "Script to execute when starting the Wayland desktop session")
set(CONFIG_FILE "${CMAKE_INSTALL_FULL_SYSCONFDIR}/ddm.conf" CACHE PATH "Path of the ddm config file")
set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/ddm.conf.d" CACHE PATH "Path of the ddm config directory")
set(ACCOUNTSSERVICE_DATA_DIR "/var/lib/AccountsService" CACHE PATH "Path of the accountsservice data directory")
set(SYSTEM_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/ddm/ddm.conf.d" CACHE PATH "Path of the system ddm config directory")
set(LOG_FILE "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/ddm.log" CACHE PATH "Path of the ddm log file")
set(DBUS_CONFIG_FILENAME "org.freedesktop.DisplayManager.conf" CACHE STRING "Name of the ddm config file")
set(COMPONENTS_TRANSLATION_DIR "${DATA_INSTALL_DIR}/translations" CACHE PATH "Components translations directory")
set(DDM_INITIAL_VT "1" CACHE STRING "Initial tty to use")
# Autodetect UID_MIN and UID_MAX from /etc/login.defs
if(NOT DEFINED LOGIN_DEFS_PATH)
set(LOGIN_DEFS_PATH "/etc/login.defs" CACHE PATH "Path to login.defs")
endif()
if(NOT EXISTS "${LOGIN_DEFS_PATH}" AND NOT DEFINED UID_MIN AND NOT DEFINED UID_MAX)
message(FATAL_ERROR "Could not find login.defs at ${LOGIN_DEFS_PATH}. Try -DLOGIN_DEFS_PATH.")
endif()
if(NOT DEFINED UID_MIN)
file(STRINGS "${LOGIN_DEFS_PATH}" UID_MIN LIMIT_COUNT 1 REGEX "^UID_MIN")
string(REGEX REPLACE "^UID_MIN[\t ]+([0-9]+)" "\\1" UID_MIN "${UID_MIN}")
if(NOT UID_MIN MATCHES "[0-9]+")
message(WARNING "Could not detect a valid UID_MIN (got '${UID_MIN}'). You should review your login.defs file.")
set(UID_MIN 1000)
else()
message(STATUS "Autodetected UID_MIN=${UID_MIN} from ${LOGIN_DEFS_PATH}")
endif()
endif()
if(NOT DEFINED UID_MAX)
file(STRINGS "${LOGIN_DEFS_PATH}" UID_MAX LIMIT_COUNT 1 REGEX "^UID_MAX")
string(REGEX REPLACE "^UID_MAX[\t ]+([0-9]+)" "\\1" UID_MAX "${UID_MAX}")
if(NOT UID_MAX MATCHES "[0-9]+")
message(WARNING "Could not detect a valid UID_MAX (got '${UID_MAX}'). You should review your login.defs file.")
set(UID_MAX 65000)
else()
message(STATUS "Autodetected UID_MAX=${UID_MAX} from ${LOGIN_DEFS_PATH}")
endif()
endif()
# Add subdirectories
add_subdirectory(data)
add_subdirectory(services)
add_subdirectory(src)
# Display feature summary
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
# CMAKE MODULE
include(CMakePackageConfigHelpers)
# Configure main config file
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/data/DDMConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/data/DDMConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DDM
PATH_VARS CMAKE_INSTALL_PREFIX
)
# Configure version file
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/data/DDMConfigVersion.cmake"
VERSION ${DDM_VERSION}
COMPATIBILITY SameMajorVersion
)
# Configure Common config file
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/data/CommonConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/data/CommonConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DDM
PATH_VARS CMAKE_INSTALL_PREFIX
)
# Install all config files
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/data/DDMConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/data/DDMConfigVersion.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/data/CommonConfig.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DDM
)