-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add the build scripts for linglong. Log: Add linglong build scripts.
- Loading branch information
Showing
6 changed files
with
3,888 additions
and
228 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#Qt | ||
*.user | ||
|
||
*.qm | ||
|
||
moc_*.cpp | ||
|
||
moc_*.h | ||
|
||
qrc_*.cpp | ||
|
||
ui_*.h | ||
|
||
#else | ||
*.autosave | ||
|
||
#linglong building dir | ||
linglong | ||
build |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
# SPDX-FileCopyrightText: 2023-2024 UnionTech Software Technology Co., Ltd. | ||
# | ||
# SPDX-License-Identifier: GPL-3.0-or-later | ||
|
||
#!/bin/bash | ||
set -e | ||
# 文件名 deb-source.bash | ||
# 包含要解压的deb目录 | ||
deb_dir=$(realpath "$1") | ||
# 将deb解压到输出目录 | ||
target=$(realpath "$2") | ||
# 默认会跳过base已安装的包,可以强制解压已安装的包 | ||
include="$3" | ||
# 临时目录,将内容处理后再移动到 target | ||
out_dir="$(mktemp -d)" | ||
cd "$out_dir" | ||
# 临时文件,用于记录deb文件列表 | ||
deb_list_file="$out_dir/deb.list" | ||
# 临时文件,用于记录强制安装的包名 | ||
include_list_file="$out_dir/include.packages.list" | ||
# 临时文件,用于记录跳过安装的包名 | ||
exclude_list_file="$out_dir/exclude.packages.list" | ||
# 包数据存放的临时目录 | ||
data_list_dir="$out_dir/data" | ||
# 生成文件列表 | ||
find "$deb_dir" -type f -name "*.deb" > "$deb_list_file" | ||
echo "$include" | tr ',' '\n' > "$include_list_file" | ||
# 用于记录安装的所有文件来自哪个包 | ||
mkdir /tmp/deb-source-file || true | ||
|
||
# 如果base和runtime已安装则跳过,旧版本base没有/packages.list文件就使用/var/lib/dpkg/status | ||
grep 'Package: ' /var/lib/dpkg/status > "$exclude_list_file" || true | ||
cat /packages.list /runtime/packages.list "$PREFIX/packages.list" >> "$exclude_list_file" || true | ||
# 在旧的base里面这些包需要强制安装,因为base中没有他们的dev包,如果dev包被安装到/opt目录,而lib包在/usr 会有问题 | ||
echo "libarchive13,libasan5,libasm1,libbabeltrace1,libcairo-script-interpreter2,libcc1-0,libcurl4,libdpkg-perl,libdw1,libevent-2.1-6,libgdbm-compat4,libgdbm6,libgirepository-1.0-1,libgles1,libgles2,libglib2.0-data,libgmpxx4ldbl,libgnutls-dane0,libgnutls-openssl27,libgnutlsxx28,libharfbuzz-gobject0,libharfbuzz-icu0,libipt2,libisl19,libitm1,libjsoncpp1,libldap-2.4-2,libldap-common,liblsan0,liblzo2-2,libmpc3,libmpdec2,libmpfr6,libmpx2,libncurses6,libnghttp2-14,libpcrecpp0v5,libperl5.28,libpopt0,libprocps7,libpython3-stdlib,libpython3.7,libpython3.7-minimal,libpython3.7-stdlib,libquadmath0,libreadline7,librhash0,librtmp1,libsasl2-2,libsasl2-modules-db,libssh2-1,libtiffxx5,libtsan0,libubsan1,libunbound8,libuv1" | tr ',' '\n' >> "$include_list_file" | ||
|
||
# 遍历文件列表 | ||
while IFS= read -r file | ||
do | ||
# 输出deb名,但不换行,便于在包名后面加skip | ||
echo -n "$file" | ||
# 提取control文件 | ||
control_file=$(ar -t "$file" | grep control.tar) | ||
ar -x "$file" "$control_file" | ||
# 获取包名 | ||
pkg=$(tar -xf "$control_file" ./control -O | grep '^Package:' | awk '{print $2}') | ||
rm "$control_file" | ||
# 如果在base和runtime中已安装,并且不包含在include列表则跳过安装 | ||
if grep -q "^Package: $pkg$" "$exclude_list_file" && ! grep -q "^$pkg$" "$include_list_file"; then | ||
echo " skip" | ||
echo "$file" >> /tmp/deb-source-file/skip.list | ||
else | ||
# 否则安装到$PREFIX目录 | ||
# 换行 | ||
echo "" | ||
# 查找data.tar文件,文件会因为压缩格式不同,有不同的后缀,例如data.tar.xz、data.tar.gz | ||
data_file=$(ar -t "$file" | grep data.tar) | ||
# 提取data.tar文件 | ||
ar -x "$file" "$data_file" | ||
# 解压data.tar文件到输出目录 | ||
mkdir "$data_list_dir" | ||
tar -xvf "$data_file" -C "$data_list_dir" >> "/tmp/deb-source-file/$(basename "$file").list" | ||
rm "$data_file" | ||
|
||
# 清理不需要复制的目录 | ||
rm -r "${data_list_dir:?}/usr/share/applications"* 2>/dev/null || true | ||
# 修改pc文件的prefix | ||
sed -i "s#/usr#$PREFIX#g" "$data_list_dir"/usr/lib/"$TRIPLET"/pkgconfig/*.pc 2>/dev/null|| true | ||
sed -i "s#/usr#$PREFIX#g" "$data_list_dir"/usr/share/pkgconfig/*.pc 2>/dev/null || true | ||
# 修改指向/lib的绝对路径的软链接 | ||
find "$data_list_dir" -type l | while IFS= read -r file; do | ||
linkTarget=$(readlink "$file") | ||
# 如果指向的路径以/lib开头,并且文件不存在,则添加 /runtime 前缀 | ||
# 部分 dev 包会创建 so 文件的绝对链接指向 /lib 目录下 | ||
if echo "$linkTarget" | grep -q ^/lib && ! [ -f "$linkTarget" ]; then | ||
ln -sf "$target$linkTarget" "$file" | ||
echo " FIX LINK" "$linkTarget" "=>" "$target$linkTarget" | ||
fi | ||
done | ||
# 修复动态库的RUNPATH | ||
find "$data_list_dir" -type f -exec file {} \; | grep 'shared object' | awk -F: '{print $1}' | while IFS= read -r file; do | ||
runpath=$(readelf -d "$file" | grep RUNPATH | awk '{print $NF}') | ||
# 如果RUNPATH使用绝对路径,则添加/runtime前缀 | ||
if echo "$runpath" | grep -q '^\[/'; then | ||
runpath=${runpath#[} | ||
runpath=${runpath%]} | ||
newRunpath=${runpath//usr\/lib/runtime\/lib} | ||
newRunpath=${newRunpath//usr/runtime} | ||
patchelf --set-rpath "$newRunpath" "$file" | ||
echo " FIX RUNPATH" "$file" "$runpath" "=>" "$newRunpath" | ||
fi | ||
done | ||
# 复制/lib,/bin,/usr目录 | ||
cp -rP "$data_list_dir/lib" "$target" 2>/dev/null|| true | ||
cp -rP "$data_list_dir/bin" "$target" 2>/dev/null|| true | ||
cp -rP "$data_list_dir"/usr/* "$target" || true | ||
rm -r "$data_list_dir" | ||
|
||
fi; | ||
done < "$deb_list_file" | ||
|
||
|
||
# 修复相对路径的软链接(dev包内的软连接尝试修复指向base) | ||
find "$target" -type l | while IFS= read -r file; do | ||
# 获取链接的绝对路径 | ||
linkTarget=$(readlink -m "$file") | ||
# 如果链接指向的文件不存在 | ||
if [ ! -e "$linkTarget" ]; then | ||
# 去掉前缀查看/lib下是否存在 | ||
linkTarget="${linkTarget#$target}" | ||
if [ -e "$linkTarget" ]; then | ||
ln -sf "$linkTarget" "$file" | ||
echo " FIX LINK" "$file" "=>" "$target$linkTarget" | ||
fi | ||
# 添加usr前缀查看/usr/lib下是否存在 | ||
linkTarget="/usr$target" | ||
if [ -e "$linkTarget" ]; then | ||
ln -sf "$target$linkTarget" "$file" | ||
echo " FIX LINK" "$file" "=>" "$target$linkTarget" | ||
fi | ||
fi | ||
done | ||
|
||
# 更新ld.so.cache | ||
if [ -n "$LINGLONG_LD_SO_CACHE" ]; then | ||
ldconfig -C "$LINGLONG_LD_SO_CACHE" | ||
fi | ||
|
||
# 清理临时目录 | ||
rm -r "$out_dir" |
Oops, something went wrong.