跳到主要内容

kmpkg_from_github

从 GitHub 下载并提取项目源码,同时支持 install --head 构建模式。

该函数也可适配 Gitea 服务器,只需通过 GITHUB_HOST 选项指定 Gitea 服务地址即可。

用法

kmpkg_from_github(
OUT_SOURCE_PATH <SOURCE_PATH>
REPO <Microsoft/cpprestsdk>
[REF <v2.0.0>]
[SHA512 <45d0d7f8cc350...>]
[HEAD_REF <master>]
[PATCHES <patch1.patch> <patch2.patch>...]
[GITHUB_HOST <https://github.com>]
[AUTHORIZATION_TOKEN <${SECRET_FROM_FILE}>]
[FILE_DISAMBIGUATOR <N>]
[USE_TARBALL_API]
)

参数

OUT_SOURCE_PATH

指定用于存储提取后源码路径的输出变量。 按照惯例,应将该变量名设为 SOURCE_PATH

REPO

GitHub 平台上的组织/用户名称 + 仓库名称(格式:<组织/用户>/<仓库>)。

REF

稳定的 Git 提交引用(优先推荐使用标签/tag 或提交ID),其对应的源码内容不会变更。禁止将分支名作为该参数的值

对于无官方发布版本的仓库,可将此参数设为当前 master 分支最新提交的完整提交 ID。

若指定了 REF,则必须同时指定 SHA512 参数。

SHA512

需与归档文件(对应地址:https://github.com/${REPO}/archive/${REF}.tar.gz)匹配的 SHA512 哈希值。

获取该值最便捷的方式:先将此参数设为 0,然后尝试构建该端口;构建失败时的报错信息会包含文件完整的 SHA512 哈希值,直接复制该值回填到端口文件即可。

HEAD_REF

当以 --head 模式构建时,需要拉取的非稳定 Git 提交引用(优先推荐使用分支/branch)。

对于大多数项目,建议设为 master。所选分支需保证在所有支持的平台上始终可构建。

PATCHES

要应用到提取后源码上的补丁文件列表。 补丁文件的相对路径以当前端口目录为基准。

GITHUB_HOST

用于适配企业级 GitHub 实例的替代服务地址。

该字段需包含 URL 的协议、主机名和端口,且不能以斜杠 / 结尾。

AUTHORIZATION_TOKEN

通过 HTTP 请求头 Authorization 传递的令牌,格式为 token ${AUTHORIZATION_TOKEN}。 若 AUTHORIZATION_TOKEN细粒度访问令牌(fine-grained access token),则必须同时启用 USE_TARBALL_API 选项。

FILE_DISAMBIGUATOR

当 Git 引用未变更但 SHA512 哈希值发生变化时,用于唯一标识生成的文件名的令牌,避免文件名冲突。

USE_TARBALL_API

指定该选项后,kmpkg 会使用 GitHub REST API 文档中定义的 tarball 接口(参考:GitHub REST API)下载源码,而非默认的归档接口。

该选项未设为全局配置的原因是:tarball 接口返回的源码归档文件 SHA512 哈希值,与默认归档接口返回的文件哈希值不一致。

说明

REFHEAD_REF 至少需指定其中一个,建议同时提供两者

--head 模式构建时,该函数会导出 KMPKG_HEAD_VERSION 变量。

示例

源码

scripts/cmake/kmpkg_from_github.cmake