2021年09月16日

Raspberry Pi Desktop for PC で LuaAppMaker をビルドする

 Raspberry Pi Desktop for PC で、LuaAppMaker をビルドしました。いろいろ未完成だけど、一応できた。

20210915-2.jpg

 まず、wxWidgets をビルドする。なるべく新しい方がよかろう、ということで、この機会に 3.1.5 に上げました。Mac 版は 10.11 以降のみ対応となります。10.6〜10.10 のために、3.0.3 を使った Legacy バージョンも作ります。以下、Raspberry Pi Desktop for PC でのビルド。

$ cd path/to/wxWidgets-3.1.5
$ sudo apt install libgtk-3-dev  #  gtk3 のビルド用
$ sudo apt install freeglut-dev  #  OpenGL に必要
$ sudo apt install libwebkit2gtk-4.0-dev  #  wxWebView に必要
$ export BASEDIR=$PWD
$ mkdir build-debian; cd build-debian
$ ../configure --disable-shared --enable-monolithic --prefix=$BASEDIR/build-debian | tee configure.log
$ make | tee make.log
$ make install

 できました。build-debian/lib 以下にライブラリが入っている。

 LuaJIT-2.1.0-beta3 のビルドは、特に問題はなかった。ただし、デバッグ中に判明した問題点として、エラーメッセージの中にマルチバイト文字(ファイル名など)が入っているとき、短縮して不正な文字列になるケースがあったので、パッチを当てる必要があった。これは Mac でも Windows でも当てはまる問題なので、見つかってよかった。

--- lj_debug_orig.c	2021-09-03 23:09:40.000000000 +0900
+++ lj_debug.c	2021-09-03 23:55:57.000000000 +0900
@@ -327,6 +327,7 @@
     src++;  /* Skip the `@' */
     if (len >= LUA_IDSIZE) {
       src += len-(LUA_IDSIZE-4);  /* Get last part of file name. */
+      while (*src != 0 && (*src & 0xc0) == 0x80) src++; /* Skip UTF-8 non-boundary chars */
       *out++ = '.'; *out++ = '.'; *out++ = '.';
     }
     strcpy(out, src);
@@ -337,6 +338,7 @@
     strcpy(out, line == ~(BCLine)0 ? "[builtin:" : "[string \""); out += 9;
     if (src[len] != '%%%%% BODY %%%%%') {  /* Must truncate? */
       if (len > LUA_IDSIZE-15) len = LUA_IDSIZE-15;
+      while (len > 0 && (src[len] & 0xc0) == 0x80) len--; /* Skip UTF-8 non-boundary chars */
       strncpy(out, src, len); out += len;
       strcpy(out, "..."); out += 3;
     } else {

 LuaAppMaker のビルドは、リンクするライブラリを網羅するのに手間取った。wx-config --libs とやっても、なんか漏れがあるんだよね。あと、引っかかったのが、せっかく LuaJIT を自前でビルドしたのに、システムの libluajit-5.1 がリンクされてしまうこと。リンク時に -L で指定しても、実際に探すときはライブラリのロードパスを探してしまうので、うまくいかない。 -Wl,-rpath='$$ORIGIN/lib' を指定することで解決した。こうすると、実行ファイルのあるディレクトリ直下の "lib" をライブラリのサーチパスに加えてくれる。

 一応実行ファイルがビルドできた。ターミナルから起動すると実行できるんだけど、デスクトップでダブルクリックすると「共有ライブラリです」と言われる。なんで?

20210915-1.jpg

 イマドキの Linux アプリは AppImage という形式にするのがよさそう。ライブラリの依存関係も全部込みで、実行形式のファイル1個で、いろいろなディストリビューションに対応しているらしい。次はこれにチャレンジだな。

20210915-3.jpg

Posted at 2021年09月16日 00:06:01
email.png