2010-02-22 16 views
7

Le code suivant de mon fichier configuration.ac ne fonctionne pas (notez les crochets imbriqués avec [default = no]):Comment puis-je échapper du texte dans autoconf/m4?

AC_ARG_ENABLE(debug, 
    [ --enable-debug   build with debugging support [default=no].], 
    [DEBUG="$enableval"], 
    [DEBUG="no"] 
) 

Comment puis-je échapper à ces crochets?

+0

Je ne vois aucun Bash. Pourquoi l'étiquette? –

+2

Les scripts Autoconf sont analysés d'abord par m4 puis par le shell bourne. – user278429

Répondre

0

utilisez AC_HELP_STRING

+0

Merci (c'est nettement plus propre) mais toujours le même problème. Dans << AS_HELP_STRING ([- enable-debug], [construire avec le support de débogage [défaut = non].]) >> les "[" et "]" sont absents de la sortie. – user278429

+2

Pourquoi l'insistance sur les crochets dans la sortie? Utilisez des parenthèses; cela rend votre vie plus facile. –

+0

Par souci de cohérence, parce que les autres paquets que j'utilise ont des crochets dans leur sortie :( – user278429

16

Trouvé! De this tutoriel:

Les arguments M4 sont indiqués avec [et]. Il n'y a AUCUN moyen d'y échapper, cependant, vous avez plusieurs options si vous souhaitez insérer des [s ou des]:

  1. Utilisez un `Quadrigaph '. @ <: @ vous donne [et @:> @ vous donne].
  2. Équilibrez vos devis. M4 tournera [[]] sur []. Méfiez-vous de l'utiliser dans les arguments des macros. Parfois, vous devez également faire une double citation ([[[]]]).
  3. Modifiez la cotation à l'aide de: changequote (< <, >>) pour remplacer la citation par < < et >>. La documentation d'autoconf (à mon avis, à juste titre) met en garde contre (sur) l'utilisation de ceci, car cela peut conduire à des résultats inattendus.
  4. Évitez [et] où cela est possible. C'est mon choix personnel.

Mon nouveau code est donc:

AC_ARG_ENABLE(debug, 
    AS_HELP_STRING(
     [--enable-debug], 
     [build with debugging symbols @<:@[email protected]:>@]), 
    [enable_debug="$enableval"], 
    [enable_debug="no"] 
) 
+0

Vous devez définir votre propre réponse comme LA réponse alors –

7

Brackets sont échapper genre de personnages, de sorte que vous faites pour '\', vous pouvez échapper à crochets [] avec des parenthèses, par exemple:

AC_ARG_ENABLE (déboguer, [--enable-debug générer avec la prise en charge du débogage [ [defa ULT = no] ]], [DEBUG = "de enableval de $"], [DEBUG = "no"] )

Note:. [ [] default = pas [] ] peut ne pas fonctionner comme prévu car m4 doit rechercher le end_bracket à partir de la fin. Il devrait donc être étendu à [ ]default=no[ ].

+0

Mieux vaut utiliser les évasions 'quadrigraph', @<:@ and @>: @. – ptomato