autoconf
[Top][All Lists]
Advanced

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

Re: if (...) then; AC_PROG_CC else AC_PROG_CC fi doesn't work?


From: Brooks Moses
Subject: Re: if (...) then; AC_PROG_CC else AC_PROG_CC fi doesn't work?
Date: Tue, 23 Oct 2007 18:52:20 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.6) Gecko/20070728 Thunderbird/2.0.0.6 Mnenhy/0.7.5.666

Eric Blake wrote:
This is a known 'feature' of autoconf.  In general, invoking macros with side-
effects inside of raw 'if' blocks is dangerous; there are two common failure scenarios - side effects happen regardless of whether the shell code containing the macro name is executed (because autoconf generates the side-effect code into a different m4 diversion), or, as in your case, side effects only happen on the first use of the macro (because autoconf AC_REQUIRE's the side-effect to avoid redundant output of one-shot initialization). You can try using AS_IF instead of raw shell 'if' for wrapping the AC_PROG_CC calls, since the purpose of AS_IF is to output a shell conditional AND correctly handle side effects of macros within that shell conditional. But in your case, the easiest thing to do is fix your autoconf.ac:

AC_INIT
AC_ARG_ENABLE(foo)
AC_PROG_CC([gcc])
if test "$enable_foo"; then
   echo "enabled"
else
   echo "disabled"
fi

Thanks! Unfortunately, however, that "fixes" it by breaking the desired functionality. The point of enable_foo is not the echo statements, but the fact that AC_PROG_CC uses the "[gcc]" list when foo is enabled, and uses the default program list when foo is disabled.

Is there some way to define a variable argument to AC_PROG_CC to get this functionality? I'd like to do something like the following, if I could:

AC_INIT
AC_ARG_ENABLE(foo)
if test "$enable_foo"; then
  echo "enabled"
  cc_list=[gcc]
else
  echo "disabled"
  cc_list=
fi
AC_PROG_CC($cc_list)

However, this doesn't actually work; with foo disabled, AC_PROG_CC just looks in the empty list for acceptable C compilers, and of course doesn't find anything.

If it's not possible to do something like this, I'll have a look at AS_IF.

- Brooks





reply via email to

[Prev in Thread] Current Thread [Next in Thread]