[PPL-devel] Problem (with solution) in AC_CHECK_FUNCS

Roberto Bagnara bagnara at cs.unipr.it
Tue Nov 5 10:47:07 CET 2002


Suppose we have something like

AC_CHECK_FUNCS([setitimer], [], AC_MSG_ERROR([...]))

then autoconf (version 2.54c and previous ones) tries to compile a
program containing (inessential lines snipped)

#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char setitimer ();
char (*f) ();

int
main ()
{
/* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
#if defined (__stub_setitimer) || defined (__stub___setitimer)
choke me
#else
f = setitimer;
#endif

The problem is with the assignment `f = setitimer;' in case we are
using a standard conforming (strictly speaking) C++ compiler.  In
fact, in standard C++, a value of type "char (*)() C" (a C function)
cannot be assigned to an entity of type "char (*)()" (a C++ function).

The fix is easy: it suffices to change autoconf so that, instead
of generating

------------------------------------------------------------------
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char setitimer ();
char (*f) ();
------------------------------------------------------------------

it produces

------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char setitimer ();
char (*f) ();
#ifdef __cplusplus
}
#endif
------------------------------------------------------------------

so that, in C++, both `f' and `setitimer' have C linkage.
All the best

     Roberto

-- 
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara at cs.unipr.it




More information about the PPL-devel mailing list