tl;dr
#! /bin/bash
target_files="c++ cpp g++ gcc x86_64-redhat-linux-c++ x86_64-redhat-linux-g++ x86_64-redhat-linux-gcc"
gcc_version=`gcc -dumpversion | cut -d. -f1,2`
if [[ -z "$gcc_version" ]]; then
echo "Don't get GCC version."
exit 1
fi
if [[ -x `which brew` ]]; then
brew_prefix_dir=`brew --prefix`
for target_file in $target_files; do
target_path=`which $target_file`
link_path=${brew_prefix_dir}/bin/${target_file}-${gcc_version}
if [[ -x $target_path && ! -e $link_path ]]; then
ln -s -v $target_path $link_path
fi
done
fi
上記のファイルを作って実行すればおけ。
$ ./symbolic_link_gcc_version.sh
`/home/example/.linuxbrew/bin/c++-4.4' -> `/usr/bin/c++'
`/home/example/.linuxbrew/bin/cpp-4.4' -> `/usr/bin/cpp'
`/home/example/.linuxbrew/bin/g++-4.4' -> `/usr/bin/g++'
`/home/example/.linuxbrew/bin/gcc-4.4' -> `/usr/bin/gcc'
`/home/example/.linuxbrew/bin/x86_64-redhat-linux-c++-4.4' -> `/usr/bin/x86_64-redhat-linux-c++'
`/home/example/.linuxbrew/bin/x86_64-redhat-linux-g++-4.4' -> `/usr/bin/x86_64-redhat-linux-g++'
`/home/example/.linuxbrew/bin/x86_64-redhat-linux-gcc-4.4' -> `/usr/bin/x86_64-redhat-linux-gcc'
What's Linuxbrew
"A fork of Homebrew for Linux" by Linuxbrew というわけで OS X の Homebrew を Linux 環境でも使えるようにしたものです。とても便利。
何が起きたの?
CentOS 6.4 で Linuxbrew を快適に使用していたところ、あるときから突然…
$ brew install lv
Error: lv cannot be built with any available compilers.
To install this formula, you may need to:
brew install gcc
ってなってしまったのでした。
ちなみに素直に brew install gcc すると…
$ brew install gcc
==> Installing dependencies for gcc: gmp, mpfr, libmpc, isl, cloog
==> Installing gcc dependency: gmp
Error: gmp cannot be built with any available compilers.
To install this formula, you may need to:
brew install gcc
gcc が使えないので gcc の make に必要な package も当然 install できないという悲しい現実。
どうしてこうなった
"gcc-4\.[3-9]" というファイルがあるかどうかで gcc の存在確認をしているためだと思われる。
詳細は検証していないけど Replace CompilerQueue with predetermined priority lists という 2014/09/19 辺りの commit の結果っぽい。
解決策
とにかく gcc があることを認識してもらえばいいので Standalone Installation of Linuxbrew にある Create symlinks for gcc を参考に ~/.linuxbrew/bin に gcc-4.4 といった symbolic link を作れば良い。
まず gcc の version を調べる。
$ gcc -dumpversion
4.4.7
だとしたら
$ ln -s `which gcc` `brew --prefix`/bin/gcc-4.4
これで解決。
上記した script では念の為 gcc 以外の cpp, g++ あたりも同様の処理しています。
Plan B
Standalone Installation of Linuxbrew ← system の gcc の力を借りて、結果的に Linuxbrew 自体で gcc を入れてしまう方法もアリ。
一応実際に試してみたけど、$HOME/.linuxbrew がとても大きい(一通り入れて 1.1GB ほど)ことになってしまい切ない。