Haskell package guidelines (简体中文)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Arch 软件包准则
32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Font – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – Lisp – Meson – MinGW – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – Web – Wine
本文档旨在涵盖在Arch上创建优质 Haskell 软件包 标准和准则。
在撰写本文之前,请联系 User:Felixonmars
软件包命名
对于 Haskell 库,使用 haskell-libraryname
,通常与 hackage 相同。
注意: 软件包名称应完全小写。
体系架构
每个 Haskell 库或程序都依赖于体系结构。
来源
Haskell程序或库的首选来源是 hackage。PKGBUILD (简体中文)#source source=()
数组应使用以下 URL 模板:
https://hackage.haskell.org/packages/archive/$_hkgname/$pkgver/$_hkgname-$pkgver.tar.gz
请注意,因为 Haskell 软件包通常以 haskell- 为前缀,所以使用自定义 _hkgname 变量而不是 pkgname 。通常可以如下定义此变量:
_hkgname=stm-delay
重建顺序
当 Haskell 库更改时,它的构建标志或被更新,所有依赖包都需要重建。
PKGBUILD 库示例
打包 Haskell 库与打包 Haskell 程序不同,Arch Linux 中打包的库供打包的 Haskell 程序使用。
PKGBUILD
# Contributor: Your Name <youremail@domain.com> _hkgname=stm-delay pkgname=haskell-stm-delay arch=('x86_64') url="https://hackage.haskell.org/package/$hkgname" depends=(ghc-libs) makedepends=(ghc) source=("https://hackage.haskell.org/packages/archive/$_hkgname/$pkgver/$_hkgname-$pkgver.tar.gz") build() { cd $_hkgname-$pkgver runhaskell Setup configure -O --enable-shared --enable-executable-dynamic --disable-library-vanilla \ --prefix=/usr --docdir=/usr/share/doc/$pkgname --enable-tests \ --dynlibdir=/usr/lib --libsubdir=\$compiler/site-local/\$pkgid \ --ghc-option=-optl-Wl\,-z\,relro\,-z\,now \ --ghc-option='-pie' runhaskell Setup build runhaskell Setup register --gen-script runhaskell Setup unregister --gen-script sed -i -r -e "s|ghc-pkg.*update[^ ]* |&'--force' |" register.sh sed -i -r -e "s|ghc-pkg.*unregister[^ ]* |&'--force' |" unregister.sh } check() { cd $_hkgname-$pkgver runhaskell Setup test } package() { cd $_hkgname-$pkgver install -D -m744 register.sh "$pkgdir"/usr/share/haskell/register/$pkgname.sh install -D -m744 unregister.sh "$pkgdir"/usr/share/haskell/unregister/$pkgname.sh runhaskell Setup copy --destdir="$pkgdir" install -D -m644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" rm -f "${pkgdir}/usr/share/doc/${pkgname}/LICENSE" }