Skip to content

Commit cafd919

Browse files
committed
fix: export desktop to a invalid export path
1. The custom desktop exported directory(CUSTOM_DATA_DIR) should only be in the share dir, not in the subdirectory; 2. LINGLONG_DATA_DIR should be exported; 3. need to update LINGLONG_EXPORT_VERSION to fix export.
1 parent 59fbf35 commit cafd919

4 files changed

Lines changed: 87 additions & 40 deletions

File tree

CMakeLists.txt

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,18 @@ set(GETTEXT_DOMAIN_NAME
5353
"linyaps"
5454
CACHE STRING "The name of gettext domain.")
5555
set(QT_VERSION_MAJOR CACHE STRING "The major version of qt.")
56-
set(LINGLONG_DESKTOP_EXPORT_PATH
57-
"share/applications"
58-
CACHE STRING "The path to export linglong desktop files.")
56+
set(LINGLONG_EXPORT_PATH
57+
"share"
58+
CACHE STRING
59+
"The path to export linglong config files, it must end with share.")
60+
61+
if(NOT LINGLONG_EXPORT_PATH MATCHES ".*share$")
62+
message(
63+
WARNING
64+
"LINGLONG_EXPORT_PATH '${LINGLONG_EXPORT_PATH}' must end with 'share'"
65+
)
66+
set(LINGLONG_EXPORT_PATH "share")
67+
endif()
5968

6069
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
6170
include(PFL)
@@ -173,16 +182,16 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
173182

174183
# build ll-build-utils only
175184
if(BUILD_LINGLONG_BUILDER_UTILS_IN_BOX)
176-
pfl_init(AUTO)
177-
pfl_add_libraries(
178-
LIBS
179-
api
180-
ocppi
181-
oci-cfg-generators
182-
APPS
183-
ll-builder-utils
184-
uab)
185-
return()
185+
pfl_init(AUTO)
186+
pfl_add_libraries(
187+
LIBS
188+
api
189+
ocppi
190+
oci-cfg-generators
191+
APPS
192+
ll-builder-utils
193+
uab)
194+
return()
186195
endif()
187196

188197
set(CMAKE_AUTOMOC ON)
@@ -275,7 +284,7 @@ pfl_add_libraries(
275284
ll-session-helper)
276285

277286
if(ENABLE_LINGLONG_APP_BUILDER_UTILS)
278-
add_subdirectory(apps/ll-builder-utils)
287+
add_subdirectory(apps/ll-builder-utils)
279288
endif()
280289

281290
add_subdirectory(misc)

libs/linglong/src/linglong/repo/ostree_repo.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2094,12 +2094,14 @@ OSTreeRepo::exportEntries(const std::filesystem::path &rootEntriesDir,
20942094
destination = rootEntriesDir / "lib/systemd/user";
20952095
}
20962096

2097+
auto desktopExportPath = std::string{LINGLONG_EXPORT_PATH} + "/applications";
2098+
20972099
if (path == "share/applications") {
2098-
if (strcmp(LINGLONG_DESKTOP_EXPORT_PATH, "share/applications") != 0) {
2100+
if (desktopExportPath != "share/applications") {
20992101
qInfo() << "destination update from " << destination.c_str() << " to "
2100-
<< QString::fromStdString(rootEntriesDir / LINGLONG_DESKTOP_EXPORT_PATH);
2102+
<< QString::fromStdString(rootEntriesDir / desktopExportPath);
21012103
}
2102-
destination = rootEntriesDir / LINGLONG_DESKTOP_EXPORT_PATH;
2104+
destination = rootEntriesDir / desktopExportPath;
21032105
}
21042106

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

libs/utils/src/linglong/utils/configure.h.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
#define LINGLONG_CONTAINER_INIT LINGLONG_LIBEXEC_DIR "/dumb-init"
2222
#define LINGLONG_CLIENT_NAME "@LINGLONG_CLI_BIN@"
2323
#define LINGLONG_CLIENT_PATH "@CMAKE_INSTALL_FULL_BINDIR@/@LINGLONG_CLI_BIN@"
24-
#define LINGLONG_DESKTOP_EXPORT_PATH "@LINGLONG_DESKTOP_EXPORT_PATH@"
24+
#define LINGLONG_EXPORT_PATH "@LINGLONG_EXPORT_PATH@"
2525

26-
#define LINGLONG_EXPORT_VERSION "1.0.0.1"
26+
#define LINGLONG_EXPORT_VERSION "1.0.0.2"
2727
// The package's locale domain.
2828
#define PACKAGE_LOCALE_DOMAIN "@GETTEXT_DOMAIN_NAME@"
2929

misc/lib/linglong/generate-xdg-data-dirs.sh

Lines changed: 55 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,60 @@
1010
# So we append the path to XDG_DATA_DIRS here like,
1111
# instead of prepending it like flatpak.
1212

13+
# --- 变量初始化和规范化 ---
1314
LINGLONG_ROOT="@LINGLONG_ROOT@"
14-
LINGLONG_DESKTOP_EXPORT_PATH="@LINGLONG_DESKTOP_EXPORT_PATH@"
15-
16-
LINGLONG_DATA_DIR=${LINGLONG_ROOT}/entries/share
17-
CUSTOM_DESKTOP_DATA_DIR=${LINGLONG_ROOT}/entries/${LINGLONG_DESKTOP_EXPORT_PATH}
18-
19-
if [ "$LINGLONG_DESKTOP_EXPORT_PATH" != "share/applications" ]; then
20-
# 检查XDG_DATA_DIRS是否包含CUSTOM_DESKTOP_DATA_DIR
21-
case ":$XDG_DATA_DIRS:" in
22-
*":${CUSTOM_DESKTOP_DATA_DIR}:"* | *":${CUSTOM_DESKTOP_DATA_DIR}/:"*) ;;
23-
*)
24-
XDG_DATA_DIRS=$(echo "$XDG_DATA_DIRS" | sed -E "s@(/usr/local/share/?)(:|$)@\1:$CUSTOM_DESKTOP_DATA_DIR\2@g")
25-
;;
26-
esac
27-
else
28-
case ":$XDG_DATA_DIRS:" in
29-
*":$LINGLONG_DATA_DIR:"* | *":$LINGLONG_DATA_DIR/:"*) : ;;
30-
*)
31-
XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share:/usr/share}:${LINGLONG_DATA_DIR}"
32-
;;
33-
esac
15+
LINGLONG_EXPORT_PATH="@LINGLONG_EXPORT_PATH@"
16+
17+
# 规范化 LINGLONG_DATA_DIR:移除末尾可能存在的斜杠
18+
LINGLONG_DATA_DIR="${LINGLONG_ROOT}/entries/share"
19+
LINGLONG_DATA_DIR=${LINGLONG_DATA_DIR%/}
20+
21+
# --- 辅助函数:安全地添加路径到 XDG_DATA_DIRS ---
22+
# 这个函数会检查路径是否已存在,如果不存在则添加。
23+
# 参数1: 要添加的路径 (path_to_add)
24+
# 参数2: 添加位置 ('start' 或 'end',默认为 'start')
25+
_add_path_to_xdg_data_dirs() {
26+
local path_to_add="${1%/}" # 确保要添加的路径没有末尾斜杠
27+
local position="${2:-start}" # 默认添加到开头
28+
29+
# 确保 XDG_DATA_DIRS 变量已定义,如果未定义则初始化为空字符串
30+
: "${XDG_DATA_DIRS:=}"
31+
32+
# 检查路径是否已存在于 XDG_DATA_DIRS 中
33+
# 在 XDG_DATA_DIRS 两端加上冒号,以确保精确匹配(无论路径在开头、中间还是结尾)
34+
if [[ ":${XDG_DATA_DIRS}:" == *":${path_to_add}:"* ]]; then
35+
# 路径已存在,不执行任何操作
36+
return 0
37+
fi
38+
39+
# 如果路径不存在,则根据指定位置添加
40+
if [[ -z "$XDG_DATA_DIRS" ]]; then
41+
# 如果 XDG_DATA_DIRS 当前为空,直接赋值
42+
XDG_DATA_DIRS="$path_to_add"
43+
elif [[ "$position" == "start" ]]; then
44+
# 添加到开头
45+
XDG_DATA_DIRS="$path_to_add:$XDG_DATA_DIRS"
46+
elif [[ "$position" == "end" ]]; then
47+
# 添加到末尾
48+
XDG_DATA_DIRS="$XDG_DATA_DIRS:$path_to_add"
49+
fi
50+
}
51+
52+
# 如果有自定义 LINGLONG_EXPORT_PATH(默认为 "share"),将自定义路径添加到 XDG_DATA_DIRS
53+
if [ "$LINGLONG_EXPORT_PATH" != "share" ]; then
54+
# 规范化 CUSTOM_DATA_DIR:移除末尾可能存在的斜杠
55+
CUSTOM_DATA_DIR="${LINGLONG_ROOT}/entries/${LINGLONG_EXPORT_PATH}"
56+
CUSTOM_DATA_DIR=${CUSTOM_DATA_DIR%/}
57+
_add_path_to_xdg_data_dirs "$CUSTOM_DATA_DIR" "start"
3458
fi
59+
60+
# 2. 处理 LINGLONG_DATA_DIR 的添加逻辑
61+
# 如果 XDG_DATA_DIRS 为空,则先设置为 /usr/local/share:/usr/share,
62+
# 然后再将 LINGLONG_DATA_DIR 添加到末尾。
63+
: "${XDG_DATA_DIRS:=/usr/local/share:/usr/share}"
64+
65+
# 然后,将 LINGLONG_DATA_DIR 添加到 XDG_DATA_DIRS 的末尾(如果不存在)
66+
_add_path_to_xdg_data_dirs "$LINGLONG_DATA_DIR" "end"
67+
68+
# --- 清理辅助函数 ---
69+
unset -f _add_path_to_xdg_data_dirs

0 commit comments

Comments
 (0)