いけむランド

はてダからやってきました

ruby.cygport を読み解く

Cygwin 公式の Ruby が 2.6 が止まってる話を去年したのですが、一年経っていまだに orphaned なため、そろそろ Intent To Adopt (orphaned なパッケージのメンテナンスを引き取ること) に挑戦してみることにした。

fd0.hatenablog.jp

というわけで ruby.cygport を修正しつつ、その意図を理解しないといけない。

cygwin.com

なんとか 3.2.2 向けに修正した差分を gist にこの記事の最後に置いておく。

パッチ

適用している patch をどのように選んでいるか?だが、fedora に追加されたものは可能な限り適用しているように見える。

たしかにメジャーディストリビューションのもの (= より多くのユーザが適用したものを使用しているもの) だから、適用した方が無難な気はする。

適用されている patch はすべて Ruby Issue Tracking System に issue として挙げられているものだった。*1

そこで 2.6 以降の patch を全部 PATCH_URI に追加し、適用できなかったものを除いていくことにした。

バイナリパッケージ

成果物のバイナリパッケージは

  • ruby
  • ruby-devel
  • ruby-doc
  • ruby-tcltk

の 4 つだが、前の 3 つは他のディストリビューションでもよくある分け方であるし、最後のは obsolete であるため、そのままで良さそうと判断した。

コンテンツ

ダミールートにインストールしたもののから rdocrubygems といくつかの gem を削除していた。

rdocrubygems は別のパッケージにするためということはわかるが、net-telnet などはそもそも 3.2.2 ではインストールされないわけで、インストールされる gem の差は何処にあるのかを探してたら、gems/bundled_gems に列挙されていることがわかった。

これらは別途 gem コマンドでインストールするべきだから ruby のパッケージには同梱しないという意図だったようである。

その意図に沿うと did_you_mean は 2.6.4 の時点では bundled であったが、3.2.2 では default (標準添付ライブラリ) になってるため、削除対象ではないと判断した。

あとは cygport ruby.cygport install しては不要なファイルが残っていないかなどを 2.6.4 の中身と見比べては src_install() の処理をいじるというのを繰り返した。

cygwin.com

その他

  • ca-certificates は実際に依存しているのか?はまだわかってない。
  • make test は大昔から failed なため、今回はスルー。
  • did_you_meanraccは標準添付ライブラリに昇格?したため、今まで個別パッケージだったものは obsolete にする。(という方針で良いはず。)
  • /usr/bin/rubyw.exe はなくても良い気がする。(これを意図的に使いたい事例を知らない。)

差分

これで投げる予定。(上のような説明の英文を書かないと...。)

gist.github.com

*1:どの patch がその issue に対応するものであるかは https://src.fedoraproject.org/rpms/ruby/blob/rawhide/f/ruby.spec に記載されている。