TeXでハマり

ハマりと言っても「TeX->dviでエラーが出る」とかいうようなハマりではない。

今日、TeXを書いてたのだが、なぜか俺のPCのTeX環境の大半が消えていた。しばらくして思い出したのだが、たしか昨年の夏ごろにHDDが非常にヤヴァい状態になり、HDD移行時についでにFreeBSDのバージョンを上げたので、その時にインストールしなかったのだろう。最近は(なぜか)Wordで書かされたり、IllustratorやCorelDraw!で書く作業だったり、という状況だったので今まで気づかなかった。ということでxdviやdvipdfmをmakeしようとしたら…なぜかdvipdfmがmakeできない。ここからドツボだった。

症状があまりにも謎なので、FreeBSDTeXに関連するソフトを(従来環境に影響が無い範囲で)全て消して、portsを最新版に入れ替えて再構築したのだが、それでもdvipdfmだけエラーが出る。ports自体の動作も明らかに変なのだが、手作業でもconfigureがエラーになる。だいたい、最近のTeXってイロイロと分割されてたり、やたらと色んなもんに依存してたり、ヤヤコシすぎ!

最終的に判明したエラーの原因は、dvipdfmの依存しているkpathseaのヘッダが"varargs.h"をincludeしていて、そこでエラーになっていた。configureがトンチンカンなエラーを表示するのがハマった最大の原因だ。まぁconfig.logを最初から見れば良かったので、自業自得なのだが。

今まで全く知らなかったのだが、最近は"stdarg.h"なるヘッダがあって、(少なくともFreeBSDでは)"varargs.h"は使ってはいけないようだ。例えば"malloc.h"とかと同じで「obsoluteだからダメよ」というだけの話のようなのだが…"stdarg.h"はISO Cで定義されているそうなので、なし崩し的に普及した"varargs.h"は抹殺しようという意図なのだろうというのが俺の予想。「どうせ互換なんだから"#warning"で警告だけ表示して、"stdarg.h"はincludeしておいてくれよ!!」と思うのだが、なぜか"#error"と書かれている。gccのバージョンチェックの後でエラーを出しているので、gcc側の意図もあっての仕様なのかもしれん。いずれにせよ、エラい人の考えることは分からん。