FreeBSD gettextで起きたこと
FreeBSD14.0でgettextコンパイルが出来ない問題
FreeBSD14.0 を更地に入れた場合は問題になりませんが、FreeBSD13.x 以前のOSから更新した場合、運が悪い と gettext0.22.3(gettext-runtime)が以下のエラーを起こしてコンパイルできなくなります。
<pre>
pkg-static: Unable to access file /usr/ports/devel/gettext-runtime/work/stage/usr/local/include/autosprintf.h: No such file or directory
pkg-static: Unable to access file /usr/ports/devel/gettext-runtime/work/stage/usr/local/lib/libasprintf.a: No such file or directory
pkg-static: Unable to access file /usr/ports/devel/gettext-runtime/work/stage/usr/local/lib/libasprintf.so: No such file or directory
pkg-static: Unable to access file /usr/ports/devel/gettext-runtime/work/stage/usr/local/lib/libasprintf.so.0: No such file or directory
pkg-static: Unable to access file /usr/ports/devel/gettext-runtime/work/stage/usr/local/lib/libasprintf.so.0.0.0: No such file or directory
</pre>
考えられる原因:
ここにコメントしているヒトは今でもきちんと buildworld/installworld を
やっているようです。実は、12.4/13.2 になってから、私は FreeBSD-updateトラブルがあるなど理由がない限り、buildworld/installworld をしなくなりました。
subversion を使っていた時代と変わって git に移行したことで、それまで svn コマンドで簡単にソースコードを追跡してコンパイルする検証サイクルが動かなくなってしまったのもあります。git
でも出来るのでしょうが、面倒になって止めてしまったので、私以外にもそういうヒトが多かったのでしょう。そうなるとインストールなどのコード下記にとってはあまり興味がなさそうな検証環境が減ってしまいます。 linuxなどでは、「自分で解決した」という文化が育たないままkernelコードの瑕疵にツッコミを入れるだけのメンバーが増大したコミュニティがあるとかですが、古くから茨の道だった*BSD系では自力救済が習慣づいているメンバーが多かったはずです(私は他力本願ですが)
回避方法
’’’There was a big mess, so I had to clean /usr/include and extract older files from base.txz.
’’’
"/usr/include" 以下の整合が取れればとりあえずは問題回避にはなります。
根本解決
トラブルに至る原因がよくわかっていません。解決方法だけは明らかなのですが、障害の再現性が非常に低く、一度クリアしてしまうと /usr/include を古いのに戻しても、障害発生する状態に戻せません。そんなところを見ると、 /usr/include だけが問題を抱えているというわけではないということがわかります。
また、2010年代より、mergemaster が改善されてきたので最近 freebsd-update ですべて更新できてしまうのですが、/usr/include や /usr/lib の更新問題は残ってしまいます。
運が悪い という表現にしたは、/usr/include が何かの理由で更新されなかったということなので、想定通りに出来てしまった場合には何のお咎めもなくコンパイルが通ります。必ずしも有ることではないということです。
Discussion
年越して、もう出ないだろう?と思っていたら 同じ現象が出ました。すっかり対処方法を失念してGoogleで検索して自分の記事を読む羽目になっています(おじいちゃんもうお昼ご飯は食べましたよ)