linglong/CMakeLists.txt

169 lines
4.7 KiB
CMake

# 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.4.0
DESCRIPTION "a container based package manager for deepin"
HOMEPAGE_URL "https://github.com/linuxdeepin/linglong"
LANGUAGES CXX)
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
"crun"
CACHE STRING "The oci runtime which linglong use by default")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(PFL)
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 docopt
VERSION 0.6.1 # NOTE: Upstream cmake version doesn't match git tag, we need
# https://github.com/docopt/docopt.cpp/pull/102 in v0.6.3, but
# cmake version of v0.6.3 is 0.6.1.
GITHUB_REPOSITORY docopt/docopt.cpp
GIT_SHALLOW ON
GIT_TAG v0.6.3
EXCLUDE_FROM_ALL ON)
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")
endif()
set(linglong_EXTERNALS "ytj ytj::ytj" "http/client client")
# NOTE: UOS v20 do not have docopt packaged.
find_package(docopt 0.6.1 QUIET)
if(NOT docopt_FOUND)
# list(APPEND linglong_EXTERNALS "docopt.cpp docopt.cpp") # we use header only
add_library(docopt INTERFACE)
target_compile_definitions(docopt INTERFACE DOCOPT_HEADER_ONLY)
target_include_directories(docopt INTERFACE ./external/docopt.cpp)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake.external)
endif()
# 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()
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")
find_package(
Qt5
COMPONENTS Core Concurrent DBus Network WebSockets
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)
set(ytj_ENABLE_TESTING NO)
set(ytj_ENABLE_INSTALL NO)
pfl_init(AUTO)
add_subdirectory(tools/qdbusxml2cpp)
include(GNUInstallDirs)
pfl_add_libraries(
LIBS
ocppi
linglong
APPS
generators/00-id-mapping
generators/05-initialize
generators/20-devices
generators/30-user-home
generators/40-host-ipc
generators/90-legacy
ll-box
ll-builder
ll-cli
ll-package-manager
llpkg)
add_subdirectory(misc)