Haiku R1/beta3において、ONScripterの動作を確認しましたので報告いたします。
なお、Haikuの開発流儀に合致しない手法を用いていると思われる点は、
ご容赦願います。
1. 摘要
(1) OSの提供するパッケージは必要なライブラリを網羅しているが、
SDL_ttfはバグを残したままであり、そのままONScripterをビルドした場合、
「動作はするが文字が全く表示されない」状態となる。
(2) パッケージリポジトリでは、
SDL_ttfのソースを取得できなかった(ログインが必要?)。
また、OSの仕様上、systemディレクトリの読み取り専用属性を解除できないため、
上記バグに関して直ちにOS側の修正を行うことは困難な模様。
(3) SDL_ttfソースにパッチを当ててビルドし、
ローカルの静的ライブラリとして用意した後、
ONScripter本体にリンクさせることで、これらを解決可能。
2. 動作確認環境
(1) 実機
以下のマシンへHaiku R1/beta3をインストールし、確認を行いました。
・Lenovo ThinkPad X220 (Intel Core i7-2640M)
ネットワーク設定以外、特にOS側での設定は必要ありませんでした。
なお、当該バージョンのOSではPC内蔵のサウンドカードを認識せず、
USB-DAC、Bluetoothイヤホンなどの手持ち機材も認識させることができなかったため、
サウンドについては次項の仮想環境で確認しています。
(2) 仮想環境
以下の環境へHaiku R1/beta3をインストールし、確認を行いました。
・Linux Mint 20.2 + VirtualBox 6.1
仮想環境の構築については、以下の記事を参考としました。
https://www.haiku-os.org/guides/virtualizing/virtualbox
3. 必要ファイル収集
本項目に関しては、GUI操作で可能です。
3.1 開発パッケージの取得
画面右上の「Deskbar」から「Applications」を辿り、
「HaikuDepot」(パッケージ管理ツール)を起動します。
起動したHaikuDepotのメニューの「表示」にある
「開発用パッケージ」にチェックを入れます。
その後、検索ワードを入力しながら以下のパッケージをインストールします。
依存関係のあるライブラリもインストールすることを適宜告げてきますので、
「Apply changes」を押します。
・bzip2_devel
・libsdl_devel
・sdl_image_devel
・sdl_mixier
・freetype_devel
・smpeg_devel
・libogg_devel
・libvorbis_devel
・fontconfig_devel
・lua51_devel
3.2 ソースファイルのダウンロード
「Deskbar」から「Applicatipons」を辿り、「WebPositive」(ブラウザ)を起動します。
以下のファイルをダウンロードします。(URLを併せて示します。)
ダウンロードしたファイルは、デスクトップに配置されます。
(1) SDL_ttfのソース
SDL 1.2対応の最終版(2.0.11)とします。形式はtar.gz、zipどちらでも構いません。
・https://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.11.tar.gz
・https://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.11.zip
(2) パッチ
リンクのDebian以外のOSにも、同様のパッチが存在するものと思います。
・https://salsa.debian.org/sdl-team/sdl-ttf2.0/-/raw/master/debian/patches/fix_bug_661987_TTF_RenderGlyph_Shaded_is_broken?inline=false
(3) config.guessの最新版
SDL_ttfのソースに含まれるものは2009年版と古くHaikuに対応していないため、
差し替えます。
・http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
(4) config.subの最新版
同上。
なお、上記(3)及び本項(4)については、
http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree
にアクセスして該当ファイルの右端「raw」を右クリックし、
「Download Linked File」を選択したほうがダウンロードとしては楽かも知れません。
・http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
(5) ONScripterのソース
・https://onscripter.osdn.jp/onscripter-20200722.tar.gz
3.3 ソースの展開等
(1) tar.gz形式のファイルやzipファイルは、
アイコンをダブルクリックすると「ファイル解凍」のウインドウが表示されますので、
そのまま「解凍」を選択し、デスクトップにソースを展開します。
(2) config.guessとconfig.subは、
展開して生成されたSDL_ttf-2.0.11のフォルダに移動します。
この時「移動中の項目と置き換えますか?」と尋ねられますので、
「置換」を選択します。
(3) パッチファイル(fix_bug_661987_TTF_RenderGlyph_Shaded_is_broken)も、
SDL_ttf-2.0.11のフォルダに移動します。
4. ビルド
ここから「ターミナル」(Deskbar → Applications → ターミナル)を使用し、
コマンドラインで作業を行います。
4.1 SDL_ttfビルド用即席スクリプトの用意
GNU Autotoolsの仕組みには疎いのですが、
SDL 1.2対応のSDL_ttfと最新版FreeTypeとの年代的な隔たりのせいか、
SDL_ttfをそのままconfigureしても、
freetype-configがシステムに存在しないという理由でMakefileの生成に失敗します。
一方、シェルから"pkg-config --cflags freetype2"とすると、
FreeTypeのコンパイルオプションが適切に出力されます。
本来なら、SDL_ttfのconfigure周りを修正するべきですが、
1.に記載のとおりSDL_ttfをシステムに組み入れることもできませんし、
ONScripter本体を生成すればSDL_ttfは不要となりますので、
本報告では少ない手間でとにかくコンパイルを通す方向で進めます。
具体的には、freetype-configと同様の働きをする
"/boot/system/bin/sdl-config"をホームディレクトリにコピーして、
コンパイルオプションそのものはpkg-configに答えてもらうように仕向けます。
(1) 「ターミナル」を起動したホームディレクトリ(/boot/home)で、
以下のように操作します。
(Haikuのシェルプロンプトは「>」でしたので、以降これで綴ります。)
> mkdir bin
> cd bin
> cp ../../system/bin/sdl-config freetype-config
> nano freetype-config
(デフォルトのテキストエディタとして、nanoがインストールされています。)
(2) コピーしたスクリプトの--cflagオプションに対するechoコマンド(45行目)と、
--libsオプションに対するechoコマンド(48行目)を、
以下のdiffファイルのように「pkg-config オプション」に変更し、
ファイルを保存します。
(diffは、元の行の先頭に"-"、新しい行の先頭に"+"を付けて変更
箇所を表しています。)
--- ../../../system/bin/sdl-config 2020-05-21 19:12:20.000000000 +0900
+++ freetype-config 2021-12-16 00:21:37.207093760 +0900
@@ -42,10 +42,10 @@ while test $# -gt 0; do
echo 1.2.15
;;
--cflags)
- echo -I/packages/libsdl-1.2.15-17/.self/develop/headers/SDL -D_GNU_SOURCE=1
+ pkg-config --cflags freetype2
;;
--libs)
- echo -L/packages/libsdl-1.2.15-17/.self/develop/lib -lSDL
+ pkg-config --libs freetype2
;;
--static-libs)
# --libs|--static-libs)
4.2 SDL_ttfのビルド
(1) そのまま、SDL_ttfのソースを展開したディレクトリへ移動し、
パッチを当ててビルドします。
シェルはファイル名補完ができますので、
"patch -b >f"まで入力してタブキーを押せばパッチのファイル名が現れま
す。
configureは、ホームディレクトリにインストールすること、
FreeTypeもホームディレクトリにあるものとして実行します。
(実際にはbin/freetype-configのみで、本体は/boot/system以下に存在)
> cd ../Desktop/SDL_ttf-2.0.11/
> patch -b <fix_bug_661987_TTF_RenderGlyph_Shaded_is_broken
> ./configure --prefix=$HOME --with-freetype-prefix=$HOME
> make; make install
(2) ホームディレクトリに新たに「include」と「lib」の2つのディレクトリが生成され、
/boot/home/include/SDL/SDL_ttf.hと/boot/home/lib/libSDL_ttf.aとが存在していれば、
インストール成功です。
4.3 ONScripterのビルド
(1) ONScripterのソースを展開したディレクトリへ移動し、
Makefileをコピー後、編集します。
> cd ../onscripter-20200722/
> cp Makefile.Linux Makefile
> nano Makefile
(2) Makefileについては、SDL_ttfをインストールしたディレクトリを加え、
ライブラリとしてfreetypeをリンクするよう指定すれば、問題なくビルドできました。
luaについても、インクルードファイルの位置を指定するだけで良いようです。
なお、avifileについてはHaikuのリポジトリに存在しなかったことから、
ひとまずコメントアウトしました。
--- Makefile.Linux 2020-07-23 02:06:01.012320768 +0900
+++ Makefile 2021-12-19 11:36:42.736100352 +0900
@@ -18,8 +18,8 @@ EXT_OBJS =
# mandatory: SDL, SDL_ttf, SDL_image, SDL_mixer, bzip2, libjpeg
DEFS = -DLINUX
-INCS = `sdl-config --cflags`
-LIBS = `sdl-config --libs` -lSDL_ttf -lSDL_image -lSDL_mixer -lbz2 -ljpeg -lm
+INCS = `sdl-config --cflags` -I/boot/home/include/SDL
+LIBS = `sdl-config --libs` -lSDL_ttf -lSDL_image -lSDL_mixer -lbz2 -ljpeg -lm -lfreetype -L/boot/home/lib
# recommended: smpeg
DEFS += -DUSE_SMPEG
@@ -42,15 +42,15 @@ LIBS += -logg -lvorbis -lvorbisfile
DEFS += -DUSE_CDROM
# optional: avifile
-DEFS += -DUSE_AVIFILE
-INCS += `avifile-config --cflags`
-LIBS += `avifile-config --libs`
-TARGET += simple_aviplay$(EXESUFFIX)
-EXT_OBJS += AVIWrapper$(OBJSUFFIX)
+#DEFS += -DUSE_AVIFILE
+#INCS += `avifile-config --cflags`
+#LIBS += `avifile-config --libs`
+#TARGET += simple_aviplay$(EXESUFFIX)
+#EXT_OBJS += AVIWrapper$(OBJSUFFIX)
# optional: lua
DEFS += -DUSE_LUA
-INCS += -I/usr/include/lua5.1
+INCS += -I/boot/system/develop/headers/lua5.1
LIBS += -llua5.1
EXT_OBJS += LUAHandler$(OBJSUFFIX)
(3) 編集したMakefileを保存しビルドします。
ビルド後、生成したonscripterをデフォルトでパスの通ったディレクトリへ移動します。
> make
> mv onscripter ~/config/non-packaged/bin/
> exit
(これでターミナルでの作業終わり)
5. 後始末/その他
(1) ビルド作業に伴い生成した~/bin、~/include及び~/libの各ディレクトリは、
削除しても問題ありません。
(2) ゲーム側のディレクトリにdefault.ttfを置かない場合でも、
自動的にOS側の持つ日本語OpenTypeフォント(NotoSansCJKjp-Regular.otf)
を用いて文字が表示されましたので、
fontconfig及びfreetypeとの連携も問題ないようです。
(3) Haikuへポートするためには、
既にパッケージ化されているSDL_ttfのバグ修正から行わなければなりませんが、
これをクリアすれば動作可能であることが確認できたと考えます。
以上