Thread: V8 Beta 5 on AIX

V8 Beta 5 on AIX

From
Brad Nicholson
Date:
I tried compliling v8 beta 5 (grabbed from cvs on Friday) on AIX 5.1.  
It fails during the make

make[4]: Entering directory 
`/opt/OXRS/Sources/pgsql-HEAD/src/interfaces/libpq'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory 
`/opt/OXRS/Sources/pgsql-HEAD/src/interfaces/libpq'
make[4]: Entering directory `/opt/OXRS/Sources/pgsql-HEAD/src/port'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/port'
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels 
-fno-strict-aliasing -g pg_ctl.o  -L../../../src/interfaces/libpq -lpq 
-L../../../src/port -L/opt/OXRS/supporting-packages/readline-4.2/lib 
-L/opt/OXRS/supporting-packages/zlib-1.1.4  -lpgport -lz -lreadline 
-lcurses -lPW -lld -lnsl -ldl -lm  -o pg_ctl
ld: 0711-317 ERROR: Undefined symbol: .pthread_sigmask
ld: 0711-317 ERROR: Undefined symbol: .sigwait
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_lock
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_unlock
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more 
information.
collect2: ld returned 8 exit status
make[3]: *** [pg_ctl] Error 1
make[3]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/bin/pg_ctl'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/bin'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src'
make: *** [all] Error 2


Brad.


Re: V8 Beta 5 on AIX

From
Bruce Momjian
Date:
Brad Nicholson wrote:
> I tried compliling v8 beta 5 (grabbed from cvs on Friday) on AIX 5.1.  
> It fails during the make
> 
> make[4]: Entering directory 
> `/opt/OXRS/Sources/pgsql-HEAD/src/interfaces/libpq'
> make[4]: Nothing to be done for `all'.
> make[4]: Leaving directory 
> `/opt/OXRS/Sources/pgsql-HEAD/src/interfaces/libpq'
> make[4]: Entering directory `/opt/OXRS/Sources/pgsql-HEAD/src/port'
> make[4]: Nothing to be done for `all'.
> make[4]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/port'
> gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels 
> -fno-strict-aliasing -g pg_ctl.o  -L../../../src/interfaces/libpq -lpq 
> -L../../../src/port -L/opt/OXRS/supporting-packages/readline-4.2/lib 
> -L/opt/OXRS/supporting-packages/zlib-1.1.4  -lpgport -lz -lreadline 
> -lcurses -lPW -lld -lnsl -ldl -lm  -o pg_ctl
> ld: 0711-317 ERROR: Undefined symbol: .pthread_sigmask
> ld: 0711-317 ERROR: Undefined symbol: .sigwait
> ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_lock
> ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_unlock
> ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more 
> information.
> collect2: ld returned 8 exit status
> make[3]: *** [pg_ctl] Error 1
> make[3]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/bin/pg_ctl'
> make[2]: *** [all] Error 2
> make[2]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/bin'
> make[1]: *** [all] Error 2
> make[1]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src'
> make: *** [all] Error 2

OK, I assume you used --enable-thread-safety in configure.  This should
have added some PTHREAD link flags to your libpq build, and those
settings should have followed the libpq library into your pg_ctl link
line.

Would you look in your Makefile.global for PTHREAD_* settings and report
those.  The second question is why saying those libraries are needed by
libpq is not passing down to uses of libpq, like in pg_ctl.

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: V8 Beta 5 on AIX

From
Brad Nicholson
Date:
Bruce Momjian wrote:

>Brad Nicholson wrote:
>  
>
>>I tried compliling v8 beta 5 (grabbed from cvs on Friday) on AIX 5.1.  
>>It fails during the make
>>
>>make[4]: Entering directory 
>>`/opt/OXRS/Sources/pgsql-HEAD/src/interfaces/libpq'
>>make[4]: Nothing to be done for `all'.
>>make[4]: Leaving directory 
>>`/opt/OXRS/Sources/pgsql-HEAD/src/interfaces/libpq'
>>make[4]: Entering directory `/opt/OXRS/Sources/pgsql-HEAD/src/port'
>>make[4]: Nothing to be done for `all'.
>>make[4]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/port'
>>gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels 
>>-fno-strict-aliasing -g pg_ctl.o  -L../../../src/interfaces/libpq -lpq 
>>-L../../../src/port -L/opt/OXRS/supporting-packages/readline-4.2/lib 
>>-L/opt/OXRS/supporting-packages/zlib-1.1.4  -lpgport -lz -lreadline 
>>-lcurses -lPW -lld -lnsl -ldl -lm  -o pg_ctl
>>ld: 0711-317 ERROR: Undefined symbol: .pthread_sigmask
>>ld: 0711-317 ERROR: Undefined symbol: .sigwait
>>ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_lock
>>ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_unlock
>>ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more 
>>information.
>>collect2: ld returned 8 exit status
>>make[3]: *** [pg_ctl] Error 1
>>make[3]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/bin/pg_ctl'
>>make[2]: *** [all] Error 2
>>make[2]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src/bin'
>>make[1]: *** [all] Error 2
>>make[1]: Leaving directory `/opt/OXRS/Sources/pgsql-HEAD/src'
>>make: *** [all] Error 2
>>    
>>
>
>OK, I assume you used --enable-thread-safety in configure.  
>
Correct.

