Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I escape text in autoconf/m4?

Tags:

bash

autoconf

m4

The following code from my configuration.ac file does not work (note the nested square brackets with [default=no]):

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

How can I escape those brackets?

like image 934
user278429 Avatar asked Feb 22 '10 04:02

user278429


1 Answers

Found it! From this tutorial:

M4 arguments are quoted with [ and ]. There is NO WAY to escape these, however, you have several options if you wish to insert ['s or ]'s:

  1. Use a `Quadrigraph'. @<:@ gives you [ and @:>@ gives you ].
  2. Balance your quotes. M4 will turn [[]] in to []. Beware of using this in arguments to macros. Sometimes, you need to double quote as well ([[[]]]).
  3. Change the quoting using: changequote(<<,>>) to change the quoting to << and >>. The autoconf documentation (rightly, in my opinion) warns against the (over) use of this, since it can lead to unexpected results.
  4. Avoid [ and ] where ever possible. This is my personal choice.

My new code is therefore:

AC_ARG_ENABLE(debug,
    AS_HELP_STRING(
        [--enable-debug],
        [build with debugging symbols @<:@default=no@:>@]),
    [enable_debug="$enableval"],
    [enable_debug="no"]
)
like image 150
user278429 Avatar answered Oct 08 '22 17:10

user278429