stoneをWM向けにコンパイル

PocketPuTTYに足りない機能と言えば…

HTTPプロキシ経由での接続。これさえあれば完璧なのに…

昔使ってたソフトを思い出す

stone。軽量かつ高機能なトンネリングソフト。
stoneがWMで使えないかと思い、自分でWM向けにコンパイルすることに。

コンパイル方法

実際に使える実行可能ファイルができたので、方法を公開しておきます。
ここでは、configureのprefixを/usr/local/winceとします。

必要なファイル
  • stoneのtar玉(公式)
  • 鬼車の最新版(公式 現時点での最新版は5.9.1)
まずは、鬼車をコンパイル

cegccのコマンド群はarm-cegccで始まるため、--host=arm-cegccとするべきですが、configureで蹴られるので、事前にシンボリックリンク等でcegccのコマンド群をarm-winceから始まるようにしておきます。

$ tar zxvf onig-5.9.1.tar.gz
$ cd onig-5.9.1
$ ./configure --prefix=/usr/local/wince --host=arm-wince
$ make
# make install
# ln -s /usr/local/wince/include/onigposix.h /usr/local/wince/include/regex.h

なぜシンボリックリンクを張るかは、POSIXregex.hを鬼車で代替するためです。

stoneのコンパイル

stoneは移植性が重視されてるため、互換のためのマクロがいくつか存在します。
一部のマクロはcegccでコンパイルできなくする原因を作っているため、無効にします。

$ tar zxvf stone-2.3e.tar.gz
$ cd stone-2.3d-2.3.2.7

として解凍した後、stone.cを以下のように書き換えます。

#undef EINTR
#define EINTR	WSAEINTR
#define NO_BCOPY
#define bzero(b,n)	memset(b,0,n)
#define	usleep(usec)	Sleep(usec)

#undef EINTR
#define EINTR	WSAEINTR
//#define NO_BCOPY
#define bzero(b,n)	memset(b,0,n)
#define	usleep(usec)	Sleep(usec)

書き換えたら、cegccでコンパイルします。

$ arm-cegcc-gcc -DWINDOWS -o stone.exe stone.c -I/usr/local/wince/include -L/usr/local/wince/lib -lws2 -lonig -O2
注意

鬼車は4.1.0版cegcc、stoneは4.3.0版cegccでコンパイルしました。
複数のバージョンのコンパイラを混ぜるのは危ない気もしますが、とりあえず動きます。
もし4.1.0版cegccでstoneをコンパイルしたいなら、WinSock2関連のヘッダファイルをいじる必要があるようです。