Ruby Gem パッケージガイドライン

提供: ArchWiki
2015年8月10日 (月) 13:14時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「Category:パッケージ開発 en:Ruby Gem package guidelines it:Ruby Gem Package Guidelines {{Package Guidelines}} Ruby で書かれたソフトウェ...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Ruby で書かれたソフトウェアの PKGBUILD の書き方。

パッケージの命名規則

ライブラリの場合、ruby-$gemname を使って下さい。アプリケーションの場合、プログラムの名前を使って下さい。どちらの場合でも名前は小文字である必要があります。

たとえ $gemnameruby が含まれている場合でも ruby- を最初に付けるようにしてください。後で gem の名前が短くなったときに困らないようにするためです。また、ツールによって簡単に名前を解析できるようにするためでもあります (PKGBUILD ジェネレータやバージョン・依存関係チェッカーなど)。例: ruby-ruby-protocol-buffersAUR.

バージョン付きパッケージ

If you need to add a versioned package then use ruby-$gemname-$version, e.g. ruby-builder-3.2.1. So rubygem dependency builder=3.2.1 will turn into ruby-builder-3.2.1 Arch package.

In case if you need to resolve "approximately greater" dependency ~> then package should use version without the last part, e.g. rubygem dependency builder~>3.2.1 will turn into ruby-builder-3.2. An exception for this rule is when "approximately greater" dependency matches the latest version of the gem - in this case avoid introducing a new versioned package and use just ruby-$gemname instead (the HEAD version).

Another problem with versioned packages is that it can conflict with other versions, e.g. because the packages install the same files in /usr/bin. One solution for this problem is that versioned packages should not install such files - only HEAD version package can do this.

サンプル

ruby-rethinkdbAUR ruby-json_pureAUR ruby-hpricot などを見て下さい。

ノート

Add --verbose to gem arguments to receive additional information in case of troubles.

ノート: Usage of --no-user-install gem argument is mandatory since latest Ruby versions (See FS#28681 for details).

配慮事項

Package contains reference to $pkgdir

たまにパッケージのビルド時に WARNING: Package contains reference to $pkgdir という警告が表示されることがあります。パッケージ化したファイルの中にパッケージをビルドしたディレクトリの絶対パスが含まれています。問題のファイルを探すために cd pkg && grep -R "$(pwd)" . を実行してください。ほとんどの場合、.../ext/Makefile 内にハードコードされたパスが原因です。

ノート: folder ext contains native extension code usually written in C. During the package installation rubygems generates a Makefile using mkmf library. Then make is called, it compiles a shared library and copies one to lib gem directory.

After gem install is over the Makefile is not needed anymore. In fact none of the files in ext is needed and it can be completely removed by adding rm -rf "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/ext" to package() function.

サンプル PKGBUILD

サンプル PKGBUILD は abs パッケージの /usr/share/pacman/PKGBUILD-rubygem.proto にあります。

自動化

The gem installation can be automated completely with the tool pacgemAUR which creates a temporary PKGBUILD, calls makepkg and namcap. The resulting package is then installed with sudo pacman.

There is also gem2archAUR tools which aid in automating the process of creating a ruby gem PKGBUILD. Make sure to manually check the PKGBUILD after generation.