Off-topic: autoconf guru
Is there any autoconf guru?
I have lots problems Autoconf + C++ library.
if I make CC=CXX, configure can't find libpq,
AC_CHECK_LIB(pq, PQexec)
because it try link PQexec() - and it is missing
if I keep CC as cc
AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
],
[int a = accept(1, (struct sockaddr *) 0, (int *) 0);],
[AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)],
[AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)])
return wrong result because int always aceptable for C but
can cause error for CXX
Is there autoconf version modified for work with C++ or
I have to patch it's macros by my self ?
---
Dmitry Samersoff, dms@wplus.net, ICQ:3161705
http://devnull.wplus.net
* There will come soft rains ...
If you check configure.in with PostgreSQL, we use the --with-libs call in
order to tell it where to look for 'libraries outside the system
norm'...check the code for that, as I believe its what you are looking
for, since, in general, the libpq would be outside that 'norm'..
On Thu, 29 Jul 1999, Dmitry Samersoff wrote:
Is there any autoconf guru?
I have lots problems Autoconf + C++ library.
if I make CC=CXX, configure can't find libpq,
AC_CHECK_LIB(pq, PQexec)because it try link PQexec() - and it is missing
if I keep CC as cc
AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
],
[int a = accept(1, (struct sockaddr *) 0, (int *) 0);],
[AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)],
[AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)])return wrong result because int always aceptable for C but
can cause error for CXXIs there autoconf version modified for work with C++ or
I have to patch it's macros by my self ?---
Dmitry Samersoff, dms@wplus.net, ICQ:3161705
http://devnull.wplus.net
* There will come soft rains ...
Marc G. Fournier ICQ#7615664 IRC Nick: Scrappy
Systems Administrator @ hub.org
primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
On 29-Jul-99 The Hermit Hacker wrote:
If you check configure.in with PostgreSQL, we use the --with-libs call in
order to tell it where to look for 'libraries outside the system
norm'...check the code for that, as I believe its what you are looking
for, since, in general, the libpq would be outside that 'norm'..
Thanks, but I mention some other problem -
sequence
CC=g++
AC_CHECK_LIB(pq, PQexec)
is espanded by autoconf into
... main(){ PQexec(); } ...
that can't be compiled by g++,
instead
... main(){ PGconn *conn; const char *query; PQexec(conn,query); }
is there a way to correct this problem or I need to rewrite
autoconf macros?
configure:2672: checking for PQexec in -lpq
configure:2691: g++ -o conftest -g -O2 conftest.c -lpq
-L/usr/local/pgsql/lib 1>&5
configure:2688: Undefined symbol `PQexec(void)' referenced from text segment
collect2: ld returned 1 exit status
configure: failed program was:
#line 2680 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char PQexec();
int main() {
PQexec()
; return 0; }
On Thu, 29 Jul 1999, Dmitry Samersoff wrote:
Is there any autoconf guru?
I have lots problems Autoconf + C++ library.
if I make CC=CXX, configure can't find libpq,
AC_CHECK_LIB(pq, PQexec)because it try link PQexec() - and it is missing
if I keep CC as cc
AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
],
[int a = accept(1, (struct sockaddr *) 0, (int *) 0);],
[AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)],
[AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)])return wrong result because int always aceptable for C but
can cause error for CXXIs there autoconf version modified for work with C++ or
I have to patch it's macros by my self ?---
Dmitry Samersoff, dms@wplus.net, ICQ:3161705
http://devnull.wplus.net
* There will come soft rains ...Marc G. Fournier ICQ#7615664 IRC Nick:
Scrappy
Systems Administrator @ hub.org
primary: scrappy@hub.org secondary:
scrappy@{freebsd|postgresql}.org
---
Dmitry Samersoff, dms@wplus.net, ICQ:3161705
http://devnull.wplus.net
* There will come soft rains ...
Dmitry Samersoff <dms@wplus.net> writes:
if I make CC=CXX, configure can't find libpq,
You shouldn't do that. CC is supposed to be a C compiler not a C++
compiler.
We have enough cross-platform headaches with the code already ...
trying to make it all compile under C++ as well as C is a pushup
I don't care to undertake...
if I keep CC as cc
AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
],
[int a = accept(1, (struct sockaddr *) 0, (int *) 0);],
[AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)],
[AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)])
return wrong result because int always aceptable for C but
can cause error for CXX
Huh? How can it be a problem for C++? The test snippet is C, and
so is the code that is going to be trying to call accept().
Is there autoconf version modified for work with C++ or
I have to patch it's macros by my self ?
I think you have a misconfigured C++ installation, and that you'd
be best off directing your attention to fixing that. I have
seen libpq++ fail in odd ways when I tried to build Postgres here
with a fresh egcs install whose C++ support wasn't right. (IIRC,
my problem was that /usr/local/lib/libg++ was an old version not
compatible with the new egcs --- but the error messages weren't
particularly helpful in diagnosing that...)
regards, tom lane
Import Notes
Reply to msg id not found: YourmessageofThu29Jul1999160411+0400XFMail.990729160411.dms@wplus.net | Resolved by subject fallback
Hi Dmitry,
Autoconf can do this out of the box. With the macros AC_LANG_C and
AC_LANG_CPLUSPLUS you can switch between C and C++ compiler mode. Here
is a small example based on the snippet you provided:
AC_PREREQ(2.12)
AC_INIT(configure.in)
#
# Check which C and C++ compiler to use
#
AC_PROG_CC
AC_PROG_CXX
#
# The following checks are done with the C compiler
#
AC_LANG_C
AC_CHECK_FUNC(accept)
#
# Now switch over to the C++ compiler for the next test
#
AC_LANG_CPLUSPLUS
AC_MSG_CHECKING(socket size type)
AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
],
[int a = accept(1, (struct sockaddr *) 0, (int *) 0);],
[AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)],
[AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)])
#
# Switch back to C mode again
#
AC_LANG_C
AC_OUTPUT()
Best regards,
Patrick
--
Patrick van Kleef
pkleef@roady.xs4all.nl
Dmitry Samersoff <dms@wplus.net> writes:
CC=g++
That is your problem. Don't do it.
Autoconf's job is difficult enough without trying to make all its macros
work with either C or C++ compilers. They haven't tried. If you think
it is critical that they should try, go off and join the GNU autoconf
team.
Back to actually solving the problem: you should be letting CC=gcc and
CXX=g++ as the system is expecting. I don't know what problem you are
trying to solve, but I can assure you that switching those two symbols
around is *not* the path to a solution. What happens when you try to
build the system without forcing the wrong choice of compilers?
regards, tom lane
Import Notes
Reply to msg id not found: YourmessageofThu29Jul1999180236+0400XFMail.990729180236.dms@wplus.net | Resolved by subject fallback
On 29-Jul-99 Patrick van Kleef wrote:
Hi Dmitry,
Autoconf can do this out of the box. With the macros AC_LANG_C and
AC_LANG_CPLUSPLUS you can switch between C and C++ compiler mode. Here
is a small example based on the snippet you provided:
Thank you very match !!!!
It is exactly what I need for !!!
AC_PREREQ(2.12)
AC_INIT(configure.in)#
# Check which C and C++ compiler to use
#
AC_PROG_CC
AC_PROG_CXX#
# The following checks are done with the C compiler
#
AC_LANG_CAC_CHECK_FUNC(accept)
#
# Now switch over to the C++ compiler for the next test
#
AC_LANG_CPLUSPLUSAC_MSG_CHECKING(socket size type)
AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
],
[int a = accept(1, (struct sockaddr *) 0, (int *) 0);],
[AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)],
[AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)])#
# Switch back to C mode again
#
AC_LANG_CAC_OUTPUT()
Best regards,
Patrick
--
Patrick van Kleef
pkleef@roady.xs4all.nl
---
Dmitry Samersoff, dms@wplus.net, ICQ:3161705
http://devnull.wplus.net
* There will come soft rains ...