Ruby Gem パッケージガイドライン
ナビゲーションに移動
検索に移動
パッケージ作成ガイドライン
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
Ruby で書かれたソフトウェアの PKGBUILD の書き方。
目次
パッケージの命名規則
ライブラリの場合は、ruby-$_name を使用します ($_name は上流のプロジェクト名です)。アプリケーションの場合は、プロジェクト名 (ruby- 接頭辞なし) を使用し、オプションで ruby-$_name を provides に追加します。
ビルドとテスト
Ruby パッケージは、ビルドに透過的な信頼チェーンを提供するため、上流のソースからビルドする必要があります。既存の Ruby パッケージのセットとの統合を確実にするために、ruby-rake または ruby-rspec を使用してテストを実行することが期待されます。
テンプレート
PKGBUILD
prepare() {
cd "${_name}-${pkgver}"
# update gemspec/Gemfile to allow newer version of the dependencies
sed --in-place --regexp-extended 's|~>|>=|g' "${_name}.gemspec"
}
build() {
cd "${_name}-${pkgver}"
local _gemdir="$(gem env gemdir)"
gem build "${_name}.gemspec"
gem install \
--local \
--verbose \
--ignore-dependencies \
--no-user-install \
--install-dir "tmp_install/${_gemdir}" \
--bindir "tmp_install/usr/bin" \
"${_name}-${pkgver}.gem"
# remove unrepreducible files
rm --force --recursive --verbose \
"tmp_install/${_gemdir}/cache/" \
"tmp_install/${_gemdir}/gems/${_name}-${pkgver}/vendor/" \
"tmp_install/${_gemdir}/doc/${_name}-${pkgver}/ri/ext/"
find "tmp_install/${_gemdir}/gems/" \
-type f \
\( \
-iname "*.o" -o \
-iname "*.c" -o \
-iname "*.so" -o \
-iname "*.time" -o \
-iname "gem.build_complete" -o \
-iname "Makefile" \
\) \
-delete
find "tmp_install/${_gemdir}/extensions/" \
-type f \
\( \
-iname "mkmf.log" -o \
-iname "gem_make.out" \
\) \
-delete
}
check() {
cd "${_name}-${pkgver}"
local _gemdir="$(gem env gemdir)"
GEM_HOME="tmp_install/${_gemdir}" rake test
}
package() {
cd "${_name}-${pkgver}"
cp --archive --verbose tmp_install/* "${pkgdir}"
install --verbose -D --mode=0644 LICENSE --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
install --verbose -D --mode=0644 *.md --target-directory "${pkgdir}/usr/share/doc/${pkgname}"
}
ヒントとテクニック
gem は "git ls-files" を使用して追加するファイルを派生しています
この場合、次の sed コマンドを prepare() 関数に追加できます。
# we don't build from a git checkout
sed --in-place --regexp-extended 's|git ls-files|find . -type f -not -path "*/\.git/*"|' "${_name}.gemspec"
上流のプロジェクトでは、テストの実行に "rspec" を使用している
この場合、check() 関数のコード行を次のように置き換えることができます。
GEM_HOME="tmp_install/${_gemdir}" rspec