toge's diary

コンピュータ関連の趣味をつらつらと。

何故glewは色々な環境でmake一発なのか

Autoconfで使われているconfig.guessというのを使っているのね。
config.guessは実行した環境についての情報を返してくれます。
ちなみにMinGWで実行すると、i686-pc-mingw32 て表示されます。

SHELL = /bin/sh
SYSTEM = $(shell config/config.guess | cut -d - -f 3 | sed -e 's/[0-9\.]//g;') 

まずシェルからconfig/config.guessを実行して、"-"を区切り文字にして3個目の文字列を取ってきます。MinGWならばmingw32になりますね。
で最後は数字と.を消す...と。

SYSTEM.SUPPORTED = $(shell test -f config/Makefile.$(SYSTEM) && echo 1) 

後はSYSTEMに入っている値から指定のファイルが存在するか調べます。
MinGWだとconfig/Makefile.mingwがあるか確認するわけですね。で存在するならSYSTEM.SUPPORTEDには1を入れると。

ifeq ($(SYSTEM.SUPPORTED), 1)
include config/Makefile.$(SYSTEM)
else
$(error "Platform '$(SYSTEM)' not supported")
endif 

SYSTEM.SUPPORTEDに1が入っていればconfig/Makefile.mingwを読み込み、そうでないならerrorメッセージを表示して終了。

問題はconfig/Makefile.mingwとかは自分で作らないといけないところなのですが、glewがCygwin, Darwin, FreeBSD, irix, Linux, MinGW, Solaris用は作ってくれているので、まあ困らないかなと。
Autotoolsを使うよりはシンプルで私は好きですね。

ちなみにconfig.guessは基本的にGPLなので注意。
本体がGPL以外のライセンスならば、パッケージング時に明確にしておかないとね。