diff --git a/src/Makefile.shlib b/src/Makefile.shlib index 732338caa4..8efa69db1d 100644 --- a/src/Makefile.shlib +++ b/src/Makefile.shlib @@ -6,7 +6,7 @@ # Copyright (c) 1998, Regents of the University of California # # IDENTIFICATION -# $PostgreSQL: pgsql/src/Makefile.shlib,v 1.103 2006/04/19 16:32:08 tgl Exp $ +# $PostgreSQL: pgsql/src/Makefile.shlib,v 1.104 2006/04/28 02:53:20 tgl Exp $ # #------------------------------------------------------------------------- @@ -107,11 +107,11 @@ ifeq ($(PORTNAME), darwin) ifeq ($(DLTYPE), library) # linkable library DLSUFFIX := .dylib - LINK.shared = $(COMPILER) -dynamiclib -install_name $(libdir)/lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX) $(version_link) -multiply_defined suppress + LINK.shared = $(COMPILER) -dynamiclib -install_name $(libdir)/lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX) $(version_link) $(exported_symbols_list) -multiply_defined suppress else # loadable module (default case) DLSUFFIX := .so - LINK.shared = $(COMPILER) -bundle + LINK.shared = $(COMPILER) -bundle -multiply_defined suppress endif shlib = lib$(NAME).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)$(DLSUFFIX) shlib_major = lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX) @@ -186,7 +186,7 @@ ifeq ($(PORTNAME), irix) endif ifeq ($(PORTNAME), linux) - LINK.shared = $(COMPILER) -shared -Wl,-soname,$(soname) + LINK.shared = $(COMPILER) -shared -Wl,-soname,$(soname) $(exported_symbols_list) endif ifeq ($(PORTNAME), solaris) diff --git a/src/interfaces/ecpg/ecpglib/Makefile b/src/interfaces/ecpg/ecpglib/Makefile index a5ce3b39c0..91542fe297 100644 --- a/src/interfaces/ecpg/ecpglib/Makefile +++ b/src/interfaces/ecpg/ecpglib/Makefile @@ -4,7 +4,7 @@ # # Copyright (c) 1994, Regents of the University of California # -# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.38 2006/01/17 19:49:23 meskes Exp $ +# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.39 2006/04/28 02:53:20 tgl Exp $ # #------------------------------------------------------------------------- @@ -25,7 +25,7 @@ override CFLAGS += $(PTHREAD_CFLAGS) LIBS := $(filter-out -lpgport, $(LIBS)) OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \ - connect.o misc.o path.o exec.o \ + connect.o misc.o path.o exec.o thread.o \ $(filter snprintf.o, $(LIBOBJS)) SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq) \ @@ -46,7 +46,7 @@ include $(top_srcdir)/src/Makefile.shlib # necessarily use the same object files as the backend uses. Instead, # symlink the source files in here and build our own object file. -path.c exec.c snprintf.c: % : $(top_srcdir)/src/port/% +path.c exec.c snprintf.c thread.c: % : $(top_srcdir)/src/port/% rm -f $@ && $(LN_S) $< . path.o: path.c $(top_builddir)/src/port/pg_config_paths.h @@ -62,7 +62,7 @@ installdirs: uninstall: uninstall-lib clean distclean maintainer-clean: clean-lib - rm -f $(OBJS) path.c exec.c snprintf.c + rm -f $(OBJS) path.c exec.c snprintf.c thread.c depend dep: $(CC) -MM $(CFLAGS) *.c >depend diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index ff29e7c12a..2a1f76e712 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -5,7 +5,7 @@ # Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # -# $PostgreSQL: pgsql/src/interfaces/libpq/Makefile,v 1.143 2006/04/11 20:26:40 neilc Exp $ +# $PostgreSQL: pgsql/src/interfaces/libpq/Makefile,v 1.144 2006/04/28 02:53:20 tgl Exp $ # #------------------------------------------------------------------------- @@ -16,8 +16,8 @@ include $(top_builddir)/src/Makefile.global # shared library parameters NAME= pq -SO_MAJOR_VERSION= 4 -SO_MINOR_VERSION= 2 +SO_MAJOR_VERSION= 5 +SO_MINOR_VERSION= 0 DLTYPE= library override CPPFLAGS := -DFRONTEND -I$(srcdir) $(CPPFLAGS) -I$(top_builddir)/src/port @@ -125,6 +125,31 @@ $(srcdir)/blibpqdll.def: exports.txt echo '; Aliases for MS compatible names' >> $@ sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1= _\1/' < $< | sed 's/ *$$//' >> $@ +# Where possible, restrict the symbols exported by the library to just the +# official list, so as to avoid unintentional ABI changes. On recent Darwin +# this also quiets multiply-defined-symbol warnings in programs that use +# libpgport along with libpq. + +ifeq ($(PORTNAME), darwin) +$(shlib): exports.list + +exports.list: exports.txt + $(AWK) '/^[^#]/ {printf "_%s\n",$$1}' $< >$@ + +exported_symbols_list = -exported_symbols_list exports.list +endif + +ifeq ($(PORTNAME), linux) +$(shlib): exports.list + +exports.list: exports.txt + echo '{ global:' >$@ + $(AWK) '/^[^#]/ {printf "%s;\n",$$1}' $< >>$@ + echo ' local: *; };' >>$@ + +exported_symbols_list = -Wl,--version-script=exports.list +endif + # depend on Makefile.global to force rebuild on re-run of configure $(srcdir)/libpq.rc: libpq.rc.in $(top_builddir)/src/Makefile.global sed -e 's/\(VERSION.*\),0 *$$/\1,'`date '+%y%j' | sed 's/^0*//'`'/' < $< > $@ @@ -147,7 +172,7 @@ uninstall: uninstall-lib rm -f '$(DESTDIR)$(includedir)/libpq-fe.h' '$(DESTDIR)$(includedir_internal)/libpq-int.h' '$(DESTDIR)$(includedir_internal)/pqexpbuffer.h' '$(DESTDIR)$(datadir)/pg_service.conf.sample' clean distclean: clean-lib - rm -f $(OBJS) pg_config_paths.h crypt.c getaddrinfo.c inet_aton.c noblock.c pgstrcasecmp.c snprintf.c strerror.c open.c thread.c md5.c ip.c encnames.c wchar.c pthread.h + rm -f $(OBJS) pg_config_paths.h crypt.c getaddrinfo.c inet_aton.c noblock.c pgstrcasecmp.c snprintf.c strerror.c open.c thread.c md5.c ip.c encnames.c wchar.c pthread.h exports.list rm -f pg_config_paths.h # Might be left over from a Win32 client-only build maintainer-clean: distclean