]> granicus.if.org Git - postgresql/commitdiff
Fix shared library creation to work properly on AIX. Albe Laurenz
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 19 Sep 2006 15:36:08 +0000 (15:36 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 19 Sep 2006 15:36:08 +0000 (15:36 +0000)
src/Makefile.global.in
src/Makefile.shlib
src/interfaces/ecpg/test/Makefile.regress
src/interfaces/ecpg/test/compat_informix/Makefile
src/interfaces/ecpg/test/pg_regress.sh
src/makefiles/Makefile.aix
src/test/regress/pg_regress.c

index 12cf42f0aa815137c497fab4e581956680039e70..60493a8e4bfe8413762e79f9703da709a424683a 100644 (file)
@@ -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.
index 8efa69db1d542549393de87c06f9022cde4bb198..10cc94a488813c8d1059977740538d2fff3726cb 100644 (file)
@@ -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
 
 
index 31f767a1c499073106f5432857d575fc6b1be35d..c5e017e74a99785867d4d9aa89663e14f684e4b5 100644 (file)
@@ -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
 
index 05ed3cfd8cc46c3a3ae0b7162c3a2be60487dfc6..f57a190c4bdc283a011283d76bbb3687ac6a69ab 100644 (file)
@@ -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 \
index a896042d53bb02de6b9cdeaf4df797e33f7e1c49..9f27d374d4e3a8ae4f66082a81764dca8a9fd9cc 100644 (file)
@@ -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)
index 2a75a24aeac957e040503179a5ae0eed26075d54..8a789352b63ca20c3daee92b5c229804cdddc026 100644 (file)
@@ -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)
index 5a6190bd052d16df571dd1fe511bc9afce8cf64b..89cd7a61132092da1b5720da4094043f49eb1403 100644 (file)
@@ -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