>This should
>have added some PTHREAD link flags to your libpq build, and those
>settings should have followed the libpq library into your pg_ctl link
>line.
>
>Would you look in your Makefile.global for PTHREAD_* settings and report
>those.  The second question is why saying those libraries are needed by
>libpq is not passing down to uses of libpq, like in pg_ctl.
>  
>

PTHREAD_CFLAGS          =    -pthread  -D_REENTRANT -D_THREAD_SAFE 
-D_POSIX_PTHREAD_SEMANTICS
PTHREAD_LIBS            =  -lpthread      -lpthreads
                        
 


Brad.                                         



Re: V8 Beta 5 on AIX

From
Bruce Momjian
Date:
Brad Nicholson wrote:
> >OK, I assume you used --enable-thread-safety in configure.  
> >
> Correct.
> 
> >This should
> >have added some PTHREAD link flags to your libpq build, and those
> >settings should have followed the libpq library into your pg_ctl link
> >line.
> >
> >Would you look in your Makefile.global for PTHREAD_* settings and report
> >those.  The second question is why saying those libraries are needed by
> >libpq is not passing down to uses of libpq, like in pg_ctl.
> >  
> >
> 
> PTHREAD_CFLAGS          =    -pthread  -D_REENTRANT -D_THREAD_SAFE 
> -D_POSIX_PTHREAD_SEMANTICS
> PTHREAD_LIBS            =  -lpthread      -lpthreads

OK, great.  Can I see the link line that creates libpq?  It should contain
the PTHREAD_LIBS flags.

If it does, the next question is why AIX doesn't pass those flags.

Oh, I think I see the cause.  I now remember from
config/acx_pthread.m4:
# More AIX lossage: must compile with cc_rAC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})

Seems AIX wants a special _compiler_ to be used whenever threading is
involved, even by a linked-in library.  I didn't implement using
PTHREAD_CC because there was just too much code disruption for threading
on one platform.  I wonder if we should just disable threading on AIX.  

Let me ask --- if you change the CC line in Makefile.global to cc_r,
does everything build OK?  That might be a clean solution because the
change could be made in one place.  Of course this would mean the
backend would also be compiled using cc_r and I have no idea of the
effect.

Of course, the idea that any use of libpq has to use cc_r is going to
make building things complex without some adjustments.

Also, what version of AIX are you using?  Are other AIX folks having
thread build problems?

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: V8 Beta 5 on AIX

From
Bruce Momjian
Date:
Brad Nicholson wrote:
> I tried compliling v8 beta 5 (grabbed from cvs on Friday) on AIX 5.1.  

I see now you are running AIX 5.1.  Is that a fairly modern/popular
version of AIX?

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: V8 Beta 5 on AIX

From
Brad Nicholson
Date:
Bruce Momjian wrote:

>Brad Nicholson wrote:
>
>
>>>OK, I assume you used --enable-thread-safety in configure.
>>>
>>>
>>>
>>Correct.
>>
>>
>>
>>>This should
>>>have added some PTHREAD link flags to your libpq build, and those
>>>settings should have followed the libpq library into your pg_ctl link
>>>line.
>>>
>>>Would you look in your Makefile.global for PTHREAD_* settings and report
>>>those.  The second question is why saying those libraries are needed by
>>>libpq is not passing down to uses of libpq, like in pg_ctl.
>>>
>>>
>>>
>>>
>>PTHREAD_CFLAGS          =    -pthread  -D_REENTRANT -D_THREAD_SAFE
>>-D_POSIX_PTHREAD_SEMANTICS
>>PTHREAD_LIBS            =  -lpthread      -lpthreads
>>
>>
>
>OK, great.  Can I see the link line that creates libpq?  It should contain
>the PTHREAD_LIBS flags.
>
>
>
I've attached the Makefile.global from the system, in case it's of use.

>If it does, the next question is why AIX doesn't pass those flags.
>
>Oh, I think I see the cause.  I now remember from
>config/acx_pthread.m4:
>
>    # More AIX lossage: must compile with cc_r
>    AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
>
>Seems AIX wants a special _compiler_ to be used whenever threading is
>involved, even by a linked-in library.  I didn't implement using
>PTHREAD_CC because there was just too much code disruption for threading
>on one platform.  I wonder if we should just disable threading on AIX.
>
>
>
I believe that this will result in Slony not working on AIX.

>Let me ask --- if you change the CC line in Makefile.global to cc_r,
>does everything build OK?  That might be a clean solution because the
>change could be made in one place.  Of course this would mean the
>backend would also be compiled using cc_r and I have no idea of the
>effect.
>
>
>
Not an option, we don't have cc_r on the server.

>Of course, the idea that any use of libpq has to use cc_r is going to
>make building things complex without some adjustments.
>
>Also, what version of AIX are you using?  Are other AIX folks having
>thread build problems?
>
>
>
5.1

