2016-06-08 3 views
0

Dire que j'ai dans mon configure.acComment tester AC_REPLACE_FUNCS d'autoconf?

AC_REPLACE_FUNCS(getopt_long) 

Et je getopt_long.h et getopt_long.c dans mon répertoire src. Comment pourrais-je forcer HAVE_GETOPT_LONG à se terminer par 0 et getopt_long.c à compiler avec tout le reste à des fins de test?

+1

Ce que vous voulez faire n'est pas clair. Essayez-vous de remplacer le système 'getopt_long' par votre propre implémentation? – ptomato

+0

Vous avez raison. Ma question n'était pas très claire. C'est un shop getopt_long pour les systèmes sans cela. Je voulais tester si cela fonctionnait sur un système * avec * getopt_long. Donc, je voulais un moyen d'obtenir autoconf pour penser qu'il n'est pas disponible. Est-ce possible, le savez-vous? –

+0

Vous voulez dire, juste une fois pour vous assurer que cela fonctionne, ou définitivement parce que vous voulez écrire un test automatisé pour votre implémentation de getopt_long? – ptomato

Répondre

1

Je ne suis pas sûr que ce soit la meilleure façon de faire, puisque vous incluez un symbole getopt_long dans votre exécutable qui était également lié à la bibliothèque standard C, y compris un symbole getopt_long. Les deux symboles peuvent ne pas être résolus correctement. Cependant, vous pouvez essayer d'éditer manuellement config.h et de supprimer le #define HAVE_GETOPT_LONG.

Une meilleure approche pourrait consister à écrire quelque chose de code comme ceci:

#ifdef HAVE_GETOPT_LONG 
inline 
#endif 
int 
getopt_long_wrapper (int argc, char * const *argv, const char *shortopts, 
        const struct option *longopts, int *indexptr) 
{ 
#ifdef HAVE_GETOPT_LONG 
    return getopt_long (argc, argv, shortopts, longopts, indexptr); 
#else 
    /* your replacement function here */ 
#endif 
} 

Ensuite, si vous avez supprimé la définition HAVE_GETOPT_LONG, il n'y aurait pas de conflit de symboles.

+0

Est-ce que config.h n'est pas généré automatiquement? –

+0

Le poste demande un moyen de tester temporairement la situation. C'est bien d'éditer un fichier généré automatiquement pour cela. – ptomato