bug-autoconf
[Top][All Lists]
Advanced

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

Re: AC_PROG_CXX behaviour when no C++ compiler is found


From: Ralf Wildenhues
Subject: Re: AC_PROG_CXX behaviour when no C++ compiler is found
Date: Mon, 3 May 2010 20:34:40 +0200
User-agent: Mutt/1.5.20 (2009-10-28)

Hello,

to add a few more data points here.

* Bruno Haible wrote on Sun, May 02, 2010 at 09:18:42PM CEST:
> Ralf writes in 
> <http://lists.gnu.org/archive/html/bug-libtool/2010-05/msg00003.html>:
> > AC_PROG_CXX does not abort the configure script if it not expanded
> > before, say, AC_PROG_CC

> IMO there are three problems with this behaviour:
> 
> 1) It is surprising that AC_PROG_CXX behaves differently, depending on
>    whether AC_PROG_CC was run before.

The thing to know is that it's not the AC_PROG_{CC,CXX,...} macro that
fails, but the tests for object file/executable file extensions, which
are only done for the first of the macros in the configure file.

> 2) It is not documented in the autoconf manual, in the places where I
>    was looking:
>      
> <http://www.gnu.org/software/autoconf/manual/html_node/Compilers-and-Preprocessors.html>
>      
> <http://www.gnu.org/software/autoconf/manual/html_node/C_002b_002b-Compiler.html>

There is a proposed patch to document this:
<http://thread.gmane.org/gmane.comp.sysutils.autoconf.patches/7028>
I was unwilling to accept it at the time, not sure whether we should
rethink that.

> 3) Suppose I wanted to use this "feature", and compile some C++ parts of my
>    program if and only if a C++ compiler is found. Then I would have to test
>    whether the variable ac_ct_CXX is empty (because CXX=g++ may indicate that
>    g++ was found or that no C++ compiler at all was found). But this variable
>    is undocumented.

Yes, AC_PROG_{CXX,OBJC} both have the bug that they set the compiler
variable $CXX/$OBJC to some value (g++/gcc) even when no compiler was
found.  We are not sure why this was done in AC_PROG_CXX, it certainly
is a bug in AC_PROG_OBJC.  Maybe we should just set them to 'false' in
that case, also for AC_PROG_{F77,FC,CC}.

Hmm, AC_PROG_CC does abort if $CC is empty, so that's another
inconsistency.  Maybe that one is useful however: very few projects make
optional use of C.

ac_ct_CXX is an internal detail that you should not rely on.
It would be more useful to test whether the compiler works, e.g.,
<http://thread.gmane.org/gmane.comp.sysutils.autoconf.general/12680>.

BTW, for OBJC and OBJCXX (patches were posted, but not accepted), a
check for whether the compiler works is even more important than for the
other compilers: it is quite common that gcc/g++ exist but the Objective
languages have not been compiled in (or libraries cannot be found).  In
order to allow optional support for these languages in a package, the
checking macros should have optional IF-FAILS arguments.

Cheers,
Ralf




reply via email to

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