* This document written in UTF-8

地球流体電脳ライブラリー (dcl-6.5) インストール手順

2011/12/26	塩谷 雅人, 鍵本 崇, 乙部 直人, 神代 剛, 辻野 智紀
2014/06/03	乙部直人

-. フォントについて

  マーカー用TrueTypeフォントのインストールについては
  まだ，環境ごとにconfig出来るようにはなっていません．
  Windowsでは src/env1/sysfont の ttfファイルを C:\Windows\Fonts
  にコピーして下さい．
  Linux では同じファイルを ~/.fonts 以下か /usr/local/share/fontsの
  下にコピーしてfc-cache を実行して下さい．もしくは./configureした後
  Mkinclude の下の方の debfontdir を編集すればいいはずです．

0. はじめに

ここでは, 「電脳ライブラリ」をインストールする手順について述べる.

このバージョンでは図形出力媒体として, CRT (GTK), EPS (エン
カプセルドポストスクリプト), PDF (ポータブルドキュメントフォーマット),
 png (ビットマップ画像) の4つをサポートしている.
ウインドウシステムとして X11R4 (以上) が正しくインストールされていなけ
ればならない. また、gtk+3(gtk+2)とcairo が利用できる必要がある。

「電脳ライブラリ」をインストール際, それぞれのプラットフォームに対して
適切な Mkinclude ファイルを用意しなければならない. dcl-5.1 以降では,
configure スクリプトを用いることによって, Mkinclude ファイルを自動的に
生成できるようになっている.

比較的一般的なプラットフォームについては, configure スクリプトを用いれ
ば容易にライブラリの構築は可能である. configure スクリプトを用いたイン
ストール方法については「1. configure によるインストール」を参照された
い. configure スクリプトによるインストールがうまくいかない場合は,
「2. パスの設定」以降を参照されたい. Windows環境については文末に別に
記述したのでそちらを参照されたい．

1. configure によるインストール

configure スクリプトによる初期設定の自動化は, 現在, GNU のソフトウェア
はもちろんのこと, さまざまなフリーソフトウェアで実現されている. この
confiugre スクリプトにはいくつかのオプションが用意されており, ユーザ自
身でインストール環境をカスタマイズすることも可能である. 具体的なオプショ
ンについては以下のようなものがある.

< オプションの説明 >

  % ./configure [options]

  [options]

  --help                  ヘルプメッセージの出力
  --quiet, --silent       実行状態の非表示
  --prefix=PREFIX         インストールディレクトリを PREFIX に設定
                          デフォルトは /usr/local
  --with-gtk2             グラフィックライブラリをgtk+2.0に変更

さて, この configure スクリプトを用いた「電脳ライブラリ」の構築方法は
以下の通りである.

  0) 必要なソフトウェアをインストールする

	FortranとCのコンパイラをインストールする。XやGTKの開発用ライブラリをインストールする。
	最近のLinuxなどではパッケージで用意されていると思われるので、そのような物を
	適宜インストールするのが良い.

  1) dcl 本体を展開する

	% zcat dcl-7.5.0.tar.gz | tar xvf -
	% cd dcl-7.5.0

  2) configure を実行する

     (例1) 資源を /usr/local/dcl-7.5.0 に構築する

	% ./configure --prefix=/usr/local/dcl-7.5.0

     (例2) configure が捜し出すコンパイラとは異なるものを使用する

	% export  CC=gcc
	% export  FC=gfortran
	% ./configure

     (例3) 使用するgtkを 3ではなく2にする

	% ./configure --with-gtk2

  3) あとは make; make install で dcl 本体がインストールされる

なお configure に関連するファイルとしては以下のようなものがある.

  Mkinclude.in		: Mkinclude を作成するためのプロトタイプ
  aclocal.m4		: DCL 用 autoconf マクロ
  configure		: configure スクリプト
  configure.in		: configure スクリプト作成用プロトタイプ

ライブラリを構築する作業は make でおこなうが, make が用いる(各所に散ら
ばる) Makefile の中では Mkinclude というファイルを取り込んでいる.
Mkinclude ファイルはこの INSTALL ファイルと同じ電脳ライブラリのトップ
ディレクトリにあって, システムに依存しうるいくつかのマクロ名が定義され
ている. configure はこの Mkinclude ファイルを自動的に生成する. もしも
configure が生成する Mkinclude ファイルを使ってもうまくインストールで
きない場合は, この Mkinclude ファイルを適切に書き換えてやれば
(「3. Mkinclude ファイル」参照), 以下に述べるような手順でインストール
作業がおこなえるはずである.


