MachineIndependent
目次
MachineIndependent
Eosでは、$EOS_HOME/bin に対してPATHが張られていて、SmallToolsがそのディレクトリに配置されています。
しかし、実際には、$EOS_HOME/sbin/MachineIndependent� に対してリンクが張られていて、全て同じシェルスクリプトが動く様になっています。その目的は��、主として、①ホスト毎のアーキテクチャの違いを吸収すること、②GUI等をもつスクリプトタイプのコマンドに対応すること、の2点です。そのため、現状、若干起動に時間がかかるようになっています。今後、少し変更していく必要があると考えています。
BASENAMEの設定
BASENAME=`basename $0`
をつかってこのシェルがどのプログラムとして起動したかを特定しています。これが同じシェルスクリプトを使いながら、異なるプログラムが動いている理由です。
OSTYPEの設定 (ホスト毎のアーキテクチャの違いの吸収)
起動時に、Eos_envの中で、EOS_HOST�, EOS_HOSTDIRが設定されます。これは、機器毎のアーキテクチャの違いを示したものです。このシェルの中では、�このEOS_HOSTを使って、OSTYPEを指定し、対応した実行形式を選択するようにしています。 これは、ハードディスクが貴重で、かつ、異なるアーキテクチャのマシンが同じファイルサーバを共有していた時代の名残でもありますし、かつ、異なるバイナリを配付し、同じ場所にインストールしたとしても動作を保証することが目的で、このようなファイル構成になっています。
従来は、bin/�$(OSTYPE)の直下に、それぞれのアーキテクチャ毎の実行形式を配置しておりました。現在は、アーキテクチャ毎に切り分けるために、hostdepend/$(OSTYPE)/bin/$(OSTYPE)に置かれており、hostdepend/$(OSTYPE)�/bin/$(OSTYPE)が、bin/$(OSTYPE)としてリンクが張られています。
使用するスクリプトファイルの設定 (GUI等をもつスクリプトタイプのコマンドへの対応)
�配付されたバイナリが、スクリプト言語のインタープリタの拡張(Tcl/TkやRuby等)である場合、スクリプトファイルを自動的に��読み込むための仕組みを持っています。 bin/の直下にそれぞれのスクリプト言語に応じたスクリプトをもっている場合に、そちらを読み込んで起動することになります。
Tcl/Tkはwish、Rubyはruby、Bashはshell、Perlはperlのディレクトリの下に、そのコマンドの名前のディレクトリがある場合には、そのディレクトリ以下にあるプログラム群を、それぞれの言語仕様に従って、読み込んできます。
シェルスクリプトの実体
2016年9月1日版のMachineIndependentファイルは下記のようになっています。
#!/bin/sh
BASENAME=`basename $0`
case ${EOS_HOST} in
"hpux")
OSTYPE=HP
;;
"alpha")
OSTYPE=ALPHA
;;
"alphaLinux")
OSTYPE=ALPHALINUX
;;
"alphaLinux5")
OSTYPE=ALPHALINUX5
;;
"alphaOSF1")
OSTYPE=ALPHAOSF1
;;
"i386Mac")
OSTYPE=I386MAC
;;
"x86Mac64")
OSTYPE=X86MAC64
;;
"i386Linux")
OSTYPE=I386LINUX
;;
"i686Linux")
OSTYPE=I686LINUX
;;
"x86Linux64")
OSTYPE=X86LINUX64
;;
"cellLinux64")
OSTYPE=CELLLINUX64
;;
"sgi")
OSTYPE=SGI
;;
"sparc")
OSTYPE=SPARC
;;
"apollo")
OSTYPE=APOLLO
;;
*)
echo "The environment variable, EOS_HOST, has not set yet."
echo "Or EOS_HOST=\"${EOS_HOST}\" is not supported yet."
;;
esac
if [ ! -z $USE_ICC ] ; then
OSTYPE=${OSTYPE}ICC
fi
#echo $OSTYPE
if [ -x ${EOS_HOME}/bin/shell/${BASENAME}/${BASENAME}.sh ]
then
# Shell Script
${EOS_HOME}/bin/shell/${BASENAME}/${BASENAME}.sh "$@"
elif [ -x ${EOS_HOME}/bin/perl/${BASENAME}/${BASENAME}.pl ]
then
# Perl
perl ${EOS_HOME}/bin/perl/${BASENAME}/${BASENAME}.pl "$@"
#
elif [ -x ${EOS_HOME}/bin/ruby/${BASENAME}/${BASENAME}.rb ]
then
# Ruby
ruby -I${EOS_HOME}/lib/${OSTYPE} -I${EOS_HOME}/lib -I${EOS_HOME}/bin/ruby/${BASENAME} ${EOS_HOME}/bin/ruby/${BASENAME}/${BASENAME}.rb "$@"
#
elif [ -x ${EOS_HOME}/bin/wish/${BASENAME}/${BASENAME}.wish ]
then
# Wish
if [ -x ${EOS_HOME}/bin/${OSTYPE}/${BASENAME} ]
then
${EOS_HOME}/bin/${OSTYPE}/${BASENAME} "$@" < ${EOS_HOME}/bin/wish/${BASENAME}/${BASENAME}.wish
elif [ -x ${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} ]
then
${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} "$@" < ${EOS_HOME}/bin/wish/${BASENAME}/${BASENAME}.wish
else
echo "Not installed: ${OSTYPE}-vesion ${BASENAME}"
fi
else
# No Wish
if [ -x ${EOS_HOME}/bin/${OSTYPE}/${BASENAME} ]
then
${EOS_HOME}/bin/${OSTYPE}/${BASENAME} "$@"
elif [ -x ${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} ]
then
${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} "$@"
else
echo "Not installed: ${OSTYPE}-version ${BASENAME}"
fi
fi
exit 0