いけむランド

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

charlock_holmes を bundle install するのに苦戦した

タイトルそのまんまです。

github.com

環境は以下の通り。

$ uname -rs
CYGWIN_NT-10.0 2.8.2(0.313/5/3)
$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-cygwin]

bundle install すると extension のコンパイルでコケます。

g++ -I. -I/usr/include/ruby-2.3.0 -I/usr/include/ruby-2.3.0/ruby/backward
-I/usr/include/ruby-2.3.0 -I. -DHAVE_UNICODE_UCNV_H     -ggdb -O2 -pipe    -o
transliterator.o -c transliterator.cpp
In file included from /usr/include/unicode/utypes.h:38:0,
                 from /usr/include/unicode/translit.h:15,
                 from transliterator.cpp:5:
/usr/include/unicode/umachine.h:347:13: error: 'char16_t' does not name a type
     typedef char16_t UChar;
             ^

char16_t は C++11 の機能であるため、g++ に -std=c++11 を渡さないといけないようです。 というわけで bundle config でオプションを設定する必要があります。(これを知るのにけっこう時間を食った。)

$ bundle config --local build.charlock_holmes --with-cxxflags=\"-std=c++11\"

bundle config の build.* は extconf.rb 内で with_config したものしか受け取れないのかと思ってました。

[追記] with_config してましたね。

$CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup