-
Notifications
You must be signed in to change notification settings - Fork 45
/
CMakeLists.txt
209 lines (177 loc) · 5.56 KB
/
CMakeLists.txt
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
203
204
205
206
207
208
209
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: LGPL-3.0-or-later
cmake_minimum_required(VERSION 3.11.4)
project(
linglong
VERSION 1.6.1
DESCRIPTION "a container based application package manager for Linux desktop"
HOMEPAGE_URL "https://github.com/OpenAtom-Linyaps/linyaps"
LANGUAGES CXX)
set(LINGLONG_VERSION
""
CACHE STRING "The version of linglong project.")
if(NOT ("${LINGLONG_VERSION}" STREQUAL ""))
message(STATUS "Project version has been overridden to ${LINGLONG_VERSION}")
set(PROJECT_VERSION ${LINGLONG_VERSION})
endif()
set(ENABLE_UAB
OFF
CACHE BOOL "enable building UAB")
set(ENABLE_LINGLONG_INSTALLER
OFF
CACHE BOOL "enable linglong installer")
set(LINGLONG_USERNAME
"deepin-linglong"
CACHE STRING "The username for linglong package manager")
set(LINGLONG_ROOT
"/var/lib/linglong"
CACHE STRING "The location where linglong related program puts their data")
set(LINGLONG_HOST_PATH
"/run/host"
CACHE STRING "The location where linglong host path mapping")
set(LINGLONG_DEFAULT_OCI_RUNTIME
"ll-box"
CACHE STRING "The oci runtime which linglong use by default")
set(LINGLONG_CLI_BIN
"ll-cli"
CACHE STRING "The client of package management.")
set(GETTEXT_DOMAIN_NAME
"linyaps"
CACHE STRING "The name of gettext domain.")
set(QT_VERSION_MAJOR
5
CACHE STRING "The major version of qt.")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(PFL)
if(${QT_VERSION_MAJOR} EQUAL 6)
include(Qt6DBusMacro)
endif()
set(ENABLE_CPM YES)
if(CMAKE_VERSION VERSION_LESS "3.14")
set(ENABLE_CPM NO)
message(
STATUS "cmake version ${CMAKE_VERSION} not compatible with CPM.cmake.")
endif()
if(CPM_LOCAL_PACKAGES_ONLY)
set(ENABLE_CPM NO)
endif()
if(ENABLE_CPM)
include(CPM)
CPMFindPackage(
NAME tl-expected
VERSION 1.0.0 # NOTE: Upstream cmake version doesn't match git tag, we need
# https://github.com/TartanLlama/expected/pull/62 in v1.1.0,
# but cmake version of v1.1.0 is 1.0.0.
GITHUB_REPOSITORY TartanLlama/expected
GIT_TAG v1.1.0
GIT_SHALLOW ON
OPTIONS "EXPECTED_BUILD_TESTS OFF"
EXCLUDE_FROM_ALL ON)
CPMFindPackage(
NAME yaml-cpp
VERSION 0.6.2
GITHUB_REPOSITORY jbeder/yaml-cpp
GIT_TAG 0.8.0 # NOTE: When use this project with CPM.cmake(FetchContent), we
# need https://github.com/jbeder/yaml-cpp/pull/583 in v0.8.0
EXCLUDE_FROM_ALL ON
OPTIONS "YAML_CPP_INSTALL ON" "YAML_CPP_BUILD_TESTS OFF")
CPMFindPackage(
NAME nlohmann_json
VERSION 3.5.0
URL "https://github.com/nlohmann/json/archive/refs/tags/v3.5.0.tar.gz"
EXCLUDE_FROM_ALL ON
OPTIONS "JSON_BuildTests OFF")
CPMFindPackage(
NAME CLI11
VERSION 2.4.1
GITHUB_REPOSITORY CLIUtils/CLI11
GIT_TAG v2.4.1
EXCLUDE_FROM_ALL ON
OPTIONS "CLI11_BUILD_TESTS OFF")
endif()
set(linglong_EXTERNALS "ytj ytj::ytj")
# NOTE: UOS v20 do not have tl-expected packaged.
find_package(tl-expected 1.0.0 QUIET)
if(NOT tl-expected_FOUND)
# list(APPEND linglong_EXTERNALS tl-expected) # tl-expected requires 3.14
add_library(tl-expected INTERFACE)
add_library(tl::expected ALIAS tl-expected)
target_include_directories(tl-expected
INTERFACE ./external/tl-expected/include)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake.external)
endif()
find_package(nlohmann_json 3.5.0 QUIET)
if(NOT nlohmann_json_FOUND)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake.fix)
find_package(nlohmann_json 3.5.0 REQUIRED)
endif()
# NOTE: UOS v20 do not have cli11 packaged.
find_package(CLI11 2.4.1 QUIET)
if(NOT CLI11_FOUND)
list(APPEND linglong_EXTERNALS "CLI11 CLI11::CLI11")
endif()
function(get_real_target_name output target)
get_target_property("${output}" "${target}" ALIASED_TARGET)
if("${output}" STREQUAL "")
set("${output}" "${target}")
endif()
set("${output}"
${${output}}
PARENT_SCOPE)
endfunction()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# NOTE(black_desk): Qt keywords conflict with glib.
add_definitions("-DQT_NO_KEYWORDS")
# NOTE(black_desk): Enable Qt logging with context.
add_definitions("-DQT_MESSAGELOGCONTEXT")
# We need to support both Qt5 and Qt6, and according to the Qt documentation, we
# should be using versioned targets and functions. These varible must be set
# before find_package()
# https://doc.qt.io/qt-6/cmake-qt5-and-qt6-compatibility.html#recommended-practices
set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR})
set(QT_NO_CREATE_VERSIONLESS_FUNCTIONS ON)
set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
find_package(
Qt${QT_VERSION_MAJOR}
COMPONENTS Core DBus
REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_search_module(glib2 REQUIRED IMPORTED_TARGET glib-2.0)
pkg_search_module(ostree1 REQUIRED IMPORTED_TARGET ostree-1)
pkg_search_module(systemd REQUIRED IMPORTED_TARGET libsystemd)
pkg_search_module(ELF REQUIRED IMPORTED_TARGET libelf)
set(ytj_ENABLE_TESTING NO)
set(ytj_ENABLE_INSTALL NO)
pfl_init(AUTO)
add_subdirectory(external/http)
add_subdirectory(tools/qdbusxml2cpp)
include(GNUInstallDirs)
pfl_add_libraries(
LIBS
api
dbus-api
utils
ocppi
linglong
APPS
generators/00-id-mapping
generators/05-initialize
generators/20-devices
generators/25-host-env
generators/30-user-home
generators/40-host-ipc
generators/90-legacy
ll-box
ll-builder
ll-cli
ll-package-manager
llpkg
uab
ll-session-helper)
add_subdirectory(misc)
add_subdirectory(po)