[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Checking for CXX libraries -- AC_CXX_CHECK_LIB ?
From: |
Reply To List Only |
Subject: |
Checking for CXX libraries -- AC_CXX_CHECK_LIB ? |
Date: |
Sat, 28 Sep 2002 21:01:05 -0400 |
OK, there's been a number of recent requests for the ability (ie
pre-canned, somehow organized ability) to check for C++ language libs.
Some quick checking shows how this is not trivial. For example, we
could simply do this:
AC_DEFUN([AC_CXX_CHECK_LIB],
[m4_ifval([$3], , [AH_CHECK_LIB([$1])])dnl
AC_LANG_PUSH(C++)dnl
AS_LITERAL_IF([$1],
[AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$2])],
[AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1''_$2])])dnl
AC_CACHE_CHECK([for (allanc) $2 in -l$1], ac_Lib,
[ac_check_lib_save_LIBS=$LIBS
LIBS="-l$1 $5 $LIBS"
AC_TRY_LINK_FUNC([$2],
[AS_VAR_SET(ac_Lib, yes)],
[AS_VAR_SET(ac_Lib, no)])
LIBS=$ac_check_lib_save_LIBS])
AS_IF([test AS_VAR_GET(ac_Lib) = yes],
[m4_default([$3], [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_LIB$1))
LIBS="-l$1 $LIBS"
])],
[$4])dnl
AS_VAR_POPDEF([ac_Lib])dnl
AC_LANG_POP(C++)])dnl
])# AC_CXX_CHECK_LIB
This is basically a AC_CHECK_LIB with a AC_LANG_PUSH(C++) in it.
There's two issues here. AC_TRY_LINK_FUNC calls AC_LANG_CALL which ends
up in a AC_TRY_LINK_FUNC for C++, but it's a verbatim copy of the C
version.
> # AC_LANG_CALL(C++)(PROLOGUE, FUNCTION)
> # -------------------------------------
> m4_copy([AC_LANG_CALL(C)], [AC_LANG_CALL(C++)])
... so the sample generated code that is linked still has the following:
> #include "confdefs.h"
>
> /* Override any gcc2 internal prototype to avoid an error. */
> #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 <function> ();
> int
> main ()
> {
> <function> ();
> ;
> return 0;
> }
The two issues are:
1) sample code defaults back to C calls after all this trouble:
> #ifdef __cplusplus
> extern "C"
> #endif
2) very limited function-call... we can only look for a function that
looks like:
> char <function> ();
What I'm asking is: how's the best way to go about this? Stop the
copying of AC_TRY_LINK_FUNC(C) to AC_TRY_LINK_FUNC(C++), and generate
C++ -usable code with versatility in the function-call? Or something
else?
Allan
- Checking for CXX libraries -- AC_CXX_CHECK_LIB ?,
Reply To List Only <=
- Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Paul Eggert, 2002/09/29
- Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Allan Clark (reply to list only), 2002/09/29
- Re: Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Steve M. Robbins, 2002/09/29
- Re: Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Allan Clark (Reply To List Only), 2002/09/30
- Re: Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Sebastian Huber, 2002/09/30
- Re: Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Allan Clark (Reply to List Only), 2002/09/30
- Re: Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Sebastian Huber, 2002/09/30
- Re: Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Sebastian Huber, 2002/09/29
- Re: Objections? Re: Checking for CXX libraries -- AC_CXX_CHECK_LIB ?, Allan Clark (Reply To List Only), 2002/09/30