Re: static or dynamic libpgport

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Bruce Momjian <bruce(at)momjian(dot)us>, Steve Singer <ssinger(at)ca(dot)afilias(dot)info>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: static or dynamic libpgport
Date: 2011-12-12 18:25:46
Message-ID: 4EE6472A.70603@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 12/10/2011 08:26 PM, Tom Lane wrote:
>
>> The other
>> thing is we'd need to turn on flags that make the object suitable for a
>> dynamic library (e.g. -fpic).
> Right now, libpq laboriously rebuilds all the .o files it needs from
> src/port/ so as to get them with -fpic. It would be nice if we could
> clean that up while we're doing this. It might be all right to always
> build the client-side version of libpgport with -fpic, though I'd be sad
> if that leaked into the server-side build.
>

Here's a small diff that seems to build things the right way. No leakage
of -fpic into the server side code. Still a deal of work to do, but it's
a start.

Would we want to link our own non-backend executables against the shared
lib? That would almost certainly break the buildfarm for Windows builds,
as it only currently copies the libpq DLL into the bin directory. That's
no reason on its own not to do it, of course, and there are only a
couple of owners other than me anyway, so it would be easy to fix.

How do you want to proceed for libpq (and the ecpg library cases that do
the same thing)? Just link in the object files directly?

cheers

andrew

*** Makefile 2011-12-03 17:21:59.944509111 -0500
--- GNUmakefile 2011-12-12 12:39:43.176260505 -0500
***************
*** 37,47 ****
# foo_srv.o and foo.o are both built from foo.c, but only foo.o has
-DFRONTEND
OBJS_SRV = $(OBJS:%.o=%_srv.o)

! all: libpgport.a libpgport_srv.a

! # libpgport is needed by some contrib
! install: all installdirs
! $(INSTALL_STLIB) libpgport.a '$(DESTDIR)$(libdir)/libpgport.a'

installdirs:
$(MKDIR_P) '$(DESTDIR)$(libdir)'
--- 37,52 ----
# foo_srv.o and foo.o are both built from foo.c, but only foo.o has
-DFRONTEND
OBJS_SRV = $(OBJS:%.o=%_srv.o)

! NAME = pgport
! SO_MAJOR_VERSION= 1
! SO_MINOR_VERSION= 1

! include $(top_srcdir)/src/Makefile.shlib
!
! all: all-lib libpgport_srv.a
!
! # libpgport is needed by any exe built with pgxs
! install: all installdirs install-lib

installdirs:
$(MKDIR_P) '$(DESTDIR)$(libdir)'
***************
*** 49,57 ****
uninstall:
rm -f '$(DESTDIR)$(libdir)/libpgport.a'

- libpgport.a: $(OBJS)
- $(AR) $(AROPT) $@ $^
-
# thread.o needs PTHREAD_CFLAGS (but thread_srv.o does not)
thread.o: thread.c
$(CC) $(CFLAGS) $(CPPFLAGS) $(PTHREAD_CFLAGS) -c $<
--- 54,59 ----
***************
*** 64,70 ****
$(AR) $(AROPT) $@ $^

%_srv.o: %.c
! $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@

$(OBJS_SRV): | submake-errcodes

--- 66,72 ----
$(AR) $(AROPT) $@ $^

%_srv.o: %.c
! $(CC) $(subst $(CFLAGS_SL),,$(CFLAGS)) $(subst -DFRONTEND,,
$(CPPFLAGS)) -c $< -o $@

$(OBJS_SRV): | submake-errcodes

***************
*** 97,100 ****
echo "#define MANDIR \"$(mandir)\"" >>$@

clean distclean maintainer-clean:
! rm -f libpgport.a libpgport_srv.a $(OBJS) $(OBJS_SRV)
pg_config_paths.h
--- 99,102 ----
echo "#define MANDIR \"$(mandir)\"" >>$@

clean distclean maintainer-clean:
! rm -f libpgport.so* libpgport.a libpgport_srv.a $(OBJS)
$(OBJS_SRV) pg_config_paths.h

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Greg Smith 2011-12-12 18:34:24 Re: Configuration include directory
Previous Message Tom Lane 2011-12-12 17:51:45 Re: Is anybody actually using XLR_BKP_REMOVABLE?