Skip to content

Latest commit

 

History

History
61 lines (34 loc) · 3.59 KB

2023.12.28-rust-cbindgen-王尧勇.md

File metadata and controls

61 lines (34 loc) · 3.59 KB

rust-cbindgen

修包过程及遇到的麻烦

  • OBS 网站上创建新的包时,最方便的话应该可以直接 branch 一个已有的包再删除,这样个人空间中就有了一个 project,之后再创建包,修改 service 文件即可,不需要自己配置目标架构等。

  • git clone 仓库到本地

  • 通过 osc 下载文件到本地,注意用脚本去除文件名的前缀,直接写成 shell 脚本方便复用。

    #!/usr/bin/bash
    rm -f _service;
    for file in `ls`; do
        new_file=${file##*:};
        mv $file $new_file;
    done
  • osc build 尝试构建旧版本,报错,说无法解析 crates-ioustc 源。

    • 奇怪,明明 cargo_config 文件中将源修改为了本地的 vendor 目录,不应该尝试去下载。

    • 之后尝试 cargo build --offline 然而这样的话报错是直接找不到包,显然,cargo config 出现大问题。

    • spec 中将 CARGO_HONE 设置为了自定义的路径,其中有对 cargo 源设置为本地 vendor 路径的配置。打印了 $CARGO_HOME,发现环境变量设置没问题,然而实际构建中 cargo 参照的还是构建目录的 home 下的默认的 .cargo/config.toml 配置,其中默认配置了 ustc 源,而 osc 是不联网的,由此导致构建失败。

    • 所以就是说,之前的指定配置文件路径的方法已经不生效了,因此去查阅了最新的方法。

    • 原本的 cargo config 在构建时会被复制到 cargo_home/config,然后通过指定环境变量 $CARGO_HOME 到此路径来添加配置,结果是 cargo 无法识别到这个配置,而是去读取家目录的默认配置,导致试图联网去下载依赖 crates。在 spec 中将拷贝的目录改为 .cargo/config.toml 即可解决,且无需配置环境变量,因为 cargo 会优先使用项目路径下的配置。

  • 终于可以构建了,尝试将其中的 cbindgen 源代码替换为 v0.26.0 的版本,重新构建。

  • 出现了 vendor 中的一些包版本过低的问题,本想着自己手动一个个去下载新版的依赖包,想到 cargo vendor 可以直接将所需要的包下载到指定目录,十分方便。

  • 在本地顺利构建新版本的包。

  • 将修改同步到本地仓库,git add/commit/push,之后提交 PR。

提交 PR 时遇到的一些问题

提交时发现好多不规范的行为,感谢各位老师的指正。

  • spec 文件中的 change log 应当是在原有日志的基础上添加,而非替换,新的日志在上。

  • spec 中的改动记得同步修改上下文,例如我删去了一个目录的创建,那么之后有个对这个目录的操作命令,也应该删去,哪怕不会影响构建,但是报错信息会产生误导。

  • Cargo.lock 文件可以放入 vendor 中,便于以后他人的维护。

  • gitee 提交之前记得去 openEuler 官网 签署 cla,邮箱和 gitee 主邮箱一致。

  • 门禁的检查通过之后,还会有接口变更检查,这里的报错可以忽略,除非被要求提供详细的差异说明。

  • 可以在 oerv-team 的 对应 issue 下时不时写一些修包记录,之后也可以方便地整理到像本文一样的正式的修包记录中,也方便给大家看看进度。

  • pull request 只要不关闭,之后的提交都会被继续同步,不需要手动关闭 PR 再重新提交。(git 使用还是不够熟练😭)