2. パスの設定

make でコンパイルおよびインストールをするために, これから移植しようと
する電脳ライブラリが置かれているディレクトリ(この例ではとあるユーザー
のホームディレクトリに電脳ライブラリが展開されているとする)を環境変数
DCLDIR に設定しなければならない. ただし, configure によって Mkinclude
ファイルが正しく生成されている場合は, その中で DCLDIR は定義されている
ので, ふつうはユーザーが環境変数 DCLDIR を設定する必要はない.

configure によって Mkinclude ファイルが正しく生成されなかった場合は,
Mkinclude ファイルの中の DCLDIR を適切に書くか, 以下のように環境変数と
してパスの設定をおこなう必要がある.

  % export DCLDIR=~/dcl-7.5.0


3. Mkinclude ファイル

トップディレクトリ (すなわち cd $DCLDIR ではいったところ) に Mkinclude
というファイルがあっていくつかのマクロ名が定義されており, $DCLDIR 以下
の Makefile ではこの情報を include して使っている.

また, Mkinclude ファイルの先頭部分にはサフィックスルールが記述されてい
る. (ふつうこれらはコメントアウトされていても動作する. )

Mkinclude ファイルの中で注意すべきマクロ名として次のものがある.

a) コマンド, ライブラリ等を格納する場所を指定するマクロ

  BINDIR   : dclfrt などのコマンドを格納するディレクトリ
  LIBDIR   : ライブラリを格納するためのディレクトリ
  INCDIR   : include ファイルを格納するためのディレクトリ
  DBASEDIR : データベース関連のファイルを格納するためのディレクトリ

これらのマクロ名は初期設定ではそれぞれ, $(prefix)/bin, $(prefix)/lib,
$(prefix)/include, $(LIBDIR)/dcldbase となっている. なおこれらとは別に,
上記のディレクトリを一時的に置くための場所を指定するために, LBINDIR,
LLIBDIR, LINCDIR, LDBASEDIR などがある.

  DCLVERSION : 電脳ライブラリのバージョン (x.x 形式)
  DCLVERNUM  : 電脳ライブラリのバージョン (xx 形式)
  DCLLANG    : どの言語に対するパッケージかを示す

configure スクリプトを用いていれば, ここには適切な値が入っているはずで
あ. 手作業で Mkinclude を編集しようとして, もしもここに値が定義されて
いない場合は, バージョン名(dcl-5.3 なら 53)を書いておいた方がライブラ
リの整合性を取りやすい.

ｂ）gtkに関するマクロ

Gtk に関するマクロとして, GTKVERSION, GTK_CFLAGS, GTK_LIBS
などがある.

c) 図形出力装置の数に関するマクロ

  DCLNWS : 図形出力装置の数

通常の構成では, DISP, Files の2つの出力装置をサポートしている. この場
合, DCLNWS は 2 となる.

d) ライブラリ構築に際するいくつかの選択に関するマクロ

  MISC1EXT : misc1 において, 他では用いられないライブラリ名

MISC1EXT には src/misc1 の下にあって, 現在のところ他のライブラリからは
用いられることのないライブラリ名が列記されている. 「0. はじめに」に書
かれているような環境では, これらのライブラリもすべてコンパイル・インス
トールが可能であるが, システムによっては MISC1EXT のうちのいくつかがう
まく移植できないことがあるかもしれない. そのような場合は, うまく移植で
きないライブラリをこのリストから外してやればよい. 例えば, fiolib の移
植がうまくいかない場合,

  MISC1EXT = clcklib randlib hexlib reallib

のように fiolib をリストから外せばよい.

e) コマンドおよびそのオプションに関するマクロ

  CC      : C コンパイラ名
  CFLAGS  : C コンパイラが解釈するオプション
  FC      : Fortran コンパイラ名
  FFLAGS  : Fortran コンパイラが解釈するオプション
  RANLIB  : ランダムライブラリを作成するコマンド名

C および Fortran のコマンド名およびコンパイラオプションはそれぞれのシ
ステムで適切なものを指定すること. システムによってはライブラリをリンク
する際に, ライブラリをランダムライブラリ化しなければならない.  RANLIB
にはそのコマンド名を指定する. この操作が必要でないシステムについては
RANLIB として, たとえば touch コマンドなどを指定しておけばよい.

(注意) Fortran と C の結合規約

