この記事はおさむん家 Advent Calender 2049 の記事です。
数ヶ月前の作業記録。
/data/data/com.termux/files/usr
(FHS における /usr
と捉えて構いません) に突っ込むのはアレなので、予め .zshrc 等に以下の環境変数を定義しておいて下さい。
export PREFIX="/data/data/com.termux/files/usr"
export PREFIX_LOCAL="${PREFIX}/local"
export PATH="${PREFIX_LOCAL}/bin:${PREFIX}/bin"
export LD_LIBRARY_PATH="${PREFIX_LOCAL}/lib:${PREFIX}/lib"
export MANPATH="${PREFIX_LOCAL}/share/man:${PREFIX}/share/man"
export INCLUDE="${PREFIX_LOCAL}/include"
コンパイラや依存ライブラリは apt で導入できます。文明的ね。
普通に clone してきます。
% git clone http://github.com/sasairc/libbenly && libbenly
Android の標準Cライブラリは Bonic libc。
ここで問題です。fcntl.hやsys/stat.hにS_IREAD
等の、歴史的かつ普遍的なビットフラグは定義されているでしょうか?
答えは「呼び出し側が明示的に_BSD_SOURCE
または_GNU_SOURCE
を定義している場合に限り、それらは定義される」です。訳がわかりません。
頭の上に「?」を浮かべていても事は進まないので Makefile を以下のように修正します。
< CFLAGS := -O2 -g -Wall -Wextra
---
> CFLAGS := -O2 -g -Wall -Wextra -D_GNU_SOURCE
ビルドとインストール。
% make WITH_GLIB=1 WITH_REGEX=1
% make PREFIX="${PREFIX_LOCAL}" install
これも普通に clone してきます。
% git clone http://github.com/sasairc/clangsay && clangsay
そして Makefile を修正。ヘッダ並びに共有ライブラリの検索パスも追加しておきます。
< CFLAGS := -O2 -g -Wall -Wextra -Winit-self -Wno-missing-field-initializers
---
> CFLAGS := -O2 -g -Wall -Wextra -Winit-self -Wno-missing-field-initializers -D_GNU_SOURCE
< LDFLAGS :=
---
> LDFLAGS := -L$(PREFIX)/lib
< INCLUDE :=
---
> INCLUDE := -I$(PREFIX)/include
ビルドとインストール。
% make WITH_GLIB=1 WITH_REGEX=1 WITH_SHARED=1 PREFIX="${PREFIX_LOCAL}"
% make PREFIX="${PREFIX_LOCAL}" install
以上です。
- サンドボックス環境だから仕方が無いけれど、ディレクトリ構成が気持ち悪い。
- 標準Cライブラリが bonic libc。
- でも持ち運べる環境は便利。