./configure地獄に陥っている君へ

C++やCでプログラムを開発しているときに、依存ライブラリやら何やらの環境を沢山用意したくなりますよね?富豪ならここでVMware ESXiやKVMを使うところでしょうか。LLerなら、たとえばRubyPythonにはrbenvやvirtualenvがあります。FreeBSDを使っている人ならjailを使う場面ですね。ちょっと器用な人ならchroot(8)を使いこなしているかもしれません。しかしjailは私には窮屈だし、情弱な私はまさに今pficommonやらで困っていました。つまり、

  1. ユーザ空間で
  2. 大して苦労もせずに
  3. いろんなUnix系OS
  4. どんなものが入っていてもとりあえず

環境をコロコロ切り替えたいのです。これを手作業でやろうとすると沢山の環境変数をシェル毎に毎回exportする羽目になります。ld_configとか( ゚Д゚)ハァ?という感じですよね。rvmなんかよくできていると思うのですが如何せんRuby専用で非常にアレ。どうしてみんな自分の世界の中で閉じこもるのでしょうか。

そこで作ったのがenvyです。使い方はとても簡単です。

$ git clone git://github.com/kuenishi/envy.git
$ cd envy
$ source local/envy/activate

とすると、プロンプトが

(envy)$ 

になります。これで、このローカル環境でもろもろ使えることになります。例えば

(envy)$ envy install python3

と打ってみてください。ながーいビルドの後、

(envy)$ which python3
/Users/kuenishi/src/envy/local/bin/python3

と、Python3が使えるようになっています。これでいちいちPATHとかLD_LIBRARY_PATHとかC_INCLUDE_PATHとかそういうのを設定しなくてもよくなります。ポジションとしては、jailとKVMの間、virtualenvとAPT*1の間の微妙なニッチを目指しています。焼きそばやお好み焼きには牛乳が合うと思う人は僕と気が合うのでこのツールも気に入ってくれるはずです。
とはいえ昨日の思いつきで作り始めたので、今のところ沢山の制限があります(誰かが手伝ってくれるのを期待しています)。

  • bash専用
  • なぜかPythonに依存
  • パッケージ解決はちょう適当というか決め打ち
  • 依存関係解決はしてくれない
  • ./configureなどに引数は指定できない
  • re2には使えない
  • プロキシ環境下ではgit://などがちょっとややこしいかも
  • PYTHONPATH
  • pipもなぜか入らない
  • pficommonを入れるとなぜかconfigureで固まる(ことがある)が、^Cすると成功する
  • re2が入らないのでjubatusもまだ入らない(fetchまではできるのでそれだけでも随分楽)

こういうシステムがガイシュツだったら、お手数ですが教えてください。僕もそちらを使います。

*1:yum, macports, etc...