Sagemath-9.0 がなんとかコンパイルできた件

`SageMath-9.0.app` のデバッグのために, とにかくコンパイルしてみることにしました. コンパイルの前提条件を読むと難しそうな感じなのですが, 最近の MacOS でコンパイルする場合は, ソースコードをダウンロードしてきて, `make` コマンドを実行するだけでできるようです.

デバッグ用の出力を増やして, 起動時のトラブルの調査でクラッシュする直前の情報の収集に向けて一歩進むことができました.

## 実際に試した使用環境

* macOS Mojave 10.14.6
* Xcode Version 11.1 (11A1027)
* Command Line Tools (macOS Mojave version 10.4) for Xcode 10.3
* Sage-9.0
* 作業記録 2020年03月 23日〜26日

## Sagemath-9.0 のソースのダウンロード

公式サイト [Sagemath](https://www.sagemath.org) に行って, 右上の隅の `Source Code` というボタンをクリックします.
[Source Code Distribution](https://www.sagemath.org/download-source.html) というページに遷移します.

*  寄り道: ここで, ミラーサイトのすぐ下の, `Information` もところを読むと, 「`Sagemath` のコンパイルはソースをゲットして, ソースツリーを展開したら `make` コマンドをパラメーターなしで実行すると一発でコンパイルできる.」という内容が書いてあります.  最近の MacOS の場合はこの記述が該当するようです.

次にミラーサイトを選びます. 日本でダウンロードする場合は理研 [Riken, Japan](http://ftp.riken.jp/sagemath/src/index.html) か山形大学 [Yamagata University, JP](http://ftp.yz.yamagata-u.ac.jp/pub/math/sage/src/index.html)  で OK です. 次に, `sage-9.0.tar.gz` をクリックしてダウンロードを開始します.

* 寄り道: `changelogs` は `sage-6.8.p0.txt` で止まっています. 
* 寄り道: `README.txt` も 2015-04-17 という日付で止まっています. `README.txt` の中を読むと dependencies を揃えてからコンパイルする雰囲気ですが, 最近の MacOS の場合は気にしなくていいようです.

ブラウザーのダウンロード先のフォルダーに `sage-9.0` というフォルダーがでてきます. これを判かり易い場所に移します.

デバッグの目的でコンパイルする場合は,  `sage-9.0.tar.gz` 自体を残しておいた方がよいので, ゴミ箱から回収してどこかに仕舞っておきます.

ブラウザーで自動展開のオプションを切っていれば, `sage-9.0.tar.gz` がダウンロード先のフォルダーにあるはずで, これを判かり易い場所に移してからダブルクリックすれば  `sage-9.0` というフォルダーがでてきます. 

## Xcode について

Apple 提供の `Xcode` はコンパイラーを含む統合開発環境です. `Xcode commad-line tools` はシェルから `Xcode` の機能を使うためのパッケージです.  バージョンやリリースが上がるときに使用許諾条件みないなものが変化することがあるようです. 実際, 昔は mac に同梱ですぐに使えたのですが, 最近はだんだん厳しくなってきて, 登録や使用許諾条件の同意が必要になったりしているようです. 

また, バージョンやリリースによって, `AppStore` でダウンロードして使えたり, `AppStore` からのダウンロードがフリーズしたり , ダウンロードできても, うまく動かなかったりすることがあるようです. そういう場合は, `developer.apple.com` からダウンロードして使うことになっているようです. こちらの方も `Apple ID` でサインアップするようになってきています. 

素直なバージョンの場合は `Xcode` がダウンロードできている状態で

```Console
myhome$ xcode-select  --install
```

というコマンドを実行するとソフトウェアがダウンロードできますので,

```Console
myhome$ sudo xcodebuild -license 
```

というコマンドを実行して, ライセンスに同意  `agree` すると, `Xcode commad-line tools` が使えるようにまります.

その辺の情報を Qiita で調べてみました.

* `@leo1109` さんの [Xcodeインストールメモ(Xcode-10.2.1)](https://qiita.com/leo1109/items/0f4c0b343b1515bbc90d)
* `@royroy` さんの [macOSでcommand line tools for xcodeとhomebrewのインストール](https://qiita.com/royroy/items/338362362de73a94fc0c)
* `@___inon_` さんの [Command Line Toolsを手動でインストールする](https://qiita.com/___inon_/items/4a318f29e1dd68ad8071)

私自身は既にライセンスに同意する手続もしてありますので, 以上の記事の内容をなぞって検証することは諦めました.

## Sagemath-9.0 のコンパイル

[Sagemath](https://www.sagemath.org) から `Help/Documentation` ボタンで 遷移すると [Help and Support](https://www.sagemath.org/help.html) に遷移します. その中の  `SageMath standard documentation` という節の `Installation Guide` をクリックすると [Welcome to the SageMath Installation Guide](http://doc.sagemath.org/html/en/installation/) に遷移します. ここから `Install from Source Code` をクリックすると, [Install from Source Code](http://doc.sagemath.org/html/en/installation/source.html) というページが見つかります.

ここの `Prerequisites` という節を見ると, `GCC` の `gfortran` を作らないといけないのだろうか,  `gfortran` とバージョンを合わせるために `C` と `C++` もコンパイルしないといけないのだろうか, `ar` や `ranlib` のバージョンは大丈夫だろうかなど心配になってきます.

実際のところ, これは杞憂になっていて, ソースツリーのトップで

```Console
myhome/sage-9.0$  make
```

を実行すると, コマンドラインからの起動用の  `Sagemath-9.0` のコンパイルができます. (コマンド名は `make` コマンドを実行したフォルダーの直下の `sage` です.) `gfortran` も自動的にコンパイルしてもらえました.

コンパイル開始前にチェックしておかないといけない注意点があります.

注意点に進む前に, Macアプリのコンパイルの仕方を書いておきます. 

```
myhome/sage-9.0$ cd  src/mac-app
myhome/sage-9.0/src/mac-app$ make
```

を実行すると, Macアプリができます.
また, Macアプリを格納したディスクイメージファイルもできます.

現在の注意点は6項目です.

まず, コマンドラインから起動する `Sagemath-9.0` についてです.

1. MacBookPro などノートの場合は, 機械が過熱するため 3月でもクーリング用のファンを使う状態でした.
2. MacBookPro 2018 年モデルでもコンパイルは 5時間かかりました. Mac を電源につないで作業しました.  機械がスリープしないように設定するか, Mac を見張ってときどき Mac を起こすかする必要があります.
3. この方法でコンパイルしてできたソフトウェアは配置場所を変更すると正常動作ができなくなります. [sagemath/binary-pkg](https://github.com/sagemath/binary-pkg) を使って "relocatable" にしないといけないらしいのですが, その方法の調査はまだできていません. `Sagemath-9.0` を `/usr/local/bin` などにおいて使う場合は, `Sagemath-9.0` の置き場所をあらかじめ環境変数で指定する必要があるようです. 現状では unix  系のパワーユーザー以外はユーザーのホームフォルダー内のどこかに `SageMath-9.0.app` をおいて使用するという考え方のようです.
4. 環境変数  `SAGE_FAT_BINARY` をセットせずに `make` すると, コンパイル時の機械専用の `Sagemath-9.0` ができます. スピードが速いという利点がある一方で, 他の機械に移して使うことができないという欠点があります.
5. コンパイル開始から4時間ぐらいすると `“java”コマンドラインツールを使用するには、JDKをインストールする必要があります。` というポップアップが出てきます. これは放置して待てば OK です. ただし, ポップアップはかなりしつこくて, そのせいでワープロの入力などが難しくなってしまいます. Mac を使う他の用事がある時間を避けてコンパイルした方がよいと思います.

`@yoshi-heita` さんの　[Catalina “java”コマンドラインツールを使用するには、JDKをインストールする必要があります。](https://qiita.com/yoshi-heita/items/618f1f36e1d4a18818bd) (タイトルからブラケットを外してあります) や `@github-nakasho` さんの ["java"コマンドラインツールを使用するには...のポップアップを出さない方法](https://qiita.com/github-nakasho/items/6bab63265c3cf59d7f52) で対策の仕方を読みましたが, 既にコンパイル開始から 4時間になっていましたので, コンパイルに使っている `Terminal.app` を起動し直すことを避けるため, 対策は先送りとしました. 今回のトラブルの原因が Web 周辺のことなのか, `Terminal.app` 自体なのかはよくわかりませんでした.

次に, ダブルクリックで起動する Macアプリについてです.

6. コンパイルの際に陰で働く `Xcode` のバージョンが `Xcode Version 11.1 (11A1027)` の場合は予め設定が必要です. (同じ症状が他のバージョンでもでているようですが, 実際に使ったバージョンのこととして報告します.) 設定の仕方は,  `@eytyet`さんの [ エラー：xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance](https://qiita.com/eytyet/items/59c5bad1c167d5addc68) にあります. この設定の前の `make` では下記のエラーがでて, コンパイルが止まってしまいました.

```Console
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory  '/Library/Developer/CommandLineTools' is a command line tools instance
```

## 次の課題

MacOS 上の Sagemath の普及のためには, Sagemath の Macアプリを使いやすくする必要がありますので, ユーザー環境の再現が次の課題になります. `sagemath/binary-pkg` の使用法を点検して, SageMath-9.0.app の署名の問題と, MacOS Catalina での起動時のフォルダーの問題を調査します.