動機
macOS Sonomaをアップデート(14.4)し、Xcodeをアップデート(15.3)にアップデートしたら、macportsをコンパイルし直さないといけなくなってしまった。clangの関数ポインタの型チェックが厳しくなったらしく、多くのportsが依存しているlibiconvのコンパイルエラーで止まってしまった。
バグレポートは出ているけど、Fixされるのに時間がかかるかもしれないので、ほとんどのportsがlibiconvに依存しているので、クイックに対処したい。
Macportsでのビルドの段階でのファイル修正
-
port install xxxxxxで止まったところで、ファイルを修正したあとport -f install xxxxxxと叩いて続きを行う。buildの過程で修正したファイルが別途上書きされてしまう可能性があるので、問題解決できない場合がある。 -
port patch xxxxxxで、ソースファイルが用意されたところでファイルを修正し、port -f install xxxxxxと叩いて続きを行う。この場合、毎回ファイル修正が必要 - もし、
Macportsで配布されているpatchファイルなどの修正が必要な場合には、portコマンドを叩く前にパッチファイルを修正する。
libiconv @1.17の問題
今回遭遇した(lib/encodings.def with an "incompatible function pointer types initializing" error)の問題は、3つ目の方法で解決できた。
% port -v -f clean --all libiconv
% sed -E -i.bak -e '/utf8mac_(mbtowc|wctomb)/ s/, int n)/, size_t n)/' \
`port -v -f dir libiconv`/files/patch-utf8mac.diff
% port -v -f install libiconv
gmp @6.3.0の問題
なんか、次々にハマっているが、gmpでも問題がある。configureの際に、GNU m4を見つけることができず、Xcode Commandline Toolsをインストールしているのにも関わらず、m4を見つけてくれなくなった。Xcode,Xcode Commandline Toolsを入れ直したり、xcode-select -s .... を変えてみたりしてもダメだったので、Portsfileに明示的は環境設定を追記することで回避してみた。
% port -v -f clean --all gmp
% cat >> `port -v -f dir gmp`/Portfile <<EOF
if {${os.platform} eq "darwin" && ${os.major} > 13 && [string match *clang* ${configure.compiler}]} {
configure.env-append M4=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/gm4
}
EOF
% port -v -f install gmp