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

みたいなエラーを経験して解決方法としてhoembrewmpfrを入れるとできるのですが最新版だとエラーがでて失敗してしてしまいます.

なのでここを参考にして解決していきます

解決方法

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と書き直してください
これはここみるとちょっと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>

こんなエラーが出たらここを思い出して[formula].rbないのコードを見てみてください

参考資料