#!/bin/sh
#
# このシェルスクリプトは、OpenRTM-aistのARMクロスコンパイル環境をDebainホストに構築します。
#
# 使用方法：
# 予め/etc/apt/sources.listに、クロスコンパイラ関連のパッケージ取得URLを追加しておきます。
#	deb http://downloads.pylone.jp/cross-toolchain/deb ./\
# その他のDebianパッケージ用の取得URLも必要です。記述していない場合は追加しておいてください。
# 例）
#	deb http://ftp.jp.debian.org/debian/ etch main contrib non-free
# 次に作業用のディレクトリを作り、このシェルスクリプトをコピーします。
# 同じく、ダミーパッケージのpkg-config-arm-dcv1_1.0_all.debもコピーしてください。
# 実行する場合は、スーパーユーザー権限が必要です。
# インストール中に警告が出ますが、Yesと答えて続行してください。
#
#	2008/05/16　木村	新規作成
#		 05/19	木村	コメント修正
#						pkg-config-arm-dcv1を、最後にダミーパッケージでインストールするように変更
#						※pkg-config-arm-dcv1に依存するパッケージを削除しないと、
#						　新たにパッケージがインストールできないため
#		 05/20	木村	コメント修正、コメントアウトコード削除
#		 05/22	木村	ダウンロードアドレステーブルから不要パッケージを削除
#
# ※TABは4でコーディングしています

#---------------------------------------------------------------------------	
#	aptitudeインストール パッケージ名テーブル
#---------------------------------------------------------------------------	
declare -a cross_pkg_tbl=(	\
	"gcc-4.1-arm-linux-gnu"	\
	"g++-4.1-arm-linux-gnu"	\
	"gdb-arm-linux-gnu"	\
	"dpkg-cross"	\
	"equivs"	\
	"pkg-config"	\
	"omniorb4-nameserver "	\
	"omniidl4"	\
)

#---------------------------------------------------------------------------	
#	パッケージ ダウンロードアドレステーブル
#---------------------------------------------------------------------------	
declare -a pkg_tbl=(	\
	"http://ftp.jp.debian.org/debian/pool/main/a/ace/libace5.4.7c2a_5.4.7-12_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/a/ace/libace-dev_5.4.7-12_arm.deb"	\
	"http://download.atmark-techno.com/misc/softwaredesign/chapter5/mkXdummy"	\
	"http://ftp.jp.debian.org/debian/pool/main/o/omniorb4/libomnithread3c2_4.0.6-2.1_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/o/omniorb4/libomnithread3-dev_4.0.6-2.1_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.3-13_arm.deb"	\
	"http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl0.9.8_0.9.8c-4etch9_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/o/omniorb4/libomniorb4c2_4.0.6-2.1_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.3-13_arm.deb"	\
	"http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl-dev_0.9.8c-4etch9_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/o/omniorb4/libomniorb4-dev_4.0.6-2.1_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/o/omniorb4/libcos4c2_4.0.6-2.1_arm.deb"	\
	"http://ftp.jp.debian.org/debian/pool/main/o/omniorb4/libcos4-dev_4.0.6-2.1_arm.deb"	\
)

#---------------------------------------------------------------------------	
# name :			disp_error ()
# description :	エラーメッセージ表示関数
# usage : 		disp_error ライン番号 メッセージ
#---------------------------------------------------------------------------	
disp_error () {
	echo -n $scriptName
	echo -n ": line "
	echo -n $1
	echo -n ": "
	echo $2
	
	return 0
}

#---------------------------------------------------------------------------	
# name :			aptitude_install ()
# description :	aptitudeパッケージインストール関数
# usage : 		aptitude_install パッケージ名
#---------------------------------------------------------------------------	
aptitude_install () {
	# 引数チェック
	if [ $# -eq 0 ]
	then
		echo "pkg_install () : There is no argument"
		exit 1
	fi
	
	apt-get install "$1"

	# 実行結果チェック
	if [ $? -ne 0 ]
	then
		exit 1
	fi
	
	return 0
}

#---------------------------------------------------------------------------	
# name :			pkg_install ()
# description :	パッケージインストール関数
# usage : 		pkg_install パッケージダウンロードアドレス
#---------------------------------------------------------------------------	
pkg_install () {
	# 引数チェック
	if [ $# -eq 0 ]
	then
		echo "pkg_install () : There is no argument"
		exit 1
	fi
	
	# パッケージ取得
	if ! wget "$1"
	then
		return 1
	fi

	# パッケージ名抽出
	pkg_name=`echo $1 | sed s:.*/::`
	
	# パッケージインストール
	case $pkg_name in
		mkXdummy )
			# pkg-configダミーパッケージ作成
			chmod 755 mkXdummy
			./mkXdummy pkg-config
			# ダミーパッケージインストール
			pkg_name=`ls pkg-config-arm-cross*.deb`
			dpkg -i $pkg_name
			;;
		libomnithread3-dev* | libomniorb4-dev* | libcos4-dev* )
			#  クロスパッケージ作成
			dpkg-cross -a arm -b $pkg_name
			# クロスパッケージインストール
			pkg_name=`echo $pkg_name | cut -d "_" -f 1`
			crs_pkg_name=`ls $pkg_name*all.deb`
			dpkg --ignore-depends=pkg-config-arm-dcv1 -i $crs_pkg_name
			;;
		* )
			# クロスパッケージ変換インストール
			dpkg-cross -a arm -i $pkg_name
			;;
	esac
	
	return 0
}

#---------------------------------------------------------------------------	
#	シェルスクリプト　メイン
#---------------------------------------------------------------------------	
declare -i lineNo
declare -i num
declare -i i

#---------------------------------------	
# スクリプト起動条件チェック
#---------------------------------------	
# スクリプト名保存
scriptName=$0

# ルートユーザーチェック
if [ `id -u` -ne 0 ]
then
	lineNo=$LINENO-2
	disp_error $lineNo "The root authority is necessary"
	exit 1
fi

# apt-line追加チェック
grep -q "deb http://downloads.pylone.jp/cross-toolchain/deb ./" /etc/apt/sources.list

if [ $? -ne 0 ]
then
	echo "Please add \"deb http://downloads.pylone.jp/cross-toolchain/deb ./\" to \"/etc/apt/sources.list\""
	exit 1
fi

#---------------------------------------	
# aptitudeパッケージインストール
#---------------------------------------	
# パッケージ情報を更新
apt-get update

# テーブル要素数取得
num=${#cross_pkg_tbl[@]}

i=0

while [ $i -lt $num ]
do
	if ! aptitude_install ${cross_pkg_tbl[i]}
	then
		exit 1
	fi
	
	i=i+1
done

#---------------------------------------	
# クロス変換パッケージインストール
#---------------------------------------	
# テーブル要素数取得
num=${#pkg_tbl[@]}

i=0

while [ $i -lt $num ]
do
	if ! pkg_install ${pkg_tbl[i]}
	then
		exit 1
	fi
	
	i=i+1
done

#---------------------------------------	
# ダミーパッケージインストール
#---------------------------------------	
pkg_name=`ls pkg-config-arm-dcv1*.deb`
dpkg -i $pkg_name

#---------------------------------------	
# シンボルリンク作成
#---------------------------------------	
pushd /usr/arm-linux-gnu/bin

ln -s /usr/bin/omniNames omniNames
ln -s /usr/bin/omnicpp omnicpp 
ln -s /usr/bin/omniidl omniidl
ln -s /usr/bin/omniidlrun.py omniidlrun.py

popd

echo "### install complete ! ###"

exit 0
