Skip to content

Instantly share code, notes, and snippets.

@sasairc
Last active October 14, 2018 11:40
Show Gist options
  • Save sasairc/7d311e757972c6a7c2b7a8018bf77aba to your computer and use it in GitHub Desktop.
Save sasairc/7d311e757972c6a7c2b7a8018bf77aba to your computer and use it in GitHub Desktop.
termux 環境上で clangsay をビルドする

termux 環境上で clangsay をビルドする

この記事はおさむん家 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 で導入できます。文明的ね。

libbenly のビルド・インストール

普通に clone してきます。

% git clone http://github.com/sasairc/libbenly && libbenly

Android の標準Cライブラリは Bonic libc。 ここで問題です。fcntl.hsys/stat.hS_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

clangsay のビルド・インストール

これも普通に 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

以上です。

雑感

  1. サンドボックス環境だから仕方が無いけれど、ディレクトリ構成が気持ち悪い。
  2. 標準Cライブラリが bonic libc。
  3. でも持ち運べる環境は便利。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment