Re: [gettext] changequote considered harmful

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Bruno, Stepan,

Bruno Haible wrote:

The desirable way to mix C or sh syntax and a macro language - for me as
someone who has to maintain some of these macros - is so that
  1) A valid C or sh snippet without specific macro invocations is
     valid inside the macro, and does not change its meaning.
     Brackets count as normal C or sh syntax here, since they are frequent
     in C and sh.
  2) There is a way to insert macro invocation in C or sh snippets,
     either directly by writing    MACRONAME(ARGS)   or with some similar
     syntax.
  3) There is normally no need to switch into a TeX {verbatim} or XML CDATA
     section, because 1) is usually enough.

[[snip]]

The style that fulfills goals 1 and 2 here is like this:

  [...
    # Found it, now check the version.
    ]AC_MSG_CHECKING([version of bison])[
    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
    case $ac_prog_version in
      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
    esac
    ]AC_MSG_RESULT([$ac_prog_version])[
  ...]

I.e. put braces around everything, but unbrace the macro invocations and
don't put dnl comments. Unfortunately as long as autoconf does not recommend
this style, other people will not like this style; therefore I cannot really
use this style yet.

In the bad old days, before I understood this idiom, I used to write (and libtool still contains code in this style :-():

     # Found it, now check the version.
     AC_MSG_CHECKING([version of bison])
ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([[0-9]]*\.[[0-9.]]*\).*$/\1/p'`
     case $ac_prog_version in
       '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
       1.2[[6-9]]* | 1.[[3-9]][[0-9]]* | [[2-9]].*)
          ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
       *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
     esac
     AC_MSG_RESULT([$ac_prog_version])

which, as you point out is ugly and error prone. More recently I have been writing code as you describe above, and life is much better. Whether the style is widely accepted or understood yet is not an issue IMNSHO, it is *correct*... and that is far more important. It will become acceptable style as more projects adopt it when they realise it is the technically correct thing to do!

Cheers,
	Gary.
--
Gary V. Vaughan      ())_.  gary@{lilith.warpmail.net,gnu.org}
Research Scientist   ( '/   http://tkd.kicks-ass.net
GNU Hacker           / )=   http://www.gnu.org/software/libtool
Technical Author   `(_~)_   http://sources.redhat.com/autobook

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
http://lists.gnu.org/mailman/listinfo/autoconf

[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux