Skip to content

Commit b88d161

Browse files
committed
fix: export desktop to a invalid export path
1. The custom desktop exported directory(CUSTOM_DESKTOP_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 b88d161

2 files changed

Lines changed: 57 additions & 19 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#define LINGLONG_CLIENT_PATH "@CMAKE_INSTALL_FULL_BINDIR@/@LINGLONG_CLI_BIN@"
2424
#define LINGLONG_DESKTOP_EXPORT_PATH "@LINGLONG_DESKTOP_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: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,63 @@
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@"
1415
LINGLONG_DESKTOP_EXPORT_PATH="@LINGLONG_DESKTOP_EXPORT_PATH@"
1516

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

0 commit comments

Comments
 (0)