From: Tadashi Saito Date: 2013-01-15T00:52:29+09:00 Subject: [ruby-dev:46864] Re: [ruby-trunk - Bug #7344] gem pristine bigdecimal が失敗してしまう 斎藤と申します。横から失礼します。 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) : > > 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