[Top][All Lists]

[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)


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:
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.,

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.


reply via email to

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