Brad.
# -*-makefile-*-
# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.205 2004/11/19 00:41:38 tgl Exp $

#------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets,
# which in turn are put here by the configure script. There is no need for
# users to edit this file -- if it turns out to be necessary then that's a
# bug.
#
# A makefile that includes this file needs to set the variable `subdir' to
# the relative path from the top to itself and `top_builddir' to the relative
# path from itself to the top before including this file. (The "top" is the
# parent directory of the directory this file is in.)
#------------------------------------------------------------------------------


##########################################################################
#
# Meta configuration

.PHONY: all install install-strip installdirs uninstall clean distclean maintainer-clean distprep check installcheck
maintainer-check
.SILENT: installdirs

# make `all' the default target
all:

# Delete target files if the command fails after it has
# started to update the file.
.DELETE_ON_ERROR:

# PostgreSQL version number
VERSION = 8.0.0rc1

# Support for VPATH builds
vpath_build = no
abs_top_srcdir = /opt/OXRS/Sources/pgsql-HEAD

ifneq ($(vpath_build),yes)
top_srcdir = $(top_builddir)
srcdir = .
else # vpath_build = yes
top_srcdir = $(abs_top_srcdir)
srcdir = $(top_srcdir)/$(subdir)

endif

# Saved arguments from configure
configure_args = '--prefix=/opt/dbs/pgsql800-beta5-AIX51-2004-12-06'
'--with-includes=/opt/OXRS/supporting-packages/readline-4.2/include:/opt/OXRS/supporting-packages/zlib-1.1.4/include'
'--enable-debug''--enable-thread-safety'
'--with-libraries=/opt/OXRS/supporting-packages/readline-4.2/lib:/opt/OXRS/supporting-packages/zlib-1.1.4'


##########################################################################
#
# Installation directories
#
# These are set by the equivalent --xxxdir configure options.  We
# append "postgresql" to some of them, if the string does not already
# contain "pgsql" or "postgres", in order to avoid directory clutter.

prefix := /opt/dbs/pgsql800-beta5-AIX51-2004-12-06
exec_prefix := ${prefix}

bindir := ${exec_prefix}/bin
sbindir := ${exec_prefix}/sbin

libexecdir := ${exec_prefix}/libexec
ifeq "$(findstring pgsql, $(libexecdir))" ""
ifeq "$(findstring postgres, $(libexecdir))" ""
override libexecdir := $(libexecdir)/postgresql
endif
endif

datadir := ${prefix}/share
ifeq "$(findstring pgsql, $(datadir))" ""
ifeq "$(findstring postgres, $(datadir))" ""
override datadir := $(datadir)/postgresql
endif
endif

sysconfdir := ${prefix}/etc
ifeq "$(findstring pgsql, $(sysconfdir))" ""
ifeq "$(findstring postgres, $(sysconfdir))" ""
override sysconfdir := $(sysconfdir)/postgresql
endif
endif

libdir := ${exec_prefix}/lib
pkglibdir = $(libdir)
ifeq "$(findstring pgsql, $(pkglibdir))" ""
ifeq "$(findstring postgres, $(pkglibdir))" ""
override pkglibdir := $(pkglibdir)/postgresql
endif
endif

includedir := ${prefix}/include
pkgincludedir = $(includedir)
ifeq "$(findstring pgsql, $(pkgincludedir))" ""
ifeq "$(findstring postgres, $(pkgincludedir))" ""
override pkgincludedir := $(pkgincludedir)/postgresql
endif
endif
includedir_server = $(pkgincludedir)/server
includedir_internal = $(pkgincludedir)/internal

mandir := ${prefix}/man
sqlmansect_dummy = l

docdir := ${prefix}/doc
# docdir can be an empty string to signify --without-docdir
ifneq (,$(docdir))
ifeq "$(findstring pgsql, $(docdir))" ""
ifeq "$(findstring postgres, $(docdir))" ""
override docdir := $(docdir)/postgresql
endif
endif
endif

localedir :=

pgxsdir = $(pkglibdir)/pgxs


##########################################################################
#
# Features
#
# Records the choice of the various --enable-xxx and --with-xxx options.

with_perl    = no
with_python    = no
with_tcl    = no
enable_shared    = yes
enable_rpath    = yes
enable_nls    = no
enable_debug    = yes
enable_thread_safety    = yes

python_includespec    =
python_libdir        =
python_libspec        =
python_additional_libs    =
python_configdir    =
python_version        =

krb_srvtab =

TCLSH            =
TCL_LIB_FILE        =
TCL_LIBS        =
TCL_LIB_SPEC        =
TCL_INCLUDE_SPEC    =
TCL_SHARED_BUILD    =
TCL_SHLIB_LD_LIBS    =

TK_LIBS            = @TK_LIBS@
TK_LIB_SPEC        = @TK_LIB_SPEC@
TK_XINCLUDES        = @TK_XINCLUDES@

PTHREAD_CFLAGS        =    -pthread  -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS
PTHREAD_LIBS        =  -lpthread      -lpthreads

have_docbook    = no
DOCBOOKSTYLE    =
COLLATEINDEX    =


