4 MacPorts で Command Line Tools のバージョンが分からない、と言われたら

(思いの外長く続きそう)


このところすっきりしない Command Line Tools のバージョン問題 (例えば 「macOS Catalina → Big Sur アップデート」)。

今回、MacPorts の更新をしているときに次のように警告された。
Warning: cltversion: The Command Line Tools are installed, but MacPorts cannot determine the version.
Warning: cltversion: For a possible fix, please see: https://trac.macports.org/wiki/ProblemHotlist#reinstall-clt

そのWWWページ (Reinstalling the command line tools ¶) を見に行ってみる。

When the command line tools package is installed, a receipt is generated that can be accessed with /usr/sbin/pkgutil. When upgrading the OS or Xcode, this receipt can be lost even though the command line tools remain installed. Without this receipt, MacPorts cannot determine which version of the command line tools package is installed, and worse, Software Update will never update the CLTs.
DeepL で翻訳する。
コマンドラインツールのパッケージをインストールすると、 /usr/sbin/pkgutil でアクセスできるレシートが生成されます。OSやXcodeをアップグレードすると、 コマンドラインツールがインストールされていても、このレシートが失われるこ とがあります。このレシートがないと、MacPortsはどのバージョンのコマンドラ インツールパッケージがインストールされているかを判断できず、最悪の場合、 Software UpdateはCLTを更新しません。

そこに書かれている対策は、要するにインストールし直し。 以前、別件で
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
という強引な方法を書いた。上のページに書いてあるのは、1つは次の手順。

  1. まず
    sudo touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
    softwareupdate -l
    
  2. ソフトウェア・アップデートを実行する (りんごマーク → このMacについて→ ソフトウェア・アップデート)。 「このMac用のアップデートがあります」 Command Line Tools for Xcode 12.4 と表示される。[今すぐアップデート]をクリックする。
  3. このままだといつまでも「このMac用の…」が消えない。1で作ったのを削除する。
    sudo rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
    
もう一つは、 Apple Developper site から Command_Line_Tools_for_Xcode_12.4.dmg を入手して (Xcode のバージョンを調べて、それ用のものを選択する)、 インストールする、というもの。こちらの方が自然な気がするが、 Apple ID を使う必要があったりして面倒だから?


一方、これとは違うが、やはりバージョン関係で出る問題で、
Warning: The macOS 11.2 SDK does not appear to be installed. Ports may not build correctly.
Warning: You can install it as part of the Xcode Command Line Tools package by running `xcode-select --install'.
と警告が出る(Command Line Toolsはインストール済みなのに)ことも。 これに対して上のようにしても改善されない。

はてな。 /Library/Developer/CommandLineTools/SDKs には、 MacOSX10.15.sdk とMacOSX11.1.sdk があるけれど、 確かに11.2 はないね。 うーん。

「Developer Forums: MacOSX 11.2 SDK」 と言うやり取りを見た。ある人は /opt/local/libexec/macports/lib/port1.0/portconfigure.tcl の中の
default configure.sdk_version   {$macosx_sdk_version}
とあるところを
default configure.sdk_version   {11.3}
と書き換えたとか。私の場合は 11.3 でなくて 11.1 にするのかな (11.3 というのは Xcode のベータバージョンに出て来るもの)。 確かにこう書き換えると警告は出なくなる。

議論している人達は Apple のせいと言っていて、 それが正しいらしい雰囲気があるけれど、本当かな。 いつになったら直るのかな。

(2021/4/30) BigSur 11.3 にアップデートしたら、 default configure.sdk_version {11.1} では警告が出た。それはそうか。
default configure.sdk_version   {$macosx_sdk_version}
に戻した。 念のため、復習すると、シェルの初期設定ファイルで次のようにしている。
bash や zsh
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
tcsh
setenv SDKROOT `xcrun --sdk macosx --show-sdk-path`

桂田 祐史