「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 を見ることができます。