Homebrew

元はと言えば、SLからMLに乗り換えたのが始まり。

SL環境では結構Homebrewを愛用していたので、MLにしたなら64bitでコンパイルし直さなきゃ、と思って、数を見るとざっと500くらいインストールしている。いつのまにか。
順序を考えながら brew rm しては brew install を繰り返して、実は今3周目なのです。
ようやくわかってきたのですが、Macのコンパイラ環境が替わってる。

SL環境では、gcc-4.0とgcc-4.2とllvm-gcc-4.2があったが、llvmはXCode専用という感じだった。
ML環境では、clangとllvm-gcc-4.2になっていてgcc-4.2はない。gccに該当するものはllvm-gccにリンクされている。
さらに調べてみると、clangはllvm用のコンパイラで所謂gccではない。
llvm-gcc-4.2も当然llvm用のコンパイラだが、SL時代から振る舞いはgccに似ていた。
ということは、gcc → llvm-gcc → clang へと環境が移行してきているように感じる。

で本題、Homebrewの吐き出すログを見ていると、何やら「superenv」なるものが、片っ端からコンパイラオプション(-O,-W)とかX11関係のディレクトリ指定(-L)とか削除しているようだ。
「aplus」というフォーミュラがなかなか通らなかったので調べた次第。

「superenv」とは何ぞやとHomebrewのサイトをうろついていたら、少しずつわかってきました。
英語にそうは詳しくないので詳細は書けませんが、

・単に brew install した場合、コンパイラは clang が指定され、最適化やウォーニングやアーキテクチャなど環境に依存するオプションは自動的に削除される。その代わり、ビルドできないケースはほとんどない?

・コンパイラを変えるコマンドラインオプションが追加されている。
–use-clang  clangでコンパイルする(デフォルト)
–use-llvm  llvm-gccでコンパイルする
–use-gcc  gcc-4.2でコンパイルする

・コンパイラを切り替える環境変数もある
HOMEBREW_CC  clangとかllvmとかgccとか

・superenvを無効にするコマンドラインオプションが追加されている
–env=std  従来のENV動作をさせる。その代わりビルドを失敗したら自分で対処する?

現在、基本「–env=std」の付加で作業していますが、結構コンパイル通ります。
たまに「–use-llvm」したり diff 取ってフォーミュラを編集したりするくらい。
そうそう、上記「aplus」は「–env=str –use-llvm」で通りました。

どなたか詳しい方がいらっしゃったら一体何が起こっているのか教えてください。

 

コメントをどうぞ