aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-09-19 15:36:08 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-09-19 15:36:08 +0000
commit9b5e108ee9d2fff1fc0dd6f6929582bb2744f0a9 (patch)
treec6636ec33671594be5cd4302b164cdec31049fea /src
parent48fe13742571aa5185daecf8330b6dcf73b61901 (diff)
downloadpostgresql-9b5e108ee9d2fff1fc0dd6f6929582bb2744f0a9.tar.gz
postgresql-9b5e108ee9d2fff1fc0dd6f6929582bb2744f0a9.zip
Fix shared library creation to work properly on AIX. Albe Laurenz
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.global.in9
-rw-r--r--src/Makefile.shlib16
-rw-r--r--src/interfaces/ecpg/test/Makefile.regress4
-rw-r--r--src/interfaces/ecpg/test/compat_informix/Makefile7
-rw-r--r--src/interfaces/ecpg/test/pg_regress.sh10
-rw-r--r--src/makefiles/Makefile.aix9
-rw-r--r--src/test/regress/pg_regress.c10
7 files changed, 42 insertions, 23 deletions
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 12cf42f0aa8..60493a8e4bf 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -1,5 +1,5 @@
# -*-makefile-*-
-# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.229 2006/09/11 13:35:08 tgl Exp $
+# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.230 2006/09/19 15:36:07 tgl Exp $
#------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets,
@@ -345,13 +345,6 @@ libpq := -L$(libpq_builddir) -lpq
ifeq ($(enable_shared), no)
libpq += $(filter -lintl -lssl -lcrypto -lkrb5 -lcrypt, $(LIBS)) \
$(LDAP_LIBS_FE) $(PTHREAD_LIBS)
-else
-# On AIX even shared libraries do not remember their required libs,
-# so again add in what libpq depends on.
-ifeq ($(PORTNAME), aix)
-libpq += $(filter -lintl -lssl -lcrypto -lkrb5 -lcrypt, $(LIBS)) \
- $(LDAP_LIBS_FE) $(PTHREAD_LIBS)
-endif
endif
# This macro is for use by client executables (not libraries) that use libpq.
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index 8efa69db1d5..10cc94a4888 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.104 2006/04/28 02:53:20 tgl Exp $
+# $PostgreSQL: pgsql/src/Makefile.shlib,v 1.105 2006/09/19 15:36:07 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -96,8 +96,8 @@ override CFLAGS += $(CFLAGS_SL)
soname = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
ifeq ($(PORTNAME), aix)
- shlib = lib$(NAME)$(DLSUFFIX)
-# SHLIB_LINK += -lc
+ shlib = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
+ haslibarule = yes
endif
ifeq ($(PORTNAME), darwin)
@@ -295,9 +295,13 @@ endif
else # PORTNAME == aix
# AIX case
-$(shlib): lib$(NAME).a
+$(shlib) lib$(NAME).a: $(OBJS)
+ $(LINK.static) lib$(NAME).a $^
+ $(RANLIB) lib$(NAME).a
$(MKLDEXPORT) lib$(NAME).a > lib$(NAME)$(EXPSUFF)
- $(COMPILER) $(LDFLAGS_NO_L) $(LDFLAGS_SL) -o $@ $< -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
+ $(AR) $(AROPT) lib$(NAME).a $(shlib)
endif # PORTNAME == aix
@@ -350,6 +354,7 @@ endif
ifeq ($(enable_shared), yes)
install-lib-shared: $(shlib)
+ifneq ($(PORTNAME), aix) # we don't install $(shlib) on AIX
$(INSTALL_SHLIB) $< '$(DESTDIR)$(libdir)/$(shlib)'
ifneq ($(PORTNAME), cygwin)
ifneq ($(PORTNAME), win32)
@@ -365,6 +370,7 @@ ifneq ($(shlib), $(shlib_bare))
endif
endif # not win32
endif # not cygwin
+endif # not aix
endif # enable_shared
diff --git a/src/interfaces/ecpg/test/Makefile.regress b/src/interfaces/ecpg/test/Makefile.regress
index 31f767a1c49..c5e017e74a9 100644
--- a/src/interfaces/ecpg/test/Makefile.regress
+++ b/src/interfaces/ecpg/test/Makefile.regress
@@ -2,8 +2,8 @@ override CPPFLAGS := -I../../include -I$(top_srcdir)/src/interfaces/ecpg/include
-I$(libpq_srcdir) $(CPPFLAGS)
override CFLAGS += $(PTHREAD_CFLAGS)
-override LDFLAGS := -L../../ecpglib -L../../pgtypeslib -L../../../libpq $(LDFLAGS)
-override LIBS := -lpgtypes -lecpg -lpq $(LIBS) $(PTHREAD_LIBS)
+override LDFLAGS := -L../../ecpglib -L../../pgtypeslib $(LDFLAGS)
+override LIBS := -lecpg -lpgtypes $(libpq) $(LIBS) $(PTHREAD_LIBS)
ECPG = ../../preproc/ecpg -I$(srcdir)/../../include
diff --git a/src/interfaces/ecpg/test/compat_informix/Makefile b/src/interfaces/ecpg/test/compat_informix/Makefile
index 05ed3cfd8cc..f57a190c4bd 100644
--- a/src/interfaces/ecpg/test/compat_informix/Makefile
+++ b/src/interfaces/ecpg/test/compat_informix/Makefile
@@ -3,11 +3,12 @@ top_builddir = ../../../../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/$(subdir)/../Makefile.regress
-# special informix compatiblity switches
+# special informix compatibility switches
ECPG += -C INFORMIX
ECPG_NOIND = $(ECPG) -r no_indicator
-override LDFLAGS += -L../../compatlib
-override LIBS += $(LIBS) -lecpg_compat
+
+override LDFLAGS := -L../../compatlib $(LDFLAGS)
+override LIBS := -lecpg_compat $(LIBS)
TESTS = test_informix test_informix.c \
test_informix2 test_informix2.c \
diff --git a/src/interfaces/ecpg/test/pg_regress.sh b/src/interfaces/ecpg/test/pg_regress.sh
index a896042d53b..9f27d374d4e 100644
--- a/src/interfaces/ecpg/test/pg_regress.sh
+++ b/src/interfaces/ecpg/test/pg_regress.sh
@@ -1,5 +1,5 @@
#! /bin/sh
-# $PostgreSQL: pgsql/src/interfaces/ecpg/test/pg_regress.sh,v 1.13 2006/09/08 13:32:27 meskes Exp $
+# $PostgreSQL: pgsql/src/interfaces/ecpg/test/pg_regress.sh,v 1.14 2006/09/19 15:36:08 tgl Exp $
me=`basename $0`
@@ -322,6 +322,7 @@ do_temp_install(){
# Set up shared library paths, needed by psql and pg_encoding
# (if you run multibyte). LD_LIBRARY_PATH covers many platforms.
# DYLD_LIBRARY_PATH works on Darwin, and maybe other Mach-based systems.
+ # LIBPATH is for AIX.
# Feel free to account for others as well.
# ----------
@@ -339,6 +340,13 @@ do_temp_install(){
fi
export DYLD_LIBRARY_PATH
+ if [ -n "$LIBPATH" ]; then
+ LIBPATH="$libdir:$LIBPATH"
+ else
+ LIBPATH=$libdir
+ fi
+ export LIBPATH
+
# ----------
# Windows needs shared libraries in PATH. (Only those linked into
# executables, not dlopen'ed ones)
diff --git a/src/makefiles/Makefile.aix b/src/makefiles/Makefile.aix
index 2a75a24aeac..8a789352b63 100644
--- a/src/makefiles/Makefile.aix
+++ b/src/makefiles/Makefile.aix
@@ -5,6 +5,15 @@ MAKE_EXPORTS= true
RANLIB= touch
AROPT = crs
+# -blibpath must contain ALL directories where we should look for libraries
+libpath := $(shell echo $(subst -L,:,$(filter -L/%,$(LDFLAGS))) | sed -e's/ //g'):/usr/lib:/lib
+
+ifeq ($(host_os), aix3.2.5)
+ rpath = -L$(rpathdir)
+else
+ rpath = -Wl,-blibpath:$(rpathdir)$(libpath)
+endif
+
DLSUFFIX = .so
ifeq ($(host_os), aix3.2.5)
ifneq ($(GCC), yes)
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 5a6190bd052..89cd7a61132 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -11,7 +11,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.20 2006/08/13 20:39:07 tgl Exp $
+ * $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.21 2006/09/19 15:36:08 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -507,12 +507,14 @@ initialize_environment(void)
* Set up shared library paths to include the temp install.
*
* LD_LIBRARY_PATH covers many platforms. DYLD_LIBRARY_PATH works on
- * Darwin, and maybe other Mach-based systems. Windows needs shared
- * libraries in PATH. (Only those linked into executables, not
- * dlopen'ed ones) Feel free to account for others as well.
+ * Darwin, and maybe other Mach-based systems. LIBPATH is for AIX.
+ * Windows needs shared libraries in PATH (only those linked into
+ * executables, not dlopen'ed ones).
+ * Feel free to account for others as well.
*/
add_to_path("LD_LIBRARY_PATH", ':', libdir);
add_to_path("DYLD_LIBRARY_PATH", ':', libdir);
+ add_to_path("LIBPATH", ':', libdir);
#if defined(WIN32) || defined(__CYGWIN__)
add_to_path("PATH", ';', libdir);
#endif