##########################################################################
#
# Programs and flags

# Compilers

CPP = gcc -E
CPPFLAGS =   -I/opt/OXRS/supporting-packages/readline-4.2/include -I/opt/OXRS/supporting-packages/zlib-1.1.4/include

ifdef PGXS
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)
else # not PGXS
override CPPFLAGS := -I$(top_srcdir)/src/include $(CPPFLAGS)
ifdef VPATH
override CPPFLAGS := -I$(top_builddir)/src/include $(CPPFLAGS)
endif
endif # not PGXS

CC = gcc
GCC = yes
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels -fno-strict-aliasing -g

# Kind-of compilers

YACC = bison -y
YFLAGS =
FLEX = /opt/OXRS/bin/flex
FLEXFLAGS =  $(LFLAGS)

# Linking

LIBS = -lz -lreadline -lcurses -lPW -lld -lnsl -ldl -lm
LD = /usr/bin/ld
with_gnu_ld = no
ld_R_works =
LDFLAGS =   -L/opt/OXRS/supporting-packages/readline-4.2/lib -L/opt/OXRS/supporting-packages/zlib-1.1.4
LDFLAGS_SL =
LDREL = -r
LDOUT = -o
RANLIB = ranlib
LORDER = lorder
X =

# Perl

# quoted for pathname with spaces
PERL            = "/opt/OXRS/gnu/perl/bin/perl"
perl_archlibexp        =
perl_privlibexp        =
perl_useshrplib        =
perl_embed_ldflags    =

# Miscellaneous

AWK    = nawk
LN_S    = ln -s
MSGFMT  =
MSGMERGE =
PYTHON    =
TAR    = /opt/OXRS/gnu/usr/local/bin/tar
XGETTEXT =

GZIP    = gzip
BZIP2    = bzip2

# Installation.

INSTALL    = $(SHELL) $(top_srcdir)/config/install-sh -c

INSTALL_PROGRAM    = $(INSTALL_PROGRAM_ENV) $(INSTALL) $(INSTALL_STRIP_FLAG)
INSTALL_SCRIPT    = $(INSTALL) -m 755
INSTALL_DATA    = $(INSTALL) -m 644
INSTALL_STLIB    = $(INSTALL_STLIB_ENV) $(INSTALL_DATA) $(INSTALL_STRIP_FLAG)
INSTALL_SHLIB    = $(INSTALL_SHLIB_ENV) $(INSTALL) $(INSTALL_SHLIB_OPTS) $(INSTALL_STRIP_FLAG)
# Override in Makefile.port if necessary
INSTALL_SHLIB_OPTS = -m 755

mkinstalldirs    = $(SHELL) $(top_srcdir)/config/mkinstalldirs
missing        = $(SHELL) $(top_srcdir)/config/missing

STRIP        = strip
STRIP_STATIC_LIB = :
STRIP_SHARED_LIB = :

# Documentation

JADE    =
NSGMLS    =
SGMLSPL    =

# Feature settings

DEF_PGPORT = 5432
WANTED_LANGUAGES =


##########################################################################
#
# Additional platform-specific settings
#

# Name of the "template"
PORTNAME= aix

host_tuple = powerpc-ibm-aix5.1.0.0
host_os = aix5.1.0.0
host_cpu = powerpc

# Make HAVE_IPV6 available for initdb script creation
HAVE_IPV6= yes

# The HP-UX port makefile, for one, needs access to this symbol
HAVE_POSIX_SIGNALS= yes

# This is mainly for use on FreeBSD, where we have both a.out and elf
# systems now.  May be applicable to other systems to?
ELF_SYSTEM=

# Pull in platform-specific magic
include $(top_builddir)/src/Makefile.port

# Set up rpath if enabled.  By default it will point to our libdir,
# but individual Makefiles can force other rpath paths if needed.
rpathdir = $(libdir)

ifeq ($(enable_rpath), yes)
LDFLAGS += $(rpath)
endif


##########################################################################
#
# Some variables needed to find some client interfaces

ifdef PGXS
# some contribs assumes headers and libs are in the source tree...
libpq_srcdir = $(includedir)
libpq_builddir = $(libdir)
else
libpq_srcdir = $(top_srcdir)/src/interfaces/libpq
libpq_builddir = $(top_builddir)/src/interfaces/libpq
endif

libpq = -L$(libpq_builddir) -lpq

submake-libpq:
    $(MAKE) -C $(libpq_builddir) all

submake-libpgport:
    $(MAKE) -C $(top_builddir)/src/port all

.PHONY: submake-libpq submake-libpgport


##########################################################################
#
# Customization
#
# This includes your local customizations if Makefile.custom exists
# in the source directory.  This file doesn't exist in the original
# distribution so that it doesn't get overwritten when you upgrade.
#
# NOTE:  Makefile.custom is from the pre-Autoconf days of PostgreSQL.
# You are liable to shoot yourself in the foot if you use it without
# knowing exactly what you're doing.  The preferred (and more
# reliable) method is to communicate what you want to do to the
# configure script, and leave the makefiles alone.

