「Rust パッケージガイドライン」の版間の差分
(→パッケージ: 同期) |
(→チェック: 同期) |
||
33行目: | 33行目: | ||
大抵の Rust プロジェクトではテストスイートを簡単に実行できるようになっています: |
大抵の Rust プロジェクトではテストスイートを簡単に実行できるようになっています: |
||
− | + | check() { |
|
+ | export RUSTUP_TOOLCHAIN=stable |
||
− | cargo test --release --locked |
||
+ | cargo test --frozen --all-features |
||
− | } |
||
+ | } |
||
+ | |||
+ | テストを実行する際は {{ic|--release}} フラグを使用することは避けてください。さもないと、バイナリが[https://doc.rust-lang.org/cargo/reference/profiles.html#bench ''bench'' プロファイル]により再コンパイルされ、{{ic|build()}} により生成されたバイナリを置き換えてしまいます。あるいは、{{ic|CARGO_TARGET_DIR}} に異なる値を使って {{ic|--release}} フラグを使用してください。しかし、release モードはコンパイラ最適化も有効化し、整数のオーバーフロー検査や {{ic|debug_assert!()}} マクロなどの一部の機能を無効化してしまうことに注意してください。なので、理論上、補足できる問題が少なくなってしまう''可能性''があります。どちらのアプローチでも、依存するクレートを再びコンパイルするので、合計のビルド時間が増えます。 |
||
== パッケージ == |
== パッケージ == |
2022年6月29日 (水) 13:40時点における版
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() { export RUSTUP_TOOLCHAIN=stable cargo test --frozen --all-features }
テストを実行する際は --release
フラグを使用することは避けてください。さもないと、バイナリがbench プロファイルにより再コンパイルされ、build()
により生成されたバイナリを置き換えてしまいます。あるいは、CARGO_TARGET_DIR
に異なる値を使って --release
フラグを使用してください。しかし、release モードはコンパイラ最適化も有効化し、整数のオーバーフロー検査や debug_assert!()
マクロなどの一部の機能を無効化してしまうことに注意してください。なので、理論上、補足できる問題が少なくなってしまう可能性があります。どちらのアプローチでも、依存するクレートを再びコンパイルするので、合計のビルド時間が増えます。
パッケージ
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 を見ることができます。