システムに依存するルーチンや X 関連のルーチンは C 言語を用いて書かれて
いる. Fortran と C との結合に際しては, SunFORTRAN で使われているように
「C 側の関数名に '_' (アンダースコアー)を付け加えることで, Fortran 側
からは '_' なしのサブルーチン(あるいは関数)として呼ぶことができる」と
いうルールに従っている.

これは言い換えると Fortran プログラムのコンパイル時に, ルーチン名に対
してアンダースコアーを付け加えることにほかならない. SunFORTRAN で使わ
れているこのような結合規約に従っていないシステムもあるが, そのようなシ
ステムでも多くの場合 Fortran のコンパイラオプションとしてアンダースコ
アーを付加するオプション(たとえば IBM AIX XL Fortran/6000 (xlf) では
-qextname) が用意されていることが多いので, マニュアルなどを注意深く参
照されたい.

Fortran 側にアンダースコアーを付加するオプションがない場合は, C 側の関
数名からアンダースコアーを取ってやればよい.

f) math1/syslib/glpget.f で用いられるマクロ

  INTMAX
  REALMAX
  REALMIN
  REPSL

これらの詳細については src/math1/syslib の NOTE を参照されたい.

g) misc1/clcklib/clckst.c で用いられるマクロ

  CLK_PER_SEC (CLOCKS_PER_SEC)
  CLK_RSL_TCK (CLK_TCK)

これらはカッコ内に示された識別子に対応する. ANSI 対応の C コンパイラで
はふつう, カッコ内に示された識別子が定義されているのでこれらのマクロを
指定する必要はない.

詳しくは src/misc1/clcklib の NOTE を参照されたい.

h) math1/oslib で用いられるマクロ

  OSQARN
  OSGARG

双方ともに、Fortran2003 が使用可能な場合にはF2003が指定される。

使用できない場合には, OSQARN については iargc または dummy の 2 つが指定可能で
ある. システムが iargc を持つ場合は iargc を, 持たない場合は dummy を
指定する.

OSGARG については getarg または dummy の 2 つが指定可能である. システ
ムが getarg を持つ場合は getarg を, 持たない場合は dummy を指定する.

これの詳細については src/math1/oslib の NOTE を参照されたい.

i) grph1/csgi で用いられるマクロ

  CSGI

ICHAR が0 から 255 の間の整数値を返す場合 general, -127 から 127 の間
の値を返す場合 other を指定する.

詳しくは src/misc1/clcklib の NOTE を参照されたい.

j) grph1/swpack で用いられるマクロ

  IWIDTH  : X で表示するウインドウの横幅
  IHEIGHT : X で表示するウインドウの縦幅

初期値はそれぞれ 900, 650 となっている.

k) grph2/uwpack で用いられるマクロ

  MAXNGRID : 作業領域の大きさ

初期値は 4000 となっている.


4. make - プログラムのコンパイル

ここまで準備したら, トップディレクトリで (つまり cd $DCLDIR ではいった
ところ)

  % make

とすれば以下の作業が行われる. (カッコ内には, make の具体的なターゲット
名を記す.) コンパイル(object), ライブラリの作成(library), データベースの
作成(dbase), , および $DCLDIR/bin ディレクトリにある基本コマンドの作成(script)

env2 にあるアプリケーションプログラムの作成(exec),exec は明示的に指定する必要がある.

 % make exec

5. make - インストール

コンパイルがすんだらインストールをおこなう.

  % make install

とすれば, ライブラリ, データベース, アプリケーションプログラムとコマン
ドコマンド群を適当なディレクトリにコピーする.

6. デモプログラムの作成

ここまでで必要な作業は終わっているので, 次に $DCLDIR/demo に移動してデ
モプログラムを作成する.

  % cd $DCLDIR/demo
  % make

make 終了後, 各ディレクトリを下がってデモプログラムを実行してみるとよ
い. グラフィック出力を含むものの実行例は次節参照のこと.


7. 使用例

