PKGBUILD 中鲜为人知的变量

本文最后更新于 2024年8月16日 凌晨

背景

最近在打一个软件包 yade, 由于软件包东西比较多,打算按照 split package 的方式去写 PKGBUILD。 计划 pkgbase=yade, pkgname=(yade yade-cuda yade-doc)。在官方仓库中这是很常见的,只要先构建本体,然后构建文档就可以了。但是这个软件包比较坑的点在于:构建文档需要先安装本体,因为它需要用本体去处理一些文件。

但是,在通过 split package 的方式打包的时候,由于它们的 pkgname 不一致,导致我们没法通过下面的方式去调整 PATHLD_LIBRARY_PATH

1
2
export PATH=${PATH}:${pkgdir}/usr/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${pkgdir}/usr/lib

一种解决方案

一种临时的办法是在 build() 过程中先将本体安装到一个临时的目录,比如 $srcdir/tmproot, 然后用这个目录来调整 PATHLD_LIBRARY_PATH。(我最终是这样做的)。

另一种解决方案

不过还有另一种解决方案,可以使用 pkgdirbase 这个变量。在 /usr/bin/makepkg 中,它的定义是这样的:

1
pkgdirbase="$BUILDDIR/$pkgbase/pkg"

因此我们可以通过 ${pkgdirbase}/yade-cuda 访问到 yade-cudapackage() 完成之后的内容,对于 yade 也是一样,即可以

1
2
export PATH=${PATH}:${pkgdirbase}/yade/usr/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${pkgdirbase}/yade/usr/lib

结语

我最终还是选择了先将它安装到 ${srcdir} 下面的一个临时文件夹,而不是去用 ${pkgdirbase}(后者感觉技巧性太强,有点利用未定义行为的感觉)。
不过这提醒了我,后续可以去看看 makepkg 的源码,看看还有哪些有意思的变量可以在打包阶段用。


PKGBUILD 中鲜为人知的变量
https://blog.askk.cc/2024/08/15/extra-varaibles-in-PKGBUILD/
作者
sukanka
发布于
2024年8月15日
许可协议