9 GLSC で gfortran

gfortran から GLSC が使えない、という訴えが学生からあった。

きれいな解決法はまだ見つかっていないけれど、 とりあえず次のようにすれば出来るみたい。

  1. Makefile の FC を gfortran にセットする。
    (make 時に Fortranコンパイラーをきちんと決めないと、 インターフェイスが正しく作れない。)
  2. libs/src/glsc_ftn_p.c のタブを展開しておく。
    (C のプリプロセッサーの仕様が変わったせいなのか? その辺は GLSC の作者が見通せなかったところか。)
    cd libs/src/
    mv glsc_ftn_p.c glsc_ftn_p.c.org
    expand -6 glsc_ftn_p.c.org > glsc_ftn_p.c
    cd ../..
    
    ここで expand は、タブをブランクに展開するコマンド。 あるいは、libs/Makefile 中の次の記述に expand を仕込んでも良いかも。
    $(SRCDIR)/glsc_ftn.h:   $(SRCDIR)/g_config.h $(SRCDIR)/glsc_ftn_p.c
                    $(CC) $(CFLAGS) $(CDEBUGFLAGS) -E $(SRCDIR)/glsc_ftn_p.c \
                        | sed -e '/^#/d' | uniq >$@
    
    を次のように直す。
    $(SRCDIR)/glsc_ftn.h:   $(SRCDIR)/g_config.h $(SRCDIR)/glsc_ftn_p.c
                    expand -6 $(SRCDIR)/glsc_ftn_p.c \
                        | $(CC) $(CFLAGS) $(CDEBUGFLAGS) -E - \
                        | sed -e '/^#/d' | uniq >$@
    
  3. test/fproto.c のタブを展開しておく。
    cd test
    mv fproto.c fproto.c.org
    expand -6 fproto.c.org > fproto.c
    cd ..
    
    これも test/Makefile の中に expand を仕込むものかも。 そうすると、 後述の 5. の “continue の前にブランクを 2 つ入れると” いうのも ここで出来る。
  4. GLSC を make する。
    (Fortranのテスト・プログラム以外はmake出来る)
  5. test にある ftests.f, ftestd.f の make に失敗する。 continue の前にブランクを 2 つ入れて、make し直し。

(2017/5/27) というわけでパッチ glsc-3.5+mk.patch を作った。

mkdir sagyou
cd sagyou
curl -O  http://www602.math.ryukoku.ac.jp/~nakano/software/math/glsc-3.5.a.tar.Z
curl -O  http://nalab.mind.meiji.ac.jp/~mk/daishin/glsc-3.5+a.patch
curl -O  http://nalab.mind.meiji.ac.jp/~mk/program/graphics/glsc-3.5+mk.patch

tar xzf glsc-3.5.a.tar.Z
cd glsc-3.5.a
patch -p1 < ../glsc-3.5+a.patch
patch -p1 < ../glsc-3.5+mk.patch
ここで Makefile を開いて FC=gfortran に直す。 その後は、単に make でコンパイル出来るはず。
make
sudo mkdir /usr/local/include
sudo mkdir /usr/local/lib
sudo mkdir /usr/local/bin
sudo make install

(2017/5/27追記) あれ?Makefile 中の CC を、 (中身が GCC) の gcc (Mac Ports でインストールしたものにすると、 g_sformat() で落ちる。 CC を中身が LLVM の /usr/bin/gcc とか /usr/bin/cc にすると 落ちない。 うーん。何が違うんだろう? とりあえず使えるから良いのだけど。 うんと暇が出来たら原因を究明する (かもしれない)。

(2017/5/29追記) 上山パッチを当てると、libs/src/g_bird.h が書き換えられて、 見慣れたマゼンタがモノクロになる。どうしてかなと思ったら、
diff -r _glsc-3.5/libs/src/g_bird.h _glsc-3.5-daishin/libs/src/g_bird.h
62,63c62,63
< #define ROOF_LINE()           (g_set_line (G_MAGENTA, 1, G_LINE_SOLID))
< #define SIDE_LINE()           (g_set_line (G_MAGENTA, 1, G_LINE_SOLID))
---
> #define ROOF_LINE()           (g_set_line (G_BLACK, 1, G_LINE_SOLID))
> #define SIDE_LINE()           (g_set_line (G_BLACK, 1, G_LINE_SOLID))
66c66
< #define ROOF_AREA()           (g_set_area (G_MAGENTA))
---
> #define ROOF_AREA()           (g_set_area (G_WHITE))
としてあった。何かそうする理由があるのかな (個人的な趣味で元に戻すかも)。


おまけ: 現象理学科Macの問題      少しメンテナンスが必要になっている人が多い。

一応、cglsc スクリプトのインストール法も書いておくと
curl -O http://nalab.mind.meiji.ac.jp/~mk/program/graphics/cglsc
chmod +x cglsc
sudo mv cglsc /usr/local/bin
(ここは Fortran の話なので、 Fortran プログラムをコンパイルするスクリプトの話をすべきかも…)

桂田 祐史
2018-12-25