DCLライブラリ f2c 化の手順
1) インターネットからダウンロードした最新 DCL の Fortran77 のソースファイルを展開する。 (例:ソースファイル名がdcl-5.1.j.tar.gz, 作業フォルダが /job の場合)
% cd /job
% gunzip dcl-5.1.j.tar.gz
% tar xvf dcl-5.1.j.tar
% cd dcl-5.1.j
または、
% zcat dcl-5.1.j.tar.gz | tar xvf -
% cd dcl-5.1.j
2) f2c 化用に作成したシェルスクリプト curf2c と changeAllMake 及びプログラムの フォルダを環境変数$PATHの検索範囲内に置く。
curf2c: f2c を用いて、Fortran77 ソースファイルをC言語に変更するシェルスクリプト
changeAllMake: Fortran77 用 Makefile をC言語用に変更するシェルスクリプト
3) f2c で変換する際にエラーになるのを避けるため、./src/math1/syslib 下のファイル glcqnp.g , gliqnp.g 及びglrqnp.g の中にある @REPSL, @INTMAX, @REALMAX, @REALMIN 及び @DS_PATH を数字または文字に変更する。
4) ./src/math1/syslib/Makefileを次のように修正する
line 38:@sed -e "s!@DS_PATH!\'$(DBASEDIR)/\'!" \
---> @sed -e "s!@DS_PATH!$(DBASEDIR)/!" \
5) f2c ツールを利用して、Fortran77 ソースファイルをC言語に変更する。この際、2)のスクリプトファイル curf2c を用いる。
% curf2c ./src
6) すべてのMakefileを修正する。この時、2)のスクリプトファイル changeAllMake を用いる。
% changeAllMake ./src
7) 3)で変更した @REPSL、@INTMAX、@REALMAX と @REALMIN、@DS_PATHを元に戻す。
8) ./configure を修正する。
line 2584に追加:
s%@IF_ONEXIT@%$IF_ONEXIT%g line 2417以降に以下の内容を追加:
cat << EOF > conftest.c
#include <stdlib.h>
#include <stdio.h>
int fn1(void);
void main( void )
{
atexit( fn1 ); }
int fn1()
{
return 0;
}
EOF
doit='$CC -o conftest ${CFLAGS-} conftest.c'
if { (eval echo configure:2403: \"$doit\") 1>&5; (eval $doit) 2>&5; }; then
IF_ONEXIT="onexit=on_exit" else
echo "Checking atexit OK" 1>&6
IF_ONEXIT="NO_ONEXIT" fi
echo "There is no atexit" 1>&6
rm -f conftest conftest.? confval?
line 2321からline 2329を変更:
#ifdef QUOTE
fprintf(fd1, "Z'%08X'\n", fmin.ui); #else
fprintf(fd2, "Z'%08X'\n", fmax.ui);
fprintf(fd4, "Z'%08X'\n", imax.ui);
fprintf(fd1, "Z%08X\n", fmin.ui); #endif
fprintf(fd2, "Z%08X\n", fmax.ui);
fprintf(fd4, "Z%08X\n", imax.ui);
----->
/*
#ifdef QUOTE
fprintf(fd1, "Z'%08X'\n", fmin.ui); #else
fprintf(fd2, "Z'%08X'\n", fmax.ui);
fprintf(fd4, "Z'%08X'\n", imax.ui);
fprintf(fd1, "Z%08X\n", fmin.ui); #endif
fprintf(fd2, "Z%08X\n", fmax.ui);
fprintf(fd4, "Z%08X\n", imax.ui);
*/
fprintf(fd1, "0x%08X\n", fmin.ui);
fprintf(fd2, "0x%08X\n", fmax.ui);
fprintf(fd4, "0x%08X\n", imax.ui);
※修正した./configure を示す
9) ./Makefile を修正する。
line 38以降に以下の内容を追加:
demos:
@echo "making the demo programs"
@for i in $(DIRDEMO) ; do \
cd $$i ; \ done
echo "Making $$i/" ; \
$(MAKE) ; \
cd .. ; \
line 7からline 11を変更:
DIRSALL = src bin
DIRSINST = src bin
DIRSPACK = src demo
DIRSCLN = src demo
DIRSCLNA = src demo bin doc etc lib ps sys dvlop
----->
DIRSALL = f2csrc src bin
DIRSINST = f2csrc src bin
DIRSPACK = f2csrc src demo
DIRSCLN = f2csrc src demo
DIRSCLNA = f2csrc src demo bin lib sys
DIRDEMO = demo
※修正した./Makefile を示す。
10) ./Mkinclude.in を修正する。
line 63を変更:
LDLIBS = @FLIBS@ $(DCLLIBOPT) @X_EXTRA_LIBS@ $(XLIBOPT) $(MATHLIBOPT)
----->
LDLIBS = @FLIBS@ $(DCLLIBOPT) $(F2CLIBOPT) @X_EXTRA_LIBS@ $(XLIBOPT) $(MATHLIBOPT)
line 62を変更:
LDFLAGS = $(DCLLIBPATH) $(XLIBPATH)
----->
LDFLAGS = $(DCLLIBPATH) $(XLIBPATH) $(F2CLIBPATH)
line 58を変更:
CFLAGS = @CFLAGS@ $(XINCPATH)
----->
CFLAGS = @CFLAGS@ $(XINCPATH) $(F2CINCPATH)
line 50以降に以下の内容を追加:
F2CINCPATH = -I$(DCLDIR)/f2clib
F2CLIBPATH = -L$(DCLDIR)/f2clib
F2CLIBOPT = -lf2c4dcl
LIBF2C = $(DCLDIR)/f2clib/libf2c4dcl.a
line 23からline 25を変更:
BINDIR = $(prefix)/bin
LIBDIR = $(prefix)/lib
DCLDIR = @DCLDIR@
----->
DCLDIR = @DCLDIR@
BINDIR = $(DCLDIR)/bin
LIBDIR = $(DCLDIR)/lib
line 9以降に以下の内容を追加:
.c :
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) $(LDLIBS)
ファイルの最後に以下のラインを追加:
#selection of function atexit()
IF_ONEXIT = @IF_ONEXIT@
※修正した./Mkinclude.in を示す。
11)configureを行う。
% configure
12)f2clib と f2csrc の二つのフォルダを作り、DCL用に別途作成したf2c ライブラリのソースファイルを f2csrc のフォルダにコピーし、ヘッダファイル f2c.h を f2clib にコピーする。
13)makeを行う。
% make
14)インストールを行う。
% make install
1) Fortranのソースファイルを f2c を用いてC言語化を行う。
% curf2c ./demo
2) FortranのMakefileをC言語用に変更する。
% changeAllMake ./demo
3) 以下の f2c 化したソースを修正する:
demo/math1/vialib/vial01.c の line 27: int ifna_();----->long ifna_();
demo/math1/viblib/vibl01.c の line 26: int ifnb_();----->long ifnb_();
demo/math1/vralib/vral01.cのline 28: int rfna_(real *r__)-----> doublereal rfna_(real *r__)
demo/math1/vrblib/vrbl01.cのline 26: int rfnb_(real *r__)-----> doublereal rfnb_(real *r__)
4) makeを行う:
% make demos