node-gypではまった

node-murmurhash3とかnode-kyteaのGYP対応をしていてはまったのでメモ。

node-gypが生成するMakefile等ではいくつかのオプションがデフォルトで付加される。その中に "-fno-exceptions" が含まれているため、C++ Addon で例外処理をしている場合に例外オブジェクトが未定義となりコンパイル時にエラーとなる。

そこで、以下のようオプション名に'!'を付加してデフォルトのオプションを打ち消す必要がある。

{
  'targets': [
    {
      'target_name': 'kytea',
      'sources': ['src/node_kytea.cc'],
      'cflags': ['-fexceptions'],
      'cflags_cc': ['-fexceptions'],
      'cflags!': ['-fno-exceptions'],
      'cflags_cc!': ['-fno-exception'],
      'libraries': ['-lkytea'],
      'conditions': [
        ['OS=="mac"', {
            'xcode_settings': {
              'GCC_ENABLE_CPP_EXCEPTIONS': 'YES'
            }
          }
        ]
      ]
    }
  ]
}