-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathCMakeLists.txt
250 lines (210 loc) · 6.66 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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
# 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(UAB_SPECIAL_INSTALL
OFF
CACHE BOOL "enable special installation of UAB")
if(${UAB_SPECIAL_INSTALL})
add_definitions(-DUAB_SPECIAL_INSTALL)
endif()
set(ENABLE_UAB
OFF
CACHE BOOL "enable building UAB")
set(ENABLE_LINGLONG_INSTALLER
OFF
CACHE BOOL "enable linglong installer")
set(ENABLE_TESTING
ON
CACHE BOOL "enable testing")
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_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")
if(ENABLE_TESTING)
include(CTest)
CPMFindPackage(
NAME googletest
GITHUB_REPOSITORY google/googletest
GIT_TAG v1.14.0
VERSION 1.12.1
OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt"
FIND_PACKAGE_ARGUMENTS "NAMES GTest"
GIT_SHALLOW ON
EXCLUDE_FROM_ALL ON)
endif()
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()
find_package(PkgConfig REQUIRED)
if(ENABLE_TESTING)
pkg_search_module(CRYPTO REQUIRED IMPORTED_TARGET libcrypto)
find_package(GTest REQUIRED)
# compatible with old gtest
if(NOT TARGET GTest::gmock)
message(STATUS "GTest::gmock not found, alias GTest::gtest")
add_library(GTest::gmock ALIAS GTest::GTest) # available since 3.5
endif()
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")
# FIXME: can not start container since the kernel does not support the
# CLONE_NEWUSER feature in the chroot environment, reference:
# https://man7.org/linux/man-pages/man2/unshare.2.html. so we skip font cache
# generator by LINGLONG_FONT_CACHE_GENERATOR, it can be removed when the above
# problem is solved.
set(ENABLE_FONT_CACHE_GENERATOR
OFF
CACHE BOOL "enable font cache generator")
if(ENABLE_FONT_CACHE_GENERATOR)
add_definitions(-DLINGLONG_FONT_CACHE_GENERATOR)
endif()
# 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)
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
oci-cfg-generators
APPS
ll-dialog
ll-box
ll-builder
ll-cli
ll-package-manager
llpkg
uab
ll-session-helper)
add_subdirectory(misc)
add_subdirectory(po)