Ubuntu 16.04ではncurses 6.0のコンパイルに失敗する

Ubuntu 16.04はgccのバージョンがデフォルトで5.4なので、そのままncursesをコンパイルしようとすると以下のように怒られます。

In file included from ./curses.priv.h:325:0,
                 from ../ncurses/lib_gen.c:19:
_30507.c:843:15: error: expected ‘)’ before ‘int’
../include/curses.h:1631:56: note: in definition of macro ‘mouse_trafo’
 #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
                                                        ^
Makefile:962: ターゲット '../objects/lib_gen.o' のレシピで失敗しました
make[1]: *** [../objects/lib_gen.o] エラー 1

解決策はいろいろありますが、ncurses-6.0/ncurses/base/MKlib_gen.shを直接修正するのが美しいと思います。ネットに転がっているものとほぼ同じですが、ncurses-6.0-gcc5.patchというパッチを作っておきましたのでご自由にどうぞ。

github.com

cd ncurses/base/
patch < ncurses-6.0-gcc5.patch