OSX10.10のRedmineを2.6.1に更新した

OSX 10.10 (Yosetmite)にて、Redmineを2.6.0から2.6.1に更新した。

環境

問題

  • Rmagickのインストールに失敗してしまう。

詳細

いつもの様にbundleで更新を試みるが、途中でRmagickのビルドエラーが発生してしまう。

$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
...
Installing rmagick (2.13.4) 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
...
compiling rmmain.c
rmmain.c:1724:28: error: use of undeclared identifier 'MagickSupport'
    features = rb_str_new2(MagickSupport);
                           ^
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/intern.h:760:27: note: expanded from macro 'rb_str_new_cstr'
    (__builtin_constant_p(str)) ?               \
                          ^
rmmain.c:1724:28: error: use of undeclared identifier 'MagickSupport'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/intern.h:761:14: note: expanded from macro 'rb_str_new_cstr'
        rb_str_new((str), (long)strlen(str)) :  \
                    ^
rmmain.c:1724:28: error: use of undeclared identifier 'MagickSupport'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/intern.h:762:18: note: expanded from macro 'rb_str_new_cstr'
        rb_str_new_cstr(str);                   \
                        ^
rmmain.c:1724:14: error: assigning to 'volatile VALUE' (aka 'volatile unsigned long') from incompatible type 'void'
    features = rb_str_new2(MagickSupport);
             ^
4 errors generated.
make: *** [rmmain.o] Error 1

Gem files will remain installed in /Users/rabbit2go/.bundler/tmp/43954/gems/rmagick-2.13.4 for inspection.
Results logged to /Users/rabbit2go/.bundler/tmp/43954/gems/rmagick-2.13.4/ext/RMagick/gem_make.out

An error occurred while installing rmagick (2.13.4), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.13.4'` succeeds before bundling.

原因

"undeclared identifier 'MagickSupport'"とは一体どういうことだろう?原因を調べたところ、Rmagickの問題として既に報告されていた。

Similarly, the almost functions(including GetMagickFeatures) could not be found,
but the enum types could be found.

Fix #148; More robust feature detection by bf4 · Pull Request #156 · rmagick/rmagick · GitHub

変更履歴によれば、最新版のソースなら既に修正が入っているようだ。試しに、これをcloneしてビルドしたものの、今度は別の問題が発生してしまい、更新出来る状態では無かった。仕方ないので、リリース済みの2.13.4のコードをcloneして取得してから、問題のrmmain.cへ下記の修正を加えた。

#if defined(HAVE_GETMAGICKFEATURES)
  // 6.5.7 - latest (7.0.0)
  features = rb_str_new2(GetMagickFeatures());
#elif defined(MagickFeatures)
  // 6.5.7 - latest (7.0.0)
  features = rb_str_new2(MagickFeatures);
#elif defined(MagickSuuport)
  // 6.5.5 - 6.5.6
  features = rb_str_new2(MagickSupport);
#else
  features = rb_str_new("unknown",7);
#endif

この後、gemを作成してインストールしたところ、無事に更新出来た。

$ cd rmagick/
$ gem build rmagick.gemspec
$ gem install --local rmagick-2.13.4.gem 
Building native extensions.  This could take a while...
Successfully installed rmagick-2.13.4
1 gem installed

この後のRedmine更新の手順は前回と同様で、他の問題は何も発生しなかった。