Script für Compilerfehlermeldungen für mein Tutorial
-
Hallo Leute.
Ich arbeite gerade an dem neuen Backend für mein C++ Tutorial (ne Menge Fehler sind beseitigt und durch das Backend lassen sich änderungen schneller einpflegen als es bisher der Fall war).
Nun fehlt mir aber ein Script um die Liste der Fehlermeldungen der Compiler zu automatisieren: http://tutorial.schornboeck.net/compiler_fehler.htm
Es würde mich freuen, wenn jemand mir dieses schreiben könnte.
Die Anforderungen sind:
Sprache: eine gängige Scriptsprache (PHP, Python, Perl, Ruby,... hauptsache Plattformunabhängig: sprich Windows XP und Linux 2.6)
Anforderungen:
Beliebiges Dateiformat für eine Config Datei: in dieser muss man den Compilernamen und die Aufrufsyntax festlegen können. Ausserdem muss man noch definieren können, ob der Compiler die Ausgabe nach stdout oder stderr schickt...
Es müssen theoretisch unendlich viele Compiler unterstützt werden können, also keine hardcoded Limitierung für die Anzahl der Einträge in dieser Config Datei.Man muss beim aufrufen des Scripts einen Pfad angeben können wo .cpp Dateien liegen. Jede .cpp Datei hat eine .info Datei mit gleichem Namen in diesem Verzeichnis liegen wo die Fehlerbeschreibung drinnen steht.
Wenn man das Script aufruft, soll es für alle konfigurierten Compiler und alle .cpp Dateien eine Ausgabedatei erzeugen (nur 1 Ausgabedatei, nicht pro Compiler eine).
Das Format sollte wenn möglich per Template definierbar sein:
<entry name="name der datei ohne .cpp Endung"> <code type="c++"> <![CDATA[ ... (der Code aus der .cpp Datei) ... ]]> </code> <description> ... (der Inhalt der .info Datei) ... </description> <messages> <message compiler="(name des compilers)"> ... ausgabe des compilers ... </message> <message compiler="..."> ... </message> ... </messages> </entry>
Idealerweise sollte dieses Template leicht änderbar sein.
Pro .cpp Datei ein <entry>[edit]
Es muss möglich sein, zB für Linux den g++ und unter Windows den bcc zu konfigurieren und die Ausgabe wird dann irgendwie zusammen gefügt (Einmal wird das Script unter Windows für den bcc gestartet und einmal unter Linux für den g++).Das erschwert die Sache natürlich gewaltig. Das Script muss irgendeine Zwischenausgabe machen, welche ich dann von jeder Plattform sammle und dann mit einem anderen Script zu der oben definierten Ausgabe zusammenfüge.
[/edit]Gegenleistung:
Geld kann ich keins anbieten
Ich habe mir aber gedacht, folgende Zeilen am Ende dieser Datei anzuzeigen:Vielen Dank an XXX, der/die mir ein Script zur automatischen Erstellung dieser Fehlermeldung zur Verfügung stellte.
Das Script würde ich auf schornboeck.net hosten, falls erwünscht.
Falls ein anderer Wortlaut, etc. gewünscht ist - kein Problem. Es lässt sich auch über einen Banner und ähnliches verhandeln - ich bin da ziemlich offen.Lizenz
Lizenz ist egal, solange ich Nutzungsrechte im Rahmen dieses Tutorials eingeräumt bekomme.Ich würde mich sehr freuen, wenn ich jemand finden würde, der mir diesen Gefallen tut. Ich könnte zwar schnell etwas zusammen hacken, aber eine ordentliche Lösung ist mir lieber - das Backend wie es jetzt ist, ist schon Hack genug (deshalb schreibe ich es ja neu, was allerdings viel Zeit beansprucht, dafür wird es nette Features geben :))
Danke schonmal.
-
laufen die compiler denn alle in der konsole?
-
tuempl schrieb:
laufen die compiler denn alle in der konsole?
Alle Compiler können über die Commandline gesteuert werden, sonst wäre es ja blöd (wie will man sonst zB make verwenden?)
Allerdings fällt mir ein wichtiger Punkt ein, den ich vergessen habe:
Es muss möglich sein, zB für Linux den g++ und unter Windows den bcc zu konfigurieren und die Ausgabe wird dann irgendwie zusammen gefügt. Schließlich muss ich Windows und Linux Compiler mit dem gleichen Code testen...
Das erschwert die Sache natürlich gewaltig. Das Script muss irgendeine Zwischenausgabe machen, welche ich dann von jeder Plattform sammle und dann mit einem anderen Script zu der oben definierten Ausgabe zusammenfüge.
Also leider doch nicht mehr trivial.
-
Oxdeadbeef aus #cpp hat folgenden Code als Grundlage für etwaige interessierte zur Verfügung gestellt (Code steht unter der boost-lizenz)
#!/usr/bin/perl # Jaaa, perl kann den 2>&1-Kram auch unter Windows %compiler_commands = ('g++' => 'g++ -Wall -pedantic 2>&1', 'g++-3.4' => 'g++-3.4 -Wall -pedantic 2>&1'); $cpp_file_unique_id = "__CPP_FILE__"; $info_file_unique_id = "__INFO_FILE__"; $compiler_info_unique_id = "__COMPILER_INFO__"; $message_unique_id = "__MESSAGE__"; $template_head = "<?xml version=\"1.0\" encoding=\"iso8859-1\"?>\n" . "<entry name=\"$ARGV[0]\">\n" . "<code type=\"c++\">\n" . "<![CDATA[\n" . "$cpp_file_unique_id" . "]]>\n" . "</code>\n" . "<description>\n" . "$info_file_unique_id" . "</description>\n" . "<messages>\n"; $template_data = "<message compiler=\"$compiler_info_unique_id\">\n" . "$message_unique_id" . "</message>\n"; $template_tail = "</messages>\n" . "</entry>\n";
haupt\1:
#!/usr/bin/perl use config; open(CPP_FILE, $ARGV[0] . ".cpp"); open(INFO_FILE, $ARGV[0] . ".info"); @cpp_file = <CPP_FILE>; @info_file = <INFO_FILE>; close(CPP_FILE); close(INFO_FILE); $template_head =~ s/$cpp_file_unique_id/@cpp_file/g; $template_head =~ s/$info_file_unique_id/@info_file/g; $template_tail =~ s/$cpp_file_unique_id/@cpp_file/g; $template_tail =~ s/$info_file_unique_id/@info_file/g; print $template_head; foreach $compiler (keys %compiler_commands) { my $data_tmp = $template_data; my $message = `$compiler_commands{$compiler} $ARGV[0].cpp`; $data_tmp =~ s/$compiler_info_unique_id/$compiler/g; $data_tmp =~ s/$message_unique_id/$message/g; print $data_tmp; } print $template_tail;