octave 5.1.0 のコンパイル

octave が古いのが気に入らないので簡単に入るか試してみる。
[GNU Octave](https://www.gnu.org/software/octave/) からソースをダウンロード。
$HOME/opt/SRC の下へ解凍

```shell:
Ras1:~/opt/SRC> wget ftp://ftp.jaist.ac.jp/pub/GNU/octave/octave-5.1.0.tar.xz
Ras1:~/opt/SRC> unxz -c octave-5.1.0.tar.xz | tar xvf -
Ras1:~/opt/SRC> cd octave-5.1.0
Ras1:~/opt/SRC/octave-5.1.0> ./configure --prefix=$HOME/opt/octave-5.1.0

configure で無いと言われたものを順次入れていく。

Fortran コンパイラがないと言われるので入れる
Ras1:~/opt/SRC/octave-5.1.0> sudo apt install gfortran-6 gfortran-6-doc
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  gcc-6-doc gcc-doc-base libgfortran-6-dev
提案パッケージ:
  doc-base libgfortran3-dbg libcoarrays-dev
以下のパッケージが新たにインストールされます:
  gcc-6-doc gcc-doc-base gfortran-6 gfortran-6-doc libgfortran-6-dev
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 0 個。
15.6 MB のアーカイブを取得する必要があります。
この操作後に追加で 37.9 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
...
それでも Fortran が見つけられないというので環境変数 F77 を定義。
Ras1:~/opt/SRC/octave-5.1.0> gfortran-6 --version
GNU Fortran (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ras1:~/opt/SRC/octave-5.1.0> setenv F77 `which gfortran-6`

コンパイラツールを追加
Ras1:~/opt/SRC/octave-5.1.0> sudo apt install flex bison byacc gperf

BLAS LAPACK ライブラリを追加
Ras1:~/opt/SRC/octave-5.1.0> sudo apt install libopenblas-dev libtmglib-dev libtmglib3

Qhull PCRE ライブラリ追加
Ras1:~/opt/SRC/octave-5.1.0> sudo apt install libqhull-dev libpcre3-dev

termcap, terminfo, ncurses, curses, termlib... が無いなら readline off にしてくださいと言われる。ライブラリはあるので、-dev のヘッダなどを追加。
Ras1:~/opt/SRC/octave-5.1.0> sudo apt install libtinfo-dev libncurses5-dev

GNU Readline 4.2 or later が無いと言われるも apt install
Ras1:~/opt/SRC/octave-5.1.0> sudo apt install libreadline-dev

ここまで入れたところで最後まで configure が通るようになる。が...
configure: WARNING: BZIP2 library not found.  Octave will not be able to compress or decompress bzip
2 files.
configure: WARNING: HDF5 library not found.  Octave will not be able to load or save HDF5 data files
.
configure: WARNING: FFTW3 library not found.  The slower FFTPACK library will be used instead.
configure: WARNING: FFTW3F library not found.  The slower FFTPACK library will be used instead.
configure: WARNING: GLPK library not found.  The glpk function for solving linear programs will be d
isabled.
configure: WARNING: cURL library not found.  The ftp objects, urlread, and urlwrite functions will b
e disabled.
configure: WARNING: sndfile library not found.  The audioinfo, audioread, and audiowrite functions will be disabled.
configure: WARNING: PortAudio library not found.  The audioplayer, audiorecorder, and audiodevinfo functions will be disabled.
configure: WARNING: GraphicsMagick++ library not found.  The imread, imwrite, and imfinfo functions for reading and writing image files will not be fully functional.
configure: WARNING: OpenGL libs (GL and GLU) not found.  OpenGL graphics will be disabled.
configure: WARNING: Fontconfig library not found.  OpenGL graphics will not be fully functional.
configure: WARNING: gl2ps library not found.  Printing of OpenGL graphics will be disabled.
configure: WARNING: Qt libraries not found; disabling Qt GUI
configure: WARNING: FLTK config script not found.  FLTK toolkit will be disabled.
configure: WARNING: qrupdate not found.  The QR & Cholesky updating functions will be slow.
configure: WARNING: AMD library not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: CAMD library not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: COLAMD library not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: CCOLAMD library not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: CHOLMOD library not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: CXSparse library not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: UMFPACK not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: KLU library not found.  This will result in some lack of functionality for sparse matrices.
configure: WARNING: SUNDIALS NVECTOR serial library not found.  Solvers ode15i and ode15s will be disabled.
configure: WARNING: SUNDIALS IDA library not found.  Solvers ode15i and ode15s will be disabled.
configure: WARNING: ARPACK not found.  The eigs function will be disabled.
configure: WARNING: JAVA_HOME environment variable not initialized.  Auto-detection will proceed but is unreliable.
configure: WARNING: Include file <jni.h> not found.  Octave will not be able to call Java methods.
configure: WARNING:
configure: WARNING: The libraries needed for OpenGL graphics were not found.
configure: WARNING: Creating plots is still possible if gnuplot is installed.
configure:
configure: NOTE: Libraries or auxiliary programs may be skipped if they are not found
configure: NOTE: OR if they are missing required features on your system.

それっぽいものを apt search から探して適当に追加
> sudo apt install lbzip2 libbz2-dev hdf5-helpers hdf5-tools libhdf5-openmpi-dev libfftw3-3 libfftw3-dev libfftw3-mpi-dev libfltk1.3-dev libglpk-dev  libgli-dev libglu1-mesa-dev libgl1-mesa-dev libgladeui-dev libqt5opengl5-dev libqt5opengl5 libqt5help5  qttools5-dev libqt5scintilla2-dev libgl2ps-dev  libgraphicsmagick++1-dev libgraphicsmagick1-dev libfftw3-dev libfftw3-mpi-dev libarpack2-dev libparpack2-dev libqrupdate-dev　libsundials-serial-dev  libomp-dev llvm-dev
> sudo apt install openjdk-8-jdk-headless openjdk-8-jdk libsndfile1-dev  libcurl4-openssl-dev portaudio19-dev 
> sudo apt install libgmp3-dev
```
余計なのも一杯入ったみたいですが取り敢えずライブラリはここまで。
古そうなのは $HOME/opt の下に手動で。環境変数は .tcshrc に以下のようなものを

```tcsh:setenv
setenv PATH	~/opt/bin:$PATH
setenv PYTHONPATH	~/opt/lib/python2.7/site-packages
setenv CFLAGS	"-I/usr/include/arm-linux-gnueabihf -I$HOME/opt/include"
setenv CXXFLAGS	"-I/usr/include/arm-linux-gnueabihf -I$HOME/opt/include"
setenv LDFLAGS	"-L$HOME/opt/lib -Wl,-rpath,$HOME/opt/lib"
setenv LD_LIBRARY_PATH	"$HOME/opt/lib;$HOME/opt/lib/gcc/armv7l-unknown-linux-gnueabihf/9.1.0;$HOME/opt/lib/gcc/armv7l-unknown-linux-gnueabihf/9.1.0/plugin;$HOME/opt/libexec/gcc/armv7l-unknown-linux-gnueabihf/9.1.0"
```
LDFLAGS	の `-Wl,-rpath,$HOME/opt/lib` は、本当なら `-R$HOME/opt/lib` で良い筈なんですが上手くいかないのでこれで。 (gcc 専用)

automake, libtool

```tcsh:automake&nbsp;libtool
> wget ftp://ftp.jaist.ac.jp/pub/GNU/automake/automake-1.9.tar.gz
> tar xzvf automake-1.9.tar.gz
> cd automake-1.9
> ./configure --prefix=$HOME/opt
> make && make install
> wget ftp://ftp.jaist.ac.jp/pub/GNU/libtool/libtool-2.4.6.tar.xz
> xzcat libtool-2.4.6.tar.xz |tar xvf -
> cd libtool-2.4.6
> ./configure --prefix=$HOME/opt
> make -j4 && make install
```
gmake 4.1 → 4.2.1

```tcsh:gmake
> wget ftp://ftp.jaist.ac.jp/pub/GNU/make/make-4.2.1.tar.bz2
> bzip2 -dc make-4.2.1.tar.bz2 | tar xvf -
> ./configure --prefix=$HOME/opt
> make -j4
> make install
```
GNU gperf 3.0.4 → 3.1

```tcsh:gperf
> wget http://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz
> tar xzvf gperf-3.1.tar.gz
> cd gperf-3.1
> ./configure --prefix=$HOME/opt
> make -j4 && make install
```
flex 2.6.1 → 2.6.4

```tcsh:flex
> wget https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.lz
> lzip -dc flex-2.6.4.tar.lz | tar xvf -
> cd flex-2.6.4
> ./configure --prefix=$HOME/opt
> make -j4 && make install
```
diffutils 3.5 → 3.7

```tcsh:diffutils
> wget ftp://ftp.jaist.ac.jp/pub/GNU/diffutils/diffutils-3.7.tar.xz
> xzcat diffutils-3.7.tar.xz | tar xvf -
> ./configure --prefix=$HOME/opt
> make -j4 && make install
```

make check が skip するので適当に locale を追加しておく
`sudo dpkg-reconfigure locales`
>cs_CZ.UTF-8
>el_GR.ISO-8859-7
>en_US.UTF-8
>fr_FR.UTF-8
>ja_JP.UTF-8
>ru_RU.KOI8-R
>ru_RU.UTF-8
>tr_TR.UTF-8
>zh_CN.GB18030
>zh_HK.BIG5-HKSCS

そして `unsetenv LANG` してロケールを解除しておく

grep 2.27 → 3.3

```tcsh:grep
> curl -O http://ftp.iij.ad.jp/pub/gnu/grep/grep-3.3.tar.xz
> xzcat grep-3.3.tar.xz | tar xvf -
> cd grep-3.3
> ./configure --prefix=$HOME/opt
> make -j4 && make check && make install
```
sed 4.4 → 4.7

```tcsh:sed
> curl -O http://ftp.iij.ad.jp/pub/gnu/sed/sed-4.7.tar.xz
> xzcat sed-4.7.tar.xz | tar xf -
> cd sed-4.7
> ./configure --prefix=$HOME/opt
> make -j4 && make check && make install
```
[paper](https://github.com/rrthomas/paper)

```tcsh
> wget https://codeload.github.com/rrthomas/paper/zip/master
> mv master paper.zip
> unzip paper.zip
> cd paper-master/
> ./bootstrap && ./configure --prefix=$HOME/opt && make
```
[psutils](https://github.com/rrthomas/psutils)
github から master ブランチを取ってくる

```tcsh:
> wget https://codeload.github.com/rrthomas/psutils/zip/master
> mv master psutils.zip
> unzip psutils.zip
> cd psutils-master/


```
groff

```tcsh:
>  wget ftp://ftp.iij.ad.jp/pub/gnu/groff/groff-1.22.4.tar.gz
> tar zxvf groff-1.22.4.tar.gz
> ./configure --prefix=$HOME/opt

```

patch 2.7.5 → 2.7.6

```tcsh:patch
> wget ftp://ftp.jaist.ac.jp/pub/GNU/patch/patch-2.7.6.tar.xz
> unxz -c patch-2.7.6.tar.xz | tar xvf -
> ./configure --prefix=$HOME/opt
> make -j4 && make install
```
gmp は libgmp3-dev が最新版

mpfr 3.1.5 → 4.0.2

```tcsh:mpfr
> wget ftp://ftp.jaist.ac.jp/pub/GNU/mpfr/mpfr-4.0.2.tar.xz
> xzcat mpfr-4.0.2.tar.xz | tar xvf -
> cd mpfr-4.0.2
> ./configure --prefix=$HOME/opt 
> make -j4 && make install
```
mpc 1.0.3 → 1.1.0

```tcsh:mpc
> apt search libmpc-dev
libmpc-dev/stable,stable 1.0.3-1 armhf

> wget ftp://ftp.jaist.ac.jp/pub/GNU/mpc/mpc-1.1.0.tar.gz
> tar xzvf mpc-1.1.0.tar.gz
> cd mpc-1.1.0
> ./configure --prefix=$HOME/opt --with-mpfr=$HOME/opt
> make -j4 && make check && make install
```
binutils 2.28-5 → 2.32

```tcsh:binutils
> wget ftp://ftp.jaist.ac.jp/pub/GNU/binutils/binutils-2.32.tar.lz
> lzip -dc binutils-2.32.tar.lz | tar xvf -
> cd binutils-2.32
> ./configure --prefix=$HOME/opt && make -j4 && make install
```
isl

```tcsh:isl
> wget http://isl.gforge.inria.fr/isl-0.21.tar.xz
> xzcat isl-0.21.tar.xz | tar xvf -
> cd isl-0.21
> ./configure --prefix=$HOME/opt && make -j4 && make install
```
openmpi

```tcsh:openmpi
> curl -O https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.1.tar.bz2
> tar jxf openmpi-4.0.1.tar.bz2
> cd openmpi-4.0.1
> ./configure --prefix=$HOME/opt --enable-mpi-java --enable-openib-control-hdr-padding --enable-btl-portals4-flow-control --with-jdk-dir=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt
> make -j4 && make install
```
gawk 4.1.4 → 5.0.1

```tcsh:gawk
> curl -O http://ftp.iij.ad.jp/pub/gnu/gawk/gawk-5.0.1.tar.lz
> lzip -dc gawk-5.0.1.tar.lz | tar xvf -
> cd gawk-5.0.1
> ./configure --prefix=$HOME/opt --enable-versioned-extension-dir
> make -j4 && make check && make install
```
bison & yacc 3.0.4 → 3.4

```tcsh:bison&nbsp;&amp;&nbsp;yacc
> curl -O http://ftp.iij.ad.jp/pub/gnu/bison/bison-3.4.2.tar.xz
> tar axvf bison-3.4.2.tar.xz
> cd bison-3.4.2
> ./configure --prefix=$HOME/opt
> make -j4 && make check && make install
```
make check は恐ろしく時間が掛かるので飛ばしてしまっても...

bc 1.06.95 → 1.07.1

```tcsh:bc
> wget http://ftp.iij.ad.jp/pub/gnu/bc/bc-1.07.1.tar.gz
> tar xzf bc-1.07.1.tar.gz
> cd bc-1.07.1
> ./configure --prefix=$HOME/opt --with-readline
> make -j4 && make check && make install
```

gcc 6.3.0 → 9.2.0

```tcsh:gcc
> curl -O http://ftp.iij.ad.jp/pub/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.xz
> xzcat gcc-9.2.0.tar.xz | tar xvf -
> cd gcc-9.2.0
> ./configure --prefix=$HOME/opt \
--with-mpc=$HOME/opt --with-mpc-include=$HOME/opt/include --with-mpc-lib=$HOME/opt/lib \
--with-mpfr=$HOME/opt --with-mpfr-include=$HOME/opt/include --with-mpfr-lib=$HOME/opt/lib\
--with-isl=$HOME/opt --with-isl-include=$HOME/opt/include --with-isl-lib=$HOME/opt/lib \
--with-float=hard
> make -j3
...
> ls -ltr
...
-rw-r--r--  1 pi pi      13 May  7 06:31 serdep.tmp
-rwxr-xr-x  1 pi pi   41154 May  7 06:31 config.status*
-rw-r--r--  1 pi pi  945592 May  7 06:31 Makefile
-rw-r--r--  1 pi pi   34817 May  7 06:31 config.log
-rw-r--r--  1 pi pi       7 May  7 06:31 stage_final
drwxr-xr-x  5 pi pi    4096 May  7 06:31 build-armv7l-unknown-linux-gnueabihf/
drwxr-xr-x  5 pi pi    4096 May  7 07:25 stage1-armv7l-unknown-linux-gnueabihf/
drwxr-xr-x  5 pi pi    4096 May  7 10:52 prev-armv7l-unknown-linux-gnueabihf/
-rw-r--r--  1 pi pi      10 May  7 13:09 compare
-rw-r--r--  1 pi pi       7 May  7 13:09 stage_last
-rw-r--r--  1 pi pi       7 May  7 13:09 stage_current
drwxr-xr-x 30 pi pi    4096 May  7 13:09 host-armv7l-unknown-linux-gnueabihf/
drwxr-xr-x 14 pi pi    4096 May  7 13:10 armv7l-unknown-linux-gnueabihf/
> make install
```
6時間半かかってコンパイルが完了したようです:upside_down:

--with-float=hard は以下のメッセージの回避のため。確かに OS の中に gnu/stubs-
soft.h というファイルはありません。

```
/usr/include/arm-linux-gnueabihf/gnu/stubs.h:7:11: fatal error: gnu/stubs-soft.h: そのようなファイルやディレクトリはありません
    7 | # include <gnu/stubs-soft.h>
      |           ^~~~~~~~~~~~~~~~~~
compilation terminated.
```
bash

```tcsh:
> wget http://ftp.iij.ad.jp/pub/gnu/bash/bash-5.0.tar.gz
> tar xzf bash-5.0.tar.gz
> cd bash-5.0
> setenv LDFLAGS "-L/home/pi/opt/lib -Wl,-rpath,/home/pi/opt/lib"
> ./configure --prefix=$HOME/opt --enable-largefile \
--enable-alias --enable-arith-for-command --enable-array-variables \
--enable-bang-history --enable-brace-expansion --enable-command-timing \
--enable-cond-command --enable-cond-regexp --enable-directory-stack \
--enable-extended-glob --enable-history --enable-job-control \
--enable-multibyte --enable-prompt-string-decoding
> unsetenv LANG
> make -j4 && make check && make install                                                   
```

いよいよ本題の octave

```tcsh:octave
> xzcat octave-5.1.0.tar.xz | tar xvf -
> cd octave-5.1.0
> /usr/bin/aclocal (←普通はしないですが、automake で怒られたので)
> /usr/bin/automake-1.15 (← automake 1.14 を使えと言われたので)
> autoconf
> time ./configure --prefix=$HOME/opt/octave-5.1.0
...snip...
configure: WARNING: Qt does not work with the OpenGL libs (GL and GLU); disabling OpenGL graphics with Qt GUI
configure: WARNING: SUNDIALS IDA library not configured with IDAKLU, ode15i and ode15s will not support the sparse Jacobian feature
configure: WARNING: JAVA_HOME environment variable not initialized.  Auto-detection will proceed but is unreliable.
configure:
configure: NOTE: Libraries or auxiliary programs may be skipped if they are not found
configure: NOTE: OR if they are missing required features on your system.
340.285u 54.282s 6:50.69 96.0%  0+0k 349056+150808io 1302pf+0w

こんな感じなので動きそうなのですが Qt の OpenGL が無効になってますねぇ。
> pkg-config --libs Qt5OpenGL
-lQt5OpenGL -lQt5Widgets -lQt5Gui -lQt5Core
特に指定しなくても OpenGL が有効になるってことなのかな？
```

正しくは configure の中で見ているヘッダファイルやライブラリのファイルを見つけて [パッケージの内容を検索](https://packages.debian.org/ja/) で検索。該当のパッケージを追加するのが良いでしょう。
色々入れて、sudo ldconfig しても見つからないと言われたりするので一旦再起動。そしていよいよ...

```shell
> time make -j 4
...
  CXXLD    libgui/liboctgui.la
  CXXLD    src/octave-cli
liboctave/.libs/liboctave.so: undefined reference to `MArray<long long>& operator-=<long long>(MArra
y<long long>&, long long const&)'
collect2: error: ld returned 1 exit status
Makefile:14379: recipe for target 'src/octave-cli' failed
make[2]: *** [src/octave-cli] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/home/pi/opt/SRC/octave-5.1.0'
Makefile:25970: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/pi/opt/SRC/octave-5.1.0'
Makefile:9763: recipe for target 'all' failed
make: *** [all] Error 2
22995.933u 1684.597s 4:46:29.04 143.5%  0+0k 95665664+13795800io 7629572pf+0w
>
```
4時間半以上かかってエラー... octave-cli をリンクする時にエラー？-j4  の並列コンパイルでタイミングが悪かったかなと -j 無しでもう一度。

```shell
> time make
preserving existing HG-ID file
make  all-recursive
make[1]: Entering directory '/home/pi/opt/SRC/octave-5.1.0'
preserving existing HG-ID file
Making all in libgnu
make[2]: Entering directory '/home/pi/opt/SRC/octave-5.1.0/libgnu'
make  all-recursive
make[3]: Entering directory '/home/pi/opt/SRC/octave-5.1.0/libgnu'
make[4]: Entering directory '/home/pi/opt/SRC/octave-5.1.0/libgnu'
make[4]: Nothing to be done for 'all-am'.
make[4]: Leaving directory '/home/pi/opt/SRC/octave-5.1.0/libgnu'
make[3]: Leaving directory '/home/pi/opt/SRC/octave-5.1.0/libgnu'
make[2]: Leaving directory '/home/pi/opt/SRC/octave-5.1.0/libgnu'
make[2]: Entering directory '/home/pi/opt/SRC/octave-5.1.0'
preserving existing HG-ID file
  CXXLD    src/octave-cli
liboctave/.libs/liboctave.so: undefined reference to `MArray<long long>& operator-=<long long>(MArray<long long>&, long long const&)'
collect2: error: ld returned 1 exit status
Makefile:14379: recipe for target 'src/octave-cli' failed
make[2]: *** [src/octave-cli] Error 1
make[2]: Leaving directory '/home/pi/opt/SRC/octave-5.1.0'
Makefile:25970: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/pi/opt/SRC/octave-5.1.0'
Makefile:9763: recipe for target 'all' failed
make: *** [all] Error 2
37.288u 12.206s 0:51.35 96.3%   0+0k 92760+224io 14pf+0w
> 
> ls -l src/octave
-rwxr-xr-x 1 pi pi 152796 Mar 14 05:08 src/octave*
```
やっぱり駄目ですね。まぁ、octave 本体ができてるから...make が進まないのか。
では、Makefile の octave 本体のリンク設定を octave-cli に追加して→失敗しました。
うーん、何が悪いんだろう。当然ながら make src/octave-gui も同じエラーで失敗。
liboctave が悪そうなので、そのディレクトリをエラーメッセージで egrep 'MArray.*long' するとスタティックリンク用のライブラリがいくつか引っかかる。
名前からして怪しいのは libarray.a かなぁ。

```shell
> find liboctave/ -type f | grep -v '\.o$' | xargs egrep 'MArray.*long'
バイナリファイル liboctave/operators/.libs/liboperators.a に一致しました
バイナリファイル liboctave/array/.libs/libarray.a に一致しました
バイナリファイル liboctave/.libs/liboctave.so.7.0.0 に一致しました
バイナリファイル liboctave/numeric/.libs/libnumeric.a に一致しました
>
```

nm 使って調べるの？とか思ってたらこんなのを発見。
[あるシンボルが どのオブジェクトファイル／共有オブジェクトに含まれているか検索するスクリプト](https://aki-yam.hatenablog.com/entry/20091122/1258905636) を使って
 T or t を見つければ良いんじゃない？ (このレベルになると sh の方が楽なので bash に切り替え)

```shell
bash$ ( for i in liboctave/operators/.libs liboctave/array/.libs  liboctave/.libs liboctave/numeric/.libs
do
( cd $i ; ~/bin/search-sym MArray )
done ) | less
```
そして見つからず。うん、事前に追加したライブラリを参照してるよね。と思い直す。も、それらしきものは見つからず

```shell
bash$ ( for i in `find /usr/lib -type d`
do
( cd $i ; ~/bin/search-sym MArray )
done ) | less
```
が、ここで apt でインストールされた octave を思い出す。ひょっとしてこいつのライブラリをリンクしようとしてバージョンが古いからおかしくなっているのでは？
> sudo apt remove octave octave-common octave-info
> sudo apt autoremove
以下のパッケージは「削除」されます:
  aglfn gnuplot-data gnuplot-x11 liblua5.1-0 liboctave3v5 libosmesa6 libplot2c2 libpstoedit0c2a
  libqscintilla2-12v5 libqscintilla2-l10n libqt4-network libqt4-opengl libtext-unidecode-perl
  libwxbase3.0-0v5 libwxgtk3.0-0v5 libxml-libxml-perl libxml-namespacesupport-perl
  libxml-parser-perl libxml-sax-base-perl libxml-sax-expat-perl libxml-sax-perl libzip4 pstoedit
  tex-common texinfo

して、消しすぎた感じがするので必要そうなのをインストール。octave の GUI を Qt 5 にしたので gnuplot も Qt に。

> sudo apt install tex-common texinfo gnuplot-qt libosmesa6

そしてビルド！ 5時間待ち。ビルドもこんな感じでログを取りながら実行するよう shell script 化済み。

````sh:Octave_make
#!/bin/bash

BANNER (){
    echo =============================
    date +"===  $1 %F %T ==="
    echo =============================
}

ls octave-5.1.0/ > /dev/null && rm -rf octave-5.1.0
( \
    BANNER "extract" ;\
    xzcat gcc-9.1.0.tar.xz | tar xvf - ;\
    cd octave-5.1.0 ;\
    BANNER "aclocal" ;\
	/usr/bin/aclocal ;\
	\
    BANNER "automake" ;\
	/usr/bin/automake-1.15 ;\
	\
    BANNER "autoconf" ;\
	autoconf ;\
	\
    BANNER "configure" ;\
    ./configure --prefix=$HOME/opt ;\
	\
    BANNER "make" ;\
    make -j4 ;\
    BANNER "done" ;\
) 2>&1 | tee octave_make_log
```
そしてやはり失敗。うーん、どうしたらいいんだろう？

ついでに [mutt-ja](https://osdn.net/projects/mutt-j/releases/71043) も
[本家](http://www.mutt.org/) の方がバージョンが上ですが

```tcsh:
> apt list mutt
一覧表示... 完了
mutt/stable,stable,now 1.7.2-1+deb9u1 armhf [インストール済み]

> sudo apt remove mutt
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libnotmuch4 libtokyocabinet9
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージは「削除」されます:
  mutt
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 5,997 kB のディスク容量が解放されます。
続行しますか? [Y/n]
(データベースを読み込んでいます ... 現在 181152 個のファイルとディレクトリがインストールされています。)
mutt (1.7.2-1+deb9u1) を削除しています ...
mime-support (3.60) のトリガを処理しています ...
desktop-file-utils (0.23-1) のトリガを処理しています ...
man-db (2.7.6.1-2) のトリガを処理しています ...
gnome-menus (3.13.3-9) のトリガを処理しています ...

本体をダウンロード
> curl -O  ftp://ftp.mutt.org/pub/mutt/mutt-1.11.4.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 4475k  100 4475k    0     0   933k      0  0:00:04  0:00:04 --:--:-- 1052k
> tar zxf mutt-1.11.4.tar.gz
> cd mutt-1.11.4
パッチをダウンロード
> curl -O 'https://jaist.dl.osdn.jp/mutt-j/71043/ja-mutt-1.11.4.tar.bz2'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  496k  100  496k    0     0  1378k      0 --:--:-- --:--:-- --:--:-- 1383k

> mkdir FreeBSD_PORTS
> cd FreeBSD_PORTS/
> tar jxf ../ja-mutt-1.11.4.tar.bz2
```