[ruby-dev:46864] Re: [ruby-trunk - Bug #7344] gem pristine bigdecimal が失敗してしまう
From:
Tadashi Saito <tad.a.digger@...>
Date:
2013-01-14 15:52:29 UTC
List:
ruby-dev #46864
斎藤と申します。横から失礼します。
gem install bigdecimalが失敗する問題は、BigDecimalのgemに限らず、現状の他の
gemにも波及する問題である、という事を知っていただきたいです。
たとえば拙作ライブラリのgemは、1.9.3では何の問題もなくgem installできますが、
最新の2.0.0に同梱されているgemで試したところ、以下のように、bigdecimalの
ケースに酷似したエラーメッセージと共に、installが失敗します。
$ ruby-2.0.0 -v
ruby 2.0.0dev (2013-01-14 trunk 38812) [x86_64-linux]
$ gem-2.0.0 -v
2.0.0.preview3.1
$ gem-2.0.0 install decimal # gemの名前が似ているのはたまたまです ;)
Building native extensions. This could take a while...
ERROR: Error installing decimal:
ERROR: Failed to build gem native extension.
/home/tadashi/rubies/2.0.0/bin/ruby-2.0.0 extconf.rb
checking for RUBY_VERSION in version.h... no
checking for rb_big_div()... yes
checking for rb_big_modulo()... yes
checking for rb_bigzero_p()... yes
checking for rb_usascii_str_new()... yes
creating Makefile
make
compiling decimal.c
decimal.c: In function ‘divmod’:
decimal.c:1030:8: warning: unused variable ‘div_inum’ [-Wunused-variable]
decimal.c: In function ‘do_round’:
decimal.c:855:47: warning: ‘inum’ may be used uninitialized in this
function [-Wmaybe-uninitialized]
linking shared-object decimal.so
make install
/usr/bin/install -c -m 0755 decimal.so
/home/tadashi/rubies/2.0.0/lib/ruby/gems/2.0.0/gems/decimal-0.1.0/lib
installing default decimal libraries
/usr/bin/install: `./lib/decimal.rb' and
`/home/tadashi/rubies/2.0.0/lib/ruby/gems/2.0.0/gems/decimal-0.1.0/lib/decimal.rb'
are the same file
make: *** [/home/tadashi/rubies/2.0.0/lib/ruby/gems/2.0.0/gems/decimal-0.1.0/lib/decimal.rb]
Error 1
Gem files will remain installed in
/home/tadashi/rubies/2.0.0/lib/ruby/gems/2.0.0/gems/decimal-0.1.0 for
inspection.
Results logged to
/home/tadashi/rubies/2.0.0/lib/ruby/gems/2.0.0/gems/decimal-0.1.0/./gem_make.out
ログからは、makeによるビルドは(warningが出るものの)成功していますが、make installで
失敗しているのがお分かりいただけると思います。
これはたしかにgem作者がディレクトリ構成を変えれば回避できますが、逆に申し
上げると、現在installできるgemでも構成を変えない限り、2.0.0になった途端に(API・
コードに互換性はあっても)installできなくなる可能性があるということになります。
これがバグかどうか自分にははっきりしませんが、大きな非互換であるのは明らか
ではないでしょうか。
このようにインストールに失敗するgemがいくつあるのかも、実際にインストール
するか、構成をチェックしてみなければ分かりません。2.0リリース後に阿鼻叫喚する
特定のgem利用者が出るのは間違いないでしょう。またこのディレクトリの仕様変更に
よって、どんなメリットがあるのかも自分は分かりませんでした。
というわけでいちgem作者のお願いとして、
1. 2.0.0のリリースか、せめて直後のパッチリリースまでには、上記の振る舞いを元に
戻してインストールできるようにしてほしい
2. 戻せないのであれば、現行の全gemについて機械的に2.0.0readyであるかチェックし
gem作者に通知してほしい (というのはrubygems.orgの仕事になりそうですね)
というものを要望させていただきたいです。(ただ2は、かなりコストが高く感じます)
その他にも、
3. gem作者に、インストール不能になる非互換が発生する旨をアナウンスする
という選択肢もあるかもしれませんが、今まではアナウンスを見たことがないですし、
この時期から新しく出すのでは、すでに遅すぎるのではないかという気がしています。
ご検討をよろしくお願いいたします。
2013/1/14 hsbt (Hiroshi SHIBATA) <shibata.hiroshi@gmail.com>:
>
> Issue #7344 has been updated by hsbt (Hiroshi SHIBATA).
>
>
> io-console も同じなのにエラーが出ないのは何故と調べてみると、io-console は LOAD_PATH の下でビルドした後に、io というディレクトリを作成して、io/console.so と移動しているため、gnu install でエラーがでないようでした。
> ----------------------------------------
> Bug #7344: gem pristine bigdecimal が失敗してしまう
> https://bugs.ruby-lang.org/issues/7344#change-35401
>
> Author: hsbt (Hiroshi SHIBATA)
> Status: Feedback
> Priority: Normal
> Assignee: mrkn (Kenta Murata)
> Category: core
> Target version: 2.0.0
> ruby -v: ruby 2.0.0dev (2012-11-13) [x86_64-darwin12.2.1]
>
>
> gem pristine bigdecimal を実行すると以下のエラーが発生して落ちてしまいます。
>
> % gem pristine bigdecimal
> Restoring gems to pristine condition...
> Building native extensions. This could take a while...
> ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError)
> ERROR: Failed to build gem native extension.
>
> /Users/hsbt/.rbenv/versions/2.0.0-dev/bin/ruby extconf.rb
> checking for labs() in stdlib.h... yes
> checking for llabs() in stdlib.h... yes
> creating Makefile
>
> make
> compiling bigdecimal.c
> linking shared-object bigdecimal.bundle
>
> make install
> /usr/local/Cellar/coreutils/8.19/libexec/gnubin/install -c -m 0755 bigdecimal.bundle /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/gems/2.0.0/gems/bigdecimal-1.1.0/.
> /usr/local/Cellar/coreutils/8.19/libexec/gnubin/install: ‘bigdecimal.bundle’ and ‘/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/gems/2.0.0/gems/bigdecimal-1.1.0/./bigdecimal.bundle’ are the same file
> make: *** [install-so] Error 1
>
> 単独で実行している時は影響がないのですが、 OS アップデート時などに gem pristine --all を実行した時は b で必ず止まってしまうので困っています。
>
>
> --
> http://bugs.ruby-lang.org/
>
--
Tadashi Saito