许可证插入工具:licins在OpenHarmony PC上的完整适配实战

许可证插入工具:licins在OpenHarmony PC上的完整适配实战

1. 概述

licins 是一个用于在源代码文件头部插入开源许可证文本的命令行工具,支持 Apache-2.0、BSD-2/3、GPL-2/3、LGPL-2/2.1/3、MIT、GFDL-1.2/1.3 等常见许可证,并支持自定义注释前缀、编码行、签名、shebang 前缀等选项。本文给出 licins 在 OpenHarmony PC(鸿蒙桌面)上的完整适配与打包实践,确保在终端环境直接可用。

2. 适配目标与约束

  • 目标:以 HNP 包形式交付,终端可执行 licins,并包含手册页、许可证原文和配置样例

  • 约束:licins 为纯 Python 项目,无需原生交叉编译;设备侧需提供 python3python

3. 项目结构

复制代码
licins/
├── licins/                 # Python 包
│   ├── __init__.py
│   ├── core.py             # 入口:main()
│   └── licenses/           # 各许可证模块
│       ├── apache.py bsd2.py bsd3.py mit.py ...
├── licins.py               # 兼容入口
├── doc/
│   ├── licins.1            # 手册页
│   └── licenses/           # 许可证原文
├── licins.conf             # 配置样例
├── README.md LICENSE CHANGELOG.md
└── build_ohos.sh hnp.json  # 适配新增

4. 构建系统设计

4.1 安装树(HNP)

复制代码
/data/service/hnp/licins.org/licins_1.1.1/
├── bin/
│   └── licins              # 启动器(探测python并运行licins.core)
├── lib/                    # Python包与脚本
│   ├── licins/             # 包与licenses模块
│   └── licins.py
├── share/
│   ├── man/man1/licins.1   # 手册页
│   ├── doc/licins/         # README/CHANGELOG/LICENSE
│   │   └── licenses/       # 许可证原文
│   └── licins/config/licins.conf
└── hnp.json                # 包元数据

4.2 构建脚本关键点

  • 目录创建与文件拷贝

  • 生成 bin/licins 启动器:

    • 优先使用 python3,回退 python

    • 设置 PYTHONPATH=${INSTALL_DIR}/lib

    • 执行 python -m licins.core "$@"

  • 打包输出:

    • HNP:licins.hnp

    • 归档:ohos_licins_1.1.1.tar.gz

5. 实施细节

5.1 构建脚本

HarmonyOSPC/build/code/licins/build_ohos.sh

复制代码
#!/bin/bash
set -e
LICINS_VER=1.1.1
LICINS_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/licins.org/licins_${LICINS_VER}
mkdir -p ${LICINS_INSTALL_HNP_PATH}/{bin,lib,share/man/man1,share/doc/licins/licenses,share/licins/config}
cp -r licins ${LICINS_INSTALL_HNP_PATH}/lib/
cp licins.py ${LICINS_INSTALL_HNP_PATH}/lib/
cp doc/licins.1 ${LICINS_INSTALL_HNP_PATH}/share/man/man1/
cp README.md LICENSE ${LICINS_INSTALL_HNP_PATH}/share/doc/licins/
cp CHANGELOG.md ${LICINS_INSTALL_HNP_PATH}/share/doc/licins/ 2>/dev/null || true
cp doc/licenses/* ${LICINS_INSTALL_HNP_PATH}/share/doc/licins/licenses/
cp licins.conf ${LICINS_INSTALL_HNP_PATH}/share/licins/config/
cp hnp.json ${LICINS_INSTALL_HNP_PATH}/
cat > ${LICINS_INSTALL_HNP_PATH}/bin/licins <<'EOF'
#!/bin/bash
PY=""
for C in "/usr/bin/python3" "/usr/local/bin/python3" "python3" "python"; do
  if command -v ${C} >/dev/null 2>&1; then PY=${C}; break; fi
done
if [ -z "${PY}" ]; then
  echo "Python not found. Install python3 and ensure it is in PATH." >&2
  exit 1
fi
SCRIPT_DIR=$(cd "$(dirname "$0")"; pwd)
INSTALL_DIR=$(dirname "${SCRIPT_DIR}")
export PYTHONPATH="${INSTALL_DIR}/lib:${PYTHONPATH}"
exec "${PY}" -m licins.core "$@"
EOF
chmod +x ${LICINS_INSTALL_HNP_PATH}/bin/licins
${HNP_TOOL} pack -i ${LICINS_INSTALL_HNP_PATH} -o ${ARCHIVE_PATH}/
tar -zvcf ${ARCHIVE_PATH}/ohos_licins_${LICINS_VER}.tar.gz -C ${LICINS_INSTALL_HNP_PATH}/.. licins_${LICINS_VER}

5.2 包元数据

HarmonyOSPC/build/code/licins/hnp.json

复制代码
{
  "type": "hnp-config",
  "name": "licins",
  "version": "1.1.1",
  "install": {}
}

6. 构建与验证

6.1 构建命令

复制代码
cd /Users/lijiajun/ohos-sdk/HarmonyOSPC/build
./build.sh --sdk /Users/lijiajun/ohos-sdk

成功后生成:

复制代码
output/licins.hnp
output/ohos_licins_1.1.1.tar.gz
hnp/data/service/hnp/licins.org/licins_1.1.1/

6.2 设备端结构检查

复制代码
ls -lh /data/service/hnp/licins.org/licins_1.1.1/bin/licins
ls -lh /data/service/hnp/licins.org/licins_1.1.1/share/man/man1/licins.1
ls -lh /data/service/hnp/licins.org/licins_1.1.1/share/doc/licins/licenses/

7. 使用示例(鸿蒙终端)

7.1 环境准备

复制代码
export PATH=/data/service/hnp/licins.org/licins_1.1.1/bin:$PATH
licins --help

7.2 基本用法

复制代码
# 查看支持的许可证
licins --list
​
# 插入 MIT 到 C 源文件(hash 注释风格)
licins -l mit -c '# ' src/main.c
​
# 设置版权名与年份并插入 Apache-2.0 到 Python 文件
licins -n 'Your Name' -y 2025 -l apache app.py
​
# 使用 C 风格注释起止插入 BSD-3 到 C 文件
licins -c '/* ' -C ' */' -l bsd3 src/lib.c
​
# 配置 shebang 前缀
licins -p '#!/bin/bash' -l mit scripts/build.sh

7.3 批量处理

复制代码
licins -l gpl3 -c '# ' src/*.py

8. 兼容性与注意事项

  • 设备侧需提供 python3python,入口脚本会自动探测并提示缺失

  • 注释与编码选项:

    • -c/-C:注释起止(如 #/* ... */

    • -e:添加编码行

    • -s:签名行

    • -p:首行前缀(shebang)

  • 持久化配置:~/.config/licins.conf;安装树提供样例:share/licins/config/licins.conf

9. 版本与变更

HarmonyOSPC/build/code/licins/CHANGELOG.md 新增:

复制代码
## [1.1.1] 2025-12-12
### Added
- HarmonyOS PC HNP packaging and build script
- README.OPENSOURCE for OpenHarmony usage

10. 参考

欢迎大家加入鸿蒙PC社区