Thread: 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
Attachment
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)