動機
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