9 Big Sur で GLSC と格闘

(しばらく工事中となりそう。ごちゃごちゃしています。)

「Big Sur でGLSC」 というのを書いた。


macOS の Command Line Tools に含まれる C コンパイラーでは、 暗黙の宣言を認めなくなったので、 オリジナルの GLSC がコンパイル出来なくなっている。

(コンパイラーのオプションに -std=C89 と指定するとコンパイル出来そうだが、そういう後ろ向きなのはやめることにした。)

そこで、突貫工事でプロトタイプ宣言を書きまくってコンパイル出来るようにした。 Intel CPU の Mac ならば、MacPorts で GCC をインストールすることが出来て、 それに含まれる gfortran を使って、 次の手順で GLSC をフルにインストール出来る (sagyou というディレクトリィを作って、 そこに必要なファイルをコピーして、 ソースプログラムをコンパイルして、ライブラリィを生成して、 /usr/local 以下にコピーしている)。
rm -rf sagyou
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.patch20201229

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.patch20201229
make>&make.log
sudo mkdir -p /usr/local/bin /usr/local/include /usr/local/lib
sudo make install
(最後の2つのコマンドでは、sudo を使って管理者権限で実行しているので、 パスワードを尋ねられる。コマンドをコピペして実行する場合は、 一つ一つ実行すること。)

しかし、M1 チップに対応する GCC はまだ公式リリースされていない (2021/7/11追記    もうとっくの昔にリリースされている。)。

High Performance Computing for Mac OS X というWWWサイトには、 M1 用の gfortran が置いてあったけれど、 一体中身は何だろう (それにしてもこのページは随分久しぶりだ)。

gfortran がない場合でも、 上と同じ手順で(Fortran関係を抜いて)インストールだけは出来る。 ふむ。GLSC の Makefile はよく出来ているね (この辺、本当にすごいと思う)。

今年度の学生も自分も gfortran は使わなさそうなので、あまり急ぐ必要はない。


メモ1     GLSCとは何か     「実は、多くのプログラミング言語で、 グラフィックスの機能は言語仕様に含まれておらず、 グラフィックスを実現するには、 その環境に合った(プログラム)ライブラリィを利用するのが普通です。」

「GLSC (Graphic Library for Scientific Computing) とは、 龍谷大学数理情報学科のグループが作成した、 科学技術計算の結果を可視化するためのライブラリィです。」

「GLSCは、いわゆるフリーソフトウェアで、 オリジナル・バージョンは 1995年にリリースされたものが最終版です。」

「C言語や Fortran で書かれたプログラムから、X Window System の 描画機能 (Xlib) を呼び出すことで、グラフィックスを実現します。」

メモ2     GLSC のマニュアル

メモ3     X11 は、3つのボタンがあるマウスを備えたコンピューター (ワークステーションと呼ばれた) をターゲットとして作られた。 Windows マシンのマウスで 3 ボタンは普通なので、想像するのは難しくないだろう (右クリックは普通にあり、ホイール・クリックが中ボタンのクリックに相当する)。 一方、Mac の純正マウスはボタンがない (ボタンが1つとみなすべき?)。 Mac で X11 を実現する XQuartz は、 XQuartz の[環境設定][入力]にある 「3ボタンマウスをエミュレート」にチェックを入れることで、 次のように動作する。

メモ4     描画したグラフィックスの保存法が少し悩ましい。

  1. オリジナルで用意されていたのは、メタファイルを出力して、 g_out という専用プログラムで PostScript に変換する、 というやり方。しかし、今ひとつ使いづらい。
  2. 次の関数を使って保存する、というハックを考えた人がいて、 それが結構使われている。
    void g_dump(char *fname, Display *display, Window wid)
    {
      char command[256];
      sprintf(command, "import -window %lu %s", wid, fname);
      system(command);
    }
    
    これは、 外部コマンドとして import (ImageMagick に含まれるコマンド) を呼び出して、 ウィンドウの内容を保存するもので、 g_dump("reidai8a.png", g_get_display(), g_get_window()); のように用いる。
  3. 秋山正和氏が機能追加した G.L.S.C. 3.8.6 には、 g_capture_set(), g_capture() という関数があり、 それを利用することで画像が保存できる。
      g_capture_set("ディレクトリィの名前");
      ...
      g_capture();
    

G.L.S.C. 3.8.6 のmakeは、Big Sur 以前では
mkdir sagyou2
cd sagyou2
curl -O http://www.isc.meiji.ac.jp/~akiyama_masakazu/Software/glsc-3.8.6.zip
curl -O http://nalab.mind.meiji.ac.jp/~mk/program/graphics/glsc-3.8.6-mk-patch
unzip glsc-3.8.6.zip
cd glsc-3.8.6
patch -p1 < ../glsc-3.8.6-mk-patch

mv Makefile Makefile.org
cp -p Makefile.mk Makefile
curl -O http://nalab.mind.meiji.ac.jp/~mk/program/graphics/cglsc386
chmod +x cglsc386
sudo mv cglsc386 /usr/local/bin

やはり g_out() では、Big Sur で色々引っかかる (なるほど、そこは多分手をつけられていないんだ)。 g_out については、make のターゲットから外すか、 上のパッチを当てたディレクトリィをコピーすると良い。



桂田 祐史