「Rust パッケージガイドライン」の版間の差分
(→ソース: 追加。英語版より。) |
(→パッケージ: 同期) |
||
41行目: | 41行目: | ||
Rust はバイナリを {{ic|target/release}} にビルドするので {{ic|/usr/bin}} にインストールします: |
Rust はバイナリを {{ic|target/release}} にビルドするので {{ic|/usr/bin}} にインストールします: |
||
− | + | package() { |
|
− | install - |
+ | install -Dm0755 -t "$pkgdir/usr/bin/" "target/release/$pkgname" |
− | + | } |
|
+ | |||
+ | パッケージが2つ以上の実行ファイルを {{ic|/usr/bin}} に持つ場合、find コマンドを使うことができます: |
||
− | パッケージによっては man ページなど他のファイルもインストールするので、{{ic|cargo}} を用いるのがよいでしょう: |
||
package() { |
package() { |
||
+ | find target/release \ |
||
− | cargo install --root "${pkgdir}"/usr --root "${srcdir}/${pkgname}-${pkgver}" |
||
+ | -maxdepth 1 \ |
||
+ | -executable \ |
||
+ | -type f \ |
||
+ | -exec install -Dm0755 -t "$pkgdir/usr/bin/" {} + |
||
} |
} |
||
+ | |||
+ | === {{ic|cargo install}} を使う際の注意点 === |
||
+ | |||
+ | 一部のパッケージは、man ページや他のアセットなどのより多くのファイルをインストールします。そのようなパッケージがそれらのファイルをインストールする方法が他にない場合、{{ic|cargo install}} を使うことができます。この場合、{{ic|cargo build}} を使ってパッケージがすでにビルドされていたとしても {{ic|cargo install}} は再ビルドを強制的に行うので、{{ic|build()}} は必須ではありません。{{ic|prepare()}} ステージはソースを予めフェッチしておくためにまだ使用できます: |
||
+ | |||
+ | package() { |
||
+ | cd "$pkgname-$pkgver" |
||
+ | export RUSTUP_TOOLCHAIN=stable |
||
+ | cargo install --no-track --frozen --all-features --root "$pkgdir/usr/" --path . |
||
+ | } |
||
+ | |||
+ | {{ic|--no-track}} 引数は常に使用する必要があります。さもないと、{{ic|cargo install}} は {{ic|/usr/.crates.toml}} や {{ic|/usr/.crates2.json}} などの不必要なファイルを作成してしまいます。 |
||
== パッケージの例 == |
== パッケージの例 == |
2022年6月29日 (水) 13:29時点における版
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
このドキュメントでは Rust の PKGBUILD を書く時の基準とガイドラインを説明しています。
パッケージの命名
Rust のプロジェクトをパッケージングする際は、基本的にパッケージ名は生成されるバイナリの名前と同じにするべきです。これはライブラリクレートをパッケージングする場合には当てはまらず、バイナリのクレートの場合にのみ当てはまることに注意してください。2つ以上のバイナリを生成するクレートの場合、上流のクレート名を使うのが通常適切です。いかなる場合でも、パッケージ名はすべて小文字である必要があります。
ソース
ほとんどの Rust プロジェクトは tarball、ソースアーカイブ(例: GitHub リリースのソースリンク)、その他の公開されているソースからビルドすることができます。あるいは、多くのプロジェクトが、cargo のための安定しているダウンロード URL スキームを提供する crates.io 上に公開されています。お望みならば、PKGBUILD#source で以下のテンプレートを使うことができます:
source=("$pkgname-$pkgver.tar.gz::https://static.crates.io/crates/$pkgname/$pkgname-$pkgver.crate")
ビルド
Rust パッケージのビルド:
build() { cargo build --release --locked }
説明:
--release
で cargo はリリースビルドをコンパイルします。--locked
で cargo はCargo.lock
ファイルを変更して依存関係を更新しなくなります。再現可能なビルド とするために必要です。
チェック
大抵の Rust プロジェクトではテストスイートを簡単に実行できるようになっています:
check() { cargo test --release --locked }
パッケージ
Rust はバイナリを target/release
にビルドするので /usr/bin
にインストールします:
package() { install -Dm0755 -t "$pkgdir/usr/bin/" "target/release/$pkgname" }
パッケージが2つ以上の実行ファイルを /usr/bin
に持つ場合、find コマンドを使うことができます:
package() { find target/release \ -maxdepth 1 \ -executable \ -type f \ -exec install -Dm0755 -t "$pkgdir/usr/bin/" {} + }
cargo install
を使う際の注意点
一部のパッケージは、man ページや他のアセットなどのより多くのファイルをインストールします。そのようなパッケージがそれらのファイルをインストールする方法が他にない場合、cargo install
を使うことができます。この場合、cargo build
を使ってパッケージがすでにビルドされていたとしても cargo install
は再ビルドを強制的に行うので、build()
は必須ではありません。prepare()
ステージはソースを予めフェッチしておくためにまだ使用できます:
package() { cd "$pkgname-$pkgver" export RUSTUP_TOOLCHAIN=stable cargo install --no-track --frozen --all-features --root "$pkgdir/usr/" --path . }
--no-track
引数は常に使用する必要があります。さもないと、cargo install
は /usr/.crates.toml
や /usr/.crates2.json
などの不必要なファイルを作成してしまいます。
パッケージの例
パッケージページの パッケージアクション > ソースファイル をクリックして、PKGBUILD を見ることができます。