Commit a1d5d857 authored by Peter Eisentraut's avatar Peter Eisentraut

Refactor the code that creates the shared library export files to appear

only once in Makefile.shlib and not in four copies.
parent fd15dba5
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
# Copyright (c) 1998, Regents of the University of California # Copyright (c) 1998, Regents of the University of California
# #
# IDENTIFICATION # IDENTIFICATION
# $PostgreSQL: pgsql/src/Makefile.shlib,v 1.109 2007/02/20 22:45:57 momjian Exp $ # $PostgreSQL: pgsql/src/Makefile.shlib,v 1.110 2008/02/26 06:41:23 petere Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
# OBJS List of object files to include in library # OBJS List of object files to include in library
# SHLIB_LINK If shared library relies on other libraries, # SHLIB_LINK If shared library relies on other libraries,
# additional stuff to put in its link command # additional stuff to put in its link command
# SHLIB_EXPORTS (optional) Name of file containing list of symbols to
# export
# (If you want a patchlevel, include it in SO_MINOR_VERSION, e.g., "6.2".) # (If you want a patchlevel, include it in SO_MINOR_VERSION, e.g., "6.2".)
# #
# Optional flags when building DLL's (only applicable to win32 and cygwin # Optional flags when building DLL's (only applicable to win32 and cygwin
...@@ -31,8 +33,6 @@ ...@@ -31,8 +33,6 @@
# DLLTOOL_DEFFLAGS Additional flags when creating the dll .def file # DLLTOOL_DEFFLAGS Additional flags when creating the dll .def file
# DLLTOOL_LIBFLAGS Additional flags when creating the lib<module>.a file # DLLTOOL_LIBFLAGS Additional flags when creating the lib<module>.a file
# DLLWRAP_FLAGS Additional flags to dllwrap # DLLWRAP_FLAGS Additional flags to dllwrap
# DLL_DEFFILE Use pre-existing .def file instead of auto-generating
# one with all exports in it (win32 only).
# #
# The module Makefile must also include # The module Makefile must also include
# $(top_builddir)/src/Makefile.global before including this file. # $(top_builddir)/src/Makefile.global before including this file.
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
# install-lib install the libraries into $(libdir) # install-lib install the libraries into $(libdir)
# uninstall-lib remove the libraries from $(libdir) # uninstall-lib remove the libraries from $(libdir)
# clean-lib delete the static and shared libraries from the build dir # clean-lib delete the static and shared libraries from the build dir
# maintainer-clean-lib delete .def files built for win32
# #
# Since `all-lib' is the first rule in this file you probably want to # Since `all-lib' is the first rule in this file you probably want to
# have the `all' target before including this file. In the most simple # have the `all' target before including this file. In the most simple
...@@ -115,6 +116,10 @@ ifeq ($(PORTNAME), darwin) ...@@ -115,6 +116,10 @@ ifeq ($(PORTNAME), darwin)
endif endif
shlib = lib$(NAME).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)$(DLSUFFIX) shlib = lib$(NAME).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)$(DLSUFFIX)
shlib_major = lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX) shlib_major = lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX)
BUILD.exports = $(AWK) '/^[^#]/ {printf "_%s\n",$$1}' $< >$@
ifneq (,$(SHLIB_EXPORTS))
exported_symbols_list = -exported_symbols_list $(SHLIB_EXPORTS:%.txt=%.list)
endif
endif endif
ifeq ($(PORTNAME), openbsd) ifeq ($(PORTNAME), openbsd)
...@@ -186,7 +191,11 @@ ifeq ($(PORTNAME), irix) ...@@ -186,7 +191,11 @@ ifeq ($(PORTNAME), irix)
endif endif
ifeq ($(PORTNAME), linux) ifeq ($(PORTNAME), linux)
LINK.shared = $(COMPILER) -shared -Wl,-soname,$(soname) $(exported_symbols_list) LINK.shared = $(COMPILER) -shared -Wl,-soname,$(soname)
BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@
ifneq (,$(SHLIB_EXPORTS))
LINK.shared += -Wl,--version-script=$(SHLIB_EXPORTS:%.txt=%.list)
endif
endif endif
ifeq ($(PORTNAME), solaris) ifeq ($(PORTNAME), solaris)
...@@ -293,6 +302,19 @@ ifneq ($(shlib), $(shlib_bare)) ...@@ -293,6 +302,19 @@ ifneq ($(shlib), $(shlib_bare))
$(LN_S) $(shlib) $(shlib_bare) $(LN_S) $(shlib) $(shlib_bare)
endif endif
# 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.
ifneq (,$(SHLIB_EXPORTS))
ifdef BUILD.exports
$(shlib): $(SHLIB_EXPORTS:%.txt=%.list)
$(SHLIB_EXPORTS:%.txt=%.list): %.list: %.txt
$(BUILD.exports)
endif
endif
else # PORTNAME == aix else # PORTNAME == aix
# AIX case # AIX case
...@@ -303,7 +325,7 @@ $(shlib) lib$(NAME).a: $(OBJS) ...@@ -303,7 +325,7 @@ $(shlib) lib$(NAME).a: $(OBJS)
$(COMPILER) $(LDFLAGS_NO_L) $(LDFLAGS_SL) -o $(shlib) lib$(NAME).a -Wl,-bE:lib$(NAME)$(EXPSUFF) $(SHLIB_LINK) $(COMPILER) $(LDFLAGS_NO_L) $(LDFLAGS_SL) -o $(shlib) lib$(NAME).a -Wl,-bE:lib$(NAME)$(EXPSUFF) $(SHLIB_LINK)
rm -f lib$(NAME).a rm -f lib$(NAME).a
$(AR) $(AROPT) lib$(NAME).a $(shlib) $(AR) $(AROPT) lib$(NAME).a $(shlib)
endif # PORTNAME == aix endif # PORTNAME == aix
else # PORTNAME == cygwin else # PORTNAME == cygwin
...@@ -323,6 +345,10 @@ endif # PORTNAME == cygwin ...@@ -323,6 +345,10 @@ endif # PORTNAME == cygwin
else # PORTNAME == win32 else # PORTNAME == win32
ifneq (,$(SHLIB_EXPORTS))
DLL_DEFFILE = lib$(NAME)dll.def
endif
# win32 case # win32 case
$(shlib) lib$(NAME).a: $(OBJS) $(shlib) lib$(NAME).a: $(OBJS)
ifndef DLL_DEFFILE ifndef DLL_DEFFILE
...@@ -339,6 +365,46 @@ endif # PORTNAME == win32 ...@@ -339,6 +365,46 @@ endif # PORTNAME == win32
endif # enable_shared endif # enable_shared
# We need several not-quite-identical variants of .DEF files to build
# DLLs for Windows. These are made from the single source file
# exports.txt. Since we can't assume that Windows boxes will have
# sed, the .DEF files are always built and included in distribution
# tarballs.
ifneq (,$(SHLIB_EXPORTS))
all: def-files
distprep: def-files
.PHONY: def-files
def-files: $(srcdir)/lib$(NAME)dll.def $(srcdir)/lib$(NAME)ddll.def $(srcdir)/blib$(NAME)dll.def
UC_NAME = $(shell echo $(NAME) | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
$(srcdir)/lib$(NAME)dll.def: $(SHLIB_EXPORTS)
echo '; DEF file for MS VC++' >$@
echo 'LIBRARY LIB$(UC_NAME)' >>$@
echo 'EXPORTS' >>$@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' $< >>$@
$(srcdir)/lib$(NAME)ddll.def: $(SHLIB_EXPORTS)
echo '; DEF file for MS VC++' >$@
echo 'LIBRARY LIB$(UC_NAME)D' >>$@
echo 'EXPORTS' >>$@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' $< >>$@
$(srcdir)/blib$(NAME)dll.def: $(SHLIB_EXPORTS)
echo '; DEF file for Borland C++ Builder' >$@
echo 'LIBRARY BLIB$(UC_NAME)' >>$@
echo 'EXPORTS' >>$@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ _\1@ \2/' $< >>$@
echo >>$@
echo '; Aliases for MS compatible names' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1= _\1/' $< | sed 's/ *$$//' >>$@
endif # SHLIB_EXPORTS
## ##
## INSTALL ## INSTALL
## ##
...@@ -398,7 +464,7 @@ endif # enable_shared ...@@ -398,7 +464,7 @@ endif # enable_shared
clean-lib: clean-lib:
rm -f lib$(NAME).a rm -f lib$(NAME).a
ifeq ($(enable_shared), yes) ifeq ($(enable_shared), yes)
rm -f $(shlib_bare) $(shlib_major) $(shlib) rm -f $(shlib_bare) $(shlib_major) $(shlib) $(SHLIB_EXPORTS:%.txt=%.list)
ifdef EXPSUFF ifdef EXPSUFF
rm -f lib$(NAME)$(EXPSUFF) rm -f lib$(NAME)$(EXPSUFF)
endif endif
...@@ -410,3 +476,8 @@ endif ...@@ -410,3 +476,8 @@ endif
ifeq ($(PORTNAME), win32) ifeq ($(PORTNAME), win32)
rm -f $(NAME).dll $(NAME).def rm -f $(NAME).dll $(NAME).def
endif endif
ifneq (,$(SHLIB_EXPORTS))
maintainer-clean-lib:
rm -f $(srcdir)/lib$(NAME)dll.def $(srcdir)/lib$(NAME)ddll.def $(srcdir)/blib$(NAME)dll.def
endif
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group # Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California # Portions Copyright (c) 1994, Regents of the University of California
# #
# $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/Makefile,v 1.38 2008/02/13 18:14:46 momjian Exp $ # $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/Makefile,v 1.39 2008/02/26 06:41:23 petere Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
...@@ -25,16 +25,14 @@ override CFLAGS += $(PTHREAD_CFLAGS) ...@@ -25,16 +25,14 @@ override CFLAGS += $(PTHREAD_CFLAGS)
SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) -lm \ SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) -lm \
$(PTHREAD_LIBS) $(PTHREAD_LIBS)
SHLIB_EXPORTS = exports.txt
# Need to recompile any libpgport object files # Need to recompile any libpgport object files
LIBS := $(filter-out -lpgport, $(LIBS)) LIBS := $(filter-out -lpgport, $(LIBS))
OBJS= informix.o $(filter snprintf.o, $(LIBOBJS)) OBJS= informix.o $(filter snprintf.o, $(LIBOBJS))
ifeq ($(PORTNAME), win32) all: all-lib
DLL_DEFFILE=libecpg_compatdll.def
endif
all: def-files all-lib
# Shared library stuff # Shared library stuff
include $(top_srcdir)/src/Makefile.shlib include $(top_srcdir)/src/Makefile.shlib
...@@ -42,55 +40,6 @@ include $(top_srcdir)/src/Makefile.shlib ...@@ -42,55 +40,6 @@ include $(top_srcdir)/src/Makefile.shlib
snprintf.c: % : $(top_srcdir)/src/port/% snprintf.c: % : $(top_srcdir)/src/port/%
rm -f $@ && $(LN_S) $< . rm -f $@ && $(LN_S) $< .
# We need several not-quite-identical variants of .DEF files to build libecpg
# DLLs for Windows. These are made from the single source file exports.txt.
# Since we can't assume that Windows boxes will have sed, the .DEF files are
# always built and included in distribution tarballs.
distprep: def-files
.PHONY: def-files
def-files: $(srcdir)/libecpg_compatdll.def $(srcdir)/blibecpg_compatdll.def
$(srcdir)/libecpg_compatdll.def: exports.txt
echo '; DEF file for MS VC++' > $@
echo 'LIBRARY LIBECPG_COMPAT' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' < $< >> $@
$(srcdir)/blibecpg_compatdll.def: exports.txt
echo '; DEF file for Borland C++ Builder' > $@
echo 'LIBRARY BLIBECPG_COMPAT' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ _\1@ \2/' < $< >> $@
echo '' >> $@
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.
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
install: all installdirs install-lib install: all installdirs install-lib
installdirs: installdirs:
...@@ -99,7 +48,6 @@ installdirs: ...@@ -99,7 +48,6 @@ installdirs:
uninstall: uninstall-lib uninstall: uninstall-lib
clean distclean: clean-lib clean distclean: clean-lib
rm -f $(OBJS) snprintf.c exports.list rm -f $(OBJS) snprintf.c
maintainer-clean: distclean maintainer-clean: distclean maintainer-clean-lib
rm -f $(srcdir)/libecpg_compatdll.def $(srcdir)/blibecpg_compatdll.def
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group # Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California # Portions Copyright (c) 1994, Regents of the University of California
# #
# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.55 2008/02/13 18:14:46 momjian Exp $ # $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.56 2008/02/26 06:41:24 petere Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
...@@ -36,13 +36,14 @@ endif ...@@ -36,13 +36,14 @@ endif
SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq) -lm $(PTHREAD_LIBS) SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq) -lm $(PTHREAD_LIBS)
SHLIB_EXPORTS = exports.txt
ifeq ($(PORTNAME), win32) ifeq ($(PORTNAME), win32)
# Link to shfolder.dll instead of shell32.dll # Link to shfolder.dll instead of shell32.dll
SHLIB_LINK += -lshfolder SHLIB_LINK += -lshfolder
DLL_DEFFILE=libecpgdll.def
endif endif
all: def-files all-lib all: all-lib
# Shared library stuff # Shared library stuff
include $(top_srcdir)/src/Makefile.shlib include $(top_srcdir)/src/Makefile.shlib
...@@ -60,55 +61,6 @@ path.o: path.c $(top_builddir)/src/port/pg_config_paths.h ...@@ -60,55 +61,6 @@ path.o: path.c $(top_builddir)/src/port/pg_config_paths.h
$(top_builddir)/src/port/pg_config_paths.h: $(top_builddir)/src/port/pg_config_paths.h:
$(MAKE) -C $(top_builddir)/src/port pg_config_paths.h $(MAKE) -C $(top_builddir)/src/port pg_config_paths.h
# We need several not-quite-identical variants of .DEF files to build libecpg
# DLLs for Windows. These are made from the single source file exports.txt.
# Since we can't assume that Windows boxes will have sed, the .DEF files are
# always built and included in distribution tarballs.
distprep: def-files
.PHONY: def-files
def-files: $(srcdir)/libecpgdll.def $(srcdir)/blibecpgdll.def
$(srcdir)/libecpgdll.def: exports.txt
echo '; DEF file for MS VC++' > $@
echo 'LIBRARY LIBECPG' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' < $< >> $@
$(srcdir)/blibecpgdll.def: exports.txt
echo '; DEF file for Borland C++ Builder' > $@
echo 'LIBRARY BLIBECPG' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ _\1@ \2/' < $< >> $@
echo '' >> $@
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.
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
install: all installdirs install-lib install: all installdirs install-lib
installdirs: installdirs:
...@@ -118,7 +70,6 @@ uninstall: uninstall-lib ...@@ -118,7 +70,6 @@ uninstall: uninstall-lib
clean distclean: clean-lib clean distclean: clean-lib
rm -f $(OBJS) rm -f $(OBJS)
rm -f path.c pgstrcasecmp.c snprintf.c strlcpy.c thread.c exports.list rm -f path.c pgstrcasecmp.c snprintf.c strlcpy.c thread.c
maintainer-clean: distclean maintainer-clean: distclean maintainer-clean-lib
rm -f $(srcdir)/libecpgdll.def $(srcdir)/blibecpgdll.def
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group # Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California # Portions Copyright (c) 1994, Regents of the University of California
# #
# $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/Makefile,v 1.40 2008/02/13 18:14:46 momjian Exp $ # $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/Makefile,v 1.41 2008/02/26 06:41:24 petere Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
...@@ -27,68 +27,17 @@ LIBS := $(filter-out -lpgport, $(LIBS)) ...@@ -27,68 +27,17 @@ LIBS := $(filter-out -lpgport, $(LIBS))
SHLIB_LINK += -lm SHLIB_LINK += -lm
SHLIB_EXPORTS = exports.txt
OBJS= numeric.o datetime.o common.o dt_common.o timestamp.o interval.o \ OBJS= numeric.o datetime.o common.o dt_common.o timestamp.o interval.o \
pgstrcasecmp.o \ pgstrcasecmp.o \
$(filter rint.o snprintf.o, $(LIBOBJS)) $(filter rint.o snprintf.o, $(LIBOBJS))
ifeq ($(PORTNAME), win32) all: all-lib
DLL_DEFFILE=libpgtypesdll.def
endif
all: def-files all-lib
# Shared library stuff # Shared library stuff
include $(top_srcdir)/src/Makefile.shlib include $(top_srcdir)/src/Makefile.shlib
# We need several not-quite-identical variants of .DEF files to build libecpg
# DLLs for Windows. These are made from the single source file exports.txt.
# Since we can't assume that Windows boxes will have sed, the .DEF files are
# always built and included in distribution tarballs.
distprep: def-files
.PHONY: def-files
def-files: $(srcdir)/libpgtypesdll.def $(srcdir)/blibpgtypesdll.def
$(srcdir)/libpgtypesdll.def: exports.txt
echo '; DEF file for MS VC++' > $@
echo 'LIBRARY LIBPGTYPES' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' < $< >> $@
$(srcdir)/blibpgtypesdll.def: exports.txt
echo '; DEF file for Borland C++ Builder' > $@
echo 'LIBRARY BLIBPGTYPES' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ _\1@ \2/' < $< >> $@
echo '' >> $@
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.
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
# We use some port modules verbatim, but since we need to # We use some port modules verbatim, but since we need to
# compile with appropriate options to build a shared lib, we can't # compile with appropriate options to build a shared lib, we can't
# necessarily use the same object files as the backend uses. Instead, # necessarily use the same object files as the backend uses. Instead,
...@@ -105,7 +54,6 @@ installdirs: ...@@ -105,7 +54,6 @@ installdirs:
uninstall: uninstall-lib uninstall: uninstall-lib
clean distclean: clean-lib clean distclean: clean-lib
rm -f $(OBJS) pgstrcasecmp.c rint.c snprintf.c exports.list rm -f $(OBJS) pgstrcasecmp.c rint.c snprintf.c
maintainer-clean: distclean maintainer-clean: distclean maintainer-clean-lib
rm -f $(srcdir)/libpgtypesdll.def $(srcdir)/blibpgtypesdll.def
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group # Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California # Portions Copyright (c) 1994, Regents of the University of California
# #
# $PostgreSQL: pgsql/src/interfaces/libpq/Makefile,v 1.160 2008/02/13 18:14:46 momjian Exp $ # $PostgreSQL: pgsql/src/interfaces/libpq/Makefile,v 1.161 2008/02/26 06:41:24 petere Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
...@@ -42,7 +42,6 @@ endif ...@@ -42,7 +42,6 @@ endif
ifeq ($(PORTNAME), win32) ifeq ($(PORTNAME), win32)
OBJS += win32.o pgsleep.o libpqrc.o OBJS += win32.o pgsleep.o libpqrc.o
DLL_DEFFILE=libpqdll.def
libpqrc.o: libpq.rc libpqrc.o: libpq.rc
windres -i libpq.rc -o libpqrc.o windres -i libpq.rc -o libpqrc.o
...@@ -65,8 +64,9 @@ ifeq ($(PORTNAME), win32) ...@@ -65,8 +64,9 @@ ifeq ($(PORTNAME), win32)
SHLIB_LINK += -lshfolder -lwsock32 -lws2_32 -lsecur32 $(filter -leay32 -lssleay32 -lcomerr32 -lkrb5_32, $(LIBS)) SHLIB_LINK += -lshfolder -lwsock32 -lws2_32 -lsecur32 $(filter -leay32 -lssleay32 -lcomerr32 -lkrb5_32, $(LIBS))
endif endif
SHLIB_EXPORTS = exports.txt
all: def-files $(srcdir)/libpq.rc all-lib all: $(srcdir)/libpq.rc all-lib
# Shared library stuff # Shared library stuff
include $(top_srcdir)/src/Makefile.shlib include $(top_srcdir)/src/Makefile.shlib
...@@ -90,62 +90,7 @@ encnames.c wchar.c : % : $(backend_src)/utils/mb/% ...@@ -90,62 +90,7 @@ encnames.c wchar.c : % : $(backend_src)/utils/mb/%
rm -f $@ && $(LN_S) $< . rm -f $@ && $(LN_S) $< .
# We need several not-quite-identical variants of .DEF files to build libpq distprep: $(srcdir)/libpq.rc
# DLLs for Windows. These are made from the single source file exports.txt.
# Since we can't assume that Windows boxes will have sed, the .DEF files are
# always built and included in distribution tarballs.
distprep: def-files $(srcdir)/libpq.rc
.PHONY: def-files
def-files: $(srcdir)/libpqdll.def $(srcdir)/libpqddll.def $(srcdir)/blibpqdll.def
$(srcdir)/libpqdll.def: exports.txt
echo '; DEF file for MS VC++' > $@
echo 'LIBRARY LIBPQ' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' < $< >> $@
$(srcdir)/libpqddll.def: exports.txt
echo '; DEF file for MS VC++' > $@
echo 'LIBRARY LIBPQD' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ \1@ \2/' < $< >> $@
$(srcdir)/blibpqdll.def: exports.txt
echo '; DEF file for Borland C++ Builder' > $@
echo 'LIBRARY BLIBPQ' >> $@
echo 'EXPORTS' >> $@
sed -e '/^#/d' -e 's/^\(.* \)\([0-9][0-9]*\)/ _\1@ \2/' < $< >> $@
echo '' >> $@
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 # depend on Makefile.global to force rebuild on re-run of configure
$(srcdir)/libpq.rc: libpq.rc.in $(top_builddir)/src/Makefile.global $(srcdir)/libpq.rc: libpq.rc.in $(top_builddir)/src/Makefile.global
...@@ -169,9 +114,9 @@ uninstall: uninstall-lib ...@@ -169,9 +114,9 @@ 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' 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 clean distclean: clean-lib
rm -f $(OBJS) pg_config_paths.h crypt.c getaddrinfo.c inet_aton.c noblock.c open.c pgstrcasecmp.c snprintf.c strerror.c strlcpy.c thread.c md5.c ip.c encnames.c wchar.c win32error.c pgsleep.c pthread.h exports.list rm -f $(OBJS) pg_config_paths.h crypt.c getaddrinfo.c inet_aton.c noblock.c open.c pgstrcasecmp.c snprintf.c strerror.c strlcpy.c thread.c md5.c ip.c encnames.c wchar.c win32error.c pgsleep.c pthread.h
# Might be left over from a Win32 client-only build # Might be left over from a Win32 client-only build
rm -f pg_config_paths.h rm -f pg_config_paths.h
maintainer-clean: distclean maintainer-clean: distclean maintainer-clean-lib
rm -f $(srcdir)/libpqdll.def $(srcdir)/libpqddll.def $(srcdir)/blibpqdll.def $(srcdir)/libpq.rc rm -f $(srcdir)/libpq.rc
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment