许可证插入工具: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 项目,无需原生交叉编译;设备侧需提供python3或python
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. 兼容性与注意事项
-
设备侧需提供
python3或python,入口脚本会自动探测并提示缺失 -
注释与编码选项:
-
-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. 参考
-
OpenHarmony SDK 与 HNP 工具:
ohos-sdk/native/*、ohos-sdk/toolchains/hnpcli
欢迎大家加入鸿蒙PC社区