2016-06-15 4 views
0

Voici un code dans mon configure.ac:Autoconf m4_bmatch ne fonctionne pas avec la variable

THIS="h5cc" 
AC_MSG_WARN([$THIS]) 
AC_MSG_WARN(m4_bmatch([h5pcc], 
     [h5pcc], [parallel], 
     [h5cc], [serial], 
     [neither] 
     )) 
AC_MSG_ERROR(m4_bmatch([$THIS], 
     [h5pcc], [parallel], 
     [h5cc], [serial], 
     [neither] 
     )) 

Je autoconf puis configure, qui se traduit par ceci:

configure: WARNING: h5cc 
configure: WARNING: parallel 
configure: error: neither 

Pour autant que je peux dire , ce n'est pas censé arriver, non? Qu'est-ce que je rate?

+0

Documentation pour m4_bmatch: https://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Conditional-constructs.html – Joel

Répondre

2

Vous mixez le code M4 au sein de votre configuration, mais seulement avant m4 exécute l'expansion (à savoir lorsque vous exécutez autoconf), tandis que THIS=h5cc est une construction shell qui est exécuté par le shell (lorsque vous exécutez ./configure).

Donc ce que m4_bmatch voit est un littéral $THIS qui n'est en effet ni l'un ni l'autre.

Version courte, n'utilisez pas les fonctions m4_* pour les éléments que vous souhaitez modifier au moment de la configuration.

+0

Merci beaucoup !!! Avez-vous des idées sur comment je pourrais le faire fonctionner? – Joel

+0

Je pense que ce que vous cherchez est AS_CASE à la place (qui est M4sh). Voir https://autotools.io/autoconf/m4sh.html (divulgation complète, j'ai écrit cela.) –

+0

C'est! J'étais sur le point de mettre à jour votre réponse. Je l'ai fait fonctionner. – Joel