Обсуждение: V8 Beta 5 on AIX
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.
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
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.
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
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
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
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
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
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
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
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/
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
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
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
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
> 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
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
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
>> 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
Вложения
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
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)