Mac版 NXTの環境構築でハマったところ

## はじめに
MacでNXTの環境構築をしていて

```
LegoNXTDevforMac/nxtOSEK/samples_jsp_c/Helloworld
```
内で

```
$make all
Compiling ../../ecrobot/../toppers_jsp/kernel/banner.c to banner.o
dyld: Library not loaded: /usr/local/lib/libmpfr.4.dylib
  Referenced from: /Users/kuboaki/Downloads/LegoNXTDevforMac/gnuarm/bin/../libexec/gcc/arm-elf/4.4.2/cc1
  Reason: image not found
arm-elf-gcc: Internal error: Trace/BPT trap: 5 (program cc1)
Please submit a full bug report.
See <http://gcc.gnu.org/bugs.html>; for instructions.
make: *** [build/kernel/banner.o] Error 1
```
みたいなエラーを経験して解決方法として```hoembrew```で```mpfr```を入れるとできるのですが最新版だとエラーがでて失敗してしてしまいます．

なので[ここ](https://qiita.com/honeniq/items/778cc08d2db78e6774d8)を参考にして解決していきます

## 解決方法
git管理されている

```
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
```
にアクセスして```git log```を用いて古いバージョンをインストールしていきます．
今回いじりたいのは```mpfr.rb```なので```ls mpfr.rb```で確認しておきましょう．
なければ```git fetch --unshallow```で全てのコミットを持ってくるのもありです．（時間かかります）
特定のバージョンだけなら```brew install [formula]```でいいかも

欲しいバージョンはmpfrの3.1.5なので

```
git log --oneline mpfr.rb | grep 3.1.5

出力
b46640ced7 mpfr: update 3.1.5 bottle.
578278b8fe mpfr 3.1.5
```

で指定バージョンのコミットを探します．
次に指定バージョンのコミットに```checkout```します．
```
git chekcout b46640ced7 mpfr.rb
```

ここでエディタを用いて```mpfr.rb```を開いてください
そして```EOS.undent```と書かれている部分を```EOS```と書き直してください
これは[ここ](https://github.com/ionide/Forge/issues/113)みるとちょっとhomebrew内で書き方が変わったようです．

mpfr.rbを修正したら```brew install mpfr```をしてください
このとき最新版が入っててインストールできないよとか言われたら

```
brew unlink mpfr
```
でシンボリックリンクを外しちゃってください
あとで```brew switch```でバージョンを変えられます(Pathの問題)
これでインストールできるのですが```brew install```をそのまますると最新版が入れられてしまうため

```
HOMEBREW_NO_AUTO_UPDATE=1 brew install mpfr
```

と環境変数を先に指定してください
これで晴れてインストールできたら

```
brew info mpfr

mpfr: stable 4.0.2 (bottled)
C library for multiple-precision floating-point computations
https://www.mpfr.org/
/usr/local/Cellar/mpfr/3.1.5 (25 files, 3.6MB) *
  Poured from bottle on 2019-10-10 at 17:05:42
/usr/local/Cellar/mpfr/4.0.2 (28 files, 4.7MB)
  Poured from bottle on 2019-10-10 at 16:17:07
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mpfr.rb
==> Dependencies
Required: gmp ✔
==> Analytics
install: 56,913 (30 days), 157,299 (90 days), 731,046 (365 days)
install_on_request: 706 (30 days), 2,164 (90 days), 14,886 (365 days)
build_error: 0 (30 days)
```

こんな感じで出てればOK！
後始末として過去のコミットに移動していたので元の場所まで戻りましょう

```
git reset HEAD
git checkout .
```

さて長かったですけどこれで
```LegoNXTDevforMac/nxtOSEK/samples_jsp_c/Helloworld```
内に戻って

```
make all
```
すれば素直にmakeが通るかと

## 終わりに
うちの大学での一講義中に出た課題ですが
homebrewの解決策は意外と汎用的に出てるエラーかも？
他のバージョンを入れようと試みて

```
Error: mpfr: undefined method `undent' for #<String:0x00007fd3eb9a1ca0>
```
こんなエラーが出たら[ここ](https://github.com/ionide/Forge/issues/113)を思い出して[formula].rbないのコードを見てみてください

## 参考資料
- [homebrewで過去のバージョンのソフトウェアをインストールする](https://qiita.com/hkak03key/items/23009b85650fe9818f8a#_reference-0cd6544af87fd0879171)
- [心がHomebrewで旧バージョンのパッケージを入れたがってるんだ](https://qiita.com/cokaholic/items/6db92c23b43d18bdab82)
- [[2018/10]homebrewで過去バージョンのパッケージをインストールする](https://qiita.com/nghryuki/items/7d65d8f55ea65b95310d)
- [今さらだけどHomebrewのコマンドをちゃんと理解して使おう](https://qiita.com/fuqda/items/db8aff0ba4068aea2cc6)
- [(Mac) Homebrew install fails with: <<-EOS.undent is disabled! #113](https://github.com/ionide/Forge/issues/113)