Magnus Hagander wrote:
> > It turns out the problem is that port/pipe.c is compiled with
> > -DFRONTEND and include/port/win32.h wraps the recv to
> > pgwin32_recv macro in a #ifndef FRONTEND. We've actually
> > been using the WinSock recv function directly (verified with gcc -E).
>
> That's definitly wrong.
> Looks like this file needs a _srv version in the Makefile. Bruce?
Wow! That is disturbing. I tried to minimize the affect of FRONTEND,
but obviously I never though about the affect on include files that use
FRONTEND. Seems it is only Win32 that used FRONTEND in includes (except
for pg_wchar.h, which is used by libpq and already built independently).
> Just a thought - might this affect more things that rely on FRONTEND
> defines in the headers? How bad would it be to just make libpgport build
> two complete sets of object files, one for server and one for frontend,
> instead of special-casing which files are rebuilt?
The attached patch does exactly what you suggest. I think it has to be
patched to 8.0.X, 8.1.X, and HEAD. I will apply in 24-48 hours.
--
Bruce Momjian http://candle.pha.pa.us
EnterpriseDB http://www.enterprisedb.com
+ If your life is a hard drive, Christ can be your backup. +
Index: src/port/Makefile
===================================================================
RCS file: /cvsroot/pgsql/src/port/Makefile,v
retrieving revision 1.30
diff -c -c -r1.30 Makefile
*** src/port/Makefile 9 Dec 2005 21:19:36 -0000 1.30
--- src/port/Makefile 7 May 2006 01:05:32 -0000
***************
*** 26,37 ****
override CPPFLAGS := -I$(top_builddir)/src/port -DFRONTEND $(CPPFLAGS)
LIBS += $(PTHREAD_LIBS)
! # Replace object files that use FRONTEND define
! LIBOBJS_SRV := $(LIBOBJS)
! LIBOBJS_SRV := $(patsubst dirmod.o,dirmod_srv.o, $(LIBOBJS_SRV))
! LIBOBJS_SRV := $(patsubst exec.o,exec_srv.o, $(LIBOBJS_SRV))
! LIBOBJS_SRV := $(patsubst getaddrinfo.o,getaddrinfo_srv.o, $(LIBOBJS_SRV))
! LIBOBJS_SRV := $(patsubst thread.o,thread_srv.o, $(LIBOBJS_SRV))
all: libpgport.a libpgport_srv.a
--- 26,33 ----
override CPPFLAGS := -I$(top_builddir)/src/port -DFRONTEND $(CPPFLAGS)
LIBS += $(PTHREAD_LIBS)
! # Replace all object files so they use FRONTEND define
! LIBOBJS_SRV := $(LIBOBJS:%.o=%_srv.o)
all: libpgport.a libpgport_srv.a
***************
*** 60,72 ****
libpgport_srv.a: $(LIBOBJS_SRV)
$(AR) $(AROPT) $@ $^
! dirmod_srv.o: dirmod.c
! $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
!
! exec_srv.o: exec.c
! $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
!
! getaddrinfo_srv.o: getaddrinfo.c
$(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
# No thread flags for server version
--- 56,62 ----
libpgport_srv.a: $(LIBOBJS_SRV)
$(AR) $(AROPT) $@ $^
! %_srv.o: %.c
$(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
# No thread flags for server version
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend