Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 23 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,18 @@ set(GETTEXT_DOMAIN_NAME
"linyaps"
CACHE STRING "The name of gettext domain.")
set(QT_VERSION_MAJOR CACHE STRING "The major version of qt.")
set(LINGLONG_DESKTOP_EXPORT_PATH
"share/applications"
CACHE STRING "The path to export linglong desktop files.")
set(LINGLONG_EXPORT_PATH
"share"
CACHE STRING
"The path to export linglong config files, it must end with share.")

if(NOT LINGLONG_EXPORT_PATH MATCHES ".*share$")
message(
WARNING
"LINGLONG_EXPORT_PATH '${LINGLONG_EXPORT_PATH}' must end with 'share'"
)
set(LINGLONG_EXPORT_PATH "share")
endif()

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(PFL)
Expand Down Expand Up @@ -173,16 +182,16 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)

# build ll-build-utils only
if(BUILD_LINGLONG_BUILDER_UTILS_IN_BOX)
pfl_init(AUTO)
pfl_add_libraries(
LIBS
api
ocppi
oci-cfg-generators
APPS
ll-builder-utils
uab)
return()
pfl_init(AUTO)
pfl_add_libraries(
LIBS
api
ocppi
oci-cfg-generators
APPS
ll-builder-utils
uab)
return()
endif()

set(CMAKE_AUTOMOC ON)
Expand Down Expand Up @@ -275,7 +284,7 @@ pfl_add_libraries(
ll-session-helper)

if(ENABLE_LINGLONG_APP_BUILDER_UTILS)
add_subdirectory(apps/ll-builder-utils)
add_subdirectory(apps/ll-builder-utils)
endif()

add_subdirectory(misc)
Expand Down
13 changes: 8 additions & 5 deletions libs/linglong/src/linglong/repo/ostree_repo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2094,12 +2094,14 @@ OSTreeRepo::exportEntries(const std::filesystem::path &rootEntriesDir,
destination = rootEntriesDir / "lib/systemd/user";
}

auto desktopExportPath = std::string{ LINGLONG_EXPORT_PATH } + "/applications";

if (path == "share/applications") {
if (strcmp(LINGLONG_DESKTOP_EXPORT_PATH, "share/applications") != 0) {
if (desktopExportPath != "share/applications") {
qInfo() << "destination update from " << destination.c_str() << " to "
<< QString::fromStdString(rootEntriesDir / LINGLONG_DESKTOP_EXPORT_PATH);
<< QString::fromStdString(rootEntriesDir / desktopExportPath);
}
destination = rootEntriesDir / LINGLONG_DESKTOP_EXPORT_PATH;
destination = rootEntriesDir / desktopExportPath;
}

// 检查源目录是否存在,跳过不存在的目录
Expand Down Expand Up @@ -2199,8 +2201,9 @@ void OSTreeRepo::updateSharedInfo() noexcept
{
auto defaultApplicationDir = QDir(this->repoDir.absoluteFilePath("entries/share/applications"));
// 自定义desktop安装路径
QDir customApplicationDir = QDir(
this->repoDir.absoluteFilePath(QString{ "entries/%1" }.arg(LINGLONG_DESKTOP_EXPORT_PATH)));
auto desktopExportPath = std::string{ LINGLONG_EXPORT_PATH } + "/applications";
QDir customApplicationDir =
QDir(this->repoDir.absoluteFilePath(QString{ "entries/%1" }.arg(desktopExportPath.c_str())));
auto mimeDataDir = QDir(this->repoDir.absoluteFilePath("entries/share/mime"));
auto glibSchemasDir = QDir(this->repoDir.absoluteFilePath("entries/share/glib-2.0/schemas"));

Expand Down
4 changes: 2 additions & 2 deletions libs/utils/src/linglong/utils/configure.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
#define LINGLONG_CONTAINER_INIT LINGLONG_LIBEXEC_DIR "/dumb-init"
#define LINGLONG_CLIENT_NAME "@LINGLONG_CLI_BIN@"
#define LINGLONG_CLIENT_PATH "@CMAKE_INSTALL_FULL_BINDIR@/@LINGLONG_CLI_BIN@"
#define LINGLONG_DESKTOP_EXPORT_PATH "@LINGLONG_DESKTOP_EXPORT_PATH@"
#define LINGLONG_EXPORT_PATH "@LINGLONG_EXPORT_PATH@"

#define LINGLONG_EXPORT_VERSION "1.0.0.1"
#define LINGLONG_EXPORT_VERSION "1.0.0.2"
// The package's locale domain.
#define PACKAGE_LOCALE_DOMAIN "@GETTEXT_DOMAIN_NAME@"

Expand Down
75 changes: 55 additions & 20 deletions misc/lib/linglong/generate-xdg-data-dirs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,60 @@
# So we append the path to XDG_DATA_DIRS here like,
# instead of prepending it like flatpak.

# --- 变量初始化和规范化 ---
LINGLONG_ROOT="@LINGLONG_ROOT@"
LINGLONG_DESKTOP_EXPORT_PATH="@LINGLONG_DESKTOP_EXPORT_PATH@"

LINGLONG_DATA_DIR=${LINGLONG_ROOT}/entries/share
CUSTOM_DESKTOP_DATA_DIR=${LINGLONG_ROOT}/entries/${LINGLONG_DESKTOP_EXPORT_PATH}

if [ "$LINGLONG_DESKTOP_EXPORT_PATH" != "share/applications" ]; then
# 检查XDG_DATA_DIRS是否包含CUSTOM_DESKTOP_DATA_DIR
case ":$XDG_DATA_DIRS:" in
*":${CUSTOM_DESKTOP_DATA_DIR}:"* | *":${CUSTOM_DESKTOP_DATA_DIR}/:"*) ;;
*)
XDG_DATA_DIRS=$(echo "$XDG_DATA_DIRS" | sed -E "s@(/usr/local/share/?)(:|$)@\1:$CUSTOM_DESKTOP_DATA_DIR\2@g")
;;
esac
else
case ":$XDG_DATA_DIRS:" in
*":$LINGLONG_DATA_DIR:"* | *":$LINGLONG_DATA_DIR/:"*) : ;;
*)
XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share:/usr/share}:${LINGLONG_DATA_DIR}"
;;
esac
LINGLONG_EXPORT_PATH="@LINGLONG_EXPORT_PATH@"

