1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Macportsでコンパイルエラーが出た時のその場しのぎ

Last updated at Posted at 2024-03-09

動機

macOS Sonomaをアップデート(14.4)し、Xcodeをアップデート(15.3)にアップデートしたら、macportsをコンパイルし直さないといけなくなってしまった。clangの関数ポインタの型チェックが厳しくなったらしく、多くのportsが依存しているlibiconvのコンパイルエラーで止まってしまった。

バグレポートは出ているけど、Fixされるのに時間がかかるかもしれないので、ほとんどのportslibiconvに依存しているので、クイックに対処したい。

Macportsでのビルドの段階でのファイル修正

  1. port install xxxxxxで止まったところで、ファイルを修正したあとport -f install xxxxxxと叩いて続きを行う。buildの過程で修正したファイルが別途上書きされてしまう可能性があるので、問題解決できない場合がある。
  2. port patch xxxxxxで、ソースファイルが用意されたところでファイルを修正し、port -f install xxxxxxと叩いて続きを行う。この場合、毎回ファイル修正が必要
  3. もし、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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?