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