Tom Lane wrote:
> Bruce Momjian <[email protected]> writes:
> > Tom Lane wrote:
> >> You can't just arbitrarily pull in libpgport.a everywhere that libpq.so
> >> is used. That breaks anything that requires position-independent code
> >> ... for instance ecpglib.
>
> > Strange because it worked on my BSD system and I do compile ecpg. What
> > do you suggest? Is this worth fixing somehow?
>
> Intel machines tend not to care whether code is officially
> position-independent or not. Most other platforms are sticky about it.
> You don't have a choice whether to fix it.
>
> I think you should leave the $(libpq) macro alone and add a $(libpgport)
> macro ... and yes, you will have to go around and modify the client
> program Makefiles individually.
How is this? It creates a new $(libpq_only) for library usage.
ecpglib/Makefile is the only place I saw that can use it.
--
Bruce Momjian | http://candle.pha.pa.us
[email protected] | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Index: src/Makefile.global.in
===================================================================
RCS file: /cvsroot/pgsql/src/Makefile.global.in,v
retrieving revision 1.211
diff -c -c -r1.211 Makefile.global.in
*** src/Makefile.global.in 24 Mar 2005 23:53:48 -0000 1.211
--- src/Makefile.global.in 25 Mar 2005 02:51:45 -0000
***************
*** 306,313 ****
libpq_builddir = $(top_builddir)/src/interfaces/libpq
endif
! libpq = -L$(libpq_builddir) -lpq
# If doing static linking, shared library dependency can't be
# used so we specify pthread libs for every usage of libpq
ifeq ($(enable_shared), no)
--- 306,327 ----
libpq_builddir = $(top_builddir)/src/interfaces/libpq
endif
! # Force clients to pull symbols from the non-shared library libpgport
! # rather than pulling some libpgport symbols from libpq just because
! # libpq uses those functions too. This makes applications less
! # dependent on changes in libpq's usage of pgport. To do this we link to
! # pgport before libpq. This does cause duplicate -lpgport's to appear
! # on client link lines.
! ifdef PGXS
! libpq = -L$(libdir) -lpgport -L$(libpq_builddir) -lpq
! else
! libpq = -L$(top_builddir)/src/port -lpgport -L$(libpq_builddir) -lpq
! endif
+ # This is for use for libraries linking to libpq. Because libpqport
+ # isn't created with the same link flags as libpq, it can't be used.
+ libpq_libonly = -L$(libpq_builddir) -lpq
+
# If doing static linking, shared library dependency can't be
# used so we specify pthread libs for every usage of libpq
ifeq ($(enable_shared), no)
Index: src/interfaces/ecpg/compatlib/Makefile
===================================================================
RCS file: /cvsroot/pgsql/src/interfaces/ecpg/compatlib/Makefile,v
retrieving revision 1.21
diff -c -c -r1.21 Makefile
*** src/interfaces/ecpg/compatlib/Makefile 14 Mar 2005 17:27:49 -0000
1.21
--- src/interfaces/ecpg/compatlib/Makefile 25 Mar 2005 02:51:48 -0000
***************
*** 20,26 ****
override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include
-I$(libpq_srcdir) \
-I$(top_srcdir)/src/include/utils $(CPPFLAGS)
override CFLAGS += $(PTHREAD_CFLAGS)
! SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) \
$(filter -lintl -lssl -lcrypto -lkrb5 -lcrypt -lm, $(LIBS))
$(PTHREAD_LIBS)
OBJS= informix.o
--- 20,26 ----
override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include
-I$(libpq_srcdir) \
-I$(top_srcdir)/src/include/utils $(CPPFLAGS)
override CFLAGS += $(PTHREAD_CFLAGS)
! SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq_libonly) \
$(filter -lintl -lssl -lcrypto -lkrb5 -lcrypt -lm, $(LIBS))
$(PTHREAD_LIBS)
OBJS= informix.o
Index: src/interfaces/ecpg/ecpglib/Makefile
===================================================================
RCS file: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/Makefile,v
retrieving revision 1.33
diff -c -c -r1.33 Makefile
*** src/interfaces/ecpg/ecpglib/Makefile 14 Mar 2005 17:27:50 -0000
1.33
--- src/interfaces/ecpg/ecpglib/Makefile 25 Mar 2005 02:51:48 -0000
***************
*** 27,33 ****
OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
connect.o misc.o path.o exec.o
! SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq) \
$(filter -lintl -lssl -lcrypto -lkrb5 -lcrypt -lm, $(LIBS))
$(PTHREAD_LIBS)
ifeq ($(PORTNAME), win32)
--- 27,33 ----
OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
connect.o misc.o path.o exec.o
! SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq_libonly) \
$(filter -lintl -lssl -lcrypto -lkrb5 -lcrypt -lm, $(LIBS))
$(PTHREAD_LIBS)
ifeq ($(PORTNAME), win32)
---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
joining column's datatypes do not match