Files
MeowOS-For-R3P2/patch_v2/reader_app/tools/check_lgpl_release.sh
T
AskaEth 7c7d891570 feat: M6.44+M6.45 收编 — 真机 0.8.45 现场保全(reader章节/key_router按键路由/WiFi连接修复/ncm bench+IME修复)
脏工作区现场收编:devdocs/local/m6_44_45_dirty_tracked.patch(46 个已跟踪文本文件,
+3090/-585, 已对 M6.43 基线干净适配) + m6_44_45_untracked_src.tar.gz 中 patch_v2/ 下
13 个新增源文件, 合成单个提交, 内容与容器工作树(R3ProII/patch_v2)逐字节一致。

- reader 章节: 新增 core/rdchapter.{h,c} — TXT 章节规范解析器, 扫描 512KB 码位对齐段文件
  逐段流式识别标题行(行首缩进≤4/显示宽≤40/行内标点≤1 三重约束防误判), 输出标题+全书字符
  偏移+段号/段内偏移+阿拉伯章号(中文数字归一), 首章前内容归"卷首"; book/reader/rdenc/
  rdlayout/settings 接入章节跳转与进度锚点, 附 chapter_smoke/turn_repro/build_turn_repro.sh
- key_router 按键路由: 新增 meow_launcherd/key_router.{h,c} — launcher-UI 页物理键统一路由
  (P1 仅音量键), 把读取边沿+防抖+长按 held+ramp 推进从 5 个会话收敛为进程内单开;
  各页每圈 key_router_pump() 取防抖后边沿, 动作(调音量/光标导航)仍由调用页决定,
  保留 run_menu 的 meow_mode 分支; App 前台 volume_page 武装时边沿抑制;
  main_menu/now_playing/notif_center/settings_page/subpage 接入, 附 test_key_router_vol/test_np_keys
- WiFi 连接修复: meow_netmgrd connect 有界等待 wpa_state=COMPLETED(普通 10s/隐藏网络 15s,
  env 可调)修设置页连接无响应; list_networks/scan_results 的 \xNN 转义还原始字节, 修中文 SSID
  永不命中致新建同名 open 记录顶影; launcher netmgr_ipc 配读超时; 附 test_wifi_connect(桩
  wpa_cli 驱动 static wifi_connect_ex), test_netmgrd.sh 补用例; wifi_page 同步
- ncm bench: 新增 bench/lyric_sim.c、bench/plpage_sim.c, vol_sync_sim 与 ncm core/app 同步
- SDK IME 修复: shift 大小写、K_ENTER 只提交不关、阻塞 IME 循环喂 on_tick 不被遮挡、
  IME 打开 ~200ms TAP 冷却窗吞 stray-TAP; 附 sdk/test_ime_fix.c
- 同期: meow_audiod 音量异步 ACK 线程(代际防 fd/槽复用竞态)、watchdog 音量收编(首选 audiod
  权威, settings.conf 覆盖路径)、panel 文件搜索(F1-④)与蓝牙只读详情(F1-③)、各类 build 脚本同步

范围红线: third_party/legado-E-main 原开发者未跟踪, 本次不入库(保留 devdocs/local tar 参考);
二进制不入库(后续重编); devdocs/ 不入库。59 文件全部在 patch_v2/ 下, 无 third_party/devdocs。
验证: git apply --check 干净; 59 文件 md5 与容器 patch_v2 逐一比对 59/59 一致(含
key_router.c/rdchapter.c/meow_ui_ime.c/test_wifi_connect.c 抽查); 可执行位保守
(check_lgpl_release.sh 100755, build_turn_repro.sh 100644 与容器一致)。
2026-11-04 20:02:28 +08:00

