昨日、MacPortsでMySQL 8.4.2をインストールしていたところ、何故か急にビルドできなくなっている事に気がつきました。
最近まで特に問題なくビルドできていたので、Portfileのビルド設定が変更されたのかと思い、AIの助けもかりつついろいろ調べてみたのですが、どうやっても解決しません。
C++のテンプレート関連のエラーを抑制するフラグを追加したり、Portfileを過去のリビジョンに戻してみたりしても解決せず、散々回り道した結果、最終的にはXcode 16.3でClang 17が導入されていたのが原因だということがわかりました。
Xcode clang version recordによると、Xcode 16.2までは「Apple clang version 16.0.0」なのですが、先日公開されたXcode 16.3から「Apple clang version 17.0.0」となっているのです。
以下この問題の回避策を紹介します。
Command Line Toolsを使用して回避
macOSではビルドに使われるツールは、XcodeあるいはCommand Line Toolsによって導入されます。このため、XcodeあるいCommandLineToolsのどちらかを16.2(Clang 16)に戻せば、従来の環境に戻り、ビルドエラーが発生しないことが期待できます。
今回はXcodeは16.3のままにして、Command Line Tools for Xcode 16.2を導入することにしました。 古いCommand Line Toolsは、以下のページの「Additional tools」からダウンロードすることができます。
念のため既存のCommand Line Toolsを削除しておきます。
sudo rm -rf /Library/Developer/CommandLineTools
Command Line Tools for Xcode 16.2をインストールします。ダウンロードしたdmgファイルの中に含まれている「Command Line Tools.pkg」を実行します。
インストール後、「xcode-select -s パス」でを実行します。
xcode-select -s /Library/Developer/CommandLineTools
「clang --version」を実行し、次のように表示されれば成功です。
$ clang --version Apple clang version 16.0.0 (clang-1600.0.26.6) Target: arm64-apple-darwin24.4.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
この後以下のコマンドでmysql8をインストールすることができました。
sudo port clean mysql8 sudo port install mysql8
まとめ
Xcode 16.3ではClang 17が導入されており、ソフトウェアのビルドが失敗する可能性があります。上流で対応されるまでXcode 16.2やCommand Line Tools for Xcode 16.2を使用する事で問題を回避することができます。