「Haskell パッケージガイドライン」の版間の差分
(ソースを翻訳して追加) |
(他言語へのリンクを追加) |
||
(同じ利用者による、間の6版が非表示) | |||
1行目: | 1行目: | ||
[[Category:パッケージ開発]] |
[[Category:パッケージ開発]] |
||
[[en:Haskell package guidelines]] |
[[en:Haskell package guidelines]] |
||
− | [[ |
+ | [[pt:Haskell package guidelines]] |
+ | [[zh-hans:Haskell package guidelines]] |
||
{{Package Guidelines}} |
{{Package Guidelines}} |
||
− | このドキュメント |
+ | このドキュメントは Arch で良い [[Haskell]] [[パッケージの作成|packages]] を作るための標準やガイドラインを網羅することを目的としています。 |
== パッケージの命名 == |
== パッケージの命名 == |
||
11行目: | 12行目: | ||
{{Note|パッケージ名はすべて小文字にする必要があります}} |
{{Note|パッケージ名はすべて小文字にする必要があります}} |
||
+ | |||
+ | == アーキテクチャ == |
||
+ | |||
+ | [[PKGBUILD#arch]] を参照してください。 |
||
+ | |||
+ | すべての Haskell ライブラリまたはプログラムはアーキテクチャに依存します。 |
||
== ソース == |
== ソース == |
||
22行目: | 29行目: | ||
_hkgname=stm-delay |
_hkgname=stm-delay |
||
− | == |
+ | == リビルドの順番 == |
+ | |||
+ | Haskell ライブラリがビルドフラグを変更したり更新された場合、依存するパッケージはすべてリビルドする必要があります。[https://github.com/felixonmars/archlinux-futils/blob/master/genrebuild genrebuild] ツールは、何がどのようにリビルドされる必要があるかを調べるために使用できます。使用例です。 |
||
+ | |||
+ | $ ./genrebuild -H haskell-basement |
||
+ | |||
+ | == arch-hs の使用方法 == |
||
+ | |||
+ | {{Pkg|arch-hs}} は {{ic|PKGBUILD}} の生成と保守を自動化するために提供されています。 |
||
+ | |||
+ | Hackage パッケージ(とパッケージ化されていない依存パッケージ)に対して一連の {{ic|PKGBUILD}} を生成するには。 |
||
+ | |||
+ | $ arch-hs -o /path/to/workdir library_name |
||
+ | |||
+ | 既存のパッケージを更新するために、依存関係やその他のパッケージング・メタデータを比較する。 |
||
+ | |||
+ | $ arch-hs-diff library_name old_version new_version |
||
+ | |||
+ | Arch [community] パッケージのバージョンと、それに対応する Hackage パッケージのバージョンを比較する。 |
||
+ | |||
+ | $ arch-hs-sync check |
||
+ | |||
+ | なお、{{ic|arch-hs}} は Hackage データベースの保守に {{Pkg|cabal-install}} を使用していますので、定期的に ''cabal-install'' データベースを更新し維持して下さい。 |
||
+ | |||
+ | $ cabal update |
||
+ | |||
+ | == PKGBUILD ライブラリの例 == |
||
+ | |||
+ | Haskell ライブラリのパッケージ化は Haskell プログラムのパッケージ化とは異なります。ArchLinux にパッケージ化されたライブラリは、パッケージ化された Haskell プログラムで使用されることを目的としています。 |
||
+ | |||
+ | {{hc|PKGBUILD|<nowiki> |
||
+ | # Maintainer: Your Name <youremail@domain.com> |
||
+ | _hkgname=stm-delay |
||
+ | pkgname=haskell-stm-delay |
||
+ | pkgver= |
||
+ | pkgrel=1 |
||
+ | license=() |
||
+ | 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") |
||
+ | sha256sums=() |
||
+ | |||
+ | 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 $MAKEFLAGS |
||
+ | 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" |
||
− | [https://github.com/magthe/cblrepo cblrepo] を使うことで [[Haskell#cabal-install|cabal]] ビルドファイルから Arch パッケージを自動的に作成することができます。基本的に、一つのパッケージ ([[PKGBUILD]]) に一つの {{ic|.cabal}} ファイルが存在するようにしてください。PKGBUILD は以下のように生成できます: |
||
+ | install -D -m744 unregister.sh "$pkgdir/usr/share/haskell/unregister/$pkgname.sh" |
||
− | $ cblrepo pkgbuild yesod |
||
+ | runhaskell Setup copy --destdir="$pkgdir" |
||
+ | install -D -m644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" |
||
+ | rm -f "${pkgdir}/usr/share/doc/${pkgname}/LICENSE" |
||
+ | } |
||
+ | </nowiki>}} |
2023年6月29日 (木) 21:43時点における最新版
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
このドキュメントは Arch で良い Haskell packages を作るための標準やガイドラインを網羅することを目的としています。
パッケージの命名
Haskell ライブラリには haskell-libraryname
を使用し、通常は hackage と同じ名前を使用します。
アーキテクチャ
PKGBUILD#arch を参照してください。
すべての Haskell ライブラリまたはプログラムはアーキテクチャに依存します。
ソース
Haskell のプログラムやライブラリのソースは、hackage が好ましいです。PKGBUILD#source にあります。source=()
配列は、以下の URL テンプレートを使用してください。
https://hackage.haskell.org/packages/archive/$_hkgname/$pkgver/$_hkgname-$pkgver.tar.gz
Haskell のパッケージは一般的に haskell- という接頭辞が付くため、hkgname
の代わりにカスタム変数 _hkgname
が使用されることに注意してください。この変数は一般的に以下のように定義することができます。
_hkgname=stm-delay
リビルドの順番
Haskell ライブラリがビルドフラグを変更したり更新された場合、依存するパッケージはすべてリビルドする必要があります。genrebuild ツールは、何がどのようにリビルドされる必要があるかを調べるために使用できます。使用例です。
$ ./genrebuild -H haskell-basement
arch-hs の使用方法
arch-hs は PKGBUILD
の生成と保守を自動化するために提供されています。
Hackage パッケージ(とパッケージ化されていない依存パッケージ)に対して一連の PKGBUILD
を生成するには。
$ arch-hs -o /path/to/workdir library_name
既存のパッケージを更新するために、依存関係やその他のパッケージング・メタデータを比較する。
$ arch-hs-diff library_name old_version new_version
Arch [community] パッケージのバージョンと、それに対応する Hackage パッケージのバージョンを比較する。
$ arch-hs-sync check
なお、arch-hs
は Hackage データベースの保守に cabal-install を使用していますので、定期的に cabal-install データベースを更新し維持して下さい。
$ cabal update
PKGBUILD ライブラリの例
Haskell ライブラリのパッケージ化は Haskell プログラムのパッケージ化とは異なります。ArchLinux にパッケージ化されたライブラリは、パッケージ化された Haskell プログラムで使用されることを目的としています。
PKGBUILD
# Maintainer: Your Name <youremail@domain.com> _hkgname=stm-delay pkgname=haskell-stm-delay pkgver= pkgrel=1 license=() 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") sha256sums=() 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 $MAKEFLAGS 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" }