First of all, thanks for your help.
M4 macros are fine but as documented, AS_HELP_STRING does not expand its second argument, so you need to be careful about quoting when you use it. [...] If the defaults can be determined by m4 then you can use m4 to generate the help string. [...] All the help text is generated statically at m4 time and is included into the configure script as a quoted here-document. So the shell will not expand anything found within the help text at configure time.
I think that is the root of the problem. The default comes from variable ${host_cpu}, which cannot be determined by m4 alone when generating the configure script. To illustrate it, this is a piece of code I tried, which did not work either: AS_CASE(["${host_cpu}"], [arm*], [ m4_define([host_arm_bitbang_adapters_default], [auto]) m4_define([host_arm_or_aarch64_bitbang_adapters_default], [auto]) ], [aarch64], [ m4_define([host_arm_or_aarch64_bitbang_adapters_default], [auto]) ], [ m4_define([host_arm_bitbang_adapters_default], [TODO]) m4_define([host_arm_or_aarch64_bitbang_adapters_default], [TODO]) ] ) I am guessing there is no way around this, is there?
Otherwise, just write some text which is vague about the default. Something like "default: auto" is usually fine.
The trouble is, OpenOCD uses "auto" with the following meaning: if the right libraries etc. are installed, enable the option. That is, enable the option if compilation should succeed. I would have to rewrite a chunk of configure.ac to provide a different "vague" help text for these options alone, and to implement the meaning of "auto" differently for those options. Furthermore, I don't like the idea of being vague. It is then hard to predict whether a particular option would be automatically enabled, and that opens a window for head scratching, or perhaps I should write yet more custom configure.ac code for these options. But I guess I am out of options. I'll speak to the OpenOCD guys about this. Thanks again, rdiez