# 规范化 LINGLONG_DATA_DIR:移除末尾可能存在的斜杠
LINGLONG_DATA_DIR="${LINGLONG_ROOT}/entries/share"
LINGLONG_DATA_DIR=${LINGLONG_DATA_DIR%/}

# --- 辅助函数:安全地添加路径到 XDG_DATA_DIRS ---
# 这个函数会检查路径是否已存在,如果不存在则添加。
# 参数1: 要添加的路径 (path_to_add)
# 参数2: 添加位置 ('start' 或 'end',默认为 'start')
_add_path_to_xdg_data_dirs() {
local path_to_add="${1%/}" # 确保要添加的路径没有末尾斜杠
local position="${2:-start}" # 默认添加到开头

# 确保 XDG_DATA_DIRS 变量已定义,如果未定义则初始化为空字符串
: "${XDG_DATA_DIRS:=}"

# 检查路径是否已存在于 XDG_DATA_DIRS 中
# 在 XDG_DATA_DIRS 两端加上冒号,以确保精确匹配(无论路径在开头、中间还是结尾)
if [[ ":${XDG_DATA_DIRS}:" == *":${path_to_add}:"* ]]; then
# 路径已存在,不执行任何操作
return 0
fi

# 如果路径不存在,则根据指定位置添加
if [[ -z "$XDG_DATA_DIRS" ]]; then
# 如果 XDG_DATA_DIRS 当前为空,直接赋值
XDG_DATA_DIRS="$path_to_add"
elif [[ "$position" == "start" ]]; then
# 添加到开头
XDG_DATA_DIRS="$path_to_add:$XDG_DATA_DIRS"
elif [[ "$position" == "end" ]]; then
# 添加到末尾
XDG_DATA_DIRS="$XDG_DATA_DIRS:$path_to_add"
fi
}

# 如果有自定义 LINGLONG_EXPORT_PATH(默认为 "share"),将自定义路径添加到 XDG_DATA_DIRS
if [ "$LINGLONG_EXPORT_PATH" != "share" ]; then
# 规范化 CUSTOM_DATA_DIR:移除末尾可能存在的斜杠
CUSTOM_DATA_DIR="${LINGLONG_ROOT}/entries/${LINGLONG_EXPORT_PATH}"
CUSTOM_DATA_DIR=${CUSTOM_DATA_DIR%/}
_add_path_to_xdg_data_dirs "$CUSTOM_DATA_DIR" "start"
fi

# 2. 处理 LINGLONG_DATA_DIR 的添加逻辑
# 如果 XDG_DATA_DIRS 为空,则先设置为 /usr/local/share:/usr/share,
# 然后再将 LINGLONG_DATA_DIR 添加到末尾。
: "${XDG_DATA_DIRS:=/usr/local/share:/usr/share}"

# 然后,将 LINGLONG_DATA_DIR 添加到 XDG_DATA_DIRS 的末尾(如果不存在)
_add_path_to_xdg_data_dirs "$LINGLONG_DATA_DIR" "end"

# --- 清理辅助函数 ---
unset -f _add_path_to_xdg_data_dirs