Re: static or dynamic libpgport

Поиск
Список
Период
Сортировка
От Andrew Dunstan
Тема Re: static or dynamic libpgport
Дата
Msg-id 4EE6472A.70603@dunslane.net
обсуждение исходный текст
Ответ на Re: static or dynamic libpgport  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Is anybody actually using XLR_BKP_REMOVABLE?
Следующее
От: Greg Smith
Дата:
Сообщение: Re: Configuration include directory