Haskell 打包準則

出自 Arch Linux 中文维基
Arch 打包準則

32 位CLRCMakeCrossDKMSEclipseElectronFontFree PascalGNOMEGoHaskellJavaKDEKernelLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

本文檔旨在涵蓋在Arch上創建優質 Haskell 軟件包 標準和準則。

在撰寫本文之前,請聯繫 User:Felixonmars

軟件包命名[編輯 | 編輯原始碼]

對於 Haskell 庫,使用 haskell-libraryname,通常與 hackage 相同。

注意: 軟件包名稱應完全小寫。

體系架構[編輯 | 編輯原始碼]

參見 PKGBUILD#arch

每個 Haskell 庫或程序都依賴於體系結構。

來源[編輯 | 編輯原始碼]

Haskell程序或庫的首選來源是 hackagePKGBUILD#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"
}