104 lines
4.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# tools/check_lgpl_release.sh — 发布前合规校验闸(只读,不改任何产物)。
#
# 用法(在 reader_app 目录外也可):
# ./tools/check_lgpl_release.sh [--skip-net]
#
# 校验项(对齐 devdocs/plan/FUTURE_LIBMOBI.md §4-④ P0):
# 1) os.meow.reader.mpk 必含 resources/licenses/{NOTICE,GPL-3.0.txt,LGPL-3.0.txt,FTL.txt}
# 2) build_reader.sh 锁定的 libmobi commit 与 NOTICE「Locked version」一致(防锁定值漂移)
# 3) [联网] codeload tarball sha256 与 NOTICE 记录指纹一致(未记录则报告,属 P1 补强,不判失败)
# 4) [联网] 主仓 git ls-remote 公开可读(LGPL §4(d) 应用源码可达性)
#
# 退出码:0 = 通过;1 = 硬失败(缺许可证文件 / commit 漂移 / tarball 漂移 / 主仓不可达)。
set -u
cd "$(dirname "$0")/.." # 切到 reader_app 根(build_reader.sh/NOTICE/mpk 都在此)
SKIP_NET=0
[ "${1:-}" = "--skip-net" ] && SKIP_NET=1
MPK="os.meow.reader.mpk"
NOTICE="NOTICE"
BUILD="build_reader.sh"
LIC="resources/licenses"
MAIN_REPO="https://git.yeij.top/AskaEth/MeowOS-For-R3P2.git"
fail=0
say() { printf '%s\n' "$*"; }
hard() { printf 'FAIL %s\n' "$*"; fail=1; }
ok() { printf 'ok %s\n' "$*"; }
warn() { printf 'warn %s\n' "$*"; }
say "== 合规校验(reader_app) =="
# ---------- 1) 包内许可证文件 ----------
if [ ! -f "$MPK" ]; then
hard "找不到 $MPK —— 请先 ./build_reader.sh 再 ./pack_reader_mpk.sh"
else
for f in NOTICE GPL-3.0.txt LGPL-3.0.txt FTL.txt; do
if tar tzf "$MPK" 2>/dev/null | grep -qx "resources/licenses/$f"; then
ok "包内含 resources/licenses/$f"
else
hard "包内缺 resources/licenses/$f"
fi
done
fi
# ---------- 2) libmobi 锁定 commit 一致性 ----------
LM_URL="$(sed -n 's/^LM_URL="\([^"]*\)"/\1/p' "$BUILD" | head -1)"
LM_COMMIT="$(printf '%s' "$LM_URL" | sed 's#.*/##')"
NOTICE_COMMIT="$(sed -n 's/^[[:space:]]*\([0-9a-f]\{40\}\).*/\1/p' "$NOTICE" | head -1)"
if [ -z "$LM_COMMIT" ]; then
hard "build_reader.sh 未解析到 LM_URL 锁定 commit"
elif [ "$LM_COMMIT" != "$NOTICE_COMMIT" ]; then
hard "libmobi 锁定 commit 漂移:build=$LM_COMMIT NOTICE=$NOTICE_COMMIT"
else
ok "libmobi 锁定 commit 一致 ($LM_COMMIT)"
fi
# ---------- 3) [联网] tarball sha256 ----------
NOTICE_SHA="$(sed -n 's/^[[:space:]]*Tarball sha256[^:]*:[[:space:]]*\([0-9a-f]\{64\}\).*/\1/p' "$NOTICE" | head -1)"
LIVE_SHA=""
if [ "$SKIP_NET" = 1 ]; then
warn "跳过在线 tarball 校验 (--skip-net)"
if [ -n "$NOTICE_SHA" ]; then ok "NOTICE 已记录 tarball sha256 ($NOTICE_SHA)"; else warn "NOTICE 未记录 tarball sha256(P1 补强项)"; fi
else
if command -v curl >/dev/null 2>&1 && command -v sha256sum >/dev/null 2>&1 && [ -n "$LM_URL" ]; then
LIVE_SHA="$(curl -fsSL "$LM_URL" 2>/dev/null | sha256sum | awk '{print $1}')"
if [ -z "$LIVE_SHA" ]; then
warn "在线取 tarball 失败(网络不可用)—— 未校验 sha256"
elif [ -n "$NOTICE_SHA" ]; then
if [ "$LIVE_SHA" = "$NOTICE_SHA" ]; then ok "tarball sha256 与 NOTICE 一致 ($LIVE_SHA)"; else hard "tarball sha256 漂移:live=$LIVE_SHA NOTICE=$NOTICE_SHA"; fi
else
say "info tarball sha256=$LIVE_SHA (NOTICE 未记录指纹,属 P1 补强项,不判失败)"
fi
else
warn "无 curl/sha256sum 或未解析 LM_URL —— 跳过在线 tarball 校验"
fi
fi
# ---------- 4) [联网] 主仓公开可读 ----------
if [ "$SKIP_NET" = 1 ]; then
warn "跳过主仓可读性校验 (--skip-net)"
else
if command -v git >/dev/null 2>&1; then
if git ls-remote "$MAIN_REPO" HEAD >/dev/null 2>&1; then
ok "主仓公开可读 (git ls-remote HEAD)"
else
hard "主仓 git ls-remote 失败(LGPL §4(d) 应用源码可达性)"
fi
else
warn "无 git —— 跳过主仓可读性校验"
fi
fi
# ---------- 5) 合规清单 ----------
say "== 合规清单 =="
say "libmobi commit : ${LM_COMMIT:-?}"
say "libmobi tarball : ${LIVE_SHA:-${NOTICE_SHA:-未校验}}"
say "包内许可证 :"
if [ -f "$MPK" ]; then tar tzf "$MPK" 2>/dev/null | grep 'resources/licenses/' || true; fi
if [ "$fail" = 1 ]; then say "结果:FAIL"; exit 1; fi
say "结果:PASS"