-include $(top_srcdir)/src/Makefile.custom

ifneq ($(CUSTOM_INSTALL),)
INSTALL= $(CUSTOM_INSTALL)
endif

ifneq ($(CUSTOM_CC),)
  CC= $(CUSTOM_CC)
endif

ifneq ($(CUSTOM_COPT),)
  COPT= $(CUSTOM_COPT)
endif

ifdef COPT
   CFLAGS+= $(COPT)
   LDFLAGS+= $(COPT)
endif

ifdef PROFILE
   CFLAGS+= $(PROFILE)
   LDFLAGS+= $(PROFILE)
endif


##########################################################################
#
# substitute implementations of the C library

LIBOBJS =  unsetenv.o getopt_long.o dirmod.o exec.o noblock.o path.o pipe.o pgsleep.o pgstrcasecmp.o sprompt.o thread.o

ifneq (,$(LIBOBJS))
LIBS := -lpgport $(LIBS)
ifdef PGXS
# where libpgport.a is installed
override LDFLAGS := -L$(libdir) $(LDFLAGS)
else
override LDFLAGS := -L$(top_builddir)/src/port $(LDFLAGS)
endif
endif

# to make ws2_32.lib the last library
ifeq ($(PORTNAME),win32)
LIBS += -lws2_32
endif

# Not really standard libc functions, used by the backend.
TAS         =


##########################################################################
#
# Global targets and rules

%.gz: %
    $(GZIP) -f --best $<

%.bz2: %
    $(BZIP2) -f $<

