Posted at

Sierra/HighSierra で Homebrew/phpbrew でハマった件

More than 1 year has passed since last update.

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 でパスを指定すると通った。次の Qitta 記事のおかげです。ありがとうございます。

参考: PHP7をmacOSでビルドしたらエラーになった

ということで、この方法で入るならと 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 .

だめ。全く同じエラーが出ます。

次の、コメントに書いてあるようにやってみます。

https://github.com/phpbrew/phpbrew/issues/612#issuecomment-314604913

phpbrew install 5.6.31 +default +openssl=/usr/local/Cellar/openssl/1.0.2l

通った!

ここまで来るのに、めっちゃ時間かかりました。(´Д`)ハァ…