2009-07-22 11 views
0

Ich habe ein ziemlich komplexes (C++) Projekt mit autoconf/automake, das einige "generierte" Dateien enthält (foo.yy -> foo.cc). Aktuelle Builds werden mit einem "Kontrollskript" (Gentoo .ebuild für diejenigen, die mit dem Konzept vertraut sind) auf verschiedenen Plattformen durchgeführt.Der beste Weg, um generierte Dateien zur Verteilung hinzuzufügen?

Nun unterstützt eine der Zielplattformen den Schritt foo.yy -> foo.cc nicht ordnungsgemäß und muss die auf einer Linux-Box generierte Datei foo.cc verwenden.

Jetzt habe ich zwei Möglichkeiten, um dies zu realisieren:

1) Überprüfen Sie in foo.cc in das Projekt-Repository und irgendwie flicken configure.in (oder was auch immer) einen Zeitstempel Prüfung auf foo.yy/foo enthalten .cc, erzeugt eine verständliche Fehlermeldung, wenn es auf dem fraglichen Ziel mit einem veralteten foo.cc ausgeführt wird;

2) Checken Sie foo.cc in das Kontrollskript-Repository ein, lassen Sie die Zeitstempel des Skripts steuern und geben Sie die Fehlermeldung ein.

Ich könnte tun 2) kein Problem, aber ich glaube nicht, dass es der richtige Ort ist, um foo.cc.

Auf der anderen Seite weiß ich nicht viel über autoconf/automake und würde nicht wissen, wie man eine Zeitstempelprüfung/Fehlermeldung in configure.in (oder wo auch immer) implementiert.

Was sind Ihre Vorschläge, und würde jemand hier wissen, wie man über Lösung 1) geht?

Bearbeiten: Gelöst mit Lösung 3), die problematische Zielbox zu optimieren, bis es in der Lage ist, den foo.yy -> foo.cc Schritt selbst zu machen. Mein Problem ist gelöst.

Aber ich lasse die Frage offen - wie Timestamp Checks/verständliche Fehlermeldungen mit Autoconf/Automake zu tun?

Antwort

0

von 8,8 in der Automake Handbuch:

Die Zwischendateien erzeugt durch ‘ yacc ’ (oder ‘ lex ’) wird in jeder Distribution enthalten, die gemacht wird. Auf diese Weise braucht der Benutzer ‘ yacc ’ oder ‘ lex ’ nicht haben.

Das klingt so, als ob das Problem, das Sie beschreiben, nicht existieren sollte.

+0

Wenn Sie eine "make dist" machen, und dann * das * auf die Ziele verteilen und das Paket aus der Distribution erstellen. Aber das ist in diesem Fall nicht getan, Binärdateien werden direkt aus dem, was in der CVS ist gebaut ... Siehe bearbeitet Frage - es ist kein Problem für mich persönlich mehr. – DevSolar

+0

Warum direkt von Ihrem VCS verteilen? (Ich hoffe, dass 'CVS' ein Tippfehler ist - du verwendest CVS nicht wirklich, oder?) Es ist wirklich einfacher, wenn du nur die Auto-Tool-Kette in deiner Entwicklungsbox startest und den erzeugten Tarball verteilst. Insbesondere müssen Sie nicht yacc oder lex oder autoconf oder automake oder libtool oder m4 (etc) auf Ihrer Zielbox installiert haben. –

+0

"' make dist' "ist der Weg, um eine Distribution zu erstellen, wenn man automake verwendet (oder irgendein Paket, das den GNU-Konventionen folgt). Wenn Sie nicht verwenden, was Automake bietet, kann Automake nicht viel tun, um Ihnen zu helfen. – Braden