2010-12-03 8 views
0

Um einen Teil eines Autotoolprojekts bedingt zu aktivieren, muss ich prüfen, ob ein kurzes Programm Stub in einer Sprache nicht von Autotools kompiliert oder nicht kompiliert.Autoconf: Überprüfen Sie, ob ein Programm in einer nicht unterstützten Sprache kompiliert

Ich brauche etwas wie AC_TRY_COMPILE mit einer beliebigen Compiler-Programmdatei - erstellen Sie eine temporäre Datei, schreiben Sie ein Stück Code, und versuchen Sie, wenn der Compiler aufrufen (gefunden über AC_CHECK_PROGS vorher) gibt einen Exit-Code gleich Null oder nicht.

Was ist der eleganteste/gebräuchlichste Weg dies zu tun?

+2

Ich denke, Sie müssen vielleicht Ihre schreiben eigenes Makro, basierend auf 'AC_TRY_COMPILE'. Versuchen Sie auch das Autoconf-Archiv, vielleicht hat jemand anderes es geschrieben: http://www.gnu.org/software/autoconf-archive/ – ptomato

Antwort

2

AC_TRY_COMPILE (das ist überholt und ersetzt durch AC_COMPILE_IFELSE) unterstützt nur eine begrenzte Anzahl von Sprachen: C, C++, Fortran 77, Fortran, Erlang, Objective C, Objective C++ (source).

configure.ac kann benutzerdefinierte Shell-Code enthalten - es wird nur von autoconf übersprungen (wirklich m4). Warum schreibst du nicht einfach deinen Test in die Shell? Wenn Sie mehr als einen Test verwenden möchten, wickeln Sie ihn in eine AC_DEFUN.

+1

Das ist, was ich tatsächlich tat; Ich habe nur vergessen, die Antwort hier aufzuschreiben und sie als akzeptiert zu markieren - danke trotzdem. – klickverbot

0

Um einen optionalen Teil eines automatisch gepoolten Projekts zu aktivieren, sollten Sie eine --enable-something Option verwenden. Machen Sie es nicht abhängig von dem, was derzeit in der Build-Umgebung verfügbar ist. Dies neigt dazu, Fehler in automatisierten Builds zu maskieren. (Beispiel: Linux-Distributionen sind dafür bekannt, verkrüppelte Pakete aufgrund fehlender Build-Abhängigkeiten oder anderer Probleme in der Umgebung zu versenden, wo das Aufrufen eines Fehlers hilfreicher gewesen wäre als das unbeaufsichtigte Vorgehen.)