Perl のビルドは内部のジョークですか、それともこれほど多くの `make` 呼び出しが必要なのでしょうか?

Perl のビルドは内部のジョークですか、それともこれほど多くの `make` 呼び出しが必要なのでしょうか?

それで、私は現在、ARMv7 プロセッサ (Snapdragon S4 の Krait) 上でソースから Perl バージョン 5.18.2 を構築していますが、このようなアーキテクチャがどの程度サポートされているかはよくわかりません。ところで、私は LFS システムを構築しようとしています。問題は、2 日間 Perl で行き詰まってしまったことです。さまざまなユーザー (root として、CFLAGS あり、CFLAGS なし)、Debian ソース バージョン 5.16 および 5.18 を試しましたが、常に特定のビルド ステップで行き詰まってしまいました。

そこで今回は、このメッセージに注目してみることにしました。

==> Your Makefile has been rebuilt. <==
==> Please rerun the make command.  <==

またはそのようなもの。

そこで、ちょっとした for ループを作りました...

RET=$?; for i in `seq 10`; do if [ ! $RET -eq 0 ]; then echo " \

RETURN ${i} == ${RET} \

" && make; RET=$?; fi; done

...私はシーケンス3から始めましたが、確かにそれぞれの後に思われるビルドが進んでいるように見えます。つまり、別のステップで失敗し、ログを確認すると、失敗した最後のステップが成功し、同じメッセージが表示されます。

==> Your Makefile has been rebuilt. <==
==> Please rerun the make command.  <==

CPAN のビルド手順をざっと見たところ、参照先や、この手順を実行する必要があることを示すものは何も見当たらなかったので、疑問が生じます。

これは何かの内輪のジョークでしょうか、それとも私が何かひどく間違ったことをしているのでしょうか?

答え1

わかりました。メッセージは私に正しいことをするように伝えていたと思いますが、プロンプトの前に座って make を 50 回以上 (100 回以上だったかもしれません) 入力するのは不可能に思えたので、寝る前に次の小さな while ループを作成しました。

RET=$?; while [ ! $RET -eq 0 ]; do echo " \

RETURN == ${RET} \

"; make; RET=$?; done

そして、実行します。私はCtrl+z寝ている間にジョブを停止するためにこれを実行し、fg 1午後 1 時にそれを再開しました。これは私が実行していた唯一のジョブだったためです。他の人の場合は異なる可能性があります。詳細についてはjobs、、fgおよびコマンドを調べてください。bg

無限ループになっている可能性はありますが、 で終了させることができましたCtrl-c。常に 2 が返されるようなので、テストしたほうwhile [ $RET -eq 2 ]; doが理想的だったかもしれません。

驚いたことに、次のメッセージとともに 0 が返されて終了しました。

make[1]: Leaving directory '/home/lfs/sources/perl/perl-5.18.2/x2p'

    Everything is up to date. Type 'make test' to run test suite.

それで、Linux From Scratch を続けます。おそらく、最初からビルドを構成する場合、システム上に存在するすべての makefile を再構築する必要があるようです。したがって、これは通常の動作であり、繰り返し発生するものmakeであり、すべてが「標準」GNU プログラムのようにビルドされるわけではないと述べます。

それが将来誰かの役に立つことを願います。

アップデート:

これはテストスイートの結果です:

    Failed 10 tests out of 2247, 99.55% okay.
        ../cpan/CPANPLUS/t/03_CPANPLUS-Internals-Source.t
        ../cpan/Socket/t/socketpair.t
        ../cpan/Sys-Syslog/t/syslog.t
        ../cpan/Time-HiRes/t/alarm.t
        ../cpan/Time-HiRes/t/clock.t
        ../cpan/Time-HiRes/t/usleep.t
        ../dist/ExtUtils-Command/t/cp.t
        op/alarm.t
        op/sigdispatch.t
        op/sleep.t

成功率99.55%、悪くないですね。

これは、「Linux From Scratch」の第 5 章で作成された一時ツール用であり、テスト スイートは必要なく、ライブラリの一部をディレクトリにコピーするだけでよいとされているため/tools、これは成功と見なします。

関連情報