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,
Fix #148; More robust feature detection by bf4 · Pull Request #156 · rmagick/rmagick · GitHub
but the enum types could be found.
変更履歴によれば、最新版のソースなら既に修正が入っているようだ。試しに、これを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更新の手順は前回と同様で、他の問題は何も発生しなかった。