p5.34-dbiのコンパイルができない(何故?)

このサーバーはHigh Sierraで動いている。
前にも書いたが、最新のSequoiaではSandboxが厳し過ぎて、外部のDiskにアクセスできなかったのだ。
何時から厳しくなるのか判らない、「OSを新しくしたら動かなくなった」は困るので上げられない。
Web & Mail Serverが止まってしまうのは致命的である。

なので、OS自体は留めておいて、MacPortsで最新のPortsに維持している。
外からの侵入経路はwebとmailのみだから、PostfixとApache2、それにphpだけでも整えておけば、比較的安全であろうと考えている。

まぁ、それは置いておいて、今回はp5.34-dbiがコンパイルできなくなったと云う話題。
うん、普通に落ちる。

ログの対象部分はこんな感じだ。

Geminiさんに聞くところ、コンパイラが古いせいで新しい構文の解釈に失敗しているらしい。
古いOSを使い続けている弊害が、ここで出てきた。(うわぉ)

先程のログの前の方を遡ってみてみよう。

何故か、敢えてXcodeのclangを使用している。
macportsのclangは5〜17まで揃っているのに。ホント何でだよ。

Geminiさんに教わった方法で、clangを切り替えてみる。

それでもダメだったわ〜。

このまま、p5.34-dbiを残しておいても暫くは問題無いだろう……そうであって欲しい。
Geminiさんも、こう言っている。

1. 該当のポートをピン留めする(Lock機能)

sudo port not-upgraded p5.34-dbi
(または sudo port pin p5.34-dbi とも書けます)

これを実行しておくと、MacPortsはこのポートを「現在のバージョンのままで固定(ロック)」扱いにしてくれます。
その結果、sudo port upgrade outdated を実行したときに、この p5.34-dbi は華麗にスルー(無視)されるようになり、他のすべてのアップデート可能なポートが一気にスムーズに更新できるようになります!

その後、もう一度ログを読んでみた。
sudo port upgrade p5.34-dbi configure.compiler=macports-clang-16 でコンパイルした時のね。
原因が見つかったよ。
そして、どうすんだよコレ……………(sigh)

つまり、「perl本体が古い環境で拵えたものだから、新しいコンパイラで作ったのだと対応取れないよ」ってことだよねぇ。
perl5.34を一度uninstallして、再度installし直しか。
amavis-newのコンパイルが無茶重いんだよなぁ。
rushのコンパイル時間が殆どだったと思いたい。

と云うことで、p5.34関連ファイル群を一度 uninstall した後、順に入れていくしか無いか?
削除時に、どれが動かなくなるってのを片端からメモして、それらの再インストールもしないといけない?
面倒臭ぇ〜〜。

多分、丸一日で……済むかなぁ。
port installed > installed.txt して、perl絡みのを纏めてみた。当然、全部かどうか知らない。

取り敢えず、perl5.34をuninstall & installしてみた。
……バイナリが落ちてきた。
これじゃ、おんなじ結果じゃん。

と云うことで、ソースを落として手元で再コンパイルしてみる。
sudo port -s install perl5.34
普通に/usr/bin/clang使ってた……何故に。

今度は強制的にclang-16を使うように指示する。
sudo port install perl5.34 configure.compiler=macports-clang-16

出来上がったら、もう一度p5.34-dbiをコンパイル。
sudo port upgrade p5.34-dbi configure.compiler=macports-clang-16

ログを見たら、やはりperl5.34はclang-16を使っていなかった。
もうダメじゃん。(涙)

Geminiさんに教わって、先ずソースを落とす。

ソースのあるところへ移動。

そこでinstall base pathとclangの場所を教えた。

で、
grep -R ‘/usr/bin’ | grep -v ‘^ * #’ | less
としてみたら、一杯出てくるよ>/usr/bin
何よりもConfigureの中にハードコーディングされているpaths=の一文(3行だけど)。

これだと/opt/local/binを探してくれない。
Configureの書き換えから始めないと。

結局Configureのpathsに/opt/local/bin /opt/local/sbinの二つをせ等に捩じ込む。
で、実際に動かした。
所々、/usr/local/lib /opt/local/lib の様に/usrが先に出てくるので、順番を入れ替える。
あくまでも/opt/localを最初に持ってくる。それだけは絶対。

Makefileが出来たので、早速sudo make!
速攻でエラーとなりました〜〜!
……畜生め〜!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)