クロスコンパイル用のunameコマンドを作る

ロスコンパイル環境を考慮しているUnixソフトウェアであれば、configureスクリプトの--hostオプションの指定だけでクロスコンパイルが成功することも珍しくありません。しかし、ソフトウェアによってはconfigureスクリプト中でunameを直接呼び出し、その結果に応じて分岐するようなものもあります。このような状況でクロスコンパイルを通しきるのは困難です。

そこで、クロスコンパイル時のためのunameコマンドをシェルスクリプトで作ってみました。

#!/bin/bash

case "$1" in
  -a ) echo "Linux localhost 3.0.72-gfb3c9ac #1 SMP PREEMPT Fri Jun 7 12:00:19 PDT 2013 armv7l GNU/Linux";;
  -v ) echo "#1 SMP PREEMPT Fri Jun 7 12:00:19 PDT 2013";;
  -r ) echo "3.0.72-gfb3c9ac";;
  -m ) echo "armv7l";;
  -s ) echo "Linux";;
  * ) echo "Linux";;
esac

上記はAndroid NDK用です。これを$HOME/bin/fake-uname/android/unameとして保存します。イケてないconfigureスクリプトに出会ったら下記のようにconfigureをかければ期待通りの結果が得られます。

$ PATH=$HOME/bin/fake-uname/android:$PATH ./configure --host=arm-linux-androideabi