ifeq ($(PORTNAME),win32)
# Build rules to add versioninfo resources to win32 binaries
WIN32RES += win32ver.o
ifeq ($(PGFILESHLIB),1)
PGFTYPE=VFT_DLL
else
PGFTYPE=VFT_APP
endif
ifneq (,$(PGAPPICON))
PGICOSTR=$(subst /,\/,IDI_ICON ICON \"$(top_builddir)/src/port/$(PGAPPICON).ico\")
endif
win32ver.rc: $(top_builddir)/src/port/win32ver.rc
    sed -e 's;FILEDESC;$(PGFILEDESC);' -e 's;VFT_APP;$(PGFTYPE);' -e 's;_ICO_;$(PGICOSTR);'
$(top_builddir)/src/port/win32ver.rc> win32ver.rc 
win32ver.o: $(top_builddir)/src/port/win32ver.rc
    sed -e 's;FILEDESC;$(PGFILEDESC);' -e 's;VFT_APP;$(PGFTYPE);' -e 's;_ICO_;$(PGICOSTR);'
$(top_builddir)/src/port/win32ver.rc> win32ver.rc 
    windres -i win32ver.rc -o win32ver.o --include-dir=$(top_builddir)/src/include
    rm -f win32ver.rc
endif

ifndef PGXS

# Remake Makefile.global from Makefile.global.in if the latter
# changed. In order to trigger this rule, the including file must
# write `include $(top_builddir)/src/Makefile.global', not some
# shortcut thereof.
$(top_builddir)/src/Makefile.global: $(top_srcdir)/src/Makefile.global.in $(top_builddir)/config.status
    cd $(top_builddir) && ./config.status src/Makefile.global

# Remake pg_config.h from pg_config.h.in if the latter changed.
# config.status will not change the timestamp on pg_config.h if it
# doesn't change, so as to avoid recompiling the entire tree
# unnecessarily. Therefore we make config.status update a timestamp file
# stamp-h everytime it runs, so that we don't trigger this rule everytime.
# (We do trigger the null rule for stamp-h to pg_config.h everytime; so it's
# important for that rule to be null!)
#
# Of course you need to turn on dependency tracking to get any
# dependencies on pg_config.h.
$(top_builddir)/src/include/pg_config.h: $(top_builddir)/src/include/stamp-h

$(top_builddir)/src/include/stamp-h: $(top_srcdir)/src/include/pg_config.h.in $(top_builddir)/config.status
    cd $(top_builddir) && ./config.status src/include/pg_config.h

# When configure changes, rerun configure with the same options as
# last time. To change configure, you need to run autoconf manually.
$(top_builddir)/config.status: $(top_srcdir)/configure
    cd $(top_builddir) && ./config.status --recheck

endif # not PGXS


install-strip:
    @$(MAKE) INSTALL_PROGRAM_ENV="STRIPPROG='$(STRIP)'" \
        INSTALL_STLIB_ENV="STRIPPROG='$(STRIP_STATIC_LIB)'" \
        INSTALL_SHLIB_ENV="STRIPPROG='$(STRIP_SHARED_LIB)'" \
        INSTALL_STRIP_FLAG=-s \
        install


##########################################################################
#
# Automatic dependency generation
# -------------------------------
# When we configure with --enable-depend then we override the default
# compilation rule with the magic below. While or after creating the
# actual output file we also create a dependency list for the .c file.
# Next time we invoke make we will have top-notch information about
# whether this file needs to be updated. The dependency files are kept
# in the .deps subdirectory of each directory.
#
# The sed command is necessary to post-process the dependency file:
# Each dependency file becomes a target of its own, without
# dependencies or commands. This is because if you happen to remove a
# file that is a dependency (say, you rename a header file) the
# dependency would point to a non-existing file and make would fail.
# But if the file is listed as a target of its own, without
# prerequisites and commands, and doesn't exist then make will
# consider it updated. (That in turn also has the nice side effect
# that make will update all files that depended on the now removed
# file.)

autodepend =

ifeq ($(autodepend), yes)

ifndef COMPILE.c
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
endif

DEPDIR = .deps
df = $(DEPDIR)/$(*F)

# This converts a .d file in the current directory to a .P file in the .deps
# subdirectory, with the dummy targets as explained above.
define postprocess-depend
@if test ! -d $(DEPDIR); then mkdir $(DEPDIR); fi
@cp $*.d $(df).P
@sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
     -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $(df).P
@rm -f $*.d
endef

ifeq ($(GCC), yes)

# GCC allows us to create object and dependency file in one invocation.
%.o : %.c
    $(COMPILE.c) -o $@ $< -MMD
    $(postprocess-depend)

endif # GCC

# Include all the dependency files generated for the current
# directory. List /dev/null as dummy because if the wildcard expands
# to nothing then make would complain.
-include $(wildcard $(DEPDIR)/*.P) /dev/null

# hook for clean-up
clean distclean maintainer-clean: clean-deps

.PHONY: clean-deps
clean-deps:
    @rm -rf $(DEPDIR) *.d

endif # autodepend


##########################################################################
#
# Native language support

ifeq ($(enable_nls), yes)
ifneq (,$(wildcard $(srcdir)/nls.mk))

include $(top_srcdir)/src/nls-global.mk

endif # nls.mk
endif # enable_nls

Re: V8 Beta 5 on AIX

From
Andrew Sullivan
Date:
On Mon, Dec 06, 2004 at 01:07:11PM -0500, Bruce Momjian wrote:
> 
> I see now you are running AIX 5.1.  Is that a fairly modern/popular
> version of AIX?

To the extent AIX is popular :)  5.1 is one release behind the very
latest.

A

-- 
Andrew Sullivan  | ajs@crankycanuck.ca
The plural of anecdote is not data.    --Roger Brinner


Re: V8 Beta 5 on AIX

From
Simon Riggs
Date:
On Mon, 2004-12-06 at 21:59, Andrew Sullivan wrote:
> On Mon, Dec 06, 2004 at 01:07:11PM -0500, Bruce Momjian wrote:
> > 
> > I see now you are running AIX 5.1.  Is that a fairly modern/popular
> > version of AIX?
> 
> To the extent AIX is popular :)  5.1 is one release behind the very
> latest.

AIX 5.3 is out now...

AIX 5.1 is still fully supported though...

-- 
Best Regards, Simon Riggs



Re: V8 Beta 5 on AIX

From
Bruce Momjian
Date:
Simon Riggs wrote:
> On Mon, 2004-12-06 at 21:59, Andrew Sullivan wrote:
> > On Mon, Dec 06, 2004 at 01:07:11PM -0500, Bruce Momjian wrote:
> > > 
> > > I see now you are running AIX 5.1.  Is that a fairly modern/popular
> > > version of AIX?
> > 
> > To the extent AIX is popular :)  5.1 is one release behind the very
> > latest.
> 
> AIX 5.3 is out now...
> 
> AIX 5.1 is still fully supported though...

OK, so does someone want to suggest why a library used to link libpq
would also be needed to link binaries that use libpq?  And with no cc_r
it seems I have no idea how to get this working.

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: V8 Beta 5 on AIX

From
Tom Lane
Date:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> OK, so does someone want to suggest why a library used to link libpq
> would also be needed to link binaries that use libpq?

No doubt because it's one of those platforms where shared libraries
don't carry their own dependency information.  AFAICS, PTHREAD_LIBS is
not propagated into the link lines of pg_ctl or any of the other
programs that use libpq, so the only place where the linker would find
out about it is if the info is embedded in libpq.so.
        regards, tom lane


Re: V8 Beta 5 on AIX

From
Peter Eisentraut
Date:
Bruce Momjian wrote:
> OK, so does someone want to suggest why a library used to link libpq
> would also be needed to link binaries that use libpq?  And with no
> cc_r it seems I have no idea how to get this working.

We didn't get this working for 7.4, for reasons that we are again 
becoming aware of, so I don't think it's justifiable to try to fix it 
for 8.0 at this point.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/


Re: V8 Beta 5 on AIX

From
Kenneth Marshall
Date:
On Mon, Dec 06, 2004 at 12:53:52PM -0500, Bruce Momjian wrote:
> Brad Nicholson wrote:
> > >OK, I assume you used --enable-thread-safety in configure.  
> > >
> > Correct.
> > 
> > >This should
> > >have added some PTHREAD link flags to your libpq build, and those
> > >settings should have followed the libpq library into your pg_ctl link
> > >line.
> > >
> > >Would you look in your Makefile.global for PTHREAD_* settings and report
> > >those.  The second question is why saying those libraries are needed by
> > >libpq is not passing down to uses of libpq, like in pg_ctl.
> > >  
> > >
> > 
> > PTHREAD_CFLAGS          =    -pthread  -D_REENTRANT -D_THREAD_SAFE 
> > -D_POSIX_PTHREAD_SEMANTICS
> > PTHREAD_LIBS            =  -lpthread      -lpthreads
> 
> OK, great.  Can I see the link line that creates libpq?  It should contain
> the PTHREAD_LIBS flags.
> 
> If it does, the next question is why AIX doesn't pass those flags.
> 
> Oh, I think I see the cause.  I now remember from
> config/acx_pthread.m4:
> 
>     # More AIX lossage: must compile with cc_r
>     AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
> 
> Seems AIX wants a special _compiler_ to be used whenever threading is
> involved, even by a linked-in library.  I didn't implement using
> PTHREAD_CC because there was just too much code disruption for threading
> on one platform.  I wonder if we should just disable threading on AIX.  
> 
> Let me ask --- if you change the CC line in Makefile.global to cc_r,
> does everything build OK?  That might be a clean solution because the
> change could be made in one place.  Of course this would mean the
> backend would also be compiled using cc_r and I have no idea of the
> effect.
> 
> Of course, the idea that any use of libpq has to use cc_r is going to
> make building things complex without some adjustments.
> 
> Also, what version of AIX are you using?  Are other AIX folks having
> thread build problems?
> 

We have until very recently supporting a number of applications
requiring threading on AIX 3/4/5. They always required much more
understanding of the entire compile/link/run cycle than any other
platform we use. Changing the CC line to cc_r works fine with the
only problem being the cascaded use of cc_r into any application
that links against libpq. Even with these complications, I think
we should still allow threading on AIX. Anyone who builds software 
on AIX already knows how to manage these issues.

Ken


Re: V8 Beta 5 on AIX

From
Bruce Momjian
Date:
Peter Eisentraut wrote:
> Bruce Momjian wrote:
> > OK, so does someone want to suggest why a library used to link libpq
> > would also be needed to link binaries that use libpq?  And with no
> > cc_r it seems I have no idea how to get this working.
> 
> We didn't get this working for 7.4, for reasons that we are again 
> becoming aware of, so I don't think it's justifiable to try to fix it 
> for 8.0 at this point.

Yea, we needed this problem report during beta, not RC.

I added this to Makefile.unixware long ago:
# Unixware needs threads for everything that uses libpqCFLAGS += $(PTHREAD_CFLAGS)

I said if we found another platform that had a similar limitation we
would fix it more thoroughly, but I needed to fix it earlier to get into
8.0.

However, one thing we can do is to try this in Makefile.aix:
# AIX needs threads for everything that uses libpqLIBS += $(PTHREAD_LIBS)

That is going to enable thread libs for all linking including the
backend, but it might work.

Unixware found that doing this for the backend brought out threading OS
bugs and it was useless but AIX might be better.

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: V8 Beta 5 on AIX

From
Bruce Momjian
Date:
Kenneth Marshall wrote:
> > Let me ask --- if you change the CC line in Makefile.global to cc_r,
> > does everything build OK?  That might be a clean solution because the
> > change could be made in one place.  Of course this would mean the
> > backend would also be compiled using cc_r and I have no idea of the
> > effect.
> > 
> > Of course, the idea that any use of libpq has to use cc_r is going to
> > make building things complex without some adjustments.
> > 
> > Also, what version of AIX are you using?  Are other AIX folks having
> > thread build problems?
> > 
> 
> We have until very recently supporting a number of applications
> requiring threading on AIX 3/4/5. They always required much more
> understanding of the entire compile/link/run cycle than any other
> platform we use. Changing the CC line to cc_r works fine with the
> only problem being the cascaded use of cc_r into any application
> that links against libpq. Even with these complications, I think
> we should still allow threading on AIX. Anyone who builds software 
> on AIX already knows how to manage these issues.

OK, but why does the AIX 5.1 version they have not have cc_r?

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: V8 Beta 5 on AIX

From
Tom Lane
Date:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> However, one thing we can do is to try this in Makefile.aix:
>     # AIX needs threads for everything that uses libpq
>     LIBS += $(PTHREAD_LIBS)
> That is going to enable thread libs for all linking including the
> backend, but it might work.

That is certainly wrong.  The correct thing is to add PTHREAD_LIBS to
all and only those links that include libpq.  I suspect that the cc_r
business is a red herring and the real problem is just that you forgot
to include the libraries --- if so, AIX is probably not the only
platform that will break.
        regards, tom lane


Re: V8 Beta 5 on AIX

From
"Zeugswetter Andreas DAZ SD"
Date:
> OK, so does someone want to suggest why a library used to link libpq
> would also be needed to link binaries that use libpq?  And with no cc_r
> it seems I have no idea how to get this working.

AIX does not pull in any libraries that a shared lib depends upon, not even libc.
You only specify those on the .so link line so the linker can check what
is unresolved.

If he does not have cc_r, then he eighter uses gcc or a newer compiler,
that does not need cc_r any more ???

I would generally use cc_r if it exists or gcc for the threaded build.
The performance difference between cc and cc_r should not be noticeable.

Andreas


Re: V8 Beta 5 on AIX

From
Bruce Momjian
Date:
Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > However, one thing we can do is to try this in Makefile.aix:
> >     # AIX needs threads for everything that uses libpq
> >     LIBS += $(PTHREAD_LIBS)
> > That is going to enable thread libs for all linking including the
> > backend, but it might work.
> 
> That is certainly wrong.  The correct thing is to add PTHREAD_LIBS to
> all and only those links that include libpq.  I suspect that the cc_r
> business is a red herring and the real problem is just that you forgot
> to include the libraries --- if so, AIX is probably not the only
> platform that will break.

The discussion at the time was that we didn't want to add a
libpq-specific CC just for Unixware, which we considered broken for not
having libpq dependency information in the library.

Now that we have two platforms that need this we might need to rethink
this, and think of a shortcut for 8.0 like we are already using for
Unixware.

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: V8 Beta 5 on AIX

From
Andrew Sullivan
Date:
On Mon, Dec 06, 2004 at 10:17:53PM +0000, Simon Riggs wrote:
> > 
> > To the extent AIX is popular :)  5.1 is one release behind the very
> > latest.
> 
> AIX 5.3 is out now...
> 
> AIX 5.1 is still fully supported though...

Oops, sorry, I meant "one behind the very latest supported by our
provider".  For reasons I don't quite understand, IBM's own hosting
facilities seem to lag on the AIX releases.

A

-- 
Andrew Sullivan  | ajs@crankycanuck.ca
I remember when computers were frustrating because they *did* exactly what 
you told them to.  That actually seems sort of quaint now.    --J.D. Baldwin


Re: V8 Beta 5 on AIX

From
"Zeugswetter Andreas DAZ SD"
Date:
>> However, one thing we can do is to try this in Makefile.aix:
>>     # AIX needs threads for everything that uses libpq
>>     LIBS += $(PTHREAD_LIBS)
>> That is going to enable thread libs for all linking including the
>> backend, but it might work.

> That is certainly wrong.  The correct thing is to add PTHREAD_LIBS to
> all and only those links that include libpq.  I suspect that the cc_r

You mean like attached patch ? That is safe and can be applied.
My machine has problems with two configure tests with --enable-thread-safety.

1. the snprintf long long int check that uses int64 as variable name which is
    a typedef in sys/inttypes.h
2. whether strerror_r returns int check fails with a redefine of named function
    from string.h

No idea how to fix those, but workaround is easy :-(

-lpthread can be removed from PTHREAD_LIBS, the lib is a compat symlink to
-lpthreads, I guess it does not hurt eighter.

Andreas

Attachment

Re: V8 Beta 5 on AIX

From
Andrew Sullivan
Date:
On Mon, Dec 06, 2004 at 08:07:00PM -0500, Bruce Momjian wrote:
> Yea, we needed this problem report during beta, not RC.

For the record, there _was_ such a problem report, for b3:

http://archives.postgresql.org/pgsql-hackers/2004-10/msg00046.php

A

-- 
Andrew Sullivan  | ajs@crankycanuck.ca
A certain description of men are for getting out of debt, yet are
against all taxes for raising money to pay it off.    --Alexander Hamilton


Re: V8 Beta 5 on AIX

From
Christopher Browne
Date:
pgman@candle.pha.pa.us (Bruce Momjian) writes:
> Kenneth Marshall wrote:
>> > Let me ask --- if you change the CC line in Makefile.global to cc_r,
>> > does everything build OK?  That might be a clean solution because the
>> > change could be made in one place.  Of course this would mean the
>> > backend would also be compiled using cc_r and I have no idea of the
>> > effect.
>> > 
>> > Of course, the idea that any use of libpq has to use cc_r is going to
>> > make building things complex without some adjustments.
>> > 
>> > Also, what version of AIX are you using?  Are other AIX folks having
>> > thread build problems?
>> 
>> We have until very recently supporting a number of applications
>> requiring threading on AIX 3/4/5. They always required much more
>> understanding of the entire compile/link/run cycle than any other
>> platform we use. Changing the CC line to cc_r works fine with the
>> only problem being the cascaded use of cc_r into any application
>> that links against libpq. Even with these complications, I think we
>> should still allow threading on AIX. Anyone who builds software on
>> AIX already knows how to manage these issues.
>
> OK, but why does the AIX 5.1 version they have not have cc_r?

Because AIX 5.1 does not include cc_r; while it is termed the
"standard C compiler for AIX," there's about the same amount of
weasel-wording to that that there is to the notion of "open systems."

cc_r is a C compiler for AIX, and it evidently conforms (to some
degree or another) to the ANSI C standard.

It is not, however, included with AIX so as to allow it to be
considered a "standard component" that you can expect to find
available on AIX systems in general.  It's only available if it has
been purchased.
-- 
"cbbrowne","@","ca.afilias.info"
<http://dev6.int.libertyrms.com/>
Christopher Browne
(416) 673-4124 (land)