Ist das Erstellen von Perl ein Insiderwitz oder sind dafür angeblich so viele „make“-Aufrufe erforderlich?

Ist das Erstellen von Perl ein Insiderwitz oder sind dafür angeblich so viele „make“-Aufrufe erforderlich?

Ich baue gerade Perl Version 5.18.2 aus dem Quellcode auf einem ARMv7-Prozessor, einem Krait auf dem Snapdragon S4, und ich bin mir nicht ganz sicher, wie viel Unterstützung es für eine solche Architektur gibt. Übrigens versuche ich, ein LFS-System zu bauen. Die Sache ist, dass ich seit zwei Tagen bei Perl feststecke. Ich habe verschiedene Benutzer ausprobiert, als Root, mit CFLAGS, ohne CFLAGS, Debian-Quellcodeversionen 5.16 und 5.18, und ich bin immer bei einem bestimmten Build-Schritt hängen geblieben.

Also habe ich dieses letzte Mal beschlossen, auf die Nachricht zu achten, die besagt:

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

oder etwas ähnliches.

Also habe ich eine kleine For-Schleife erstellt ...

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

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

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

... Ich begann mit Sequenz 3, und tatsächlich nach jeder Sequenzscheintum beim Build Fortschritte zu machen. Das heißt, es schlägt bei einem anderen Schritt fehl und wenn ich das Protokoll überprüfe, sehe ich, dass der letzte Schritt, bei dem es fehlgeschlagen ist, erfolgreich war und ich sehe dieselbe Meldung:

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

Ich habe die Bauanleitungen bei CPAN überflogen und konnte keinerlei Referenzen oder sonstige Hinweise finden, die darauf hingewiesen hätten, dass ich dies durchgehen müsste. Daher stellt sich die Frage.

Ist das eine Art Insiderwitz oder mache ich etwas furchtbar falsch?

Antwort1

Ok, ich denke also, dass die Nachricht mir sagte, das Richtige zu tun, obwohl es unmöglich erscheint, an der Eingabeaufforderung zu sitzen und über 50 Mal (vielleicht auch über 100 Mal) „make“ einzugeben. Deshalb habe ich diese kleine While-Schleife geschrieben, bevor ich ins Bett gegangen bin:

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

RETURN == ${RET} \

"; make; RET=$?; done

Und lass es laufen. Ich habe Ctrl+zes getan, um den Job zu stoppen, während ich schlief, und dann habe ich es heute Nachmittag um 1 wieder gestartet, weil es der einzige Job war, den ich hatte. Bei jemand anderem kann es anders sein. Weitere Informationen finden fg 1Sie in den Befehlen jobsund fgin den Anweisungen.bg

Mir ist klar, dass es eine Endlosschleife gewesen sein könnte, aber ich hätte es immer mit beenden können Ctrl-c. Es scheint immer 2 zurückgegeben zu haben, also while [ $RET -eq 2 ]; dowäre ein Test vielleicht idealer gewesen.

Zu meiner Überraschung endete es einfach mit einer Rückgabe von 0 und dieser Meldung:

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.

Ich werde jetzt also mit Linux von Grund auf weitermachen. Es scheint, dass beim Konfigurieren eines Builds von Grund auf alle auf dem System vorhandenen Makefiles neu erstellt werden müssen. Daher werde ich sagen, dass dies ein normales Verhalten war, das sich wiederholt make, und dass nicht alles wie „Standard“-GNU-Programme erstellt wird.

Hoffentlich hilft das in Zukunft jemandem.

Aktualisieren:

Dies ist das Ergebnis der Testsuite:

    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 % Erfolg, nicht schlecht.

Da dies für die temporären Tools ist, die in Kapitel 5 von „Linux From Scratch“ erstellt wurden, und es heißt, dass die Testsuite nicht erforderlich ist und ich nur einige der Bibliotheken in das /toolsVerzeichnis kopieren muss, betrachte ich dies als Erfolg.

verwandte Informationen