LuaSDL2: ビルドできない件

LuaSDL2とはLuaでSDL2を利用するためのライブラリであるが, gitからcloneしてビルドしようとするとうまく行かない.

問題

/home/hoge/tmp/luasdl2/src/window.c: In function ‘hitTestCallback’:
/home/hoge/tmp/luasdl2/src/window.c:915:2: warning: implicit declaration of function ‘lua_geti’ [-Wimplicit-function-declaration]
  lua_geti(cd->L, LUA_REGISTRYINDEX, cd->ref);
  ^
/home/hoge/tmp/luasdl2/src/window.c: In function ‘l_window_setHitTest’:
/home/hoge/tmp/luasdl2/src/window.c:950:10: error: void value not ignored as it ought to be
  if ((ut = lua_getuservalue(L, 1)) == LUA_TUSERDATA) {
          ^
/home/hoge/tmp/luasdl2/src/window.c:947:6: warning: variable ‘ut’ set but not used [-Wunused-but-set-variable]
  int ut;
      ^
CMakeFiles/SDL.dir/build.make:590: ターゲット 'CMakeFiles/SDL.dir/src/window.c.o' のレシピで失敗しました
make[2]: *** [CMakeFiles/SDL.dir/src/window.c.o] エラー 1
CMakeFiles/Makefile2:67: ターゲット 'CMakeFiles/SDL.dir/all' のレシピで失敗しました

warningは良いとして, errorについてみてみる.
lua_getuservalue関数はvoidらしい.
こんな単純なミスを犯すだろうか?
Lua5.2のリファレンスを見てみてもこの関数はvoidを返す.
ではLua5.3では?
intを返すのだ.

解決策

  • liblua-5.3-dev (Ubuntuの場合)をインストール
  • cmake .. -DWITH_LUAVER=53 でcmakeする

これで出来ました.
ちなみにgithubのissueに上がっています. 調べが甘かったです. apiリファレンスやヘッダファイルを調べるはめになりました.

cmakeのデフォルトがLua5.2らしいけど, デフォルトでビルドすると失敗するのは解決した今なら笑える冗談です. (バグだというのは重々承知の上で)

以上.