macOS Sierra とか High Sierra にして、Xcode9 にした時に、 Homebrew やら phpbrew がいろいろおかしくなった時のメモです。
この問題は、それぞれの環境によるところが大きいと思います。どなたもがこういったことが起こるわけでもなさそうですし、ただ、設定ができない状態では本当に困ってしまうので、対処療法をせざるを得ません。
今回、僕が遭遇した様々なトラブルと同じ目にあう人の助けになればと、Qiita にメモを残すことにしました。(後々の自分のためともいう)
Sierra と Xcode9 の組み合わせ編
うまくいかない現象と、その解決方法をつらつらと書いていきます。
brew update に失敗
brew update をした時に
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
こんなのがでたら
brew prune
とする
Homebrew で PHP をインストール
PHP をインストールしようと
brew install php70
などとするとエラーが出る。
brew install php70 --build-from-source
と、 --build-from-source
をつけたらビルドが通るようになった。
これは、PHP 本体だけじゃなくて、拡張のインストールのときも有効です。
phpbrew でビルドがコケる
phpbrew install 5.6.31
とかすると
configure: error: off_t undefined;
というエラーが出る。これの解決法がどうもわからなかった。
phpbrew install 7.0.8
と別のバージョンを入れようとすると、エラーが変わって、
ld: file not found: /usr/lib/system/libsystem_darwin.dylib for architecture x86_64
というエラーが出る。こちらは、
LDFLAGS="-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/system" phpbrew install 7.0.8
と LDFLAGS
でパスを指定すると通った。次の Qiita 記事のおかげです。ありがとうございます。
ということで、この方法で入るならと brew では 5.6 をインストールして、phpbrew で 7系を入れることにした。
phpbrew install 7.1.10
と、最新版 7.1 を入れようと思ったら、またまた
configure: error: off_t undefined;
というエラーが出るので、こちらもさっきうまく行った方法でやってみようと、
LDFLAGS="-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/system" phpbrew install 7.1.10
でやってみる。見事にビルドが通った。
さっきのエラーは 5.6 を入れたようとしていた時と同じエラーじゃないですか。それじゃ、ということで 5.6 系でもこの方法でやってみる
LDFLAGS="-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/system" phpbrew install 5.6.31
おお!無事に通った。ということで、Sierra + Xcode9 環境で、phpbrew うまくいかない時は、.profile
などに
export LDFLAGS="-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/system"
をセットしてやるとうまくいきそうです。
Hight Sierra と Xcode9 編
さて次は High Sierra です。実は、Sierra 編とは別の Mac です。
Sierra と Xcode9 の組み合わせが良くないのであって、 High Sierra と Xcode9 なら、なんの問題もないだろうと思ってたんですが、いろいろありました。
だけど、これも僕の環境の別な何かが原因なのかもしれません。
発生したのは OpenSSL の evp.h
ヘッダファイルが見つからないというエラーです。
phpbrew install 5.6.31
次のエラーが出ました。
configure: error: Cannot find OpenSSL's <evp.h>
libressl がどうのという話があったので入れてみます。
brew install libressl
状況変わらず
include ディレクトリにシンボリックリンクを置いてみた
cd /usr/local/include
ln -s /usr/local/opt/openssl/include/openssl .
だめ。全く同じエラーが出ます。
次の、コメントに書いてあるようにやってみます。
phpbrew install 5.6.31 +default +openssl=/usr/local/Cellar/openssl/1.0.2l
通った!
ここまで来るのに、めっちゃ時間かかりました。(´Д`)ハァ…