2010-12-03 43 views
0

Pour activer une partie d'un projet autotablé de manière conditionnelle, je dois vérifier si un court tronçon de programme dans une langue non prise en charge par Autotools est compilé ou non. J'ai besoin de quelque chose comme AC_TRY_COMPILE avec un exécutable du compilateur arbitraire - créer un fichier temporaire, y écrire un morceau de code, et essayer si invoquer le compilateur (trouvé par AC_CHECK_PROGS avant) renvoie un code de sortie égal à zéro ou non.Autoconf: vérification de la compilation d'un programme dans un langage non pris en charge

Quelle est la manière la plus élégante/la plus courante de le faire?

+2

Je pense que vous pourriez écrire propre macro, basée sur 'AC_TRY_COMPILE'. Essayez aussi les archives Autoconf, peut-être que quelqu'un d'autre l'a écrit: http://www.gnu.org/software/autoconf-archive/ – ptomato

Répondre

2

AC_TRY_COMPILE (qui est obsolète et remplacé par AC_COMPILE_IFELSE) supporte seulement un ensemble limité de langues: C, C++, Fortran 77, Fortran, Erlang, Objective C, C++ Objectif (source).

configure.ac peut contenir du code shell personnalisé - il est simplement ignoré par autoconf (vraiment m4). Pourquoi ne pas simplement écrire votre test en shell? Si vous voulez utiliser plus d'un test, enveloppez-le dans un AC_DEFUN.

+1

C'est ce que j'ai fini par faire; J'ai juste oublié d'écrire la réponse ici et de la marquer comme acceptée - merci quand même. – klickverbot

0

Pour activer une partie facultative d'un projet autotablé, vous devez utiliser l'option --enable-something. Ne le faites pas dépendre de ce qui est actuellement disponible dans l'environnement de construction. Cela est susceptible de masquer les erreurs dans les builds automatisés. (Exemple: les distributions Linux ont été connues pour expédier des paquets endommagés à cause d'une dépendance de construction manquante ou d'un autre problème dans l'environnement, où une erreur aurait été plus utile que silencieuse.)