macOSでよく使用されるパッケージマネージャであるHomebrewは通常、コンパイル済みのバイナリをダウンロードしてインストールするので、Formula(パッケージ)のインストール・更新を手軽に行えます。
しかし、macOSのバージョンが古い場合、Formulaのインストール・更新時にソースコードをクローンして手元でビルドする必要があります。その際、コンパイラとソースコードの相性など、さまざまな原因でビルドが失敗することがあります。
この記事では、Homebrewでビルドエラーが起こったときの対処方法を紹介します。
ビルドエラーに対処するために
通常、Formulaをインストール・更新するにはbrew install <Formula名>またはbrew upgrade <Formula名>コマンドを実行します。その際に、オプションとして-dを指定すると、ビルドが失敗した時に対処を選ぶプロンプトを表示させることができます。
選択できるコマンドは、以下の通りです。
-
1. raise:-dを指定しなかったときと同じ動作(エラー出力してビルドを中断し、クリーンアップ)をします。 -
2. ignore: エラーが発生した工程をスキップします。 -
3. backtrace: Homebrew自体のどこでエラーが発生したか、スタックトレースを表示します。 -
4. irb: Ruby インタプリタ(irb)を起動します。
Formulaファイル(後述)を見ながら、対話的にビルドを進めることができます。irbが終了すると、エラーが発生したところからビルドが再開されます。 -
5. shell: 既定のシェルを起動します。
ソースコードを直接変更する必要があるときなどに便利です。シェルが終了すると、再び5つの選択肢が表示されます。
-dオプションを指定する際は、あわせて-vオプションも指定しましょう。コンパイラの出力がコンソールに表示されるようになるので、原因の特定に役立ちます。
Formulaファイルを確認して、問題箇所を探り当てる
Formulaファイル(/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula内にFormulaと同名で存在します)には、Formulaの基本情報や依存関係、ビルドツールに渡す引数などが記載されています。問題がそこにあると考えられる場合は、適宜修正します。
brew edit <Formula名>を実行すると、vimでFormulaファイルが開きます。
-
depends_on: "<Formula名>": 必要な別のFormula(ライブラリなど)を指定します。 -
def build〜end内: ビルドのための手順が記述されています。
ソースコードを修正する
場合によっては、ソースコードを直接修正する必要が出てくるかもしれません。その際は、コンソールに表示されたコンパイラのエラーメッセージ等を頼りに、自力で調べながら修正していく必要があります。方法はさまざまですが、大方、次の手順で行うと簡単でしょう。
- ビルド失敗時に表示されるプロンプトで、
5を選択してシェルを起動します。 -
open -Rを実行して、Finderでビルド中のソースコードのルートディレクトリを開きます。 - エラーメッセージなどを頼りに必要なソースファイルを修正し、保存します。
-
Ctrl+Dを押してシェルを終了します。 -
4を選択して、irbを起動します。 - 何も入力せず
Ctrl+Dを押します。irbが終了し、ビルドが続行されます。
ビルドエラーが起こったときは、これらの手順を参考にするとよいでしょう。