電脳ライブラリを利用するには dclfrt コマンドを用いる. これは基本的に
Mkinclude のマクロ名 FC で指定した Fortran コンパイラのコマンドと同じ
で, ここまでの操作によって作成されたライブラリをあらかじめリンクするよ
うになっている. このコマンドを利用するためには, Mkinclude のなかの
BINDIR で指定されているディレクトリ名をシェル変数 $path に書き加えてお
かなければならない. これは .cshrc などの設定ファイルに書き加えておけば
簡単である. たとえば test01.f というグラフィックを含む次のようなプログ
ラムがあったとすると(ふつうの Fortran コンパイラでは -o オプションで実
行形式ファイル名を指定する),

      PROGRAM TEST01

      WRITE(*,*) 'WORKSTATION ID (I) ? ;'
      CALL SGPWSN
      READ(*,*) IWS

      CALL SGOPN(IWS)
      CALL SGFRM
      CALL SGSVPT(0.1,0.9,0.1,0.9)
      CALL SGSWND(0.0,10.0,0.0,10.0)
      CALL SGSTRN(1)
      CALL SGSTRF
      CALL SLPWWR(1)
      CALL SLPVPR(1)
      CALL SGTXZU(5.0,5.0,'TEST FOR GRPH1',0.03,0,0,3)
      CALL SGCLS

      END

  % dclfrt -o test01 test01.f

によって test01 という実行ファイルが作られる. (以下は標準ライブラリに
おける例である.)

  % ./test01

といれると

  WORKSTATION ID (I) ? ;
  1:X, 2:PS, 3:Tek ;

ときいてくる (ワークステーション名のリストは SGPWNS によって出力してい
る) ので, X ウインドウシステムが起動されている状態で1を入力するとウイ
ンドウが現れ, ウインドウの位置を確定すると描画がはじまる. 改ページ, 図
形表示の終了はクリックでおこなう.  2 (PS)を指定すると, dcl.ps というファ
イルがカレントディレクトリにできるので, 適当な出力コマンドを用いてプリ
ンターに出力する. たとえば,

  % lpr dcl.ps

とする. また3 (Tek)を指定するとテクトロ端末での描画が可能である.


8. 後始末

ディスクスペースに余裕がなければ, インストール途中に作成されたオブジェ
クトファイル, あるいはデモプログラムを消去する. トップディレクトリで

  % make clean

とすると不用なファイルが消去される.

なお,

  % make distclean

とすると, ローカルに生成したライブラリなどもすべて消去される.


A. Windowsでのインストール

パッケージを任意の場所に展開する．
展開されたトップディレクトリにある dclfrtvar.bat をダブルクリックする．
スタートメニューに登録するとよい．
必要な環境が設定されるはずであるが、されない場合は setenv.bat 内を確認する．
Intel Fortran のディレクトリなどが標準的でないか確認する．

A.1 Windows 上での DCL の Build

Microsoft Visual C++ がある場合は、nmake -f Makefile.win とすると
ビルドされ、 nmake -f Makefile.win install とすることでインストールされる．
インストール先などは トップディレクトリの Mkinclude.win に記述する．

A.2 Mingw環境

config.h がうまく作成されないので
cp config.h.mingw config.h を手動で行う必要がある．

B. CHECK

インストールが正しくおこなわれているかどうかは, たとえば以下の点に注意
する. (システムが用意する電脳ライブラリのコマンド類と区別するために,
それぞれのディレクトリに移って作業すること. )

B.1. $BINDIR (Mkinclude 参照) にあるいくつかのコマンドを実行してみる.

	% ./dclclr
		カラーマップが正しく表示されるか

	% ./dcldate; date
		日付情報が正しく表示されるか(date コマンドの出力と同じ
		か)

	% ./dcldbs
		データベースファイルのありかは正しいか

	% ./dclfont
		フォントのリストが正しく表示されるか

	% ./dclfont -sg:ifont=2
		コマンドラインオプションが通るか

	% ./dclver
		電脳ライブラリのバージョンは正しいか

	% ./repsl
		Mkinclude で指定した REPSL の値に近いか

B.2. $DCLDIR/demo/math1/oslib のチェック

	% ./oslb01
		osgenv が正しく動作しているか(printenv HOME と同じパス
		を示すか)

	% ./oslb02
		osexec が正しく動作しているか(ls の結果と同じか)

B.3. $DCLDIR/demo/misc1/clcklib のチェック

	% time ./clck01
		clckst.c が正しく動作しているか(time で出力される実行
		時間とだいたい等しいか - CPU の遅いマシンだと時間がか
		かるので注意!)

B.4. $DCLDIR/demo/misc1/randlib のチェック

	% ./rand01
		rngu0.c が正しく動作しているか(円周率 - 3.14 - に近い
		値が出力されるか)

B.5. $DCLDIR/demo/grph2/umpack のチェック

	% ./test05
		すべての地図投影が正しく表示されるか
