libpqxx-3.1.1/0000775000175000017500000000000012076704654010221 500000000000000libpqxx-3.1.1/config/0000775000175000017500000000000012076704654011466 500000000000000libpqxx-3.1.1/config/config.guess0000775000175000017500000012753412075723506013736 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-01-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libpqxx-3.1.1/config/install-sh0000775000175000017500000001273612075723506013417 00000000000000#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 libpqxx-3.1.1/config/Makefile.am0000664000175000017500000000043412075723506013437 00000000000000EXTRA_DIST=m4/Makefile.am sample-headers MAINTAINERCLEANFILES=Makefile.in config.guess config.sub install-sh \ ltmain.sh missing mkinstalldirs dist-hook: find "${distdir}" -type d -name CVS -print0 | xargs -0 rm -rf find "${distdir}" -type d -name .svn -print0 | xargs -0 rm -rf libpqxx-3.1.1/config/Makefile.in0000664000175000017500000002626412076703451013457 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = config DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in config.guess \ config.sub depcomp install-sh ltmain.sh missing mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/libtool.m4 \ $(top_srcdir)/config/m4/ltoptions.m4 \ $(top_srcdir)/config/m4/ltsugar.m4 \ $(top_srcdir)/config/m4/ltversion.m4 \ $(top_srcdir)/config/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/pqxx/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR = @MKDIR@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PG_CONFIG = @PG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ POSTGRES_INCLUDE = @POSTGRES_INCLUDE@ POSTGRES_LIB = @POSTGRES_LIB@ PQXXVERSION = @PQXXVERSION@ PQXX_ABI = @PQXX_ABI@ PQXX_MAJOR = @PQXX_MAJOR@ PQXX_MINOR = @PQXX_MINOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMLTO = @XMLTO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ with_postgres_include = @with_postgres_include@ with_postgres_lib = @with_postgres_lib@ EXTRA_DIST = m4/Makefile.am sample-headers MAINTAINERCLEANFILES = Makefile.in config.guess config.sub install-sh \ ltmain.sh missing mkinstalldirs all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu config/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu config/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ dist-hook distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am dist-hook: find "${distdir}" -type d -name CVS -print0 | xargs -0 rm -rf find "${distdir}" -type d -name .svn -print0 | xargs -0 rm -rf # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libpqxx-3.1.1/config/sample-headers/0000775000175000017500000000000012075723506014354 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/0000775000175000017500000000000012075723506016166 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/SunStudio-8/0000775000175000017500000000000012075723506020270 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/SunStudio-8/pqxx/0000775000175000017500000000000012075723506021270 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/SunStudio-8/pqxx/config-public-compiler.h0000664000175000017500000000053412075723506025714 00000000000000#define PGSTD std /* #undef PQXX_BROKEN_ITERATOR */ /* #undef PQXX_BROKEN_USING_DECL */ #define PQXX_HAVE_CHAR_TRAITS 1 #define PQXX_HAVE_CPP_PRAGMA_MESSAGE 1 /* #undef PQXX_HAVE_CPP_WARNING */ #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 #define PQXX_HAVE_LONG_DOUBLE 1 /* #undef PQXX_HAVE_REVERSE_ITERATOR */ #define PQXX_HAVE_STREAMBUF 1 libpqxx-3.1.1/config/sample-headers/compiler/SunStudio-8/pqxx/config-internal-compiler.h0000664000175000017500000000041212075723506026245 00000000000000#define HAVE_SYS_TYPES_H 1 #define HAVE_UNISTD_H 1 /* #undef PQXX_HAVE_COUNT_IF */ #define PQXX_HAVE_IMBUE 1 #define PQXX_HAVE_LOCALE 1 #define PQXX_HAVE_SLEEP 1 #define PQXX_HAVE_STRING_CLEAR 1 #define PQXX_HAVE_SYS_SELECT_H 1 /* #undef PQXX_SELECT_ACCEPTS_NULL */ libpqxx-3.1.1/config/sample-headers/compiler/gcc-4.2/0000775000175000017500000000000012075723506017223 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-4.2/pqxx/0000775000175000017500000000000012075723506020223 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-4.2/pqxx/config-public-compiler.h0000664000175000017500000000057412075723506024653 00000000000000#define PGSTD std /* #undef PQXX_BROKEN_ITERATOR */ /* #undef PQXX_BROKEN_USING_DECL */ #define PQXX_HAVE_CHAR_TRAITS 1 /* #undef PQXX_HAVE_CPP_PRAGMA_MESSAGE */ /* #undef PQXX_HAVE_CPP_WARNING */ #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 #define PQXX_HAVE_LONG_DOUBLE 1 /* #undef PQXX_HAVE_LONG_LONG */ #define PQXX_HAVE_REVERSE_ITERATOR 1 #define PQXX_HAVE_STREAMBUF 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-4.2/pqxx/config-internal-compiler.h0000664000175000017500000000100712075723506025201 00000000000000#define HAVE_SYS_TYPES_H 1 #define HAVE_UNISTD_H 1 #define PQXX_HAVE_COUNT_IF 1 #define PQXX_HAVE_C_NAN 1 #define PQXX_HAVE_DISTANCE 1 #define PQXX_HAVE_GCC_VISIBILITY 1 #define PQXX_HAVE_IMBUE 1 #define PQXX_HAVE_LOCALE 1 #define PQXX_HAVE_NAN 1 #define PQXX_HAVE_POLL 1 #define PQXX_HAVE_QUIET_NAN 1 #define PQXX_HAVE_SLEEP 1 #define PQXX_HAVE_STRERROR_R 1 #define PQXX_HAVE_STRING_CLEAR 1 /* #undef PQXX_HAVE_STRLCPY */ #define PQXX_HAVE_STRNLEN 1 #define PQXX_HAVE_SYS_SELECT_H 1 #define PQXX_SELECT_ACCEPTS_NULL 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3-apple/0000775000175000017500000000000012075723506020322 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3-apple/pqxx/0000775000175000017500000000000012075723506021322 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3-apple/pqxx/config-public-compiler.h0000664000175000017500000000052512075723506025746 00000000000000#define PGSTD std /* #undef PQXX_BROKEN_ITERATOR */ /* #undef PQXX_BROKEN_USING_DECL */ #define PQXX_HAVE_CHAR_TRAITS 1 #define PQXX_HAVE_CPP_PRAGMA_MESSAGE 1 #define PQXX_HAVE_CPP_WARNING 1 #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 #define PQXX_HAVE_LONG_DOUBLE 1 #define PQXX_HAVE_REVERSE_ITERATOR 1 #define PQXX_HAVE_STREAMBUF 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3-apple/pqxx/config-internal-compiler.h0000664000175000017500000000040712075723506026303 00000000000000#define HAVE_SYS_TYPES_H 1 #define HAVE_UNISTD_H 1 #define PQXX_HAVE_COUNT_IF 1 #define PQXX_HAVE_IMBUE 1 #define PQXX_HAVE_LOCALE 1 #define PQXX_HAVE_SLEEP 1 #define PQXX_HAVE_STRING_CLEAR 1 /* #undef PQXX_HAVE_SYS_SELECT_H */ #define PQXX_SELECT_ACCEPTS_NULL 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3-apple/config-public-compiler.h_strict0000664000175000017500000000054112075723506026334 00000000000000#define PGSTD std /* #undef PQXX_BROKEN_ITERATOR */ /* #undef PQXX_BROKEN_USING_DECL */ #define PQXX_HAVE_CHAR_TRAITS 1 /* #undef PQXX_HAVE_CPP_PRAGMA_MESSAGE */ /* #undef PQXX_HAVE_CPP_WARNING */ #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 /* #define PQXX_HAVE_LONG_DOUBLE 1 */ #define PQXX_HAVE_REVERSE_ITERATOR 1 #define PQXX_HAVE_STREAMBUF 1 libpqxx-3.1.1/config/sample-headers/compiler/VisualC++.NET-2003/0000775000175000017500000000000012075723506020671 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/VisualC++.NET-2003/pqxx/0000775000175000017500000000000012075723506021671 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/VisualC++.NET-2003/pqxx/config-public-compiler.h0000664000175000017500000000063712075723506026321 00000000000000#define PGSTD std /* #define PQXX_BROKEN_ITERATOR 1 */ /* #define PQXX_BROKEN_USING_DECL 1 */ #define PQXX_HAVE_CHAR_TRAITS 1 #define PQXX_HAVE_CPP_PRAGMA_MESSAGE 1 /* #define PQXX_HAVE_CPP_WARNING 1 */ #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 #define PQXX_HAVE_LONG_LONG 1 #define PQXX_HAVE_LONG_DOUBLE 1 #define PQXX_HAVE_REVERSE_ITERATOR 1 #define PQXX_HAVE_STREAMBUF 1 #define PQXX_PQ_IN_NAMESPACE 1 libpqxx-3.1.1/config/sample-headers/compiler/VisualC++.NET-2003/pqxx/config-internal-compiler.h0000664000175000017500000000052212075723506026650 00000000000000#define HAVE_SYS_TYPES_H 1 /* #define HAVE_UNISTD_H 1 */ #define PQXX_HAVE_COUNT_IF 1 #define PQXX_HAVE_IMBUE 1 #define PQXX_HAVE_LOCALE 1 #define PQXX_HAVE_QUIET_NAN 1 /* #define PQXX_HAVE_SLEEP 1 */ #define PQXX_HAVE_STRING_CLEAR 1 /* #define PQXX_HAVE_SYS_SELECT_H 1 */ #define PQXX_SELECT_ACCEPTS_NULL 1 #define HAVE_VSNPRINTF_DECL 1 libpqxx-3.1.1/config/sample-headers/compiler/MinGW-3.4/0000775000175000017500000000000012075723506017451 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/MinGW-3.4/pqxx/0000775000175000017500000000000012075723506020451 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/MinGW-3.4/pqxx/config-public-compiler.h0000664000175000017500000000052512075723506025075 00000000000000#define PGSTD std /* #undef PQXX_BROKEN_ITERATOR */ /* #undef PQXX_BROKEN_USING_DECL */ #define PQXX_HAVE_CHAR_TRAITS 1 #define PQXX_HAVE_CPP_PRAGMA_MESSAGE 1 #define PQXX_HAVE_CPP_WARNING 1 #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 #define PQXX_HAVE_LONG_DOUBLE 1 #define PQXX_HAVE_REVERSE_ITERATOR 1 #define PQXX_HAVE_STREAMBUF 1 libpqxx-3.1.1/config/sample-headers/compiler/MinGW-3.4/pqxx/config-internal-compiler.h0000664000175000017500000000045612075723506025436 00000000000000#define HAVE_SYS_TYPES_H 1 #define HAVE_UNISTD_H 1 #define PQXX_HAVE_COUNT_IF 1 #define PQXX_HAVE_IMBUE 1 #define PQXX_HAVE_LOCALE 1 #define PQXX_HAVE_QUIET_NAN 1 /* #define PQXX_HAVE_SLEEP 1 */ #define PQXX_HAVE_STRING_CLEAR 1 /* #define PQXX_HAVE_SYS_SELECT_H 1 */ #define PQXX_SELECT_ACCEPTS_NULL 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3/0000775000175000017500000000000012075723506017223 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3/pqxx/0000775000175000017500000000000012075723506020223 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3/pqxx/config-public-compiler.h0000664000175000017500000000052512075723506024647 00000000000000#define PGSTD std /* #undef PQXX_BROKEN_ITERATOR */ /* #undef PQXX_BROKEN_USING_DECL */ #define PQXX_HAVE_CHAR_TRAITS 1 #define PQXX_HAVE_CPP_PRAGMA_MESSAGE 1 #define PQXX_HAVE_CPP_WARNING 1 #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 #define PQXX_HAVE_LONG_DOUBLE 1 #define PQXX_HAVE_REVERSE_ITERATOR 1 #define PQXX_HAVE_STREAMBUF 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3/pqxx/config-internal-compiler.h0000664000175000017500000000044212075723506025203 00000000000000#define HAVE_SYS_TYPES_H 1 #define HAVE_UNISTD_H 1 #define PQXX_HAVE_COUNT_IF 1 #define PQXX_HAVE_IMBUE 1 #define PQXX_HAVE_LOCALE 1 #define PQXX_HAVE_SLEEP 1 #define PQXX_HAVE_QUIET_NAN 1 #define PQXX_HAVE_STRING_CLEAR 1 #define PQXX_HAVE_SYS_SELECT_H 1 #define PQXX_SELECT_ACCEPTS_NULL 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-3.3/config-public-compiler.h_strict0000664000175000017500000000054712075723506025243 00000000000000#define PGSTD std /* #define PQXX_BROKEN_ITERATOR 1 */ /* #define PQXX_BROKEN_USING_DECL 1 */ #define PQXX_HAVE_CHAR_TRAITS 1 /* #define PQXX_HAVE_CPP_PRAGMA_MESSAGE 1 */ /* #define PQXX_HAVE_CPP_WARNING 1 */ #define PQXX_HAVE_IOS 1 #define PQXX_HAVE_LIMITS 1 #define PQXX_HAVE_LONG_DOUBLE 1 #define PQXX_HAVE_REVERSE_ITERATOR 1 #define PQXX_HAVE_STREAMBUF 1 libpqxx-3.1.1/config/sample-headers/compiler/gcc-2.95/0000775000175000017500000000000012075723506017315 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-2.95/pqxx/0000775000175000017500000000000012075723506020315 500000000000000libpqxx-3.1.1/config/sample-headers/compiler/gcc-2.95/pqxx/config-public-compiler.h0000664000175000017500000000054412075723506024742 00000000000000#define PGSTD std #define PQXX_BROKEN_ITERATOR 1 #define PQXX_BROKEN_USING_DECL 1 /* #undef PQXX_HAVE_CHAR_TRAITS */ /* #undef PQXX_HAVE_CPP_PRAGMA_MESSAGE */ /* #undef PQXX_HAVE_CPP_WARNING */ /* #undef PQXX_HAVE_IOS */ /* #undef PQXX_HAVE_LIMITS */ #define PQXX_HAVE_LONG_DOUBLE 1 /* #undef PQXX_HAVE_REVERSE_ITERATOR */ /* #undef PQXX_HAVE_STREAMBUF */ libpqxx-3.1.1/config/sample-headers/compiler/gcc-2.95/pqxx/config-internal-compiler.h0000664000175000017500000000041512075723506025275 00000000000000#define HAVE_SYS_TYPES_H 1 #define HAVE_UNISTD_H 1 #define PQXX_HAVE_COUNT_IF 1 /* #undef PQXX_HAVE_IMBUE */ /* #undef PQXX_HAVE_LOCALE */ #define PQXX_HAVE_SLEEP 1 /* #undef PQXX_HAVE_STRING_CLEAR */ #define PQXX_HAVE_SYS_SELECT_H 1 #define PQXX_SELECT_ACCEPTS_NULL 1 libpqxx-3.1.1/config/sample-headers/libpq/0000775000175000017500000000000012075723506015463 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/8.3/0000775000175000017500000000000012075723506015773 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/8.3/pqxx/0000775000175000017500000000000012075723506016773 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/8.3/pqxx/config-internal-libpq.h0000664000175000017500000000130712075723506023251 00000000000000#define PQXX_HAVE_PQCANCEL 1 #define PQXX_HAVE_LO_TELL 1 #define PQXX_HAVE_PQCLIENTENCODING 1 #define PQXX_HAVE_PQDESCRIBEPORTAL 1 #define PQXX_HAVE_PQENCRYPTPASSWORD 1 #define PQXX_HAVE_PQESCAPEBYTEA 1 #define PQXX_HAVE_PQESCAPEBYTEACONN 1 #define PQXX_HAVE_PQESCAPESTRING 1 #define PQXX_HAVE_PQESCAPESTRINGCONN 1 #define PQXX_HAVE_PQEXECPREPARED 1 #define PQXX_HAVE_PQFREEMEM 1 #define PQXX_HAVE_PQFREENOTIFY 1 #define PQXX_HAVE_PQFTABLE 1 #define PQXX_HAVE_PQFTABLECOL 1 #define PQXX_HAVE_PQMBLEN 1 #define PQXX_HAVE_PQPREPARE 1 #define PQXX_HAVE_PQPROTOCOLVERSION 1 #define PQXX_HAVE_PQPUTCOPY 1 #define PQXX_HAVE_PQRESULTERRORFIELD 1 #define PQXX_HAVE_PQSERVERVERSION 1 #define PQXX_HAVE_PQUNESCAPEBYTEA 1 libpqxx-3.1.1/config/sample-headers/libpq/8.0/0000775000175000017500000000000012075723506015770 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/8.0/pqxx/0000775000175000017500000000000012075723506016770 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/8.0/pqxx/config-internal-libpq.h0000664000175000017500000000066412075723506023253 00000000000000#define PQXX_HAVE_PQCANCEL 1 #define PQXX_HAVE_PQESCAPEBYTEA 1 #define PQXX_HAVE_PQESCAPESTRING 1 #define PQXX_HAVE_PQEXECPREPARED 1 #define PQXX_HAVE_PQFREEMEM 1 #define PQXX_HAVE_PQFREENOTIFY 1 #define PQXX_HAVE_PQPROTOCOLVERSION 1 #define PQXX_HAVE_PQSERVERVERSION 1 #define PQXX_HAVE_PQPUTCOPY 1 #define PQXX_HAVE_PQRESULTERRORFIELD 1 #define PQXX_HAVE_PQUNESCAPEBYTEA 1 #define PQXX_HAVE_PQFTABLE 1 #define PQXX_HAVE_PQFTABLECOL 1 libpqxx-3.1.1/config/sample-headers/libpq/7.4/0000775000175000017500000000000012075723506015773 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/7.4/pqxx/0000775000175000017500000000000012075723506016773 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/7.4/pqxx/config-internal-libpq.h0000664000175000017500000000056312075723506023254 00000000000000#define PQXX_HAVE_PQESCAPEBYTEA 1 #define PQXX_HAVE_PQESCAPESTRING 1 #define PQXX_HAVE_PQEXECPREPARED 1 #define PQXX_HAVE_PQFREEMEM 1 #define PQXX_HAVE_PQFREENOTIFY 1 #define PQXX_HAVE_PQPROTOCOLVERSION 1 #define PQXX_HAVE_PQPUTCOPY 1 #define PQXX_HAVE_PQRESULTERRORFIELD 1 #define PQXX_HAVE_PQUNESCAPEBYTEA 1 #define PQXX_HAVE_PQFTABLE 1 #define PQXX_HAVE_PQFTABLECOL 1 libpqxx-3.1.1/config/sample-headers/libpq/8.1/0000775000175000017500000000000012075723506015771 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/8.1/pqxx/0000775000175000017500000000000012075723506016771 500000000000000libpqxx-3.1.1/config/sample-headers/libpq/8.1/pqxx/config-internal-libpq.h0000664000175000017500000000072212075723506023247 00000000000000#define PQXX_HAVE_PQCANCEL 1 #define PQXX_HAVE_PQESCAPEBYTEA 1 #define PQXX_HAVE_PQESCAPESTRING 1 #define PQXX_HAVE_PQEXECPREPARED 1 #define PQXX_HAVE_PQFREEMEM 1 #define PQXX_HAVE_PQFREENOTIFY 1 #define PQXX_HAVE_PQPUTCOPY 1 #define PQXX_HAVE_PQRESULTERRORFIELD 1 #define PQXX_HAVE_PQUNESCAPEBYTEA 1 #define PQXX_HAVE_PQPROTOCOLVERSION 1 #define PQXX_HAVE_PQSERVERVERSION 1 #define PQXX_HAVE_PQPREPARE 1 #define PQXX_HAVE_PQFTABLE 1 #define PQXX_HAVE_PQFTABLECOL 1 libpqxx-3.1.1/config/mkinstalldirs0000775000175000017500000000131412075723506014207 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs 137 2002-08-28 14:28:24Z jtv $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here libpqxx-3.1.1/config/ltmain.sh0000644000175000017500000105204012076703441013217 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1ubuntu2" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 libpqxx-3.1.1/config/config.sub0000775000175000017500000010115312075723506013366 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-01-16' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libpqxx-3.1.1/config/missing0000775000175000017500000002123112075723506013000 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.3 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar ${1+"$@"} && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar ${1+"$@"} && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 libpqxx-3.1.1/config/depcomp0000775000175000017500000002752512075723506012772 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. This file always lives in the current directory. # Also, the AIX compiler puts `$object:' at the start of each line; # $object doesn't have directory information. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; tru64) # The Tru64 AIX compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. tmpdepfile1="$object.d" tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` if test "$libtool" = yes; then "$@" -Wc,-MD else "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. test -z "$dashmflag" && dashmflag=-M ( IFS=" " case " $* " in *" --mode=compile "*) # this is libtool, let us make it quiet for arg do # cycle over the arguments case "$arg" in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) # X makedepend ( shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift;; -*) ;; *) set fnord "$@" "$arg"; shift;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tail +3 "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 libpqxx-3.1.1/config/m4/0000775000175000017500000000000012076704654012006 500000000000000libpqxx-3.1.1/config/m4/libtool.m40000644000175000017500000106043412076703441013633 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS libpqxx-3.1.1/config/m4/lt~obsolete.m40000644000175000017500000001375612076703442014546 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) libpqxx-3.1.1/config/m4/Makefile.am0000664000175000017500000000015012075723506013752 00000000000000MAINTAINERCLEANFILES=Makefile.in config.guess config.sub install-sh \ ltmain.sh missing mkinstalldirs libpqxx-3.1.1/config/m4/ltversion.m40000644000175000017500000000126212076703442014206 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) libpqxx-3.1.1/config/m4/ltsugar.m40000644000175000017500000001042412076703441013641 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) libpqxx-3.1.1/config/m4/ltoptions.m40000644000175000017500000003007312076703441014215 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) libpqxx-3.1.1/configure.ac0000664000175000017500000007522512076703440012432 00000000000000# # CAUTION: THE configure.ac FILE IS AUTOMATICALLY GENERATED! DO NOT EDIT IT. # # If you want to make changes to configure.ac, edit configure.ac.in instead. # # Process configure.ac.in with autoconf to produce a configure script. # All text in libpqxx is pure ASCII, so we can afford the "C" locale which is # likely to be faster than any other. This may also work around bugs in some # environments, esp. with UTF-8 locales. LC_ALL=C AC_PREREQ(2.59) AC_INIT(libpqxx, 3.1.1, [Jeroen T. Vermeulen ]) AC_LANG(C++) AC_CONFIG_AUX_DIR(config) AC_CONFIG_MACRO_DIR([config/m4]) AM_INIT_AUTOMAKE(libpqxx, 3.1.1) PQXXVERSION=3.1.1 PQXX_ABI=3.1 PQXX_MAJOR=3 PQXX_MINOR=1 AC_SUBST(PQXXVERSION) AC_SUBST(PQXX_ABI) AC_SUBST(PQXX_MAJOR) AC_SUBST(PQXX_MINOR) AC_CONFIG_SRCDIR([src/connection.cxx]) AC_CONFIG_HEADER([include/pqxx/config.h]) # default prefix for installs AC_PREFIX_DEFAULT(/usr/local) # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_PROG_INSTALL AC_DISABLE_SHARED AC_PROG_LIBTOOL AC_PROG_MAKE_SET AC_PATH_PROG([MKDIR], [mkdir]) AC_PATH_PROG([DOXYGEN], [doxygen]) AM_CONDITIONAL([BUILD_REFERENCE], [test -n "$DOXYGEN"]) AC_CHECK_PROG(HAVE_DOT, dot, YES, NO) AC_PATH_PROG([XMLTO], [xmlto]) AC_PATH_PROG([PKG_CONFIG], [pkg-config]) AM_CONDITIONAL([BUILD_TUTORIAL], [test -n "$XMLTO"]) AM_MAINTAINER_MODE # see if we want verbose compiler warnings AC_MSG_CHECKING([maintainer mode]) AC_ARG_ENABLE(maintainer-mode) AC_MSG_RESULT(${enable_maintainer_mode}) AC_ARG_ENABLE(shared) if test "${shared}" = "yes" ; then CPPFLAGS="$CPPFLAGS -DPQXX_SHARED" fi # Add options to compiler command line, if compiler accepts it add_compiler_opts() { for option in $* ; do ACO_SAVE_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $option" AC_MSG_CHECKING([whether $CXX accepts $option]) AC_TRY_COMPILE([], [], has_option=yes, has_option=no,) AC_MSG_RESULT($has_option) if test "$has_option" = "no" ; then CXXFLAGS="$ACO_SAVE_CXXFLAGS" fi done } # Let's try to get the compiler to be helpful # (Omit options -Weffc++ and -Wabi because they currently yield too many # warnings in gcc's standard headers; omit -Wunreachable-code because it isn't # always right) if test "$GCC" = "yes" ; then # In maintainer mode, enable all the warning options we can if test "$enable_maintainer_mode" = "yes"; then add_compiler_opts \ -Werror \ -Wno-div-by-zero \ -ffor-scope \ -fstrict-aliasing \ -Wstrict-aliasing \ -funit-at-a-time \ -pedantic \ -fno-nonansi-builtins \ -Wall \ -Wmultichar \ -W \ -Wextra \ -Wfloat-equal \ -Wundef \ -Wshadow \ -Wpointer-arith \ -Wcast-qual \ -Wcast-align \ -Wconversion \ -Wctor-dtor-privacy \ -Wc++-compat \ -Wendif-labels \ -Wlogical-op \ -Woverlength-strings \ -Wpointer-sign \ -Wredundant-decls \ -Wsign-compare \ -Wwrite-strings \ -Wnon-virtual-dtor \ -Wreorder \ -Wold-style-cast \ -Woverloaded-virtual \ -Wsign-promo \ -Wstrict-null-sentinel \ -Wformat-security \ -Wnonnull \ -Winit-self \ -Wswitch \ -Wmissing-field-initializers \ -Wmissing-include-dirs \ -Wunused \ -funit-at-a-time fi if test "$enable_long_long" = "yes" ; then add_compiler_opts -Wno-long-long fi AC_MSG_CHECKING([g++ visibility attribute]) gcc_visibility=yes SAVE_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -Werror" AC_TRY_COMPILE([ struct __attribute__ ((visibility("hidden"))) d { d() {} void f() {} }; ], [d D;D.f()], AC_DEFINE([PQXX_HAVE_GCC_VISIBILITY],1, [Define if g++ supports visibility attribute, as in g++ 4.0]), gcc_visibility=no) AC_MSG_RESULT($gcc_visibility) if test "$gcc_visibility" = "yes" ; then # Setting default symbol visibility to "hidden" vastly reduces # library size with g++ 4.0, but unfortunately this will require # some more work in the libpqxx setup. Instead, we make only # inline functions hidden. add_compiler_opts -fvisibility-inlines-hidden #add_compiler_opts -fvisibility=hidden fi CXXFLAGS="$SAVE_CXXFLAGS" AC_MSG_CHECKING([g++ deprecation attribute]) gcc_deprecated=yes AC_TRY_COMPILE([void f() __attribute__ ((deprecated));], [], AC_DEFINE([PQXX_HAVE_GCC_DEPRECATED],1, [Define if g++ supports deprecated attribute, as in g++ 4.0]), gcc_deprecated=no) AC_MSG_RESULT($gcc_deprecated) fi # Determine name of standard namespace. PGSTD will be set to this name. The # --with-std= option takes precedence if given; otherwise, several alternatives # are tried. # As a special case, if the argument to the --with-std option is "yes" (as would # be the case if the user specified the option but no argument for it), the # guessing logic is enabled as if the option had not been used. AH_TEMPLATE(PGSTD,[name of standard library namespace (normally "std")]) AC_MSG_CHECKING([name of standard library namespace (normally "std")]) guessstd=no AC_ARG_WITH(std, AC_HELP_STRING( [--with-std], [name of standard library namespace (normally "std")]), [std=${withval};], [guessstd=yes]) if test "${guessstd}" = "yes" -o "${withval}" = "yes"; then # No explicit std namespace given. Check for alternative "standard" # namespaces, in order of preference. for ns in std _STL stlp_std "" ; do AC_COMPILE_IFELSE([#include ${ns}::string justastring;], [std="${ns}"; break]) done fi AC_DEFINE_UNQUOTED( PGSTD, [$std], [name of standard library namespace (normally "std")]) if ! test -z "${std}" ; then AC_MSG_RESULT([::${std}]) usestd="using namespace ${std};" else AC_MSG_RESULT([::]) fi boost_smart_ptr=yes AC_CHECK_HEADER(boost/smart_ptr.hpp, AC_DEFINE(PQXX_HAVE_BOOST_SMART_PTR, 1, [Define if you have the header]), boost_smart_ptr=no) AC_MSG_CHECKING([whether TR1 headers live in tr1 directory]) tr1headers=yes AC_TRY_COMPILE( [#include ], [], AC_DEFINE( [PQXX_TR1_HEADERS], 1, [Define if headers for TR1 extension to standard live in tr1/]), tr1headers=no) AC_MSG_RESULT($tr1headers) if test "${tr1headers}" = "yes" ; then tr1dir="tr1/" else tr1dir="" fi AH_TEMPLATE(PQXXTR1, [namespace of TR1 extension to the C++ standard]) AC_MSG_CHECKING([namespace of TR1 extension to the C++ standard]) guesstr1=no AC_ARG_WITH( tr1, AC_HELP_STRING( [--with-tr1], [namespace of TR1 extension to the C++ standard]), [tr1=${withval};], [guesstr1=yes]) if test "${guesstr1}" = "yes" ; then # No explicit TR1 namespace given. Try PGSTD::tr1. If that doesn't # work, assume PGSTD as our best bet. tr1="${std}::tr1" AC_TRY_COMPILE( [#include <${tr1dir}memory>], [using namespace ${tr1}], [], [tr1=${std}]) fi AC_DEFINE_UNQUOTED( PQXXTR1, [$tr1], [namespace of TR1 standard extensions (e.g. "std" or "std::tr1")]) AC_MSG_RESULT([$tr1]) ioshdr=yes AC_CHECK_HEADER(ios,AC_DEFINE(PQXX_HAVE_IOS,1, [Define if you have the header]), ioshdr=no) streambuf=yes AC_CHECK_HEADER(streambuf,AC_DEFINE(PQXX_HAVE_STREAMBUF,1, [Define if you have the header; if not, is used]), streambuf=no) localehdr=yes AC_CHECK_HEADER(locale,AC_DEFINE(PQXX_HAVE_LOCALE,1, [Define if you have the header]), localehdr=no) imbue=yes AC_MSG_CHECKING([locale function and stringstream::imbue]) AC_TRY_COMPILE([#include #ifdef PQXX_HAVE_LOCALE #include #endif ${usestd}], [stringstream S; S.imbue(locale("C"))], [AC_DEFINE(PQXX_HAVE_IMBUE, 1, [Define if stringstream::imbue works])], [imbue=no]) AC_MSG_RESULT($imbue) AC_MSG_CHECKING([char_traits template]) char_traits=yes AC_TRY_COMPILE([#include ${usestd}], [char_traits::eof()], AC_DEFINE(PQXX_HAVE_CHAR_TRAITS, 1, [Define if std provides the char_traits template and specialization]), char_traits=no) AC_MSG_RESULT($char_traits) AC_MSG_CHECKING(["warning" preprocessor directive]) cpp_warning=yes AC_TRY_COMPILE([#warning cpp supports warning directive], [], AC_DEFINE(PQXX_HAVE_CPP_WARNING, 1, [Define if preprocessor supports nonstandard "warning" directive]), cpp_warning=no) AC_MSG_RESULT($cpp_warning) AC_MSG_CHECKING(["message" preprocessor pragma]) cpp_pragma_message=yes AC_TRY_COMPILE([#pragma message("cpp supports message pragma")], [], AC_DEFINE(PQXX_HAVE_CPP_PRAGMA_MESSAGE, 1, [Define if preprocessor supports pragma "message"]), cpp_pragma_message=no) AC_MSG_RESULT($cpp_pragma_message) # Find PostgreSQL includes and libraries AC_PATH_PROGS(PG_CONFIG, pg_config) if test -z "$PG_CONFIG" || test ! -r "$PG_CONFIG"; then AC_MSG_ERROR([ PostgreSQL configuration script pg_config not found. Make sure this is in your command path before configuring. Without it, the configure script has no way to find the right location for the libpq library and its headers. ]) fi with_postgres_include=`$PG_CONFIG --includedir` AC_MSG_NOTICE([using PostgreSQL headers at $with_postgres_include]) with_postgres_lib=`$PG_CONFIG --libdir` AC_MSG_NOTICE([using PostgreSQL libraries at $with_postgres_lib]) AC_SUBST(with_postgres_lib) AC_SUBST(with_postgres_include) #POSTGRES_LIB="-R${with_postgres_lib}" AC_SUBST(POSTGRES_LIB) POSTGRES_INCLUDE="-I${with_postgres_include}" AC_SUBST(POSTGRES_INCLUDE) AC_HEADER_STDC AC_MSG_CHECKING([ability to compile programs using the standard C library]) AC_TRY_COMPILE([#include namespace std {} // In case string.h does not define it. ${usestd} extern void f(size_t);], [f(strlen(""))],[], [AC_MSG_ERROR([ Could not build even a tiny test program using the standard C library. Something very basic has gone wrong; try reading config.log to find out what. You'll probably want to go straight to the end of that file and read backwards until you find an error message. Then identify the problem, try to fix it, and run this script again. The configure script's --help option may provide useful tips on how to influence what compiler and command line options are used, what additional libraries are linked in, and so on. ])]) AC_MSG_RESULT(yes) # After this check, we should be able to link socket-based programs. socklibok=no AC_SEARCH_LIBS(select, socket nsl ws2_32 wsock32 winsock, [socklibok=yes]) # Microsoft proprietary libraries do not work with code that is generated with # autoconf's SEARCH_LIBS macro, so we need to check manually and just use the # first socket library available. # We only do this if select() is not available by other means, to avoid picking # up an unnecessary Windows compatibility library on a non-Windows system. for l in ws2_32 wsock32 winsock ; do if test "${socklibok}" != "yes" ; then AC_CHECK_LIB($l,main,LIBS="$LIBS -l$l";[socklibok=yes]) fi done if test "${socklibok}" != "yes" ; then AC_MSG_ERROR([ Could not figure out how to link a simple sockets-based program. Please read the config.log file for more clues as to why this failed. ]) fi AC_CHECK_HEADER([${with_postgres_include}/libpq-fe.h],[],[AC_MSG_ERROR([ Can't find libpq-fe.h in ${with_postgres_include}. Are you sure the libpq headers are installed correctly? They should be in the directory returned by "pg_config --includedir". If you do have libpq (the C-language client library for PostgreSQL) installed, make sure you have the related development materials--mainly its header files-- as well as the library binary. Some system distributions keep the two in seperate packages with names like "alibrary" and "alibrary-dev", respectively. In that case, make sure you have the latter installed as well. ])]) AC_MSG_CHECKING([for ability to compile source files using libpq]) AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>],[PQexec(0,"")], [], [AC_MSG_ERROR([ Could not compile a call to a basic libpq function. There must be something seriously wrong with the headers that "pg_config --includedir" pointed to; the contents of config.log may give you a clue about the nature of the failure. Source including the libpq header libpq-fe.h can be compiled, but a call to the most basic libpq function PQexec() failed to compile successfully. This is the litmus test for a working libpq. ])]) AC_MSG_RESULT(yes) # Perform this check in C; autoconf's AC_HAVE_LIBRARY breaks in C++ because it # tries to call main() AC_LANG_PUSH(C) LDFLAGS="$LDFLAGS -L${with_postgres_lib}" AC_HAVE_LIBRARY(pq, [], [AC_MSG_ERROR([ Could not link to libpq. Make sure you have the PostgreSQL client library installed, and that the library binary can be found in the location returned by "pg_config --libdir". ])], -L${with_postgres_lib}) AC_CHECK_LIB([pq], [PQexec],[], [AC_MSG_ERROR([ Did not find the PQexec() function in libpq. This is the litmus test for a working libpq installation. A source file using the PQexec() function did compile without problems, and the libpq library is available for linking, but for some reason a call to PQexec() failed to link properly to the libpq library. This may be because the libpq library file is damaged, or in some incorrect format. or if your libpq is much more recent than libpqxx version 3.1.1, perhaps libpq has undergone a radical ABI change. The last parts of config.log may give you a clue as to what really went wrong, but be warned that this is no easy reading. Look for the last error message occurring in the file. ])], -L${with_postgres_lib}) # Remove redundant occurrances of -lpq LIBS="`echo "$LIBS" | sed -e 's/-lpq[[:space:]]*[[:space:]]-lpq\>/-lpq/g'`" AC_LANG_POP(C) AC_MSG_CHECKING([for correct C++ linkage of basic libpq functions]) if test "$enable_maintainer_mode" = "yes"; then AC_LINK_IFELSE([ #include <${with_postgres_include}/libpq-fe.h> int main(){return !PQexec(0,0);}], [], [AC_MSG_ERROR([ Linking a call to libpq failed in C++, even though it succeeded in C. If your C and C++ compilers are very different beasts, this may mean that we do not have the right options for linking with it after all. Alternatively, this may be caused by a bug in autoconf or automake. Since you are configuring libpqxx using the --enable-maintainer-mode option, any compiler warnings for autoconf test programs will be treated as errors. The problem may just go away if you run the configure script again but with the maintainer mode option omitted. Please report such cases (including the config.log produced by the failed attempt) so future versions can attempt to work around the problem. Should this error occur even while not in maintainer mode, read the config.log file for more detailed information. Look for the last error message, which may be several pages up from the end of the file. ])]) else AC_LINK_IFELSE([ #include <${with_postgres_include}/libpq-fe.h> int main(){return !PQexec(0,0);}], [], [AC_MSG_ERROR([ Linking a call to libpq failed in C++, even though it succeeded in C. If your C and C++ compilers are very different beasts, this may mean that we do not have the right options for linking with it after all. Read the config.log file for more detailed information. Look for the last error message, which may be several pages up from the end of the file. ])]) fi AC_MSG_RESULT(yes) AC_MSG_CHECKING([that type of libpq's Oid is as expected]) AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> #include"${srcdir}/include/pqxx/libpq-forward.hxx" extern void f(pqxx::oid&);], [Oid o;f(o)], [], [AC_MSG_ERROR([ The Oid typedef in libpq has changed. Please notify the libpqxx authors of the change! ])]) AC_MSG_RESULT(yes) AC_MSG_CHECKING([lo_tell()]) lotell=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> void f(PGconn *c) { lo_tell(c,2); }], [], AC_DEFINE(PQXX_HAVE_LO_TELL, 1, [Define if libpq has lo_tell()]), [lotell=no] ) AC_MSG_RESULT($lotell) AC_MSG_CHECKING([for strerror_r]) strerror_r=yes AC_TRY_COMPILE( [#include ${usestd} bool f(char x[]) { return strerror_r(0,x,10) != 0; }], [], [AC_DEFINE(PQXX_HAVE_STRERROR_R,1,[Define if strerror_r exists])], [strerror_r=no]) AC_MSG_RESULT($strerror_r) if test "$strerror_r" != "yes" ; then AC_MSG_WARN([ No definition of strerror_r, the thread-safe version of strerror(), was found in your header. This may be because your implementation strerror() is threadsafe, in which case there is nothing to worry about. ]) else AC_MSG_CHECKING([for GNU-style strerror_r]) gnu_strerror_r=yes AC_TRY_COMPILE( [#include ${usestd} const char *it_is_a_string(char *x) { return strerror_r(0,x,10); }], [], [AC_DEFINE( PQXX_HAVE_STRERROR_R_GNU,1,[Define for GNU-style strerror_r])], [gnu_strerror_r=no]) AC_MSG_RESULT($gnu_strerror_r) fi # strerror_r AC_MSG_CHECKING([for strnlen]) strnlen=yes AC_TRY_COMPILE( [#include ${usestd}], [return strnlen("",1)], [AC_DEFINE(PQXX_HAVE_STRNLEN,1,[Define if strnlen exists])], strnlen=no) AC_MSG_RESULT($strnlen) AC_MSG_CHECKING([for strlcpy]) strlcpy=yes AC_TRY_COMPILE( [#include ${usestd}], [char buf[2];return strlcpy(buf,"",1)], [AC_DEFINE(PQXX_HAVE_STRLCPY,1,[Define if strlcpy exists])], strlcpy=no) AC_MSG_RESULT($strlcpy) AC_MSG_CHECKING([for long long]) long_long=yes AC_TRY_COMPILE(,[long long l=0LL; return int(l)], AC_DEFINE(PQXX_HAVE_LONG_LONG,1, [Define if the compiler supports "long long" types]), long_long=no) AC_MSG_RESULT($long_long) AC_MSG_CHECKING([for long double]) long_double=yes AC_TRY_COMPILE(,[long double x=0;return int(x)], AC_DEFINE(PQXX_HAVE_LONG_DOUBLE,1, [Define if the compiler supports the standard "long double" type]), long_double=no) AC_MSG_RESULT($long_double) AC_MSG_CHECKING([for working ]) select_h=yes AC_TRY_COMPILE( [#include #include ${usestd}] , [select(0,0,0,0,0)] , AC_DEFINE(PQXX_HAVE_SYS_SELECT_H,1, [Define if the sys/select.h header defines a working select() and friends, as per POSIX 1003.1-2001]) ,select_h=no ) AC_MSG_RESULT($select_h) AC_MSG_CHECKING([for poll()]) poll=yes AC_TRY_COMPILE( [#include ${usestd}], [pollfd p = { 0,0,0 }; poll(&p,1,0)], AC_DEFINE(PQXX_HAVE_POLL,1, [Define if the system has the poll() function (mainly GNU/Linux)]), poll=no ) AC_MSG_RESULT($poll) # Long-standing annoyance in glibc: the definition for FD_SET includes an # unnecessary C-style cast that the compiler may warn for. If the compiler is # configured to treat warnings as errors, that may be a problem for us. AC_MSG_CHECKING([for working fd_set]) if test "$enable_maintainer_mode" = "yes"; then AC_TRY_COMPILE( [#include #ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef _WIN32 #include #endif ${usestd} extern "C" void f() { fd_set s; FD_ZERO(&s); FD_SET(1, &s); }], [], [], [AC_MSG_ERROR([ Could not compile code using fd_set. This may be a known problem with GNU libc and the extremely strict compiler options used in libpqxx's maintainer mode; try configuring again, this time omitting the --enable-maintainer-mode option. ])]) else AC_TRY_COMPILE( [#include #ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef _WIN32 #include #endif ${usestd}], [fd_set s;FD_ZERO(&s);FD_SET(1,&s)], [], [AC_MSG_ERROR([ Could not compile code using fd_set. There is something seriously wrong, or maybe your warning options are too strict. If you are using GNU libc (as will be the case on a GNU/Linux system) and are telling the compiler to treat warnings as errors, the cause may be an old-style cast in the definition of FD_SET that triggers a compiler warning. See config.log for more details; look for the last error message in the file. ])]) fi AC_MSG_RESULT(yes) AC_MSG_CHECKING([if select() accepts NULL fdsets]) select_accepts_null=yes AC_RUN_IFELSE( [#ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef _WIN32 #include #endif ${usestd} extern "C" int foo(){fd_set f; FD_SET(1,&f); return select(2,0,&f,&f,0)<0;} int main() { return foo(); }], AC_DEFINE(PQXX_SELECT_ACCEPTS_NULL,1, [Define if select() accepts NULL fd_set arguments]), select_accepts_null=no, select_accepts_null=no ) AC_MSG_RESULT($select_accepts_null) AC_MSG_CHECKING([sleep()]) sleep=yes AC_TRY_COMPILE([#ifdef HAVE_UNISTD_H #include #endif ${usestd}],[sleep(0x01)], AC_DEFINE(PQXX_HAVE_SLEEP, 1, [Define if POSIX sleep() exists]), [sleep=no] ) AC_MSG_RESULT($sleep) AC_MSG_CHECKING([PQisthreadsafe()]) pqisthreadsafe=yes AC_TRY_COMPILE( [#include<${with_postgres_include}/libpq-fe.h>], [PQisthreadsafe()], AC_DEFINE( PQXX_HAVE_PQISTHREADSAFE, 1, [Define if libpq has PQisthreadsafe()]), [pqisthreadsafe=no]) AC_MSG_RESULT($pqisthreadsafe) AC_MSG_CHECKING([PQserverVersion()]) pqserverversion=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQserverVersion(0)], AC_DEFINE(PQXX_HAVE_PQSERVERVERSION, 1, [Define if libpq has PQserverVersion()]), [pqserverversion=no] ) AC_MSG_RESULT($pqserverversion) AC_MSG_CHECKING([PQprotocolVersion()]) pqprotocolversion=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQprotocolVersion(0)], AC_DEFINE(PQXX_HAVE_PQPROTOCOLVERSION, 1, [Define if libpq has PQprotocolVersion()]), [pqprotocolversion=no] ) AC_MSG_RESULT($pqprotocolversion) AC_MSG_CHECKING([PQescapeString()]) pqescapestring=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char c[1];PQescapeString(c,"",0x01)], AC_DEFINE(PQXX_HAVE_PQESCAPESTRING, 1, [Define if libpq has PQescapeString()]), [pqescapestring=no] ) AC_MSG_RESULT($pqescapestring) if test "$pqescapestring" != yes ; then AC_MSG_WARN([ You appear to be building with a very old libpq version that does not have PQescapeString(). This can cause serious problems when non-ASCII data is used in SQL strings. Please consider upgrading to at least the libpq that came with PostgreSQL 7.2 before going any further! ]) fi AC_MSG_CHECKING([PQescapeStringConn()]) pqescapestringconn=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char b[1];PQescapeStringConn(0,b,b,sizeof(b),0)], AC_DEFINE(PQXX_HAVE_PQESCAPESTRINGCONN, 1, [Define if libpq has PQescapeStringConn()]), [pqescapestringconn=no] ) AC_MSG_RESULT($pqescapestringconn) AC_MSG_CHECKING([PQescapeBytea()]) pqescapebytea=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> #include ${usestd}], [size_t l=0;const unsigned char c[]="";PQescapeBytea(c,1,&l)], AC_DEFINE(PQXX_HAVE_PQESCAPEBYTEA,1,[Define if libpq has PQescapeBytea()]), [pqescapebytea=no] ) AC_MSG_RESULT($pqescapebytea) AC_MSG_CHECKING([PQescapeByteaConn()]) pqescapebyteaconn=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> #include ${usestd}], [unsigned char b[1];size_t c;PQescapeByteaConn(0,b,sizeof(b),&c)], AC_DEFINE(PQXX_HAVE_PQESCAPEBYTEACONN,1,[Define if libpq has PQescapeByteaConn()]), [pqescapebyteaconn=no] ) AC_MSG_RESULT($pqescapebyteaconn) AC_MSG_CHECKING([PQunescapeBytea()]) pqunescapebytea=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> ${usestd}], [size_t l=0;const unsigned char c[]="";PQunescapeBytea(c,&l)], AC_DEFINE(PQXX_HAVE_PQUNESCAPEBYTEA,1,[Define if libpq has PQunescapeBytea()]), [pqunescapebytea=no] ) AC_MSG_RESULT($pqunescapebytea) AC_MSG_CHECKING([PQfreemem()]) pqfreemem=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char c='x';PQfreemem(&c)], AC_DEFINE(PQXX_HAVE_PQFREEMEM,1,[Define if libpq has PQfreemem()]), [pqfreemem=no] ) AC_MSG_RESULT($pqfreemem) AC_MSG_CHECKING([PQfreeNotify()]) pqfreenotify=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char c='x';PQfreeNotify(&c)], AC_DEFINE(PQXX_HAVE_PQFREENOTIFY,1,[Define if libpq has PQfreeNotify()]), [pqfreenotify=no] ) AC_MSG_RESULT($pqfreenotify) AC_MSG_CHECKING([PQftable()]) pqftable=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGresult*r=0;PQftable(r,0)], AC_DEFINE(PQXX_HAVE_PQFTABLE,1,[Define if libpq has PQftable()]), [pqftable=no] ) AC_MSG_RESULT($pqftable) AC_MSG_CHECKING([PQftablecol()]) pqftablecol=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGresult*r=0;PQftablecol(r,0)], AC_DEFINE(PQXX_HAVE_PQFTABLECOL,1,[Define if libpq has PQftablecol()]), [pqftablecol=no] ) AC_MSG_RESULT($pqftablecol) AC_MSG_CHECKING([for new COPY functions]) pqputcopy=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGconn*c=0;PQputCopyData(c,"",0)], AC_DEFINE(PQXX_HAVE_PQPUTCOPY,1,[Define if libpq has PQputCopyData() and related functions]), [pqputcopy=no] ) AC_MSG_RESULT($pqputcopy) AC_MSG_CHECKING([PQprepare()]) pqprepare=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [extern PGconn*c;Oid o;PQprepare(c,"","",0,&o)], AC_DEFINE(PQXX_HAVE_PQPREPARE,1,[Define if libpq has PQprepare()]), [pqprepare=no] ) AC_MSG_RESULT($pqprepare) AC_MSG_CHECKING([PQexecPrepared()]) pqexecprepared=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGconn*c=0;const char*p[1]={0};const int i=0;PQexecPrepared(c,"",i,p,&i,&i,i)], AC_DEFINE(PQXX_HAVE_PQEXECPREPARED,1,[Define if libpq has PQexecPrepared()]), [pqexecprepared=no] ) AC_MSG_RESULT($pqexecprepared) AC_MSG_CHECKING([PQexecParams()]) pqexecparams=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQexecParams(0, "", 0, 0, 0, 0, 0, 0)], AC_DEFINE(PQXX_HAVE_PQEXECPARAMS,1,[Define if libpq has PQexecParams()]), [pqexecparams=no] ) AC_MSG_RESULT($pqexecparams) AC_MSG_CHECKING([PQresultErrorField()]) pqresulterrorfield=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGresult*r=0;PQresultErrorField(r,PG_DIAG_STATEMENT_POSITION)], AC_DEFINE(PQXX_HAVE_PQRESULTERRORFIELD,1,[Define if libpq has PQresultErrorField() and PG_DIAG_STATEMENT_POSITION]), [pqresulterrorfield=no] ) AC_MSG_RESULT($pqresulterrorfield) AC_MSG_CHECKING([PQencryptPassword()]) pqencryptpassword=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQencryptPassword("x","y")], AC_DEFINE(PQXX_HAVE_PQENCRYPTPASSWORD,1,[Define if libpq has PQencryptPassword()]), [pqencryptpassword=no] ) AC_MSG_RESULT($pqencryptpassword) AC_MSG_CHECKING([PQclientEncoding()]) pqclientencoding=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [return PQclientEncoding(NULL)], AC_DEFINE(PQXX_HAVE_PQCLIENTENCODING,1,[Define if libpq has PQclientEncoding()]), [pqclientencoding=no] ) AC_MSG_RESULT($pqclientencoding) AC_MSG_CHECKING([PQmblen()]) pqmblen=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [return PQmblen(NULL,1)], AC_DEFINE(PQXX_HAVE_PQMBLEN,1,[Define if libpq has PQmblen()]), [pqmblen=no] ) AC_MSG_RESULT($pqmblen) AC_MSG_CHECKING([PQdescribePortal()]) pqdescribeportal=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [return PQdescribePortal(NULL, "foo")!=0;], AC_DEFINE(PQXX_HAVE_PQDESCRIBEPORTAL,1,[Define if libpq has PQdescribePortal()]), [pqdescribeportal=no] ) AC_MSG_RESULT($pqdescribeportal) AC_MSG_CHECKING([PQcancel()]) pqcancel=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQcancel(NULL, NULL, 0)], AC_DEFINE(PQXX_HAVE_PQCANCEL, 1, [Define if libpq has PQcancel() and friends]), [pqcancel=no] ) AC_MSG_RESULT($pqcancel) AC_CHECK_HEADER(limits, [AC_DEFINE(PQXX_HAVE_LIMITS, 1, [Define if exists])]) AC_MSG_CHECKING([for C99 isnan()]) c_isnan=yes AC_TRY_COMPILE([#include extern double f(); ${usestd}], [if(isnan(f())f()], AC_DEFINE(PQXX_HAVE_C_ISNAN,1,[Define if math.h defines C99 isnan()]), [c_isnan=no] ) AC_MSG_RESULT($c_isnan) AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()]) quiet_nan=yes AC_TRY_COMPILE([#include extern void f(double); ${usestd}], [f(numeric_limits::quiet_NaN())], [AC_DEFINE(PQXX_HAVE_QUIET_NAN,1, [Define if std::numeric_limits has quiet_NaN()])], [quiet_nan=no]) AC_MSG_RESULT($quiet_nan) AC_MSG_CHECKING([for C NAN macro]) c_nan=yes AC_TRY_COMPILE([#include extern void f(double); ${usestd}], [f(NAN)], [AC_DEFINE(PQXX_HAVE_C_NAN,1, [Define if C math header defines NAN])], [c_nan=no]) AC_MSG_RESULT($c_nan) AC_MSG_CHECKING([for C99 nan() family]) nan=yes AC_TRY_COMPILE([#include ${usestd} extern void f(double);], [f(nan(""))], [AC_DEFINE(PQXX_HAVE_NAN,1, [Define if C99 fnan()/nan()/lnan() are available])], [nan=no]) AC_MSG_RESULT($nan) AC_MSG_CHECKING([for C99 isinf()]) c_isnan=yes AC_TRY_COMPILE([#include extern double f(); ${usestd}], [if(isinf(f())f()], AC_DEFINE(PQXX_HAVE_C_ISINF,1,[Define if math.h defines C99 isinf()]), [c_isinf=no] ) AC_MSG_RESULT($c_isinf) AC_MSG_CHECKING([whether std::string has a clear() function]) string_clear=yes AC_TRY_COMPILE([#include ${usestd}], [string i;i.clear()], [AC_DEFINE(PQXX_HAVE_STRING_CLEAR, 1, [Define if string class has the clear() function])], [string_clear=no]) AC_MSG_RESULT($string_clear) AC_MSG_CHECKING([for standard distance()]) distance=yes AC_TRY_COMPILE([#include ${usestd}], [int i[1]; return distance(i, i+1)], [AC_DEFINE(PQXX_HAVE_DISTANCE, 1, [Define if distance() works according to the standard])], [distance='no']) AC_MSG_RESULT($distance) AC_MSG_CHECKING([if count_if() works as expected]) count_if='yes' AC_TRY_COMPILE([#include #include ${usestd} struct P{P(){}bool operator()(const int&)const{return false;}}p;], [int v;return int(count_if(&v,&v,p))], [AC_DEFINE(PQXX_HAVE_COUNT_IF, 1, [Define if count_if() works according to the standard])], [count_if='no']) AC_MSG_RESULT($count_if) AC_MSG_CHECKING([whether defines a usable iterator template]) AC_TRY_COMPILE([#include ${usestd}], [struct I:iterator{}], [it='yes'], [AC_DEFINE(PQXX_BROKEN_ITERATOR, 1, [Define if lacks an iterator template definition]) it='no']) AC_MSG_RESULT($it) AC_MSG_CHECKING([for reverse_iterator template]) reverseit='yes' AC_TRY_COMPILE([#include ${usestd} struct I:iterator{};], [reverse_iterator rit], [AC_DEFINE(PQXX_HAVE_REVERSE_ITERATOR, 1, [Define if reverse_iterator template works as expected])], [reverseit='no']) AC_MSG_RESULT($reverseit) AC_MSG_CHECKING([for tr1::shared_ptr]) sharedptr='yes' AC_TRY_COMPILE([#include <${tr1dir}memory>], [${tr1}::shared_ptr i(new int(1)); return *i;], [AC_DEFINE(PQXX_HAVE_SHARED_PTR, 1, [Define if compiler has shared_ptr])], [sharedptr='no']) AC_MSG_RESULT($sharedptr) AC_MSG_CHECKING([whether overloaded using-declarations work]) AC_TRY_COMPILE([ struct A {A(){} void f(int){}}; struct B:A {B(){} using A::f; void f(int,bool){}};], [B b;b.f(1,true);], [usingdecl='yes'], [AC_DEFINE(PQXX_BROKEN_USING_DECL, 1, [Define if function overloading using "using" breaks]) usingdecl='no']) AC_MSG_RESULT($usingdecl) AC_PROG_MAKE_SET AC_CONFIG_FILES([Makefile config/Makefile debian/Makefile doc/Makefile doc/Doxyfile src/Makefile test/Makefile test/unit/Makefile tools/Makefile win32/Makefile include/Makefile include/pqxx/Makefile libpqxx.pc pqxx-config libpqxx.spec]) AC_CONFIG_COMMANDS([configitems], ["${srcdir}/tools/splitconfig" "${srcdir}"]) AC_OUTPUT libpqxx-3.1.1/win32/0000775000175000017500000000000012076704654011163 500000000000000libpqxx-3.1.1/win32/vc-libpqxx.mak0000664000175000017500000007033312076703440013670 00000000000000################################################################################ # AUTOMATICALLY GENERATED FILE--DO NOT EDIT # # This file is generated automatically by libpqxx's template2mak.py script. # # If you modify this file, chances are your modifications will be lost because # the file will be re-written from time to time. # # The template2mak.py script should be available in the tools directory of the # libpqxx source archive. # # Generated from template '/home/jtv/proj/libpqxx/tags/3.1.1/win32/vc-libpqxx.mak.template'. ################################################################################ # Visual C++ makefile for libpqxx # This file was created by Bart Samwel. default: @echo LIBPQXX Makefile for Visual C++ Available Targets @echo ------------------------------------------------- @echo. @echo Static library targets: @echo. @echo STATIC @echo STATICRELEASE (release mode only) @echo STATICDEBUG (debug mode only) @echo. @echo Dynamic Link Library (DLL) targets: @echo. @echo DLL @echo DLLRELEASE @echo DLLDEBUG @echo. @echo Other targets: @echo. @echo ALL: build both the DLL and STATIC builds. @echo CLEAN: clean up all output. @echo. @echo It is recommended that you link to libpqxx statically. Therefore, you should @echo normally build the "STATIC" target. If you want to link your programto libpqxx @echo dynamically, build target "DLL" and compile your program with preprocessor @echo define "PQXX_SHARED". This will make your program link against the DLL version @echo of libpqxx. !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF !include win32/common ######################################################## # Configuration ######################################################## # Output DLL/LIB files. No extensions, they are added automatically! OUTDIR=lib OUTFILE_STATICDEBUG=$(OUTDIR)\libpqxx_staticD OUTFILE_STATICRELEASE=$(OUTDIR)\libpqxx_static OUTFILE_DLLDEBUG=$(OUTDIR)\libpqxxD OUTFILE_DLLRELEASE=$(OUTDIR)\libpqxx # Directories for intermediate output. INTDIR_STATICDEBUG=ObjStaticDebug INTDIR_STATICRELEASE=ObjStaticRelease INTDIR_DLLDEBUG=ObjDllDebug INTDIR_DLLRELEASE=ObjDllRelease # C++ compiler, linker (for DLLs) and library tool (for static builds). CXX=cl.exe LINK=link.exe LIBTOOL=link.exe -lib # The options common to all the different builds. CXX_FLAGS_BASE=/nologo /W3 /EHsc /FD /GR /c \ /I "include" /I $(PGSQLSRC)\include /I $(PGSQLSRC)\interfaces\libpq \ /D PGSTD=$(STD) /D "WIN32" /D "_MBCS" /D "_WINDOWS" /D "PQXX_INTERNAL" \ /D "PQXX_AUTOLINK" CXX_FLAGS_DLLRELEASE=$(CXX_FLAGS_BASE) /MD /D "NDEBUG" /D "PQXX_SHARED" CXX_FLAGS_DLLDEBUG=$(CXX_FLAGS_BASE) /MDd /Gm /ZI /Od /D "_DEBUG" /D "PQXX_SHARED" /RTC1 CXX_FLAGS_STATICRELEASE=$(CXX_FLAGS_BASE) /MD /D "_LIB" /D "NDEBUG" CXX_FLAGS_STATICDEBUG=$(CXX_FLAGS_BASE) /MDd /Gm /ZI /Od /D "_LIB" /D "_DEBUG" /RTC1 LINK_FLAGS_BASE=kernel32.lib wsock32.lib advapi32.lib /nologo /dll /machine:I386 /libpath:$(LIBPATH1) /libpath:$(LIBPATH2) LINK_FLAGS_DLLRELEASE=$(LINK_FLAGS_BASE) LINK_FLAGS_DLLDEBUG=$(LINK_FLAGS_BASE) /debug LIB_FLAGS=/nologo ######################################################## # List of intermediate files ######################################################## OBJ_STATICDEBUG=\ "$(INTDIR_STATICDEBUG)\binarystring.obj" \ "$(INTDIR_STATICDEBUG)\connection.obj" \ "$(INTDIR_STATICDEBUG)\connection_base.obj" \ "$(INTDIR_STATICDEBUG)\cursor.obj" \ "$(INTDIR_STATICDEBUG)\dbtransaction.obj" \ "$(INTDIR_STATICDEBUG)\except.obj" \ "$(INTDIR_STATICDEBUG)\largeobject.obj" \ "$(INTDIR_STATICDEBUG)\nontransaction.obj" \ "$(INTDIR_STATICDEBUG)\notify-listen.obj" \ "$(INTDIR_STATICDEBUG)\pipeline.obj" \ "$(INTDIR_STATICDEBUG)\prepared_statement.obj" \ "$(INTDIR_STATICDEBUG)\result.obj" \ "$(INTDIR_STATICDEBUG)\robusttransaction.obj" \ "$(INTDIR_STATICDEBUG)\statement_parameters.obj" \ "$(INTDIR_STATICDEBUG)\strconv.obj" \ "$(INTDIR_STATICDEBUG)\subtransaction.obj" \ "$(INTDIR_STATICDEBUG)\tablereader.obj" \ "$(INTDIR_STATICDEBUG)\tablestream.obj" \ "$(INTDIR_STATICDEBUG)\tablewriter.obj" \ "$(INTDIR_STATICDEBUG)\transaction.obj" \ "$(INTDIR_STATICDEBUG)\transaction_base.obj" \ "$(INTDIR_STATICDEBUG)\util.obj" \ OBJ_STATICRELEASE=\ "$(INTDIR_STATICRELEASE)\binarystring.obj" \ "$(INTDIR_STATICRELEASE)\connection.obj" \ "$(INTDIR_STATICRELEASE)\connection_base.obj" \ "$(INTDIR_STATICRELEASE)\cursor.obj" \ "$(INTDIR_STATICRELEASE)\dbtransaction.obj" \ "$(INTDIR_STATICRELEASE)\except.obj" \ "$(INTDIR_STATICRELEASE)\largeobject.obj" \ "$(INTDIR_STATICRELEASE)\nontransaction.obj" \ "$(INTDIR_STATICRELEASE)\notify-listen.obj" \ "$(INTDIR_STATICRELEASE)\pipeline.obj" \ "$(INTDIR_STATICRELEASE)\prepared_statement.obj" \ "$(INTDIR_STATICRELEASE)\result.obj" \ "$(INTDIR_STATICRELEASE)\robusttransaction.obj" \ "$(INTDIR_STATICRELEASE)\statement_parameters.obj" \ "$(INTDIR_STATICRELEASE)\strconv.obj" \ "$(INTDIR_STATICRELEASE)\subtransaction.obj" \ "$(INTDIR_STATICRELEASE)\tablereader.obj" \ "$(INTDIR_STATICRELEASE)\tablestream.obj" \ "$(INTDIR_STATICRELEASE)\tablewriter.obj" \ "$(INTDIR_STATICRELEASE)\transaction.obj" \ "$(INTDIR_STATICRELEASE)\transaction_base.obj" \ "$(INTDIR_STATICRELEASE)\util.obj" \ OBJ_DLLDEBUG=\ "$(INTDIR_DLLDEBUG)\binarystring.obj" \ "$(INTDIR_DLLDEBUG)\connection.obj" \ "$(INTDIR_DLLDEBUG)\connection_base.obj" \ "$(INTDIR_DLLDEBUG)\cursor.obj" \ "$(INTDIR_DLLDEBUG)\dbtransaction.obj" \ "$(INTDIR_DLLDEBUG)\except.obj" \ "$(INTDIR_DLLDEBUG)\largeobject.obj" \ "$(INTDIR_DLLDEBUG)\nontransaction.obj" \ "$(INTDIR_DLLDEBUG)\notify-listen.obj" \ "$(INTDIR_DLLDEBUG)\pipeline.obj" \ "$(INTDIR_DLLDEBUG)\prepared_statement.obj" \ "$(INTDIR_DLLDEBUG)\result.obj" \ "$(INTDIR_DLLDEBUG)\robusttransaction.obj" \ "$(INTDIR_DLLDEBUG)\statement_parameters.obj" \ "$(INTDIR_DLLDEBUG)\strconv.obj" \ "$(INTDIR_DLLDEBUG)\subtransaction.obj" \ "$(INTDIR_DLLDEBUG)\tablereader.obj" \ "$(INTDIR_DLLDEBUG)\tablestream.obj" \ "$(INTDIR_DLLDEBUG)\tablewriter.obj" \ "$(INTDIR_DLLDEBUG)\transaction.obj" \ "$(INTDIR_DLLDEBUG)\transaction_base.obj" \ "$(INTDIR_DLLDEBUG)\util.obj" \ "$(INTDIR_DLLDEBUG)\libpqxx.obj" \ OBJ_DLLRELEASE=\ "$(INTDIR_DLLRELEASE)\binarystring.obj" \ "$(INTDIR_DLLRELEASE)\connection.obj" \ "$(INTDIR_DLLRELEASE)\connection_base.obj" \ "$(INTDIR_DLLRELEASE)\cursor.obj" \ "$(INTDIR_DLLRELEASE)\dbtransaction.obj" \ "$(INTDIR_DLLRELEASE)\except.obj" \ "$(INTDIR_DLLRELEASE)\largeobject.obj" \ "$(INTDIR_DLLRELEASE)\nontransaction.obj" \ "$(INTDIR_DLLRELEASE)\notify-listen.obj" \ "$(INTDIR_DLLRELEASE)\pipeline.obj" \ "$(INTDIR_DLLRELEASE)\prepared_statement.obj" \ "$(INTDIR_DLLRELEASE)\result.obj" \ "$(INTDIR_DLLRELEASE)\robusttransaction.obj" \ "$(INTDIR_DLLRELEASE)\statement_parameters.obj" \ "$(INTDIR_DLLRELEASE)\strconv.obj" \ "$(INTDIR_DLLRELEASE)\subtransaction.obj" \ "$(INTDIR_DLLRELEASE)\tablereader.obj" \ "$(INTDIR_DLLRELEASE)\tablestream.obj" \ "$(INTDIR_DLLRELEASE)\tablewriter.obj" \ "$(INTDIR_DLLRELEASE)\transaction.obj" \ "$(INTDIR_DLLRELEASE)\transaction_base.obj" \ "$(INTDIR_DLLRELEASE)\util.obj" \ "$(INTDIR_DLLRELEASE)\libpqxx.obj" \ ######################################################## # Logical targets ######################################################## static: staticdebug staticrelease dll: dlldebug dllrelease all: static dll $(OUTDIR): -@mkdir $(OUTDIR) staticdebug: $(OUTFILE_STATICDEBUG).lib $(OUTDIR) $(OUTDIR)\libpqd.dll staticrelease: $(OUTFILE_STATICRELEASE).lib $(OUTDIR) $(OUTDIR)\libpq.dll dlldebug: $(OUTFILE_DLLDEBUG).dll $(OUTDIR) $(OUTDIR)\libpqd.dll dllrelease: $(OUTFILE_DLLRELEASE).dll $(OUTDIR) $(OUTDIR)\libpq.dll clean: @echo Deleting all intermediate output files and the contents of $(OUTDIR). -@del /Q "$(INTDIR_STATICDEBUG)\*" -@del /Q "$(INTDIR_STATICRELEASE)\*" -@del /Q "$(INTDIR_DLLDEBUG)\*" -@del /Q "$(INTDIR_DLLRELEASE)\*" -@del /Q "$(OUTDIR)\*" ######################################################## # Physical targets ######################################################## $(OUTDIR)\libpq.dll: $(OUTDIR) @echo ------------------------------------------------------------- @echo Copying libpq.dll to $(OUTDIR). @echo. @echo IMPORTANT: you MUST copy this libpq.dll into the directory @echo where your program's .EXE resides. The system libpq.dll is @echo not necessarily compatible with the libpq include files that @echo you built libpqxx with. Do NOT copy this file into your @echo Windows system32 directory, that may break other programs. @echo Instead, keep it with your program and distribute it along @echo with the program. @echo ------------------------------------------------------------- copy $(PGSQLSRC)\interfaces\libpq\release\libpq.dll $(OUTDIR) $(OUTDIR)\libpqd.dll: $(OUTDIR) @echo ------------------------------------------------------------- @echo Copying libpqD.dll to $(OUTDIR). @echo. @echo IMPORTANT: you MUST copy this libpqd.dll into the directory @echo where your program's .EXE resides, or you must make sure that @echo it is in your system PATH. @echo ------------------------------------------------------------- copy $(PGSQLSRC)\interfaces\libpq\debug\libpqd.dll $(OUTDIR) $(OUTFILE_STATICDEBUG).lib: $(OUTDIR) $(OBJ_STATICDEBUG) $(LIBTOOL) $(LIB_FLAGS) $(OBJ_STATICDEBUG) /out:"$(OUTFILE_STATICDEBUG).lib" $(OUTFILE_STATICRELEASE).lib: $(OUTDIR) $(OBJ_STATICRELEASE) $(LIBTOOL) $(LIB_FLAGS) $(OBJ_STATICRELEASE) /out:"$(OUTFILE_STATICRELEASE).lib" $(OUTFILE_DLLDEBUG).dll: $(OUTDIR) $(OBJ_DLLDEBUG) $(LINK) $(LINK_FLAGS_DLLDEBUG) $(OBJ_DLLDEBUG) /out:"$(OUTFILE_DLLDEBUG).dll" /implib:"$(OUTFILE_DLLDEBUG).lib" $(OUTFILE_DLLRELEASE).dll: $(OUTDIR) $(OBJ_DLLRELEASE) $(LINK) $(LINK_FLAGS_DLLRELEASE) $(OBJ_DLLRELEASE) /out:"$(OUTFILE_DLLRELEASE).dll" /implib:"$(OUTFILE_DLLRELEASE).lib" $(INTDIR_STATICDEBUG): -@mkdir $(INTDIR_STATICDEBUG) $(INTDIR_STATICRELEASE): -@mkdir $(INTDIR_STATICRELEASE) $(INTDIR_DLLDEBUG): -@mkdir $(INTDIR_DLLDEBUG) $(INTDIR_DLLRELEASE): -@mkdir $(INTDIR_DLLRELEASE) ######################################################## # Physical intermediate files ######################################################## "$(INTDIR_STATICRELEASE)\binarystring.obj": src/binarystring.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/binarystring.cxx "$(INTDIR_STATICDEBUG)\binarystring.obj": src/binarystring.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/binarystring.cxx "$(INTDIR_STATICRELEASE)\connection.obj": src/connection.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/connection.cxx "$(INTDIR_STATICDEBUG)\connection.obj": src/connection.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/connection.cxx "$(INTDIR_STATICRELEASE)\connection_base.obj": src/connection_base.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/connection_base.cxx "$(INTDIR_STATICDEBUG)\connection_base.obj": src/connection_base.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/connection_base.cxx "$(INTDIR_STATICRELEASE)\cursor.obj": src/cursor.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/cursor.cxx "$(INTDIR_STATICDEBUG)\cursor.obj": src/cursor.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/cursor.cxx "$(INTDIR_STATICRELEASE)\dbtransaction.obj": src/dbtransaction.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/dbtransaction.cxx "$(INTDIR_STATICDEBUG)\dbtransaction.obj": src/dbtransaction.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/dbtransaction.cxx "$(INTDIR_STATICRELEASE)\except.obj": src/except.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/except.cxx "$(INTDIR_STATICDEBUG)\except.obj": src/except.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/except.cxx "$(INTDIR_STATICRELEASE)\largeobject.obj": src/largeobject.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/largeobject.cxx "$(INTDIR_STATICDEBUG)\largeobject.obj": src/largeobject.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/largeobject.cxx "$(INTDIR_STATICRELEASE)\nontransaction.obj": src/nontransaction.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/nontransaction.cxx "$(INTDIR_STATICDEBUG)\nontransaction.obj": src/nontransaction.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/nontransaction.cxx "$(INTDIR_STATICRELEASE)\notify-listen.obj": src/notify-listen.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/notify-listen.cxx "$(INTDIR_STATICDEBUG)\notify-listen.obj": src/notify-listen.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/notify-listen.cxx "$(INTDIR_STATICRELEASE)\pipeline.obj": src/pipeline.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/pipeline.cxx "$(INTDIR_STATICDEBUG)\pipeline.obj": src/pipeline.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/pipeline.cxx "$(INTDIR_STATICRELEASE)\prepared_statement.obj": src/prepared_statement.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/prepared_statement.cxx "$(INTDIR_STATICDEBUG)\prepared_statement.obj": src/prepared_statement.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/prepared_statement.cxx "$(INTDIR_STATICRELEASE)\result.obj": src/result.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/result.cxx "$(INTDIR_STATICDEBUG)\result.obj": src/result.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/result.cxx "$(INTDIR_STATICRELEASE)\robusttransaction.obj": src/robusttransaction.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/robusttransaction.cxx "$(INTDIR_STATICDEBUG)\robusttransaction.obj": src/robusttransaction.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/robusttransaction.cxx "$(INTDIR_STATICRELEASE)\statement_parameters.obj": src/statement_parameters.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/statement_parameters.cxx "$(INTDIR_STATICDEBUG)\statement_parameters.obj": src/statement_parameters.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/statement_parameters.cxx "$(INTDIR_STATICRELEASE)\strconv.obj": src/strconv.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/strconv.cxx "$(INTDIR_STATICDEBUG)\strconv.obj": src/strconv.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/strconv.cxx "$(INTDIR_STATICRELEASE)\subtransaction.obj": src/subtransaction.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/subtransaction.cxx "$(INTDIR_STATICDEBUG)\subtransaction.obj": src/subtransaction.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/subtransaction.cxx "$(INTDIR_STATICRELEASE)\tablereader.obj": src/tablereader.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/tablereader.cxx "$(INTDIR_STATICDEBUG)\tablereader.obj": src/tablereader.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/tablereader.cxx "$(INTDIR_STATICRELEASE)\tablestream.obj": src/tablestream.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/tablestream.cxx "$(INTDIR_STATICDEBUG)\tablestream.obj": src/tablestream.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/tablestream.cxx "$(INTDIR_STATICRELEASE)\tablewriter.obj": src/tablewriter.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/tablewriter.cxx "$(INTDIR_STATICDEBUG)\tablewriter.obj": src/tablewriter.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/tablewriter.cxx "$(INTDIR_STATICRELEASE)\transaction.obj": src/transaction.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/transaction.cxx "$(INTDIR_STATICDEBUG)\transaction.obj": src/transaction.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/transaction.cxx "$(INTDIR_STATICRELEASE)\transaction_base.obj": src/transaction_base.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/transaction_base.cxx "$(INTDIR_STATICDEBUG)\transaction_base.obj": src/transaction_base.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/transaction_base.cxx "$(INTDIR_STATICRELEASE)\util.obj": src/util.cxx $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" src/util.cxx "$(INTDIR_STATICDEBUG)\util.obj": src/util.cxx $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" src/util.cxx "$(INTDIR_DLLRELEASE)\binarystring.obj": src/binarystring.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/binarystring.cxx "$(INTDIR_DLLDEBUG)\binarystring.obj": src/binarystring.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/binarystring.cxx "$(INTDIR_DLLRELEASE)\connection.obj": src/connection.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/connection.cxx "$(INTDIR_DLLDEBUG)\connection.obj": src/connection.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/connection.cxx "$(INTDIR_DLLRELEASE)\connection_base.obj": src/connection_base.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/connection_base.cxx "$(INTDIR_DLLDEBUG)\connection_base.obj": src/connection_base.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/connection_base.cxx "$(INTDIR_DLLRELEASE)\cursor.obj": src/cursor.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/cursor.cxx "$(INTDIR_DLLDEBUG)\cursor.obj": src/cursor.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/cursor.cxx "$(INTDIR_DLLRELEASE)\dbtransaction.obj": src/dbtransaction.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/dbtransaction.cxx "$(INTDIR_DLLDEBUG)\dbtransaction.obj": src/dbtransaction.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/dbtransaction.cxx "$(INTDIR_DLLRELEASE)\except.obj": src/except.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/except.cxx "$(INTDIR_DLLDEBUG)\except.obj": src/except.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/except.cxx "$(INTDIR_DLLRELEASE)\largeobject.obj": src/largeobject.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/largeobject.cxx "$(INTDIR_DLLDEBUG)\largeobject.obj": src/largeobject.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/largeobject.cxx "$(INTDIR_DLLRELEASE)\nontransaction.obj": src/nontransaction.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/nontransaction.cxx "$(INTDIR_DLLDEBUG)\nontransaction.obj": src/nontransaction.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/nontransaction.cxx "$(INTDIR_DLLRELEASE)\notify-listen.obj": src/notify-listen.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/notify-listen.cxx "$(INTDIR_DLLDEBUG)\notify-listen.obj": src/notify-listen.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/notify-listen.cxx "$(INTDIR_DLLRELEASE)\pipeline.obj": src/pipeline.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/pipeline.cxx "$(INTDIR_DLLDEBUG)\pipeline.obj": src/pipeline.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/pipeline.cxx "$(INTDIR_DLLRELEASE)\prepared_statement.obj": src/prepared_statement.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/prepared_statement.cxx "$(INTDIR_DLLDEBUG)\prepared_statement.obj": src/prepared_statement.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/prepared_statement.cxx "$(INTDIR_DLLRELEASE)\result.obj": src/result.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/result.cxx "$(INTDIR_DLLDEBUG)\result.obj": src/result.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/result.cxx "$(INTDIR_DLLRELEASE)\robusttransaction.obj": src/robusttransaction.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/robusttransaction.cxx "$(INTDIR_DLLDEBUG)\robusttransaction.obj": src/robusttransaction.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/robusttransaction.cxx "$(INTDIR_DLLRELEASE)\statement_parameters.obj": src/statement_parameters.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/statement_parameters.cxx "$(INTDIR_DLLDEBUG)\statement_parameters.obj": src/statement_parameters.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/statement_parameters.cxx "$(INTDIR_DLLRELEASE)\strconv.obj": src/strconv.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/strconv.cxx "$(INTDIR_DLLDEBUG)\strconv.obj": src/strconv.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/strconv.cxx "$(INTDIR_DLLRELEASE)\subtransaction.obj": src/subtransaction.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/subtransaction.cxx "$(INTDIR_DLLDEBUG)\subtransaction.obj": src/subtransaction.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/subtransaction.cxx "$(INTDIR_DLLRELEASE)\tablereader.obj": src/tablereader.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/tablereader.cxx "$(INTDIR_DLLDEBUG)\tablereader.obj": src/tablereader.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/tablereader.cxx "$(INTDIR_DLLRELEASE)\tablestream.obj": src/tablestream.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/tablestream.cxx "$(INTDIR_DLLDEBUG)\tablestream.obj": src/tablestream.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/tablestream.cxx "$(INTDIR_DLLRELEASE)\tablewriter.obj": src/tablewriter.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/tablewriter.cxx "$(INTDIR_DLLDEBUG)\tablewriter.obj": src/tablewriter.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/tablewriter.cxx "$(INTDIR_DLLRELEASE)\transaction.obj": src/transaction.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/transaction.cxx "$(INTDIR_DLLDEBUG)\transaction.obj": src/transaction.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/transaction.cxx "$(INTDIR_DLLRELEASE)\transaction_base.obj": src/transaction_base.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/transaction_base.cxx "$(INTDIR_DLLDEBUG)\transaction_base.obj": src/transaction_base.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/transaction_base.cxx "$(INTDIR_DLLRELEASE)\util.obj": src/util.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" src/util.cxx "$(INTDIR_DLLDEBUG)\util.obj": src/util.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" src/util.cxx "$(INTDIR_DLLRELEASE)\libpqxx.obj": win32/libpqxx.cxx $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" win32/libpqxx.cxx "$(INTDIR_DLLDEBUG)\libpqxx.obj": win32/libpqxx.cxx $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" win32/libpqxx.cxx libpqxx-3.1.1/win32/INSTALL.txt0000664000175000017500000004364612075723506012763 00000000000000Welcome to libpqxx, a C++ API to the PostgreSQL database management system. This file documents building and installation of libpqxx on Windows systems. Please see the regular README for general instructions on building, installing, and using the library. If you are using Cygwin, MSYS, or another Unix-like environment please try the Unix configuration & build procedure instead of the one described here. Some help for the MSYS/MinGW combination is given below, but in general, things are much more complicated for Windows than they are for other environments. The only Windows compilers currently documented here are: Visual C++ (7.0 or above) MinGW If you are using a different compiler, such as Borland C++ Builder, you should still be able to get it to work. If you do, or if you fail, please report your results so any problems can be resolved, and so that we can add support for your compiler in the standard libpqxx distribution. Throughout this document, we'll be using the command line. Build Environment Before you start, make sure your development environment is reasonably up to date. If you use MSYS, be sure your "grep" program is up to date and that you have the "mktemp" program installed (these can be downloaded from http://gnuwin32.sf.net/). If you use Visual C++, make sure you have at least version 7.0 or you'll run into serious compilation trouble. Next, make sure you have a working installation of libpq, the C-level client library included with PostgreSQL. Note that for some reason, enabling the "Include and Library Files" in the graphical PostgreSQL installer may not be enough to ensure this. The best way to ensure that you have libpq available, on a Windows system, is to compile a recent version of PostgreSQL from source. Its source tree should then contain libpq in binary form, as well as its headers. Look for these in src/interfaces/libpq: Visual C++ will generate separate Debug and Release versions in subdirectories called Debug and Release, respectively, in that location. Note these locations; they will become important in the next section. The source package for PostgreSQL can be obtained from http://postgresql.org/ To build PostgreSQL with Visual C++, "cd" into the source tree and run: VCVARS32.BAT nmake /f win32.mak You'll also want to build a Debug-flavour libpq, so then run: nmake /f win32.mak DEBUG=1 The libpq binaries will be produced in src/interfaces/libpq/Release and src/interface/libpq/Debug, respectively, and the Debug versions will have an extra "D" in their names. (Instructions for building PostgreSQL with MinGW are given in the MSYS section below). The rest of this text will assume that you have the libpq library in its binary form(s), as well as its header files. Now, to work on building libpqxx! Preparing to Compile libpqxx Before you can build libpqxx you need to provide certain common settings. i) Copy win32/common-sample to win32/common, and edit the latter to reflect the paths to your PostgreSQL includes and library files. On Windows these may differ from one person's system to another, but if you compiled PostgreSQL for yourself to obtain libpq, simply set the PGSQLSRC in win32/common to point to the "src" subdirectory in your PostgreSQL source tree. You may also have to edit the LIBPATH1 and LIBPATH2 variables to point to where your actual libpq library is. There are two of these because Visual C++ will normally produce two flavours ("release" and "debug") of the library, and the build procedure may need to find either, depending on which flavour of libpqxx build you'll be doing. ii) If you cannot run the configure script: Create the configuration headers, include/pqxx/config-*-*.h. The easiest start for this is to copy from available samples. In config/sample-headers, find the directories most accurately describing your compiler and libpq version, respectively. Take the config-*-*.h headers from those directories and copy them into the include/pqxx/ directory. On a Unix-like system these headers would be generated automatically by the configure script; in the Windows case they may need some editing. How these files work is described in more detail below. iii) If you are building from a development source tree rather than from a release distribution, you may not have the makefiles for your compiler. These makefiles should be in the win32 directory and have names ending in ".mak". If you have python, you can generate them using the template2mak.py script in the tools directory: ./tools/template2mak.py win32/mingw.mak.template win32/mingw.mak ./tools/template2mak.py win32/vc-libpqxx.mak.template win32/vc-libpqxx.mak ./tools/template2mak.py win32/vc-test.mak.template win32/vc-test.mak The rest of the procedure depends on your compiler. If you're using Visual C++: 1) Run VCVARS32.BAT to prepare the environment. Then CD into the main directory of the libpqxx source tree. Among other things it will contain the files "configure" and "Makefile.am," and subdirectories "src," "include," "win32" etc. 2) Run "nmake /f win32/vc-libpqxx.mak ALL" will compile all dynamic, static, debug and release libraries. Once completed, you will find them in the win32/lib directory. If you're using MinGW (but without a Unix-like environment, see above): 1) Run "make -f win32/MinGW.mak" 2) Consider installing a Unix-like environment like MSYS to automate all this! After that, it is recommended that you compile and run the self-test programs included in the package. Unix, Cygwin, or MSYS users simply type "make check" to build and run the entire regression test. For Visual C++ users, the following steps should accomplish the same: 3) "nmake /f win32\vc-test.mak ALL" will compile and link all the test files. It is currently set to use the DLL version of libpqxx. 4) Make sure a PostgreSQL database is running and accessible; set up the environment as described in README so that the test programs can access the database without needing to pass a connection string. 5) Run each of the test programs in order. Some of them will generate lots of output, some won't produce any. Error messages that are expected in the course of a normal test run are prefixed with "(Expected)" to show that they are not harmful. All tests should complete successfully. Here's how to set up a Visual C++ project file for your own program using libpqxx (based on description by Alexandre Hanft, 2006-03-06): 6) Create a new project in the Visual C++ development environment. 7) Add your first C++ file and provide some initial code, e.g. by copying the test/test001.cxx source file from the libpqxx source tree. 8) Edit Project Properties, C++: Additional Include Directories. Add the location of the "include" directory found in your libpqxx source tree, e.g. C:\src\libpqxx\include if you keep libpqxx in C:\src\libpqxx. 9) Edit Project Properties, Linker: Additional Library Directories. Add the directories where your libpq and libpqxx libraries are, for example: C:\src\postgresql-8.1.3\interfaces\libpq\Release;C:\src\libpqxx\win32\lib That is for your Release build. Do the same for your Debug build, but replace that "Release" in there with "Debug" there. 10) Edit Project Properties, Linker, Input: Additional Dependencies. Add: libpqxx.lib. 11) Your program should build successfully now. It may not be ready to run yet, because some dynamically loaded libraries are needed when starting your program. Copy comerr32.dll and krb5_32.dll from the "bin" directory in your PostgreSQL directory tree, and the libpqxx DLLs from win32/lib in your libpqxx tree, directly into your project's directory so the system can find them when your development environment launches your program. 12) Your program should now be able to run. However, you may need to tell it how to connect to a database. If you set the environment variables PGDATABASE, PGHOST, PGPORT, and PGUSER as described in the libpqxx README file, your program should be able to connect without passing further parameters. Sensible defaults are provided for all of these variables; if you have a database running on your local machine, with the same name as your username, and you are allowed to log into that without password (this is the default on some systems), then no settings should be needed. 13) Once your program gets to the point where users should be able to configure it properly, change them to pass a connection string where it connects to any databases, and include your user's configuration settings. A typical connection string setting all parameters named above might look like: "dbname=testbase user=testuser host=my.dbserver.somewhere.com" 14) For any other problems, please check the project homepage as listed in the main libpqxx README file. Getting Started with MinGW and MSYS (based on contribution by Michael J. Pedersen, 2004-08-17) MSYS is a Unix-like environment for Windows. Once you have this installed, building libpqxx should be a lot more like it is under Unix except that the locations of libraries and such aren't sufficiently standardized. Packages to download if you don't have them already: 1) MinGW (http://www.mingw.org/), plus any updates. 2) MSYS (http://www.mingw.org/), again with any updates. 3) w32api (http://www.mingw.org/). 4) PostgreSQL (http://www.postgresql.org/). 5) zlib (http://www.zlib.org/). It is generally recommended to get the latest versions of these packages. Compiling and installing PostgreSQL before you get to libpqxx: 1) Install MinGW (install to c:\mingw) 2) Install MSYS--but not into MinGW directory tree! 3) Run MSYS (Start->Programs->MinGW->MSYS->msys) 4) Extract, compile, and install zlib # From main source directory of zlib: ./configure --prefix=c:/mingw/local && make && make install 5) Extract, compile, and install postgres # From main source directory of PostgreSQL: ./configure --prefix=c:/mingw/local --with-includes=c:/mingw/local/include --with-libs=c:/mingw/local/lib make && make install 6) Extract, compile, and install libpqxx export LDFLAGS=-lws2_32 ./configure --prefix=c:/mingw/local --enable-static make && make install If you don't have and don't want to install MSYS, you won't be able to perform the "./configure" step. You can build libpqxx without it, but it takes a bit more work and doesn't build the self-test. Use the special makefile MinGW.mak in the win32 directory instead of the regular Makefile, and follow the procedure described below to use the prefabricated configuration headers enclosed in the source archive. Building libpqxx without MSYS: # (first set up configuration headers, see below) export LDFLAGS=-lws2_32 make -f win32/MinGW.mak # (install library, headers and pqxx-config manually on your system) Having installed libpqxx, when compiling your own programs, use the following steps (examples only here): g++ -c -o myfile.o myfile.cpp `pqxx-config --cflags` g++ -o myexec myfile.o `pqxx-config --libs` -lws2_32 Note that the linker step (g++ -o myexec) will give a spurious warning about not knowing how to use the -R flag, but the executable will still be generated, and work just fine. The last argument to that linker step MUST be -lws2_32. Without it, the link will provide errors about undefined references to select(). If it's not the last argument, you will get the same results. Make sure it's there, and make sure it's last. Trust me, you'll be happier. Setting up the configuration headers Several headers, normally generated by the configure script, define certain aspects of your compilation environment so that the library can work around compiler shortcomings, functions missing in older libpq versions, etc. (Samples for various compiler and libpq versions can be found in the subdirectory config/sample-headers, so if you find you need to provide these headers yourself, look there first.) Each of the aspects mentioned below is represented by a configuration item--a preprocessor macro that is either #define'd to some value or not defined at all. Most of the items are of a Boolean nature, i.e. some feature or workaround is enabled if the corresponding macro is defined or disabled if the macro is left undefined. Note that defining these macros to anything at all, even 0, means that the corresponding option is enabled. They are normally defined to 1, but that value seems to have been chosen more for convention than anything else. A few of the items require a textual value however, e.g. PGSTD needs to be defined to the name of the standard namespace. You'll typically want to have this defined to "std" (leave out the quotes though!), but you may want to change that if you use a standard library other than the default one shipped with your compiler. At the time of writing, there are 3 of these configuration headers that you need to concern yourself about, all of which should be created in the include/pqxx subdirectory: config-internal-compiler.h config-internal-libpq.h config-public-compiler.h The names contain two variables: 1. Internal or public. Configuration items that affect the compilation of your client program are located in the config-public-*.h files (currently only one file); ones that affect only the compilation of the library itself are kept in the config-internal-*.h ones and are not included at all when compiling client programs. Public configuration items (except PGSTD) are prefixed with PQXX_ to avoid clashes with macros defined by other code. 2. Autotools-related, compiler-related, or libpq-related. The autotools items are of no real interest, but the compiler and libpq ones are different. The compiler-related ones describe features and shortcomings of the compiler environment, such as the availability of the header or the ability to compile certain complex C++ language constructs. The libpq items describe what features are available in the version of libpq you're compiling against. At the time of writing, the latter all take the HAVE_... form; defining such a macro indicates that the corresponding feature is available. A complete list of configuration items and their categorizations can be found in the configitems file. The normal configure script reads the list of items from include/pqxx/config.h.in and writes them to include/pqxx/config.h, then splits them up into the five smaller files as directed by the configitems database. Again, sample versions of these headers for various compilers and libpq versions can be found in the config/sample-headers/ directory. Try copying the three headers for the compiler and libpq version most resembling your own environment to include/pqxx/ and, if you have any problems compiling with those, editing them by hand to enable or disable features that appear to be giving you trouble. Shared and Static Libraries, or .DLL vs. .LIB There are two ways to build the libpqxx library: as a shared library (known in the Unix world as a Shared Object or "so," but in the Windows world as a Dynamically Loaded Library or DLL) or as a static library (whose name would end in ".a" on Unix systems but in ".LIB" on Windows systems). Linking your own applications to these types of libraries is quite similar, except with a DLL the system will also have to be able to find the library when your program is loaded--not just when you are compiling it. Unlike the situation in the Unix world, however, your choice on this point must be known as you compile your application code. With libpqxx you do this by defining the preprocessor macro PQXX_SHARED when compiling your code for use with a libpqxx DLL. Leave this definition out if you intend to link to the static version of the library. (Internally, when compiling libpqxx, this variable will also be set according to which kind of library is being built. It has a slightly different meaning in that case, but this should really only matter to you if you are helping debug the library) Similarly, you may choose to link to either the static or the shared version of libpq. The default is to use the dynamic library, which makes more sense there because libpq's API and ABI are much simpler and more stable. To build a libpqxx for use with a static libpq, however, define the preprocessor symbol PQXX_PQ_STATIC both when compiling libpqxx and while building your own application. Troubleshooting: config headers The biggest typical problem for Windows/VC++ users is the need to edit the configuration headers manually, resulting usually in compile errors, e.g. for missing header files. Thus, if you get a compile error, the first places to look are the config-*-*.h and config-*-*.h files in include/pqxx. If, for instance, the error states that the header file is missing, you will find a configuration variable called PQXX_HAVE_SYS_SELECT_H, which should not be set if your system doesn't have sys/select.h. Remove the line defining this variable from the configuration header where it is defined (see the configitems file for a list of locations) and the error should disappear on the next compilation attempt. If you have to edit your configuration headers, please send your results to the author or to the libpqxx-general mailing list so that headers corresponding to your environment can be included in later libpqxx releases. Be sure to give a usable personal name so you can be properly credited in the changelog! CAUTION: DO NOT try to unset yes/no configuration items by defining their macros to zero. A value of zero counts as "yes." If a macro is defined at all, that means "yes" (or "true," or "enabled" etc.) regardless of what actual value you set. To disable an item, make sure it is not defined at all. Troubleshooting: linking When you link your application to libpqxx on Windows, you may also need to link to wsock32.lib. On Visual C++, add these in the compiler user interface under: Project Properties::Linker::Input::Additional Dependencies We recommend that you specify libpqxx_static.lib and wsock32.lib there, in that order. libpqxx-3.1.1/win32/Makefile.am0000664000175000017500000000026412075723506013135 00000000000000EXTRA_DIST = \ common-sample \ INSTALL.txt \ libpqxx.cxx \ mingw.mak.template \ MinGW.mak \ vc-libpqxx.mak.template \ vc-libpqxx.mak \ vc-test.mak.template \ vc-test.mak libpqxx-3.1.1/win32/Makefile.in0000664000175000017500000002550612076703451013152 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = win32 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/libtool.m4 \ $(top_srcdir)/config/m4/ltoptions.m4 \ $(top_srcdir)/config/m4/ltsugar.m4 \ $(top_srcdir)/config/m4/ltversion.m4 \ $(top_srcdir)/config/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/pqxx/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR = @MKDIR@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PG_CONFIG = @PG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ POSTGRES_INCLUDE = @POSTGRES_INCLUDE@ POSTGRES_LIB = @POSTGRES_LIB@ PQXXVERSION = @PQXXVERSION@ PQXX_ABI = @PQXX_ABI@ PQXX_MAJOR = @PQXX_MAJOR@ PQXX_MINOR = @PQXX_MINOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMLTO = @XMLTO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ with_postgres_include = @with_postgres_include@ with_postgres_lib = @with_postgres_lib@ EXTRA_DIST = \ common-sample \ INSTALL.txt \ libpqxx.cxx \ mingw.mak.template \ MinGW.mak \ vc-libpqxx.mak.template \ vc-libpqxx.mak \ vc-test.mak.template \ vc-test.mak all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu win32/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu win32/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libpqxx-3.1.1/win32/vc-libpqxx.mak.template0000664000175000017500000001600112075723506015476 00000000000000# Visual C++ makefile for libpqxx # This file was created by Bart Samwel. default: @echo LIBPQXX Makefile for Visual C++ Available Targets @echo ------------------------------------------------- @echo. @echo Static library targets: @echo. @echo STATIC @echo STATICRELEASE (release mode only) @echo STATICDEBUG (debug mode only) @echo. @echo Dynamic Link Library (DLL) targets: @echo. @echo DLL @echo DLLRELEASE @echo DLLDEBUG @echo. @echo Other targets: @echo. @echo ALL: build both the DLL and STATIC builds. @echo CLEAN: clean up all output. @echo. @echo It is recommended that you link to libpqxx statically. Therefore, you should @echo normally build the "STATIC" target. If you want to link your programto libpqxx @echo dynamically, build target "DLL" and compile your program with preprocessor @echo define "PQXX_SHARED". This will make your program link against the DLL version @echo of libpqxx. !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF !include win32/common ######################################################## # Configuration ######################################################## # Output DLL/LIB files. No extensions, they are added automatically! OUTDIR=lib OUTFILE_STATICDEBUG=$(OUTDIR)\libpqxx_staticD OUTFILE_STATICRELEASE=$(OUTDIR)\libpqxx_static OUTFILE_DLLDEBUG=$(OUTDIR)\libpqxxD OUTFILE_DLLRELEASE=$(OUTDIR)\libpqxx # Directories for intermediate output. INTDIR_STATICDEBUG=ObjStaticDebug INTDIR_STATICRELEASE=ObjStaticRelease INTDIR_DLLDEBUG=ObjDllDebug INTDIR_DLLRELEASE=ObjDllRelease # C++ compiler, linker (for DLLs) and library tool (for static builds). CXX=cl.exe LINK=link.exe LIBTOOL=link.exe -lib # The options common to all the different builds. CXX_FLAGS_BASE=/nologo /W3 /EHsc /FD /GR /c \ /I "include" /I $(PGSQLSRC)\include /I $(PGSQLSRC)\interfaces\libpq \ /D PGSTD=$(STD) /D "WIN32" /D "_MBCS" /D "_WINDOWS" /D "PQXX_INTERNAL" \ /D "PQXX_AUTOLINK" CXX_FLAGS_DLLRELEASE=$(CXX_FLAGS_BASE) /MD /D "NDEBUG" /D "PQXX_SHARED" CXX_FLAGS_DLLDEBUG=$(CXX_FLAGS_BASE) /MDd /Gm /ZI /Od /D "_DEBUG" /D "PQXX_SHARED" /RTC1 CXX_FLAGS_STATICRELEASE=$(CXX_FLAGS_BASE) /MD /D "_LIB" /D "NDEBUG" CXX_FLAGS_STATICDEBUG=$(CXX_FLAGS_BASE) /MDd /Gm /ZI /Od /D "_LIB" /D "_DEBUG" /RTC1 LINK_FLAGS_BASE=kernel32.lib wsock32.lib advapi32.lib /nologo /dll /machine:I386 /libpath:$(LIBPATH1) /libpath:$(LIBPATH2) LINK_FLAGS_DLLRELEASE=$(LINK_FLAGS_BASE) LINK_FLAGS_DLLDEBUG=$(LINK_FLAGS_BASE) /debug LIB_FLAGS=/nologo ######################################################## # List of intermediate files ######################################################## OBJ_STATICDEBUG=\ ###MAKTEMPLATE:FOREACH src/*.cxx "$(INTDIR_STATICDEBUG)\###BASENAME###.obj" \ ###MAKTEMPLATE:ENDFOREACH OBJ_STATICRELEASE=\ ###MAKTEMPLATE:FOREACH src/*.cxx "$(INTDIR_STATICRELEASE)\###BASENAME###.obj" \ ###MAKTEMPLATE:ENDFOREACH OBJ_DLLDEBUG=\ ###MAKTEMPLATE:FOREACH src/*.cxx,win32/libpqxx.cxx "$(INTDIR_DLLDEBUG)\###BASENAME###.obj" \ ###MAKTEMPLATE:ENDFOREACH OBJ_DLLRELEASE=\ ###MAKTEMPLATE:FOREACH src/*.cxx,win32/libpqxx.cxx "$(INTDIR_DLLRELEASE)\###BASENAME###.obj" \ ###MAKTEMPLATE:ENDFOREACH ######################################################## # Logical targets ######################################################## static: staticdebug staticrelease dll: dlldebug dllrelease all: static dll $(OUTDIR): -@mkdir $(OUTDIR) staticdebug: $(OUTFILE_STATICDEBUG).lib $(OUTDIR) $(OUTDIR)\libpqd.dll staticrelease: $(OUTFILE_STATICRELEASE).lib $(OUTDIR) $(OUTDIR)\libpq.dll dlldebug: $(OUTFILE_DLLDEBUG).dll $(OUTDIR) $(OUTDIR)\libpqd.dll dllrelease: $(OUTFILE_DLLRELEASE).dll $(OUTDIR) $(OUTDIR)\libpq.dll clean: @echo Deleting all intermediate output files and the contents of $(OUTDIR). -@del /Q "$(INTDIR_STATICDEBUG)\*" -@del /Q "$(INTDIR_STATICRELEASE)\*" -@del /Q "$(INTDIR_DLLDEBUG)\*" -@del /Q "$(INTDIR_DLLRELEASE)\*" -@del /Q "$(OUTDIR)\*" ######################################################## # Physical targets ######################################################## $(OUTDIR)\libpq.dll: $(OUTDIR) @echo ------------------------------------------------------------- @echo Copying libpq.dll to $(OUTDIR). @echo. @echo IMPORTANT: you MUST copy this libpq.dll into the directory @echo where your program's .EXE resides. The system libpq.dll is @echo not necessarily compatible with the libpq include files that @echo you built libpqxx with. Do NOT copy this file into your @echo Windows system32 directory, that may break other programs. @echo Instead, keep it with your program and distribute it along @echo with the program. @echo ------------------------------------------------------------- copy $(PGSQLSRC)\interfaces\libpq\release\libpq.dll $(OUTDIR) $(OUTDIR)\libpqd.dll: $(OUTDIR) @echo ------------------------------------------------------------- @echo Copying libpqD.dll to $(OUTDIR). @echo. @echo IMPORTANT: you MUST copy this libpqd.dll into the directory @echo where your program's .EXE resides, or you must make sure that @echo it is in your system PATH. @echo ------------------------------------------------------------- copy $(PGSQLSRC)\interfaces\libpq\debug\libpqd.dll $(OUTDIR) $(OUTFILE_STATICDEBUG).lib: $(OUTDIR) $(OBJ_STATICDEBUG) $(LIBTOOL) $(LIB_FLAGS) $(OBJ_STATICDEBUG) /out:"$(OUTFILE_STATICDEBUG).lib" $(OUTFILE_STATICRELEASE).lib: $(OUTDIR) $(OBJ_STATICRELEASE) $(LIBTOOL) $(LIB_FLAGS) $(OBJ_STATICRELEASE) /out:"$(OUTFILE_STATICRELEASE).lib" $(OUTFILE_DLLDEBUG).dll: $(OUTDIR) $(OBJ_DLLDEBUG) $(LINK) $(LINK_FLAGS_DLLDEBUG) $(OBJ_DLLDEBUG) /out:"$(OUTFILE_DLLDEBUG).dll" /implib:"$(OUTFILE_DLLDEBUG).lib" $(OUTFILE_DLLRELEASE).dll: $(OUTDIR) $(OBJ_DLLRELEASE) $(LINK) $(LINK_FLAGS_DLLRELEASE) $(OBJ_DLLRELEASE) /out:"$(OUTFILE_DLLRELEASE).dll" /implib:"$(OUTFILE_DLLRELEASE).lib" $(INTDIR_STATICDEBUG): -@mkdir $(INTDIR_STATICDEBUG) $(INTDIR_STATICRELEASE): -@mkdir $(INTDIR_STATICRELEASE) $(INTDIR_DLLDEBUG): -@mkdir $(INTDIR_DLLDEBUG) $(INTDIR_DLLRELEASE): -@mkdir $(INTDIR_DLLRELEASE) ######################################################## # Physical intermediate files ######################################################## ###MAKTEMPLATE:FOREACH src/*.cxx "$(INTDIR_STATICRELEASE)\###BASENAME###.obj": ###FILENAME### $(INTDIR_STATICRELEASE) $(CXX) $(CXX_FLAGS_STATICRELEASE) /Fo"$(INTDIR_STATICRELEASE)\\" /Fd"$(INTDIR_STATICRELEASE)\\" ###FILENAME### "$(INTDIR_STATICDEBUG)\###BASENAME###.obj": ###FILENAME### $(INTDIR_STATICDEBUG) $(CXX) $(CXX_FLAGS_STATICDEBUG) /Fo"$(INTDIR_STATICDEBUG)\\" /Fd"$(INTDIR_STATICDEBUG)\\" ###FILENAME### ###MAKTEMPLATE:ENDFOREACH ###MAKTEMPLATE:FOREACH src/*.cxx,win32/libpqxx.cxx "$(INTDIR_DLLRELEASE)\###BASENAME###.obj": ###FILENAME### $(INTDIR_DLLRELEASE) $(CXX) $(CXX_FLAGS_DLLRELEASE) /Fo"$(INTDIR_DLLRELEASE)\\" /Fd"$(INTDIR_DLLRELEASE)\\" ###FILENAME### "$(INTDIR_DLLDEBUG)\###BASENAME###.obj": ###FILENAME### $(INTDIR_DLLDEBUG) $(CXX) $(CXX_FLAGS_DLLDEBUG) /Fo"$(INTDIR_DLLDEBUG)\\" /Fd"$(INTDIR_DLLDEBUG)\\" ###FILENAME### ###MAKTEMPLATE:ENDFOREACH libpqxx-3.1.1/win32/libpqxx.cxx0000664000175000017500000000035412075723506013314 00000000000000// libpqxx.cxx : Defines the entry point for the DLL application. #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include BOOL APIENTRY DllMain(HANDLE, DWORD, LPVOID) { return TRUE; } libpqxx-3.1.1/win32/vc-test.mak0000664000175000017500000003213412076703440013155 00000000000000################################################################################ # AUTOMATICALLY GENERATED FILE--DO NOT EDIT # # This file is generated automatically by libpqxx's template2mak.py script. # # If you modify this file, chances are your modifications will be lost because # the file will be re-written from time to time. # # The template2mak.py script should be available in the tools directory of the # libpqxx source archive. # # Generated from template '/home/jtv/proj/libpqxx/tags/3.1.1/win32/vc-test.mak.template'. ################################################################################ # Visual C++ Makefile for libpqxx test suite # This file was written by Bart Samwel. default: @echo LIBPQXX testsuite Makefile for Visual C++ Available Targets @echo ----------------------------------------------------------- @echo. @echo ALL: perform all tests @echo TESTxxx: perform specific test xxx @echo CLEAN: clean up all output so that tests will run again. @echo. @echo Pass the option DLL=1 to link the test suite against the libpqxx DLL instead @echo of against the static libpqxx library, and pass DEBUG=1 to link against @echo the debug build of libpqxx. !include win32\common LIBDIR=lib # C++ compiler, linker CXX=cl.exe LINK=link.exe CXX_FLAGS_BASE=/nologo /W3 /GX /FD /GR /YX /c \ /I "include" /I "$(PGSQLSRC)/include" /I "$(PGSQLSRC)/interfaces/libpq" \ /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" $(PQXX_SHARED) LINK_FLAGS_BASE=kernel32.lib wsock32.lib advapi32.lib /nologo /machine:I386 /libpath:"$(LIBDIR)" !IF "$(DLL)" == "1" PQXX_SHARED=/D "PQXX_SHARED" PQXXLIBTYPE=Dll PQXXLIBTYPESUFFIX= PQXXLIBEXT=dll !ELSE PQXXLIBTYPE=Static PQXXLIBEXT=lib PQXXLIBTYPESUFFIX=_static !ENDIF !IF "$(DEBUG)" == "1" BUILDMODE=Debug DEBUGSUFFIX=D CXX_FLAGS=$(CXX_FLAGS_BASE) /MDd /Gm /ZI /Od /D "_DEBUG" /GZ LINK_FLAGS=$(LINK_FLAGS_BASE) /debug /libpath:$(LIBPATH2) !ELSE BUILDMODE=Release DEBUGSUFFIX= CXX_FLAGS=$(CXX_FLAGS_BASE) /MD /D "NDEBUG" LINK_FLAGS=$(LINK_FLAGS_BASE) /libpath:$(LIBPATH1) !ENDIF INTDIR=Test$(PQXXLIBTYPE)$(BUILDMODE) PQXXSUBPATH=libpqxx$(PQXXLIBTYPESUFFIX)$(DEBUGSUFFIX).$(PQXXLIBEXT) PQXX=$(LIBDIR)\$(PQXXSUBPATH) PQXXCOPY=$(INTDIR)\$(PQXXSUBPATH) LIBPQ=libpq$(DEBUGSUFFIX).dll OBJS= \ $(INTDIR)\test000.obj \ $(INTDIR)\test001.obj \ $(INTDIR)\test002.obj \ $(INTDIR)\test004.obj \ $(INTDIR)\test005.obj \ $(INTDIR)\test006.obj \ $(INTDIR)\test007.obj \ $(INTDIR)\test008.obj \ $(INTDIR)\test009.obj \ $(INTDIR)\test010.obj \ $(INTDIR)\test011.obj \ $(INTDIR)\test012.obj \ $(INTDIR)\test013.obj \ $(INTDIR)\test014.obj \ $(INTDIR)\test015.obj \ $(INTDIR)\test016.obj \ $(INTDIR)\test017.obj \ $(INTDIR)\test018.obj \ $(INTDIR)\test020.obj \ $(INTDIR)\test021.obj \ $(INTDIR)\test023.obj \ $(INTDIR)\test024.obj \ $(INTDIR)\test025.obj \ $(INTDIR)\test026.obj \ $(INTDIR)\test027.obj \ $(INTDIR)\test028.obj \ $(INTDIR)\test029.obj \ $(INTDIR)\test030.obj \ $(INTDIR)\test031.obj \ $(INTDIR)\test032.obj \ $(INTDIR)\test033.obj \ $(INTDIR)\test034.obj \ $(INTDIR)\test035.obj \ $(INTDIR)\test036.obj \ $(INTDIR)\test037.obj \ $(INTDIR)\test039.obj \ $(INTDIR)\test046.obj \ $(INTDIR)\test048.obj \ $(INTDIR)\test049.obj \ $(INTDIR)\test050.obj \ $(INTDIR)\test051.obj \ $(INTDIR)\test052.obj \ $(INTDIR)\test053.obj \ $(INTDIR)\test054.obj \ $(INTDIR)\test055.obj \ $(INTDIR)\test056.obj \ $(INTDIR)\test057.obj \ $(INTDIR)\test058.obj \ $(INTDIR)\test059.obj \ $(INTDIR)\test060.obj \ $(INTDIR)\test061.obj \ $(INTDIR)\test062.obj \ $(INTDIR)\test063.obj \ $(INTDIR)\test064.obj \ $(INTDIR)\test065.obj \ $(INTDIR)\test066.obj \ $(INTDIR)\test067.obj \ $(INTDIR)\test068.obj \ $(INTDIR)\test069.obj \ $(INTDIR)\test070.obj \ $(INTDIR)\test071.obj \ $(INTDIR)\test072.obj \ $(INTDIR)\test073.obj \ $(INTDIR)\test074.obj \ $(INTDIR)\test075.obj \ $(INTDIR)\test076.obj \ $(INTDIR)\test077.obj \ $(INTDIR)\test078.obj \ $(INTDIR)\test079.obj \ $(INTDIR)\test080.obj \ $(INTDIR)\test082.obj \ $(INTDIR)\test083.obj \ $(INTDIR)\test084.obj \ $(INTDIR)\test086.obj \ $(INTDIR)\test087.obj \ $(INTDIR)\test088.obj \ $(INTDIR)\test089.obj \ $(INTDIR)\test090.obj \ $(INTDIR)\test092.obj \ $(INTDIR)\test093.obj \ $(INTDIR)\test094.obj \ $(INTDIR)\runner.obj ######################################################## # Logical targets ######################################################## all: runner runner: $(INTDIR) $(INTDIR)\runner.exe clean: -@del /Q vc70.pch -@del /Q $(OBJS) $(INTDIR)\*.exe $(INTDIR): @mkdir $(INTDIR) ######################################################## # Test implementations ######################################################## $(INTDIR)\runner.success: $(INTDIR)\runner.exe \ $(INTDIR)\$(LIBPQXX) $(PQXX) @copy $(PQXX) $(PQXXCOPY) @$(INTDIR)\runner.exe @echo >$(INTDIR)\runner.success $(INTDIR)\runner.exe: $(OBJS) $(PQXX) @$(LINK) $(LINK_FLAGS) "$(INTDIR)\\runner.obj" $(OBJS) \ /out:"$(INTDIR)\\runner.exe" $(INTDIR)\runner.obj: @$(CXX) $(CXX_FLAGS) test/runner.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test000.obj: @$(CXX) $(CXX_FLAGS) test/test000.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test001.obj: @$(CXX) $(CXX_FLAGS) test/test001.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test002.obj: @$(CXX) $(CXX_FLAGS) test/test002.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test004.obj: @$(CXX) $(CXX_FLAGS) test/test004.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test005.obj: @$(CXX) $(CXX_FLAGS) test/test005.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test006.obj: @$(CXX) $(CXX_FLAGS) test/test006.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test007.obj: @$(CXX) $(CXX_FLAGS) test/test007.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test008.obj: @$(CXX) $(CXX_FLAGS) test/test008.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test009.obj: @$(CXX) $(CXX_FLAGS) test/test009.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test010.obj: @$(CXX) $(CXX_FLAGS) test/test010.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test011.obj: @$(CXX) $(CXX_FLAGS) test/test011.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test012.obj: @$(CXX) $(CXX_FLAGS) test/test012.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test013.obj: @$(CXX) $(CXX_FLAGS) test/test013.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test014.obj: @$(CXX) $(CXX_FLAGS) test/test014.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test015.obj: @$(CXX) $(CXX_FLAGS) test/test015.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test016.obj: @$(CXX) $(CXX_FLAGS) test/test016.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test017.obj: @$(CXX) $(CXX_FLAGS) test/test017.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test018.obj: @$(CXX) $(CXX_FLAGS) test/test018.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test020.obj: @$(CXX) $(CXX_FLAGS) test/test020.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test021.obj: @$(CXX) $(CXX_FLAGS) test/test021.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test023.obj: @$(CXX) $(CXX_FLAGS) test/test023.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test024.obj: @$(CXX) $(CXX_FLAGS) test/test024.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test025.obj: @$(CXX) $(CXX_FLAGS) test/test025.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test026.obj: @$(CXX) $(CXX_FLAGS) test/test026.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test027.obj: @$(CXX) $(CXX_FLAGS) test/test027.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test028.obj: @$(CXX) $(CXX_FLAGS) test/test028.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test029.obj: @$(CXX) $(CXX_FLAGS) test/test029.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test030.obj: @$(CXX) $(CXX_FLAGS) test/test030.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test031.obj: @$(CXX) $(CXX_FLAGS) test/test031.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test032.obj: @$(CXX) $(CXX_FLAGS) test/test032.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test033.obj: @$(CXX) $(CXX_FLAGS) test/test033.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test034.obj: @$(CXX) $(CXX_FLAGS) test/test034.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test035.obj: @$(CXX) $(CXX_FLAGS) test/test035.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test036.obj: @$(CXX) $(CXX_FLAGS) test/test036.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test037.obj: @$(CXX) $(CXX_FLAGS) test/test037.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test039.obj: @$(CXX) $(CXX_FLAGS) test/test039.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test046.obj: @$(CXX) $(CXX_FLAGS) test/test046.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test048.obj: @$(CXX) $(CXX_FLAGS) test/test048.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test049.obj: @$(CXX) $(CXX_FLAGS) test/test049.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test050.obj: @$(CXX) $(CXX_FLAGS) test/test050.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test051.obj: @$(CXX) $(CXX_FLAGS) test/test051.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test052.obj: @$(CXX) $(CXX_FLAGS) test/test052.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test053.obj: @$(CXX) $(CXX_FLAGS) test/test053.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test054.obj: @$(CXX) $(CXX_FLAGS) test/test054.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test055.obj: @$(CXX) $(CXX_FLAGS) test/test055.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test056.obj: @$(CXX) $(CXX_FLAGS) test/test056.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test057.obj: @$(CXX) $(CXX_FLAGS) test/test057.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test058.obj: @$(CXX) $(CXX_FLAGS) test/test058.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test059.obj: @$(CXX) $(CXX_FLAGS) test/test059.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test060.obj: @$(CXX) $(CXX_FLAGS) test/test060.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test061.obj: @$(CXX) $(CXX_FLAGS) test/test061.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test062.obj: @$(CXX) $(CXX_FLAGS) test/test062.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test063.obj: @$(CXX) $(CXX_FLAGS) test/test063.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test064.obj: @$(CXX) $(CXX_FLAGS) test/test064.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test065.obj: @$(CXX) $(CXX_FLAGS) test/test065.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test066.obj: @$(CXX) $(CXX_FLAGS) test/test066.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test067.obj: @$(CXX) $(CXX_FLAGS) test/test067.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test068.obj: @$(CXX) $(CXX_FLAGS) test/test068.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test069.obj: @$(CXX) $(CXX_FLAGS) test/test069.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test070.obj: @$(CXX) $(CXX_FLAGS) test/test070.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test071.obj: @$(CXX) $(CXX_FLAGS) test/test071.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test072.obj: @$(CXX) $(CXX_FLAGS) test/test072.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test073.obj: @$(CXX) $(CXX_FLAGS) test/test073.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test074.obj: @$(CXX) $(CXX_FLAGS) test/test074.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test075.obj: @$(CXX) $(CXX_FLAGS) test/test075.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test076.obj: @$(CXX) $(CXX_FLAGS) test/test076.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test077.obj: @$(CXX) $(CXX_FLAGS) test/test077.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test078.obj: @$(CXX) $(CXX_FLAGS) test/test078.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test079.obj: @$(CXX) $(CXX_FLAGS) test/test079.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test080.obj: @$(CXX) $(CXX_FLAGS) test/test080.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test082.obj: @$(CXX) $(CXX_FLAGS) test/test082.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test083.obj: @$(CXX) $(CXX_FLAGS) test/test083.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test084.obj: @$(CXX) $(CXX_FLAGS) test/test084.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test086.obj: @$(CXX) $(CXX_FLAGS) test/test086.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test087.obj: @$(CXX) $(CXX_FLAGS) test/test087.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test088.obj: @$(CXX) $(CXX_FLAGS) test/test088.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test089.obj: @$(CXX) $(CXX_FLAGS) test/test089.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test090.obj: @$(CXX) $(CXX_FLAGS) test/test090.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test092.obj: @$(CXX) $(CXX_FLAGS) test/test092.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test093.obj: @$(CXX) $(CXX_FLAGS) test/test093.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\test094.obj: @$(CXX) $(CXX_FLAGS) test/test094.cxx /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" $(INTDIR)\$(LIBPQ): @copy $(LIBDIR)\$(LIBPQ) $(INTDIR) libpqxx-3.1.1/win32/mingw.mak.template0000664000175000017500000000174512075723506014533 00000000000000# MinGW makefile for libpqxx. Don't use this; use the configure script instead! # Based on original contributed by Pasquale Fersini include "win32/common" CXX = g++.exe OBJ = \ ###MAKTEMPLATE:FOREACH src/*.cxx "src/###BASENAME###.o" \ ###MAKTEMPLATE:ENDFOREACH LDFLAGS = -L$(LIBPATH1) -L$(LIBPATH2) --export-all-symbols --add-stdcall-alias -fpic LIBS = -lpq -lm -lwsock32 CPPFLAGS = -Iinclude -I$(PGSQLSRC)/src/include -I$(PGSQLSRC)/src/interfaces \ -DBUILDING_DLL -DPQXX_SHARED -DPGSTD=$(STD) BIN = libpqxx.dll .PHONY: all clean all: libpqxx.dll clean: rm -f $(OBJ) $(BIN) DLLWRAP=dllwrap.exe DEFFILE=libpqxx.def STATICLIB=libpqxx.a $(BIN): $(OBJ) $(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(OBJ) $(LDFLAGS) $(LIBS) -o $(BIN) ###MAKTEMPLATE:FOREACH src/*.cxx src/###BASENAME###.o: src/###BASENAME###.cxx $(CXX) $(CPPFLAGS) -c src/###BASENAME###.cxx -o src/###BASENAME###.o $(CXXFLAGS) ###MAKTEMPLATE:ENDFOREACH libpqxx-3.1.1/win32/common-sample0000664000175000017500000000461312075723506013575 00000000000000# Common options for Visual C++ makefiles to build libpqxx and its regression # test. # THE ORIGINAL OF THIS FILE IS CALLED common-sample; DON'T EDIT THE ORIGINAL or # you may lose your changes when you upgrade your libpqxx sources. # Instead, copy "common-sample" to "common" and edit just the file "common". # Caution: on Windows, some environments, such as the "make" that comes with # Visual C++, expect you to use backslashes as path separators (for example, # "C:\src\libpqxx") whereas others like MinGW want you to use more conventional # slashes (as in "C:/src/libpqxx"). # Standard library namespace. # There are only two reasons why you might want to change this: # # 1. Your compiler doesn't define the standard library in the "std" namespace # but in the global namespace, in which case PGSTD should be the empty string. # However, a compiler with that problem is not likely to be good enough to # compile libpqxx. # # 2. You are using a third-party standard library implementation such as # STLport, which lives in another namespace to avoid clashes with the # implementation that came with the compiler. # # In the latter case, PGSTD must be set to the namespace used by your preferred # implementation. In all other cases, just leave this set to "std". STD="std" # If you are using a 3rd-party STL like STLport, remember to check your path # and be sure the STLport is included before the MSVC includes. VCVARS32.BAT # doesn't know anything about the directories as defined in the IDE. I use # # set INCLUDE=\Utility\Code\STLport-4.5\stlport;%INCLUDE% # # ...and set STD to "_STL". # Depending on your STL library min/max need to be defined. Using STLport # there is no need for libpqxx to redefine these for me. # The next line gives us the src directory to add additional include directories # We need certain header files from the Postgres code. Specifically # # postgres_ext.h (in src/include in the PostgreSQL source tree) # libpq-fe.h (in src/interfaces/libpq in the PostgreSQL source tree) # # This directory is also used to find the compiled libpq and libpqd. PGSQLSRC="D:\Src\postgresql-8.1.3\src" # Paths where the libpq library binary or binaries can be found. # We should use the libpq libraries that correspond to the source tree whose # headers we are including. This ensures that we find all in the same place: LIBPATH1=$(PGSQLSRC)/interfaces/libpq/Release LIBPATH2=$(PGSQLSRC)/interfaces/libpq/Debug libpqxx-3.1.1/win32/MinGW.mak0000664000175000017500000001100112076703440012537 00000000000000################################################################################ # AUTOMATICALLY GENERATED FILE--DO NOT EDIT # # This file is generated automatically by libpqxx's template2mak.py script. # # If you modify this file, chances are your modifications will be lost because # the file will be re-written from time to time. # # The template2mak.py script should be available in the tools directory of the # libpqxx source archive. # # Generated from template '/home/jtv/proj/libpqxx/tags/3.1.1/win32/mingw.mak.template'. ################################################################################ # MinGW makefile for libpqxx. Don't use this; use the configure script instead! # Based on original contributed by Pasquale Fersini include "win32/common" CXX = g++.exe OBJ = \ "src/binarystring.o" \ "src/connection.o" \ "src/connection_base.o" \ "src/cursor.o" \ "src/dbtransaction.o" \ "src/except.o" \ "src/largeobject.o" \ "src/nontransaction.o" \ "src/notify-listen.o" \ "src/pipeline.o" \ "src/prepared_statement.o" \ "src/result.o" \ "src/robusttransaction.o" \ "src/statement_parameters.o" \ "src/strconv.o" \ "src/subtransaction.o" \ "src/tablereader.o" \ "src/tablestream.o" \ "src/tablewriter.o" \ "src/transaction.o" \ "src/transaction_base.o" \ "src/util.o" \ LDFLAGS = -L$(LIBPATH1) -L$(LIBPATH2) --export-all-symbols --add-stdcall-alias -fpic LIBS = -lpq -lm -lwsock32 CPPFLAGS = -Iinclude -I$(PGSQLSRC)/src/include -I$(PGSQLSRC)/src/interfaces \ -DBUILDING_DLL -DPQXX_SHARED -DPGSTD=$(STD) BIN = libpqxx.dll .PHONY: all clean all: libpqxx.dll clean: rm -f $(OBJ) $(BIN) DLLWRAP=dllwrap.exe DEFFILE=libpqxx.def STATICLIB=libpqxx.a $(BIN): $(OBJ) $(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(OBJ) $(LDFLAGS) $(LIBS) -o $(BIN) src/binarystring.o: src/binarystring.cxx $(CXX) $(CPPFLAGS) -c src/binarystring.cxx -o src/binarystring.o $(CXXFLAGS) src/connection.o: src/connection.cxx $(CXX) $(CPPFLAGS) -c src/connection.cxx -o src/connection.o $(CXXFLAGS) src/connection_base.o: src/connection_base.cxx $(CXX) $(CPPFLAGS) -c src/connection_base.cxx -o src/connection_base.o $(CXXFLAGS) src/cursor.o: src/cursor.cxx $(CXX) $(CPPFLAGS) -c src/cursor.cxx -o src/cursor.o $(CXXFLAGS) src/dbtransaction.o: src/dbtransaction.cxx $(CXX) $(CPPFLAGS) -c src/dbtransaction.cxx -o src/dbtransaction.o $(CXXFLAGS) src/except.o: src/except.cxx $(CXX) $(CPPFLAGS) -c src/except.cxx -o src/except.o $(CXXFLAGS) src/largeobject.o: src/largeobject.cxx $(CXX) $(CPPFLAGS) -c src/largeobject.cxx -o src/largeobject.o $(CXXFLAGS) src/nontransaction.o: src/nontransaction.cxx $(CXX) $(CPPFLAGS) -c src/nontransaction.cxx -o src/nontransaction.o $(CXXFLAGS) src/notify-listen.o: src/notify-listen.cxx $(CXX) $(CPPFLAGS) -c src/notify-listen.cxx -o src/notify-listen.o $(CXXFLAGS) src/pipeline.o: src/pipeline.cxx $(CXX) $(CPPFLAGS) -c src/pipeline.cxx -o src/pipeline.o $(CXXFLAGS) src/prepared_statement.o: src/prepared_statement.cxx $(CXX) $(CPPFLAGS) -c src/prepared_statement.cxx -o src/prepared_statement.o $(CXXFLAGS) src/result.o: src/result.cxx $(CXX) $(CPPFLAGS) -c src/result.cxx -o src/result.o $(CXXFLAGS) src/robusttransaction.o: src/robusttransaction.cxx $(CXX) $(CPPFLAGS) -c src/robusttransaction.cxx -o src/robusttransaction.o $(CXXFLAGS) src/statement_parameters.o: src/statement_parameters.cxx $(CXX) $(CPPFLAGS) -c src/statement_parameters.cxx -o src/statement_parameters.o $(CXXFLAGS) src/strconv.o: src/strconv.cxx $(CXX) $(CPPFLAGS) -c src/strconv.cxx -o src/strconv.o $(CXXFLAGS) src/subtransaction.o: src/subtransaction.cxx $(CXX) $(CPPFLAGS) -c src/subtransaction.cxx -o src/subtransaction.o $(CXXFLAGS) src/tablereader.o: src/tablereader.cxx $(CXX) $(CPPFLAGS) -c src/tablereader.cxx -o src/tablereader.o $(CXXFLAGS) src/tablestream.o: src/tablestream.cxx $(CXX) $(CPPFLAGS) -c src/tablestream.cxx -o src/tablestream.o $(CXXFLAGS) src/tablewriter.o: src/tablewriter.cxx $(CXX) $(CPPFLAGS) -c src/tablewriter.cxx -o src/tablewriter.o $(CXXFLAGS) src/transaction.o: src/transaction.cxx $(CXX) $(CPPFLAGS) -c src/transaction.cxx -o src/transaction.o $(CXXFLAGS) src/transaction_base.o: src/transaction_base.cxx $(CXX) $(CPPFLAGS) -c src/transaction_base.cxx -o src/transaction_base.o $(CXXFLAGS) src/util.o: src/util.cxx $(CXX) $(CPPFLAGS) -c src/util.cxx -o src/util.o $(CXXFLAGS) libpqxx-3.1.1/win32/vc-test.mak.template0000664000175000017500000000522612075723506014775 00000000000000# Visual C++ Makefile for libpqxx test suite # This file was written by Bart Samwel. default: @echo LIBPQXX testsuite Makefile for Visual C++ Available Targets @echo ----------------------------------------------------------- @echo. @echo ALL: perform all tests @echo TESTxxx: perform specific test xxx @echo CLEAN: clean up all output so that tests will run again. @echo. @echo Pass the option DLL=1 to link the test suite against the libpqxx DLL instead @echo of against the static libpqxx library, and pass DEBUG=1 to link against @echo the debug build of libpqxx. !include win32\common LIBDIR=lib # C++ compiler, linker CXX=cl.exe LINK=link.exe CXX_FLAGS_BASE=/nologo /W3 /GX /FD /GR /YX /c \ /I "include" /I "$(PGSQLSRC)/include" /I "$(PGSQLSRC)/interfaces/libpq" \ /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" $(PQXX_SHARED) LINK_FLAGS_BASE=kernel32.lib wsock32.lib advapi32.lib /nologo /machine:I386 /libpath:"$(LIBDIR)" !IF "$(DLL)" == "1" PQXX_SHARED=/D "PQXX_SHARED" PQXXLIBTYPE=Dll PQXXLIBTYPESUFFIX= PQXXLIBEXT=dll !ELSE PQXXLIBTYPE=Static PQXXLIBEXT=lib PQXXLIBTYPESUFFIX=_static !ENDIF !IF "$(DEBUG)" == "1" BUILDMODE=Debug DEBUGSUFFIX=D CXX_FLAGS=$(CXX_FLAGS_BASE) /MDd /Gm /ZI /Od /D "_DEBUG" /GZ LINK_FLAGS=$(LINK_FLAGS_BASE) /debug /libpath:$(LIBPATH2) !ELSE BUILDMODE=Release DEBUGSUFFIX= CXX_FLAGS=$(CXX_FLAGS_BASE) /MD /D "NDEBUG" LINK_FLAGS=$(LINK_FLAGS_BASE) /libpath:$(LIBPATH1) !ENDIF INTDIR=Test$(PQXXLIBTYPE)$(BUILDMODE) PQXXSUBPATH=libpqxx$(PQXXLIBTYPESUFFIX)$(DEBUGSUFFIX).$(PQXXLIBEXT) PQXX=$(LIBDIR)\$(PQXXSUBPATH) PQXXCOPY=$(INTDIR)\$(PQXXSUBPATH) LIBPQ=libpq$(DEBUGSUFFIX).dll OBJS= \ ###MAKTEMPLATE:FOREACH test/test*.cxx $(INTDIR)\###BASENAME###.obj \ ###MAKTEMPLATE:ENDFOREACH $(INTDIR)\runner.obj ######################################################## # Logical targets ######################################################## all: runner runner: $(INTDIR) $(INTDIR)\runner.exe clean: -@del /Q vc70.pch -@del /Q $(OBJS) $(INTDIR)\*.exe $(INTDIR): @mkdir $(INTDIR) ######################################################## # Test implementations ######################################################## $(INTDIR)\runner.success: $(INTDIR)\runner.exe \ $(INTDIR)\$(LIBPQXX) $(PQXX) @copy $(PQXX) $(PQXXCOPY) @$(INTDIR)\runner.exe @echo >$(INTDIR)\runner.success $(INTDIR)\runner.exe: $(OBJS) $(PQXX) @$(LINK) $(LINK_FLAGS) "$(INTDIR)\\runner.obj" $(OBJS) \ /out:"$(INTDIR)\\runner.exe" ###MAKTEMPLATE:FOREACH test/*.cxx $(INTDIR)\###BASENAME###.obj: @$(CXX) $(CXX_FLAGS) ###FILENAME### /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" ###MAKTEMPLATE:ENDFOREACH $(INTDIR)\$(LIBPQ): @copy $(LIBDIR)\$(LIBPQ) $(INTDIR) libpqxx-3.1.1/COPYING0000775000175000017500000000265012075723507011177 00000000000000All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author, nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. libpqxx-3.1.1/configure.ac.in0000664000175000017500000007532212075723507013042 00000000000000# # CAUTION: THE configure.ac FILE IS AUTOMATICALLY GENERATED! DO NOT EDIT IT. # # If you want to make changes to configure.ac, edit configure.ac.in instead. # # Process configure.ac.in with autoconf to produce a configure script. # All text in libpqxx is pure ASCII, so we can afford the "C" locale which is # likely to be faster than any other. This may also work around bugs in some # environments, esp. with UTF-8 locales. LC_ALL=C AC_PREREQ(2.59) AC_INIT(libpqxx, @PQXXVERSION@, [Jeroen T. Vermeulen ]) AC_LANG(C++) AC_CONFIG_AUX_DIR(config) AC_CONFIG_MACRO_DIR([config/m4]) AM_INIT_AUTOMAKE(libpqxx, @PQXXVERSION@) PQXXVERSION=@PQXXVERSION@ PQXX_ABI=@PQXX_ABI@ PQXX_MAJOR=@PQXX_MAJOR@ PQXX_MINOR=@PQXX_MINOR@ AC_SUBST(PQXXVERSION) AC_SUBST(PQXX_ABI) AC_SUBST(PQXX_MAJOR) AC_SUBST(PQXX_MINOR) AC_CONFIG_SRCDIR([src/connection.cxx]) AC_CONFIG_HEADER([include/pqxx/config.h]) # default prefix for installs AC_PREFIX_DEFAULT(/usr/local) # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_PROG_INSTALL AC_DISABLE_SHARED AC_PROG_LIBTOOL AC_PROG_MAKE_SET AC_PATH_PROG([MKDIR], [mkdir]) AC_PATH_PROG([DOXYGEN], [doxygen]) AM_CONDITIONAL([BUILD_REFERENCE], [test -n "$DOXYGEN"]) AC_CHECK_PROG(HAVE_DOT, dot, YES, NO) AC_PATH_PROG([XMLTO], [xmlto]) AC_PATH_PROG([PKG_CONFIG], [pkg-config]) AM_CONDITIONAL([BUILD_TUTORIAL], [test -n "$XMLTO"]) AM_MAINTAINER_MODE # see if we want verbose compiler warnings AC_MSG_CHECKING([maintainer mode]) AC_ARG_ENABLE(maintainer-mode) AC_MSG_RESULT(${enable_maintainer_mode}) AC_ARG_ENABLE(shared) if test "${shared}" = "yes" ; then CPPFLAGS="$CPPFLAGS -DPQXX_SHARED" fi # Add options to compiler command line, if compiler accepts it add_compiler_opts() { for option in $* ; do ACO_SAVE_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $option" AC_MSG_CHECKING([whether $CXX accepts $option]) AC_TRY_COMPILE([], [], has_option=yes, has_option=no,) AC_MSG_RESULT($has_option) if test "$has_option" = "no" ; then CXXFLAGS="$ACO_SAVE_CXXFLAGS" fi done } # Let's try to get the compiler to be helpful # (Omit options -Weffc++ and -Wabi because they currently yield too many # warnings in gcc's standard headers; omit -Wunreachable-code because it isn't # always right) if test "$GCC" = "yes" ; then # In maintainer mode, enable all the warning options we can if test "$enable_maintainer_mode" = "yes"; then add_compiler_opts \ -Werror \ -Wno-div-by-zero \ -ffor-scope \ -fstrict-aliasing \ -Wstrict-aliasing \ -funit-at-a-time \ -pedantic \ -fno-nonansi-builtins \ -Wall \ -Wmultichar \ -W \ -Wextra \ -Wfloat-equal \ -Wundef \ -Wshadow \ -Wpointer-arith \ -Wcast-qual \ -Wcast-align \ -Wconversion \ -Wctor-dtor-privacy \ -Wc++-compat \ -Wendif-labels \ -Wlogical-op \ -Woverlength-strings \ -Wpointer-sign \ -Wredundant-decls \ -Wsign-compare \ -Wwrite-strings \ -Wnon-virtual-dtor \ -Wreorder \ -Wold-style-cast \ -Woverloaded-virtual \ -Wsign-promo \ -Wstrict-null-sentinel \ -Wformat-security \ -Wnonnull \ -Winit-self \ -Wswitch \ -Wmissing-field-initializers \ -Wmissing-include-dirs \ -Wunused \ -funit-at-a-time fi if test "$enable_long_long" = "yes" ; then add_compiler_opts -Wno-long-long fi AC_MSG_CHECKING([g++ visibility attribute]) gcc_visibility=yes SAVE_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -Werror" AC_TRY_COMPILE([ struct __attribute__ ((visibility("hidden"))) d { d() {} void f() {} }; ], [d D;D.f()], AC_DEFINE([PQXX_HAVE_GCC_VISIBILITY],1, [Define if g++ supports visibility attribute, as in g++ 4.0]), gcc_visibility=no) AC_MSG_RESULT($gcc_visibility) if test "$gcc_visibility" = "yes" ; then # Setting default symbol visibility to "hidden" vastly reduces # library size with g++ 4.0, but unfortunately this will require # some more work in the libpqxx setup. Instead, we make only # inline functions hidden. add_compiler_opts -fvisibility-inlines-hidden #add_compiler_opts -fvisibility=hidden fi CXXFLAGS="$SAVE_CXXFLAGS" AC_MSG_CHECKING([g++ deprecation attribute]) gcc_deprecated=yes AC_TRY_COMPILE([void f() __attribute__ ((deprecated));], [], AC_DEFINE([PQXX_HAVE_GCC_DEPRECATED],1, [Define if g++ supports deprecated attribute, as in g++ 4.0]), gcc_deprecated=no) AC_MSG_RESULT($gcc_deprecated) fi # Determine name of standard namespace. PGSTD will be set to this name. The # --with-std= option takes precedence if given; otherwise, several alternatives # are tried. # As a special case, if the argument to the --with-std option is "yes" (as would # be the case if the user specified the option but no argument for it), the # guessing logic is enabled as if the option had not been used. AH_TEMPLATE(PGSTD,[name of standard library namespace (normally "std")]) AC_MSG_CHECKING([name of standard library namespace (normally "std")]) guessstd=no AC_ARG_WITH(std, AC_HELP_STRING( [--with-std], [name of standard library namespace (normally "std")]), [std=${withval};], [guessstd=yes]) if test "${guessstd}" = "yes" -o "${withval}" = "yes"; then # No explicit std namespace given. Check for alternative "standard" # namespaces, in order of preference. for ns in std _STL stlp_std "" ; do AC_COMPILE_IFELSE([#include ${ns}::string justastring;], [std="${ns}"; break]) done fi AC_DEFINE_UNQUOTED( PGSTD, [$std], [name of standard library namespace (normally "std")]) if ! test -z "${std}" ; then AC_MSG_RESULT([::${std}]) usestd="using namespace ${std};" else AC_MSG_RESULT([::]) fi boost_smart_ptr=yes AC_CHECK_HEADER(boost/smart_ptr.hpp, AC_DEFINE(PQXX_HAVE_BOOST_SMART_PTR, 1, [Define if you have the header]), boost_smart_ptr=no) AC_MSG_CHECKING([whether TR1 headers live in tr1 directory]) tr1headers=yes AC_TRY_COMPILE( [#include ], [], AC_DEFINE( [PQXX_TR1_HEADERS], 1, [Define if headers for TR1 extension to standard live in tr1/]), tr1headers=no) AC_MSG_RESULT($tr1headers) if test "${tr1headers}" = "yes" ; then tr1dir="tr1/" else tr1dir="" fi AH_TEMPLATE(PQXXTR1, [namespace of TR1 extension to the C++ standard]) AC_MSG_CHECKING([namespace of TR1 extension to the C++ standard]) guesstr1=no AC_ARG_WITH( tr1, AC_HELP_STRING( [--with-tr1], [namespace of TR1 extension to the C++ standard]), [tr1=${withval};], [guesstr1=yes]) if test "${guesstr1}" = "yes" ; then # No explicit TR1 namespace given. Try PGSTD::tr1. If that doesn't # work, assume PGSTD as our best bet. tr1="${std}::tr1" AC_TRY_COMPILE( [#include <${tr1dir}memory>], [using namespace ${tr1}], [], [tr1=${std}]) fi AC_DEFINE_UNQUOTED( PQXXTR1, [$tr1], [namespace of TR1 standard extensions (e.g. "std" or "std::tr1")]) AC_MSG_RESULT([$tr1]) ioshdr=yes AC_CHECK_HEADER(ios,AC_DEFINE(PQXX_HAVE_IOS,1, [Define if you have the header]), ioshdr=no) streambuf=yes AC_CHECK_HEADER(streambuf,AC_DEFINE(PQXX_HAVE_STREAMBUF,1, [Define if you have the header; if not, is used]), streambuf=no) localehdr=yes AC_CHECK_HEADER(locale,AC_DEFINE(PQXX_HAVE_LOCALE,1, [Define if you have the header]), localehdr=no) imbue=yes AC_MSG_CHECKING([locale function and stringstream::imbue]) AC_TRY_COMPILE([#include #ifdef PQXX_HAVE_LOCALE #include #endif ${usestd}], [stringstream S; S.imbue(locale("C"))], [AC_DEFINE(PQXX_HAVE_IMBUE, 1, [Define if stringstream::imbue works])], [imbue=no]) AC_MSG_RESULT($imbue) AC_MSG_CHECKING([char_traits template]) char_traits=yes AC_TRY_COMPILE([#include ${usestd}], [char_traits::eof()], AC_DEFINE(PQXX_HAVE_CHAR_TRAITS, 1, [Define if std provides the char_traits template and specialization]), char_traits=no) AC_MSG_RESULT($char_traits) AC_MSG_CHECKING(["warning" preprocessor directive]) cpp_warning=yes AC_TRY_COMPILE([#warning cpp supports warning directive], [], AC_DEFINE(PQXX_HAVE_CPP_WARNING, 1, [Define if preprocessor supports nonstandard "warning" directive]), cpp_warning=no) AC_MSG_RESULT($cpp_warning) AC_MSG_CHECKING(["message" preprocessor pragma]) cpp_pragma_message=yes AC_TRY_COMPILE([#pragma message("cpp supports message pragma")], [], AC_DEFINE(PQXX_HAVE_CPP_PRAGMA_MESSAGE, 1, [Define if preprocessor supports pragma "message"]), cpp_pragma_message=no) AC_MSG_RESULT($cpp_pragma_message) # Find PostgreSQL includes and libraries AC_PATH_PROGS(PG_CONFIG, pg_config) if test -z "$PG_CONFIG" || test ! -r "$PG_CONFIG"; then AC_MSG_ERROR([ PostgreSQL configuration script pg_config not found. Make sure this is in your command path before configuring. Without it, the configure script has no way to find the right location for the libpq library and its headers. ]) fi with_postgres_include=`$PG_CONFIG --includedir` AC_MSG_NOTICE([using PostgreSQL headers at $with_postgres_include]) with_postgres_lib=`$PG_CONFIG --libdir` AC_MSG_NOTICE([using PostgreSQL libraries at $with_postgres_lib]) AC_SUBST(with_postgres_lib) AC_SUBST(with_postgres_include) #POSTGRES_LIB="-R${with_postgres_lib}" AC_SUBST(POSTGRES_LIB) POSTGRES_INCLUDE="-I${with_postgres_include}" AC_SUBST(POSTGRES_INCLUDE) AC_HEADER_STDC AC_MSG_CHECKING([ability to compile programs using the standard C library]) AC_TRY_COMPILE([#include namespace std {} // In case string.h does not define it. ${usestd} extern void f(size_t);], [f(strlen(""))],[], [AC_MSG_ERROR([ Could not build even a tiny test program using the standard C library. Something very basic has gone wrong; try reading config.log to find out what. You'll probably want to go straight to the end of that file and read backwards until you find an error message. Then identify the problem, try to fix it, and run this script again. The configure script's --help option may provide useful tips on how to influence what compiler and command line options are used, what additional libraries are linked in, and so on. ])]) AC_MSG_RESULT(yes) # After this check, we should be able to link socket-based programs. socklibok=no AC_SEARCH_LIBS(select, socket nsl ws2_32 wsock32 winsock, [socklibok=yes]) # Microsoft proprietary libraries do not work with code that is generated with # autoconf's SEARCH_LIBS macro, so we need to check manually and just use the # first socket library available. # We only do this if select() is not available by other means, to avoid picking # up an unnecessary Windows compatibility library on a non-Windows system. for l in ws2_32 wsock32 winsock ; do if test "${socklibok}" != "yes" ; then AC_CHECK_LIB($l,main,LIBS="$LIBS -l$l";[socklibok=yes]) fi done if test "${socklibok}" != "yes" ; then AC_MSG_ERROR([ Could not figure out how to link a simple sockets-based program. Please read the config.log file for more clues as to why this failed. ]) fi AC_CHECK_HEADER([${with_postgres_include}/libpq-fe.h],[],[AC_MSG_ERROR([ Can't find libpq-fe.h in ${with_postgres_include}. Are you sure the libpq headers are installed correctly? They should be in the directory returned by "pg_config --includedir". If you do have libpq (the C-language client library for PostgreSQL) installed, make sure you have the related development materials--mainly its header files-- as well as the library binary. Some system distributions keep the two in seperate packages with names like "alibrary" and "alibrary-dev", respectively. In that case, make sure you have the latter installed as well. ])]) AC_MSG_CHECKING([for ability to compile source files using libpq]) AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>],[PQexec(0,"")], [], [AC_MSG_ERROR([ Could not compile a call to a basic libpq function. There must be something seriously wrong with the headers that "pg_config --includedir" pointed to; the contents of config.log may give you a clue about the nature of the failure. Source including the libpq header libpq-fe.h can be compiled, but a call to the most basic libpq function PQexec() failed to compile successfully. This is the litmus test for a working libpq. ])]) AC_MSG_RESULT(yes) # Perform this check in C; autoconf's AC_HAVE_LIBRARY breaks in C++ because it # tries to call main() AC_LANG_PUSH(C) LDFLAGS="$LDFLAGS -L${with_postgres_lib}" AC_HAVE_LIBRARY(pq, [], [AC_MSG_ERROR([ Could not link to libpq. Make sure you have the PostgreSQL client library installed, and that the library binary can be found in the location returned by "pg_config --libdir". ])], -L${with_postgres_lib}) AC_CHECK_LIB([pq], [PQexec],[], [AC_MSG_ERROR([ Did not find the PQexec() function in libpq. This is the litmus test for a working libpq installation. A source file using the PQexec() function did compile without problems, and the libpq library is available for linking, but for some reason a call to PQexec() failed to link properly to the libpq library. This may be because the libpq library file is damaged, or in some incorrect format. or if your libpq is much more recent than libpqxx version @PQXXVERSION@, perhaps libpq has undergone a radical ABI change. The last parts of config.log may give you a clue as to what really went wrong, but be warned that this is no easy reading. Look for the last error message occurring in the file. ])], -L${with_postgres_lib}) # Remove redundant occurrances of -lpq LIBS="`echo "$LIBS" | sed -e 's/-lpq[[:space:]]*[[:space:]]-lpq\>/-lpq/g'`" AC_LANG_POP(C) AC_MSG_CHECKING([for correct C++ linkage of basic libpq functions]) if test "$enable_maintainer_mode" = "yes"; then AC_LINK_IFELSE([ #include <${with_postgres_include}/libpq-fe.h> int main(){return !PQexec(0,0);}], [], [AC_MSG_ERROR([ Linking a call to libpq failed in C++, even though it succeeded in C. If your C and C++ compilers are very different beasts, this may mean that we do not have the right options for linking with it after all. Alternatively, this may be caused by a bug in autoconf or automake. Since you are configuring libpqxx using the --enable-maintainer-mode option, any compiler warnings for autoconf test programs will be treated as errors. The problem may just go away if you run the configure script again but with the maintainer mode option omitted. Please report such cases (including the config.log produced by the failed attempt) so future versions can attempt to work around the problem. Should this error occur even while not in maintainer mode, read the config.log file for more detailed information. Look for the last error message, which may be several pages up from the end of the file. ])]) else AC_LINK_IFELSE([ #include <${with_postgres_include}/libpq-fe.h> int main(){return !PQexec(0,0);}], [], [AC_MSG_ERROR([ Linking a call to libpq failed in C++, even though it succeeded in C. If your C and C++ compilers are very different beasts, this may mean that we do not have the right options for linking with it after all. Read the config.log file for more detailed information. Look for the last error message, which may be several pages up from the end of the file. ])]) fi AC_MSG_RESULT(yes) AC_MSG_CHECKING([that type of libpq's Oid is as expected]) AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> #include"${srcdir}/include/pqxx/libpq-forward.hxx" extern void f(pqxx::oid&);], [Oid o;f(o)], [], [AC_MSG_ERROR([ The Oid typedef in libpq has changed. Please notify the libpqxx authors of the change! ])]) AC_MSG_RESULT(yes) AC_MSG_CHECKING([lo_tell()]) lotell=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> void f(PGconn *c) { lo_tell(c,2); }], [], AC_DEFINE(PQXX_HAVE_LO_TELL, 1, [Define if libpq has lo_tell()]), [lotell=no] ) AC_MSG_RESULT($lotell) AC_MSG_CHECKING([for strerror_r]) strerror_r=yes AC_TRY_COMPILE( [#include ${usestd} bool f(char x[]) { return strerror_r(0,x,10) != 0; }], [], [AC_DEFINE(PQXX_HAVE_STRERROR_R,1,[Define if strerror_r exists])], [strerror_r=no]) AC_MSG_RESULT($strerror_r) if test "$strerror_r" != "yes" ; then AC_MSG_WARN([ No definition of strerror_r, the thread-safe version of strerror(), was found in your header. This may be because your implementation strerror() is threadsafe, in which case there is nothing to worry about. ]) else AC_MSG_CHECKING([for GNU-style strerror_r]) gnu_strerror_r=yes AC_TRY_COMPILE( [#include ${usestd} const char *it_is_a_string(char *x) { return strerror_r(0,x,10); }], [], [AC_DEFINE( PQXX_HAVE_STRERROR_R_GNU,1,[Define for GNU-style strerror_r])], [gnu_strerror_r=no]) AC_MSG_RESULT($gnu_strerror_r) fi # strerror_r AC_MSG_CHECKING([for strnlen]) strnlen=yes AC_TRY_COMPILE( [#include ${usestd}], [return strnlen("",1)], [AC_DEFINE(PQXX_HAVE_STRNLEN,1,[Define if strnlen exists])], strnlen=no) AC_MSG_RESULT($strnlen) AC_MSG_CHECKING([for strlcpy]) strlcpy=yes AC_TRY_COMPILE( [#include ${usestd}], [char buf[2];return strlcpy(buf,"",1)], [AC_DEFINE(PQXX_HAVE_STRLCPY,1,[Define if strlcpy exists])], strlcpy=no) AC_MSG_RESULT($strlcpy) AC_MSG_CHECKING([for long long]) long_long=yes AC_TRY_COMPILE(,[long long l=0LL; return int(l)], AC_DEFINE(PQXX_HAVE_LONG_LONG,1, [Define if the compiler supports "long long" types]), long_long=no) AC_MSG_RESULT($long_long) AC_MSG_CHECKING([for long double]) long_double=yes AC_TRY_COMPILE(,[long double x=0;return int(x)], AC_DEFINE(PQXX_HAVE_LONG_DOUBLE,1, [Define if the compiler supports the standard "long double" type]), long_double=no) AC_MSG_RESULT($long_double) AC_MSG_CHECKING([for working ]) select_h=yes AC_TRY_COMPILE( [#include #include ${usestd}] , [select(0,0,0,0,0)] , AC_DEFINE(PQXX_HAVE_SYS_SELECT_H,1, [Define if the sys/select.h header defines a working select() and friends, as per POSIX 1003.1-2001]) ,select_h=no ) AC_MSG_RESULT($select_h) AC_MSG_CHECKING([for poll()]) poll=yes AC_TRY_COMPILE( [#include ${usestd}], [pollfd p = { 0,0,0 }; poll(&p,1,0)], AC_DEFINE(PQXX_HAVE_POLL,1, [Define if the system has the poll() function (mainly GNU/Linux)]), poll=no ) AC_MSG_RESULT($poll) # Long-standing annoyance in glibc: the definition for FD_SET includes an # unnecessary C-style cast that the compiler may warn for. If the compiler is # configured to treat warnings as errors, that may be a problem for us. AC_MSG_CHECKING([for working fd_set]) if test "$enable_maintainer_mode" = "yes"; then AC_TRY_COMPILE( [#include #ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef _WIN32 #include #endif ${usestd} extern "C" void f() { fd_set s; FD_ZERO(&s); FD_SET(1, &s); }], [], [], [AC_MSG_ERROR([ Could not compile code using fd_set. This may be a known problem with GNU libc and the extremely strict compiler options used in libpqxx's maintainer mode; try configuring again, this time omitting the --enable-maintainer-mode option. ])]) else AC_TRY_COMPILE( [#include #ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef _WIN32 #include #endif ${usestd}], [fd_set s;FD_ZERO(&s);FD_SET(1,&s)], [], [AC_MSG_ERROR([ Could not compile code using fd_set. There is something seriously wrong, or maybe your warning options are too strict. If you are using GNU libc (as will be the case on a GNU/Linux system) and are telling the compiler to treat warnings as errors, the cause may be an old-style cast in the definition of FD_SET that triggers a compiler warning. See config.log for more details; look for the last error message in the file. ])]) fi AC_MSG_RESULT(yes) AC_MSG_CHECKING([if select() accepts NULL fdsets]) select_accepts_null=yes AC_RUN_IFELSE( [#ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef _WIN32 #include #endif ${usestd} extern "C" int foo(){fd_set f; FD_SET(1,&f); return select(2,0,&f,&f,0)<0;} int main() { return foo(); }], AC_DEFINE(PQXX_SELECT_ACCEPTS_NULL,1, [Define if select() accepts NULL fd_set arguments]), select_accepts_null=no, select_accepts_null=no ) AC_MSG_RESULT($select_accepts_null) AC_MSG_CHECKING([sleep()]) sleep=yes AC_TRY_COMPILE([#ifdef HAVE_UNISTD_H #include #endif ${usestd}],[sleep(0x01)], AC_DEFINE(PQXX_HAVE_SLEEP, 1, [Define if POSIX sleep() exists]), [sleep=no] ) AC_MSG_RESULT($sleep) AC_MSG_CHECKING([PQisthreadsafe()]) pqisthreadsafe=yes AC_TRY_COMPILE( [#include<${with_postgres_include}/libpq-fe.h>], [PQisthreadsafe()], AC_DEFINE( PQXX_HAVE_PQISTHREADSAFE, 1, [Define if libpq has PQisthreadsafe()]), [pqisthreadsafe=no]) AC_MSG_RESULT($pqisthreadsafe) AC_MSG_CHECKING([PQserverVersion()]) pqserverversion=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQserverVersion(0)], AC_DEFINE(PQXX_HAVE_PQSERVERVERSION, 1, [Define if libpq has PQserverVersion()]), [pqserverversion=no] ) AC_MSG_RESULT($pqserverversion) AC_MSG_CHECKING([PQprotocolVersion()]) pqprotocolversion=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQprotocolVersion(0)], AC_DEFINE(PQXX_HAVE_PQPROTOCOLVERSION, 1, [Define if libpq has PQprotocolVersion()]), [pqprotocolversion=no] ) AC_MSG_RESULT($pqprotocolversion) AC_MSG_CHECKING([PQescapeString()]) pqescapestring=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char c[1];PQescapeString(c,"",0x01)], AC_DEFINE(PQXX_HAVE_PQESCAPESTRING, 1, [Define if libpq has PQescapeString()]), [pqescapestring=no] ) AC_MSG_RESULT($pqescapestring) if test "$pqescapestring" != yes ; then AC_MSG_WARN([ You appear to be building with a very old libpq version that does not have PQescapeString(). This can cause serious problems when non-ASCII data is used in SQL strings. Please consider upgrading to at least the libpq that came with PostgreSQL 7.2 before going any further! ]) fi AC_MSG_CHECKING([PQescapeStringConn()]) pqescapestringconn=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char b[1];PQescapeStringConn(0,b,b,sizeof(b),0)], AC_DEFINE(PQXX_HAVE_PQESCAPESTRINGCONN, 1, [Define if libpq has PQescapeStringConn()]), [pqescapestringconn=no] ) AC_MSG_RESULT($pqescapestringconn) AC_MSG_CHECKING([PQescapeBytea()]) pqescapebytea=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> #include ${usestd}], [size_t l=0;const unsigned char c[]="";PQescapeBytea(c,1,&l)], AC_DEFINE(PQXX_HAVE_PQESCAPEBYTEA,1,[Define if libpq has PQescapeBytea()]), [pqescapebytea=no] ) AC_MSG_RESULT($pqescapebytea) AC_MSG_CHECKING([PQescapeByteaConn()]) pqescapebyteaconn=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> #include ${usestd}], [unsigned char b[1];size_t c;PQescapeByteaConn(0,b,sizeof(b),&c)], AC_DEFINE(PQXX_HAVE_PQESCAPEBYTEACONN,1,[Define if libpq has PQescapeByteaConn()]), [pqescapebyteaconn=no] ) AC_MSG_RESULT($pqescapebyteaconn) AC_MSG_CHECKING([PQunescapeBytea()]) pqunescapebytea=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h> ${usestd}], [size_t l=0;const unsigned char c[]="";PQunescapeBytea(c,&l)], AC_DEFINE(PQXX_HAVE_PQUNESCAPEBYTEA,1,[Define if libpq has PQunescapeBytea()]), [pqunescapebytea=no] ) AC_MSG_RESULT($pqunescapebytea) AC_MSG_CHECKING([PQfreemem()]) pqfreemem=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char c='x';PQfreemem(&c)], AC_DEFINE(PQXX_HAVE_PQFREEMEM,1,[Define if libpq has PQfreemem()]), [pqfreemem=no] ) AC_MSG_RESULT($pqfreemem) AC_MSG_CHECKING([PQfreeNotify()]) pqfreenotify=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [char c='x';PQfreeNotify(&c)], AC_DEFINE(PQXX_HAVE_PQFREENOTIFY,1,[Define if libpq has PQfreeNotify()]), [pqfreenotify=no] ) AC_MSG_RESULT($pqfreenotify) AC_MSG_CHECKING([PQftable()]) pqftable=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGresult*r=0;PQftable(r,0)], AC_DEFINE(PQXX_HAVE_PQFTABLE,1,[Define if libpq has PQftable()]), [pqftable=no] ) AC_MSG_RESULT($pqftable) AC_MSG_CHECKING([PQftablecol()]) pqftablecol=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGresult*r=0;PQftablecol(r,0)], AC_DEFINE(PQXX_HAVE_PQFTABLECOL,1,[Define if libpq has PQftablecol()]), [pqftablecol=no] ) AC_MSG_RESULT($pqftablecol) AC_MSG_CHECKING([for new COPY functions]) pqputcopy=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGconn*c=0;PQputCopyData(c,"",0)], AC_DEFINE(PQXX_HAVE_PQPUTCOPY,1,[Define if libpq has PQputCopyData() and related functions]), [pqputcopy=no] ) AC_MSG_RESULT($pqputcopy) AC_MSG_CHECKING([PQprepare()]) pqprepare=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [extern PGconn*c;Oid o;PQprepare(c,"","",0,&o)], AC_DEFINE(PQXX_HAVE_PQPREPARE,1,[Define if libpq has PQprepare()]), [pqprepare=no] ) AC_MSG_RESULT($pqprepare) AC_MSG_CHECKING([PQexecPrepared()]) pqexecprepared=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGconn*c=0;const char*p[1]={0};const int i=0;PQexecPrepared(c,"",i,p,&i,&i,i)], AC_DEFINE(PQXX_HAVE_PQEXECPREPARED,1,[Define if libpq has PQexecPrepared()]), [pqexecprepared=no] ) AC_MSG_RESULT($pqexecprepared) AC_MSG_CHECKING([PQexecParams()]) pqexecparams=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQexecParams(0, "", 0, 0, 0, 0, 0, 0)], AC_DEFINE(PQXX_HAVE_PQEXECPARAMS,1,[Define if libpq has PQexecParams()]), [pqexecparams=no] ) AC_MSG_RESULT($pqexecparams) AC_MSG_CHECKING([PQresultErrorField()]) pqresulterrorfield=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PGresult*r=0;PQresultErrorField(r,PG_DIAG_STATEMENT_POSITION)], AC_DEFINE(PQXX_HAVE_PQRESULTERRORFIELD,1,[Define if libpq has PQresultErrorField() and PG_DIAG_STATEMENT_POSITION]), [pqresulterrorfield=no] ) AC_MSG_RESULT($pqresulterrorfield) AC_MSG_CHECKING([PQencryptPassword()]) pqencryptpassword=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQencryptPassword("x","y")], AC_DEFINE(PQXX_HAVE_PQENCRYPTPASSWORD,1,[Define if libpq has PQencryptPassword()]), [pqencryptpassword=no] ) AC_MSG_RESULT($pqencryptpassword) AC_MSG_CHECKING([PQclientEncoding()]) pqclientencoding=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [return PQclientEncoding(NULL)], AC_DEFINE(PQXX_HAVE_PQCLIENTENCODING,1,[Define if libpq has PQclientEncoding()]), [pqclientencoding=no] ) AC_MSG_RESULT($pqclientencoding) AC_MSG_CHECKING([PQmblen()]) pqmblen=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [return PQmblen(NULL,1)], AC_DEFINE(PQXX_HAVE_PQMBLEN,1,[Define if libpq has PQmblen()]), [pqmblen=no] ) AC_MSG_RESULT($pqmblen) AC_MSG_CHECKING([PQdescribePortal()]) pqdescribeportal=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [return PQdescribePortal(NULL, "foo")!=0;], AC_DEFINE(PQXX_HAVE_PQDESCRIBEPORTAL,1,[Define if libpq has PQdescribePortal()]), [pqdescribeportal=no] ) AC_MSG_RESULT($pqdescribeportal) AC_MSG_CHECKING([PQcancel()]) pqcancel=yes AC_TRY_COMPILE([#include<${with_postgres_include}/libpq-fe.h>], [PQcancel(NULL, NULL, 0)], AC_DEFINE(PQXX_HAVE_PQCANCEL, 1, [Define if libpq has PQcancel() and friends]), [pqcancel=no] ) AC_MSG_RESULT($pqcancel) AC_CHECK_HEADER(limits, [AC_DEFINE(PQXX_HAVE_LIMITS, 1, [Define if exists])]) AC_MSG_CHECKING([for C99 isnan()]) c_isnan=yes AC_TRY_COMPILE([#include extern double f(); ${usestd}], [if(isnan(f())f()], AC_DEFINE(PQXX_HAVE_C_ISNAN,1,[Define if math.h defines C99 isnan()]), [c_isnan=no] ) AC_MSG_RESULT($c_isnan) AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()]) quiet_nan=yes AC_TRY_COMPILE([#include extern void f(double); ${usestd}], [f(numeric_limits::quiet_NaN())], [AC_DEFINE(PQXX_HAVE_QUIET_NAN,1, [Define if std::numeric_limits has quiet_NaN()])], [quiet_nan=no]) AC_MSG_RESULT($quiet_nan) AC_MSG_CHECKING([for C NAN macro]) c_nan=yes AC_TRY_COMPILE([#include extern void f(double); ${usestd}], [f(NAN)], [AC_DEFINE(PQXX_HAVE_C_NAN,1, [Define if C math header defines NAN])], [c_nan=no]) AC_MSG_RESULT($c_nan) AC_MSG_CHECKING([for C99 nan() family]) nan=yes AC_TRY_COMPILE([#include ${usestd} extern void f(double);], [f(nan(""))], [AC_DEFINE(PQXX_HAVE_NAN,1, [Define if C99 fnan()/nan()/lnan() are available])], [nan=no]) AC_MSG_RESULT($nan) AC_MSG_CHECKING([for C99 isinf()]) c_isnan=yes AC_TRY_COMPILE([#include extern double f(); ${usestd}], [if(isinf(f())f()], AC_DEFINE(PQXX_HAVE_C_ISINF,1,[Define if math.h defines C99 isinf()]), [c_isinf=no] ) AC_MSG_RESULT($c_isinf) AC_MSG_CHECKING([whether std::string has a clear() function]) string_clear=yes AC_TRY_COMPILE([#include ${usestd}], [string i;i.clear()], [AC_DEFINE(PQXX_HAVE_STRING_CLEAR, 1, [Define if string class has the clear() function])], [string_clear=no]) AC_MSG_RESULT($string_clear) AC_MSG_CHECKING([for standard distance()]) distance=yes AC_TRY_COMPILE([#include ${usestd}], [int i[1]; return distance(i, i+1)], [AC_DEFINE(PQXX_HAVE_DISTANCE, 1, [Define if distance() works according to the standard])], [distance='no']) AC_MSG_RESULT($distance) AC_MSG_CHECKING([if count_if() works as expected]) count_if='yes' AC_TRY_COMPILE([#include #include ${usestd} struct P{P(){}bool operator()(const int&)const{return false;}}p;], [int v;return int(count_if(&v,&v,p))], [AC_DEFINE(PQXX_HAVE_COUNT_IF, 1, [Define if count_if() works according to the standard])], [count_if='no']) AC_MSG_RESULT($count_if) AC_MSG_CHECKING([whether defines a usable iterator template]) AC_TRY_COMPILE([#include ${usestd}], [struct I:iterator{}], [it='yes'], [AC_DEFINE(PQXX_BROKEN_ITERATOR, 1, [Define if lacks an iterator template definition]) it='no']) AC_MSG_RESULT($it) AC_MSG_CHECKING([for reverse_iterator template]) reverseit='yes' AC_TRY_COMPILE([#include ${usestd} struct I:iterator{};], [reverse_iterator rit], [AC_DEFINE(PQXX_HAVE_REVERSE_ITERATOR, 1, [Define if reverse_iterator template works as expected])], [reverseit='no']) AC_MSG_RESULT($reverseit) AC_MSG_CHECKING([for tr1::shared_ptr]) sharedptr='yes' AC_TRY_COMPILE([#include <${tr1dir}memory>], [${tr1}::shared_ptr i(new int(1)); return *i;], [AC_DEFINE(PQXX_HAVE_SHARED_PTR, 1, [Define if compiler has shared_ptr])], [sharedptr='no']) AC_MSG_RESULT($sharedptr) AC_MSG_CHECKING([whether overloaded using-declarations work]) AC_TRY_COMPILE([ struct A {A(){} void f(int){}}; struct B:A {B(){} using A::f; void f(int,bool){}};], [B b;b.f(1,true);], [usingdecl='yes'], [AC_DEFINE(PQXX_BROKEN_USING_DECL, 1, [Define if function overloading using "using" breaks]) usingdecl='no']) AC_MSG_RESULT($usingdecl) AC_PROG_MAKE_SET AC_CONFIG_FILES([Makefile config/Makefile debian/Makefile doc/Makefile doc/Doxyfile src/Makefile test/Makefile test/unit/Makefile tools/Makefile win32/Makefile include/Makefile include/pqxx/Makefile libpqxx.pc pqxx-config libpqxx.spec]) AC_CONFIG_COMMANDS([configitems], ["${srcdir}/tools/splitconfig" "${srcdir}"]) AC_OUTPUT libpqxx-3.1.1/Makefile.am0000664000175000017500000000053112075723507012171 00000000000000SUBDIRS = include src test tools win32 config debian doc EXTRA_DIST = autogen.sh configure.ac.in libpqxx.spec libpqxx.spec.in \ configitems README-UPGRADE VERSION MAINTAINERCLEANFILES=Makefile.in aclocal.m4 config.h.in config.log configure \ stamp-h.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libpqxx.pc bin_SCRIPTS=pqxx-config libpqxx-3.1.1/AUTHORS0000664000175000017500000000026612075723515011211 00000000000000Jeroen T. Vermeulen . Wrote the code. Ray Dassen . Did most of the autoconf etc. stuff Lots of others helped with various other contributions. libpqxx-3.1.1/Makefile.in0000664000175000017500000006771612076703450012220 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/libpqxx.pc.in \ $(srcdir)/libpqxx.spec.in $(srcdir)/pqxx-config.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/libtool.m4 \ $(top_srcdir)/config/m4/ltoptions.m4 \ $(top_srcdir)/config/m4/ltsugar.m4 \ $(top_srcdir)/config/m4/ltversion.m4 \ $(top_srcdir)/config/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/pqxx/config.h CONFIG_CLEAN_FILES = libpqxx.pc pqxx-config libpqxx.spec CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgconfigdir)" SCRIPTS = $(bin_SCRIPTS) SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR = @MKDIR@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PG_CONFIG = @PG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ POSTGRES_INCLUDE = @POSTGRES_INCLUDE@ POSTGRES_LIB = @POSTGRES_LIB@ PQXXVERSION = @PQXXVERSION@ PQXX_ABI = @PQXX_ABI@ PQXX_MAJOR = @PQXX_MAJOR@ PQXX_MINOR = @PQXX_MINOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMLTO = @XMLTO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ with_postgres_include = @with_postgres_include@ with_postgres_lib = @with_postgres_lib@ SUBDIRS = include src test tools win32 config debian doc EXTRA_DIST = autogen.sh configure.ac.in libpqxx.spec libpqxx.spec.in \ configitems README-UPGRADE VERSION MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.h.in config.log configure \ stamp-h.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libpqxx.pc bin_SCRIPTS = pqxx-config all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): libpqxx.pc: $(top_builddir)/config.status $(srcdir)/libpqxx.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ pqxx-config: $(top_builddir)/config.status $(srcdir)/pqxx-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ libpqxx.spec: $(top_builddir)/config.status $(srcdir)/libpqxx.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-pkgconfigDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binSCRIPTS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binSCRIPTS uninstall-pkgconfigDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libpqxx-3.1.1/src/0000775000175000017500000000000012076704653011007 500000000000000libpqxx-3.1.1/src/except.cxx0000664000175000017500000000365112075723515012745 00000000000000/*------------------------------------------------------------------------- * * FILE * except.cxx * * DESCRIPTION * implementation of libpqxx exception classes * * Copyright (c) 2005-2008, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/except" using namespace PGSTD; pqxx::pqxx_exception::~pqxx_exception() throw () { } pqxx::failure::failure(const PGSTD::string &whatarg) : pqxx_exception(), runtime_error(whatarg) { } pqxx::broken_connection::broken_connection() : failure("Connection to database failed") { } pqxx::broken_connection::broken_connection(const PGSTD::string &whatarg) : failure(whatarg) { } pqxx::sql_error::sql_error() : failure("Failed query"), m_Q() { } pqxx::sql_error::sql_error(const PGSTD::string &whatarg) : failure(whatarg), m_Q() { } pqxx::sql_error::sql_error(const PGSTD::string &whatarg, const PGSTD::string &Q) : failure(whatarg), m_Q(Q) { } pqxx::sql_error::~sql_error() throw () { } const string &pqxx::sql_error::query() const throw () { return m_Q; } pqxx::in_doubt_error::in_doubt_error(const PGSTD::string &whatarg) : failure(whatarg) { } pqxx::internal_error::internal_error(const PGSTD::string &whatarg) : logic_error("libpqxx internal error: " + whatarg) { } pqxx::usage_error::usage_error(const PGSTD::string &whatarg) : logic_error(whatarg) { } pqxx::argument_error::argument_error(const PGSTD::string &whatarg) : invalid_argument(whatarg) { } pqxx::conversion_error::conversion_error(const PGSTD::string &whatarg) : domain_error(whatarg) { } pqxx::range_error::range_error(const PGSTD::string &whatarg) : out_of_range(whatarg) { } libpqxx-3.1.1/src/Makefile.am0000664000175000017500000000156012075723515012762 00000000000000lib_LTLIBRARIES = libpqxx.la libpqxx_la_SOURCES = binarystring.cxx \ connection_base.cxx \ connection.cxx \ cursor.cxx \ dbtransaction.cxx \ except.cxx \ largeobject.cxx \ nontransaction.cxx \ notify-listen.cxx \ pipeline.cxx \ prepared_statement.cxx \ result.cxx \ robusttransaction.cxx \ statement_parameters.cxx \ strconv.cxx \ subtransaction.cxx \ tablereader.cxx \ tablestream.cxx \ tablewriter.cxx \ transaction.cxx \ transaction_base.cxx \ util.cxx libpqxx_version = -release $(PQXX_ABI) libpqxx_la_LDFLAGS = $(libpqxx_version) \ -rpath $(libdir) \ ${POSTGRES_LIB} INCLUDES=-I$(top_srcdir)/include -I$(top_builddir)/include ${POSTGRES_INCLUDE} # Override automatically generated list of default includes. It contains only # unnecessary entries, and incorrectly mentions include/pqxx directly. DEFAULT_INCLUDES= MAINTAINERCLEANFILES=Makefile.in libpqxx-3.1.1/src/Makefile.in0000664000175000017500000005077212076703450013001 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/libtool.m4 \ $(top_srcdir)/config/m4/ltoptions.m4 \ $(top_srcdir)/config/m4/ltsugar.m4 \ $(top_srcdir)/config/m4/ltversion.m4 \ $(top_srcdir)/config/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/pqxx/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libpqxx_la_LIBADD = am_libpqxx_la_OBJECTS = binarystring.lo connection_base.lo \ connection.lo cursor.lo dbtransaction.lo except.lo \ largeobject.lo nontransaction.lo notify-listen.lo pipeline.lo \ prepared_statement.lo result.lo robusttransaction.lo \ statement_parameters.lo strconv.lo subtransaction.lo \ tablereader.lo tablestream.lo tablewriter.lo transaction.lo \ transaction_base.lo util.lo libpqxx_la_OBJECTS = $(am_libpqxx_la_OBJECTS) libpqxx_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libpqxx_la_LDFLAGS) $(LDFLAGS) -o $@ depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libpqxx_la_SOURCES) DIST_SOURCES = $(libpqxx_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR = @MKDIR@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PG_CONFIG = @PG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ POSTGRES_INCLUDE = @POSTGRES_INCLUDE@ POSTGRES_LIB = @POSTGRES_LIB@ PQXXVERSION = @PQXXVERSION@ PQXX_ABI = @PQXX_ABI@ PQXX_MAJOR = @PQXX_MAJOR@ PQXX_MINOR = @PQXX_MINOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMLTO = @XMLTO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ with_postgres_include = @with_postgres_include@ with_postgres_lib = @with_postgres_lib@ lib_LTLIBRARIES = libpqxx.la libpqxx_la_SOURCES = binarystring.cxx \ connection_base.cxx \ connection.cxx \ cursor.cxx \ dbtransaction.cxx \ except.cxx \ largeobject.cxx \ nontransaction.cxx \ notify-listen.cxx \ pipeline.cxx \ prepared_statement.cxx \ result.cxx \ robusttransaction.cxx \ statement_parameters.cxx \ strconv.cxx \ subtransaction.cxx \ tablereader.cxx \ tablestream.cxx \ tablewriter.cxx \ transaction.cxx \ transaction_base.cxx \ util.cxx libpqxx_version = -release $(PQXX_ABI) libpqxx_la_LDFLAGS = $(libpqxx_version) \ -rpath $(libdir) \ ${POSTGRES_LIB} INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include ${POSTGRES_INCLUDE} # Override automatically generated list of default includes. It contains only # unnecessary entries, and incorrectly mentions include/pqxx directly. DEFAULT_INCLUDES = MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libpqxx.la: $(libpqxx_la_OBJECTS) $(libpqxx_la_DEPENDENCIES) $(EXTRA_libpqxx_la_DEPENDENCIES) $(libpqxx_la_LINK) -rpath $(libdir) $(libpqxx_la_OBJECTS) $(libpqxx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binarystring.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cursor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbtransaction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/except.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/largeobject.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nontransaction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/notify-listen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipeline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prepared_statement.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/result.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/robusttransaction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statement_parameters.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strconv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subtransaction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tablereader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tablestream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tablewriter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transaction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transaction_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libpqxx-3.1.1/src/statement_parameters.cxx0000664000175000017500000000334212075723515015701 00000000000000/*------------------------------------------------------------------------- * * FILE * statement_parameters.cxx * * DESCRIPTION * Common implementation for statement parameter lists. * See the connection_base hierarchy for more about prepared statements * * Copyright (c) 2006-2013, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/util" #include "pqxx/internal/statement_parameters.hxx" using namespace PGSTD; pqxx::internal::statement_parameters::statement_parameters() : m_values(), m_nonnull() { } void pqxx::internal::statement_parameters::add_checked_param( const PGSTD::string &v, bool nonnull) { m_nonnull.push_back(nonnull); if (nonnull) try { m_values.push_back(v); } catch (const exception &) { // Might as well be exception-safe. m_nonnull.resize(m_nonnull.size() - 1); throw; } } int pqxx::internal::statement_parameters::marshall( scoped_array &values, scoped_array &lengths) const { const size_t elements = m_nonnull.size(); values = new const char *[elements+1]; lengths = new int[2*(elements+1)]; int v = 0; for (size_t i = 0; i < elements; ++i) { if (m_nonnull[i]) { values[i] = m_values[size_t(v)].c_str(); lengths[i] = int(m_values[size_t(v)].size()); ++v; } else { values[i] = 0; lengths[i] = 0; } } values[elements] = 0; lengths[elements] = 0; return int(elements); } libpqxx-3.1.1/src/util.cxx0000664000175000017500000001444112075723515012431 00000000000000/*------------------------------------------------------------------------- * * FILE * util.cxx * * DESCRIPTION * Various utility functions for libpqxx * * Copyright (c) 2003-2013, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include #include #include #include #ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #if defined(_WIN32) #include #endif #endif // PQXX_HAVE_SYS_SELECT_H #ifdef HAVE_UNISTD_H #include #endif #ifdef _WIN32 #include #endif #include "libpq-fe.h" #include "pqxx/except" #include "pqxx/util" using namespace PGSTD; using namespace pqxx::internal; const char pqxx::internal::sql_begin_work[] = "BEGIN", pqxx::internal::sql_commit_work[] = "COMMIT", pqxx::internal::sql_rollback_work[] = "ROLLBACK"; pqxx::thread_safety_model pqxx::describe_thread_safety() throw () { thread_safety_model model; #ifdef PQXX_HAVE_STRERROR_R model.have_strerror_r = true; #else model.have_strerror_r = false; model.description += "The available strerror() may not be thread-safe.\n"; #endif #ifdef PQXX_HAVE_PQISTHREADSAFE if (PQisthreadsafe()) { model.safe_libpq = true; } else { model.safe_libpq = false; model.description += "Using a libpq build that is not thread-safe.\n"; } #else model.safe_libpq = false; model.description += "Built with old libpq version; can't tell whether it is thread-safe.\n"; #endif #ifdef PQXX_HAVE_PQCANCEL model.safe_query_cancel = true; #else model.safe_query_cancel = false; model.description += "Built with old libpq version; canceling queries is unsafe..\n"; #endif #ifdef PQXX_HAVE_SHARED_PTR model.safe_result_copy = true; #else model.safe_result_copy = false; model.description += "Built without shared_ptr. Copying & destroying results is unsafe.\n"; #endif // Sadly I'm not aware of any way to avoid this just yet. model.safe_kerberos = false; model.description += "Kerberos is not thread-safe. If your application uses Kerberos, " "protect all calls to Kerberos or libpqxx using a global lock.\n"; return model; } #ifndef PQXX_HAVE_SHARED_PTR pqxx::internal::refcount::refcount() : m_l(this), m_r(this) { } pqxx::internal::refcount::~refcount() { loseref(); } void pqxx::internal::refcount::makeref(refcount &rhs) throw () { // TODO: Make threadsafe m_l = &rhs; m_r = rhs.m_r; m_l->m_r = m_r->m_l = this; } bool pqxx::internal::refcount::loseref() throw () { // TODO: Make threadsafe const bool result = (m_l == this); m_r->m_l = m_l; m_l->m_r = m_r; m_l = m_r = this; return result; } #endif // PQXX_HAVE_SHARED_PTR string pqxx::internal::namedclass::description() const { try { string desc = classname(); if (!name().empty()) desc += " '" + name() + "'"; return desc; } catch (const exception &) { // Oops, string composition failed! Probably out of memory. // Let's try something easier. } return name().empty() ? classname() : name(); } void pqxx::internal::CheckUniqueRegistration(const namedclass *New, const namedclass *Old) { if (!New) throw internal_error("NULL pointer registered"); if (Old) { if (Old == New) throw usage_error("Started twice: " + New->description()); throw usage_error("Started " + New->description() + " " "while " + Old->description() + " still active"); } } void pqxx::internal::CheckUniqueUnregistration(const namedclass *New, const namedclass *Old) { if (New != Old) { if (!New) throw usage_error("Expected to close " + Old->description() + ", " "but got NULL pointer instead"); if (!Old) throw usage_error("Closed while not open: " + New->description()); throw usage_error("Closed " + New->description() + "; " "expected to close " + Old->description()); } } void pqxx::internal::freepqmem(const void *p) { #ifdef PQXX_HAVE_PQFREEMEM PQfreemem(const_cast(p)); #else free(const_cast(p)); #endif } void pqxx::internal::sleep_seconds(int s) { if (s <= 0) return; #if defined(PQXX_HAVE_SLEEP) // Use POSIX.1 sleep() if available sleep(s); #elif defined(_WIN32) // Windows has its own Sleep(), which speaks milliseconds Sleep(s*1000); #else // If all else fails, use select() on nothing and specify a timeout fd_set F; FD_ZERO(&F); struct timeval timeout; timeout.tv_sec = s; timeout.tv_usec = 0; if (select(0, &F, &F, &F, &timeout) == -1) switch (errno) { case EINVAL: // Invalid timeout throw range_error("Invalid timeout value: " + to_string(s)); case EINTR: // Interrupted by signal break; case ENOMEM: // Out of memory throw bad_alloc(); default: throw internal_error("select() failed for unknown reason"); } #endif } #if !defined(PQXX_HAVE_STRERROR_R) || !defined(PQXX_HAVE_STRERROR_R_GNU) namespace { void cpymsg(char buf[], const char input[], size_t buflen) throw () { #if defined(PQXX_HAVE_STRLCPY) strlcpy(buf, input, buflen); #else strncpy(buf, input, buflen); if (buflen) buf[buflen-1] = '\0'; #endif } } #endif cstring pqxx::internal::strerror_wrapper(int err, char buf[], PGSTD::size_t len) throw () { if (!buf || len <= 0) return "No buffer provided for error message!"; const char *res = buf; #if !defined(PQXX_HAVE_STRERROR_R) && !defined(PQXX_HAVE_STRERROR_S) cpymsg(buf, strerror(err), len); #elif defined(PQXX_HAVE_STRERROR_R_GNU) // GNU strerror_r returns error string (which may be anywhere). return strerror_r(err, buf, len); #elif defined(PQXX_HAVE_STRERROR_S) // Windows equivalent of strerror_r returns result code. if (strerror_s(buf, len, err) == 0) res = buf; else cpymsg(buf, "Unknown error", len); #else // Single Unix Specification version of strerror_r returns result code. switch (strerror_r(err, buf, len)) { case 0: res = buf; break; case -1: cpymsg(buf, "Unknown error", len); break; default: cpymsg( buf, "Unexpected result from strerror_r()! Is it really SUS-compliant?", len); break; } #endif return res; } libpqxx-3.1.1/src/connection_base.cxx0000664000175000017500000011621612075723515014610 00000000000000/*------------------------------------------------------------------------- * * FILE * connection_base.cxx * * DESCRIPTION * implementation of the pqxx::connection_base abstract base class. * pqxx::connection_base encapsulates a frontend to backend connection * * Copyright (c) 2001-2013, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include #include #include #include #include #include #ifdef PQXX_HAVE_SYS_SELECT_H #include #else #include #if defined(_WIN32) #include #endif #if defined(HAVE_UNISTD_H) #include #endif #endif // PQXX_HAVE_SYS_SELECT_H #ifdef PQXX_HAVE_POLL #include #endif #include "libpq-fe.h" #include "pqxx/binarystring" #include "pqxx/connection" #include "pqxx/connection_base" #include "pqxx/nontransaction" #include "pqxx/pipeline" #include "pqxx/result" #include "pqxx/strconv" #include "pqxx/transaction" #include "pqxx/notify-listen" #include "pqxx/internal/gates/result-creation.hxx" #include "pqxx/internal/gates/result-connection.hxx" #include "pqxx/internal/gates/connection-reactivation_avoidance_exemption.hxx" using namespace PGSTD; using namespace pqxx; using namespace pqxx::internal; using namespace pqxx::prepare; extern "C" { // Pass C-linkage notice processor call on to C++-linkage noticer object. The // void * argument points to the noticer. static void pqxxNoticeCaller(void *arg, const char *Msg) { if (arg && Msg) (*static_cast(arg))(Msg); } #ifdef PQXX_SELECT_ACCEPTS_NULL // The always-empty fd_set static fd_set *const fdset_none = 0; #else // PQXX_SELECT_ACCEPTS_NULL static fd_set emptyfd; // Relies on zero-initialization static fd_set *const fdset_none = &emptyfd; #endif // PQXX_SELECT_ACCEPTS_NULL #ifndef PQXX_HAVE_POLL // Concentrate stupid "old-style cast" warnings for GNU libc in one place, and // by using "C" linkage, perhaps silence them altogether. static void set_fdbit(int f, fd_set *s) { #ifdef _MSC_VER #pragma warning ( push ) #pragma warning ( disable: 4389 ) // signed/unsigned mismatch #pragma warning ( disable: 4127 ) // conditional expression is constant #endif FD_SET(f, s); #ifdef _MSC_VER #pragma warning ( pop ) #endif } static void clear_fdmask(fd_set *mask) { FD_ZERO(mask); } #endif } #ifdef PQXX_HAVE_PQENCRYPTPASSWORD string pqxx::encrypt_password(const string &user, const string &password) { PQAlloc p(PQencryptPassword(password.c_str(), user.c_str())); return string(p.get()); } #endif pqxx::connection_base::connection_base(connectionpolicy &pol) : m_Conn(0), m_policy(pol), m_Trans(), m_Noticer(), m_defaultNoticeProcessor(0), m_Trace(0), m_serverversion(0), m_reactivation_avoidance(), m_unique_id(0), m_Completed(false), m_inhibit_reactivation(false), m_caps() { clearcaps(); } void pqxx::connection_base::init() { m_Conn = m_policy.do_startconnect(m_Conn); if (m_policy.is_ready(m_Conn)) activate(); } pqxx::result pqxx::connection_base::make_result( internal::pq::PGresult *rhs, const PGSTD::string &query) { return gate::result_creation::create( rhs, protocol_version(), query, encoding_code()); } int pqxx::connection_base::backendpid() const throw () { return m_Conn ? PQbackendPID(m_Conn) : 0; } namespace { int socket_of(const ::pqxx::internal::pq::PGconn *c) { return c ? PQsocket(c) : -1; } } int pqxx::connection_base::sock() const throw () { return socket_of(m_Conn); } void pqxx::connection_base::activate() { if (!is_open()) { if (m_inhibit_reactivation) throw broken_connection("Could not reactivate connection; " "reactivation is inhibited"); // If any objects were open that didn't survive the closing of our // connection, don't try to reactivate if (m_reactivation_avoidance.get()) return; try { m_Conn = m_policy.do_startconnect(m_Conn); m_Conn = m_policy.do_completeconnect(m_Conn); m_Completed = true; // (But retracted if error is thrown below) if (!is_open()) throw broken_connection(); SetupState(); } catch (const broken_connection &e) { disconnect(); m_Completed = false; throw broken_connection(e.what()); } catch (const exception &) { m_Completed = false; throw; } } } void pqxx::connection_base::deactivate() { if (!m_Conn) return; if (m_Trans.get()) throw usage_error("Attempt to deactivate connection while " + m_Trans.get()->description() + " still open"); if (m_reactivation_avoidance.get()) { process_notice("Attempt to deactivate connection while it is in a state " "that cannot be fully recovered later (ignoring)"); return; } m_Completed = false; m_Conn = m_policy.do_disconnect(m_Conn); } void pqxx::connection_base::simulate_failure() { if (m_Conn) { m_Conn = m_policy.do_disconnect(m_Conn); inhibit_reactivation(true); } } int pqxx::connection_base::protocol_version() const throw () { #ifdef PQXX_HAVE_PQPROTOCOLVERSION return m_Conn ? PQprotocolVersion(m_Conn) : 0; #else return 0; #endif } int pqxx::connection_base::server_version() const throw () { return m_serverversion; } void pqxx::connection_base::set_variable(const PGSTD::string &Var, const PGSTD::string &Value) { if (m_Trans.get()) { // We're in a transaction. The variable should go in there. m_Trans.get()->set_variable(Var, Value); } else { // We're not in a transaction. Set a session variable. if (is_open()) RawSetVar(Var, Value); m_Vars[Var] = Value; } } string pqxx::connection_base::get_variable(const PGSTD::string &Var) { return m_Trans.get() ? m_Trans.get()->get_variable(Var) : RawGetVar(Var); } string pqxx::connection_base::RawGetVar(const PGSTD::string &Var) { // Is this variable in our local map of set variables? // TODO: Is it safe to read-allocate variables in the "cache?" map::const_iterator i=m_Vars.find(Var); if (i != m_Vars.end()) return i->second; return Exec(("SHOW " + Var).c_str(), 0).at(0).at(0).as(string()); } void pqxx::connection_base::clearcaps() throw () { m_caps.reset(); } /** Set up various parts of logical connection state that may need to be * recovered because the physical connection to the database was lost and is * being reset, or that may not have been initialized yet. */ void pqxx::connection_base::SetupState() { if (!m_Conn) throw internal_error("SetupState() on no connection"); if (Status() != CONNECTION_OK) { const string Msg( ErrMsg() ); m_Conn = m_policy.do_disconnect(m_Conn); throw failure(Msg); } read_capabilities(); PSMap::iterator prepared_end(m_prepared.end()); for (PSMap::iterator p = m_prepared.begin(); p != prepared_end; ++p) p->second.registered = false; m_defaultNoticeProcessor = 0; if (m_Noticer.get()) switchnoticer(m_Noticer); InternalSetTrace(); if (!m_listeners.empty() || !m_Vars.empty()) { stringstream restore_query; // Pipeline all queries needed to restore listeners and variables, so we can // send them over in one go. // Reinstate all active listeners if (!m_listeners.empty()) { const listenerlist::const_iterator End = m_listeners.end(); string Last; for (listenerlist::const_iterator i = m_listeners.begin(); i != End; ++i) { // m_listeners can handle multiple listeners waiting on the same event; // issue just one LISTEN for each event. if (i->first != Last) { restore_query << "LISTEN \"" << i->first << "\"; "; Last = i->first; } } } const map::const_iterator var_end(m_Vars.end()); for (map::const_iterator i=m_Vars.begin(); i!=var_end; ++i) restore_query << "SET " << i->first << "=" << i->second << "; "; // Now do the whole batch at once PQsendQuery(m_Conn, restore_query.str().c_str()); result r; do r = make_result(PQgetResult(m_Conn), "[RECONNECT]"); while (gate::result_connection(r)); } m_Completed = true; if (!is_open()) throw broken_connection(); } void pqxx::connection_base::check_result(const result &R) { if (!is_open()) throw broken_connection(); // A shame we can't quite detect out-of-memory to turn this into a bad_alloc! if (!gate::result_connection(R)) throw failure(ErrMsg()); try { gate::result_creation(R).CheckStatus(); } catch (const exception &e) { /* If the connection is broken, we'd expect is_open() to return false, since * PQstatus() is supposed to return CONNECTION_BAD. * * It turns out that, at least for the libpq in PostgreSQL 8.0 and the 8.1 * prerelease I'm looking at now (we're writing July 2005), libpq will only * abandon CONNECTION_OK if the errno code for the broken connection is * exactly EPIPE or ECONNRESET. This is usually fine for local connections, * but ignores the wide range of fatal errors that can occur on TCP/IP * sockets, such as extreme out-of-memory conditions, hardware failures, * severed network connections, and serious software errors. In these cases * libpq will return an error result that is (as far as I can make out) * indistinguishable from a server-side error, but will retain its state * indication of CONNECTION_OK--thus inviting the possibly false impression * that the query failed to execute (in reality it may have executed * successfully) and the definitely false impression that the connection is * still in a workable state. * * A particular worry is connection timeout. One user observed a 15-minute * period of inactivity when he pulled out a network cable, after which * libpq finally returned a result object containing an error (the error * message for connection failure is subject to translation, by the way, and * is also subject to a bug where random data may currently be embedded in * it in place of the system's explanation of the error, so even attempting * to recognize the string is not a reliable workaround) but said the * connection was still operational. * * This bug seems to have been fixed in the libpq that shipped with * PostgreSQL 8.1. */ // TODO: Only do this extra check when using buggy libpq! if (!consume_input()) throw broken_connection(e.what()); const int fd = sock(); if (fd < 0) throw broken_connection(e.what()); #ifdef PQXX_HAVE_POLL pollfd pfd = { fd, POLLERR|POLLHUP|POLLNVAL, 0 }; #else fd_set errs; clear_fdmask(&errs); #endif int sel; do { #ifdef PQXX_HAVE_POLL sel = poll(&pfd, 1, 0); #else timeval nowait = { 0, 0 }; set_fdbit(fd, &errs); sel = select(fd+1, 0, 0, &errs, &nowait); #endif } while (sel == -1 && errno == EINTR); switch (sel) { case -1: switch (errno) { case EBADF: case EINVAL: throw broken_connection(e.what()); case ENOMEM: throw bad_alloc(); } break; case 0: break; case 1: throw broken_connection(e.what()); } throw; } } void pqxx::connection_base::disconnect() throw () { // When we activate again, the server may be different! clearcaps(); m_Conn = m_policy.do_disconnect(m_Conn); } bool pqxx::connection_base::is_open() const throw () { return m_Conn && m_Completed && (Status() == CONNECTION_OK); } void pqxx::connection_base::switchnoticer(const PGSTD::auto_ptr &N) throw () { const PQnoticeProcessor old = PQsetNoticeProcessor(m_Conn, pqxxNoticeCaller, N.get()); if (!m_defaultNoticeProcessor) m_defaultNoticeProcessor = old; } auto_ptr pqxx::connection_base::set_noticer(PGSTD::auto_ptr N) throw () { if (m_Conn) { if (N.get()) switchnoticer(N); else PQsetNoticeProcessor(m_Conn, m_defaultNoticeProcessor, 0); } auto_ptr Old = m_Noticer; m_Noticer = N; return Old; } void pqxx::connection_base::process_notice_raw(const char msg[]) throw () { if (msg && *msg) { // TODO: Read default noticer on startup! if (m_Noticer.get()) (*m_Noticer.get())(msg); else fputs(msg, stderr); } } void pqxx::connection_base::process_notice(const char msg[]) throw () { if (!msg) { process_notice_raw("NULL pointer in client program message!\n"); } else { const size_t len = strlen(msg); if (len > 0) { if (msg[len-1] == '\n') { process_notice_raw(msg); } else try { // Newline is missing. Try the C++ string version of this function. process_notice(string(msg)); } catch (const exception &) { // If we can't even do that, use plain old buffer copying instead // (unavoidably, this will break up overly long messages!) const char separator[] = "[...]\n"; char buf[1007]; size_t bytes = sizeof(buf)-sizeof(separator)-1; size_t written; strcpy(&buf[bytes], separator); // Write all chunks but last. Each will fill the buffer exactly. for (written = 0; (written+bytes) < len; written += bytes) { memcpy(buf, &msg[written], bytes); process_notice_raw(buf); } // Write any remaining bytes (which won't fill an entire buffer) bytes = len-written; memcpy(buf, &msg[written], bytes); // Add trailing nul byte, plus newline unless there already is one strcpy(&buf[bytes], &"\n"[buf[bytes-1]=='\n']); process_notice_raw(buf); } } } } void pqxx::connection_base::process_notice(const PGSTD::string &msg) throw () { // Ensure that message passed to noticer ends in newline if (msg[msg.size()-1] == '\n') { process_notice_raw(msg.c_str()); } else try { const string nl = msg + "\n"; process_notice_raw(nl.c_str()); } catch (const exception &) { // If nothing else works, try writing the message without the newline process_notice_raw(msg.c_str()); // This is ugly. process_notice_raw("\n"); } } void pqxx::connection_base::trace(FILE *Out) throw () { m_Trace = Out; if (m_Conn) InternalSetTrace(); } void pqxx::connection_base::add_listener(pqxx::notify_listener *T) { if (!T) throw argument_error("Null listener registered"); // Add to listener list and attempt to start listening. const listenerlist::iterator p = m_listeners.find(T->name()); const listenerlist::value_type NewVal(T->name(), T); if (p == m_listeners.end()) { // Not listening on this event yet, start doing so. const string LQ("LISTEN \"" + T->name() + "\""); if (is_open()) try { check_result(make_result(PQexec(m_Conn, LQ.c_str()), LQ)); } catch (const broken_connection &) { } m_listeners.insert(NewVal); } else { m_listeners.insert(p, NewVal); } } void pqxx::connection_base::remove_listener(pqxx::notify_listener *T) throw () { if (!T) return; try { // Keep Sun compiler happy... Hope it doesn't annoy other compilers pair tmp_pair(T->name(), T); listenerlist::value_type E = tmp_pair; typedef pair Range; Range R = m_listeners.equal_range(E.first); const listenerlist::iterator i = find(R.first, R.second, E); if (i == R.second) { process_notice("Attempt to remove unknown listener '" + E.first + "'"); } else { // Erase first; otherwise a notification for the same listener may yet // come in and wreak havoc. Thanks Dragan Milenkovic. const bool gone = (m_Conn && (R.second == ++R.first)); m_listeners.erase(i); if (gone) Exec(("UNLISTEN \"" + T->name() + "\"").c_str(), 0); } } catch (const exception &e) { process_notice(e.what()); } } bool pqxx::connection_base::consume_input() throw () { return PQconsumeInput(m_Conn) != 0; } bool pqxx::connection_base::is_busy() const throw () { return PQisBusy(m_Conn) != 0; } namespace { class cancel_wrapper { #ifdef PQXX_HAVE_PQCANCEL PGcancel *m_cancel; char m_errbuf[500]; #else PGconn *m_conn; #endif public: cancel_wrapper(PGconn *conn) : #ifdef PQXX_HAVE_PQCANCEL m_cancel(NULL), m_errbuf() #else m_conn(conn) #endif { if (conn) { #ifdef PQXX_HAVE_PQCANCEL m_cancel = PQgetCancel(conn); if (!m_cancel) throw bad_alloc(); #endif } } #ifdef PQXX_HAVE_PQCANCEL ~cancel_wrapper() { if (m_cancel) PQfreeCancel(m_cancel); } #endif void operator()() { #ifdef PQXX_HAVE_PQCANCEL if (m_cancel && !PQcancel(m_cancel, m_errbuf, int(sizeof(m_errbuf)))) throw sql_error(string(m_errbuf)); #else if (m_conn && !PQrequestCancel(m_conn)) throw sql_error(PQerrorMessage(m_conn)); #endif } }; } void pqxx::connection_base::cancel_query() { cancel_wrapper cancel(m_Conn); cancel(); } namespace { void freemem_notif(PGnotify *p) throw () { #ifdef PQXX_HAVE_PQFREENOTIFY PQfreeNotify(p); #else freepqmem(p); #endif } } // namespace int pqxx::connection_base::get_notifs() { int notifs = 0; if (!is_open()) return notifs; if (!consume_input()) throw broken_connection(); // Even if somehow we receive notifications during our transaction, don't // deliver them. if (m_Trans.get()) return notifs; typedef PQAlloc notifptr; for (notifptr N( PQnotifies(m_Conn) ); N.get(); N = notifptr(PQnotifies(m_Conn))) { typedef listenerlist::iterator TI; notifs++; pair Hit = m_listeners.equal_range(string(N->relname)); for (TI i = Hit.first; i != Hit.second; ++i) try { (*i->second)(N->be_pid); } catch (const exception &e) { try { process_notice("Exception in notification listener '" + i->first + "': " + e.what() + "\n"); } catch (const bad_alloc &) { // Out of memory. Try to get the message out in a more robust way. process_notice("Exception in notification listener, " "and also ran out of memory\n"); } catch (const exception &) { process_notice("Exception in notification listener " "(compounded by other error)\n"); } } N.reset(); } return notifs; } const char *pqxx::connection_base::dbname() { if (!m_Conn) activate(); return PQdb(m_Conn); } const char *pqxx::connection_base::username() { if (!m_Conn) activate(); return PQuser(m_Conn); } const char *pqxx::connection_base::hostname() { if (!m_Conn) activate(); return PQhost(m_Conn); } const char *pqxx::connection_base::port() { if (!m_Conn) activate(); return PQport(m_Conn); } const char *pqxx::connection_base::ErrMsg() const throw () { return m_Conn ? PQerrorMessage(m_Conn) : "No connection to database"; } pqxx::result pqxx::connection_base::Exec(const char Query[], int Retries) { activate(); result R = make_result(PQexec(m_Conn, Query), Query); while ((Retries > 0) && !gate::result_connection(R) && !is_open()) { Retries--; Reset(); if (is_open()) R = make_result(PQexec(m_Conn, Query), Query); } check_result(R); get_notifs(); return R; } pqxx::prepare::declaration pqxx::connection_base::prepare( const PGSTD::string &name, const PGSTD::string &definition) { PSMap::iterator i = m_prepared.find(name); if (i != m_prepared.end()) { if (definition != i->second.definition) { if (!name.empty()) throw argument_error( "Inconsistent redefinition of prepared statement " + name); if (!supports(cap_prepare_unnamed_statement)) throw feature_not_supported( "Defining unnamed prepared statements requires a newer " "libpq version."); i->second.registered = false; i->second.definition = definition; } // Prepare for new definition of parameters i->second.parameters.clear(); i->second.varargs = false; i->second.complete = false; } else { m_prepared.insert(make_pair(name, prepare::internal::prepared_def(definition))); } return prepare::declaration(*this, name); } pqxx::prepare::declaration pqxx::connection_base::prepare( const PGSTD::string &definition) { return this->prepare(string(), definition); } void pqxx::connection_base::unprepare(const PGSTD::string &name) { PSMap::iterator i = m_prepared.find(name); // Quietly ignore duplicated or spurious unprepare()s if (i == m_prepared.end()) return; if (i->second.registered) Exec(("DEALLOCATE \"" + name + "\"").c_str(), 0); m_prepared.erase(i); } namespace { string escape_param(connection_base &C, const char in[], int len, prepare::param_treatment treatment) { if (!in) return "null"; switch (treatment) { case treat_binary: return "'" + escape_binary(string(in, string::size_type(len))) + "'"; case treat_string: return C.quote(in); case treat_bool: switch (in[0]) { case 't': case 'T': case 'f': case 'F': break; default: { // Looks like a numeric value may have been passed. Try to convert it // back to a number, then to bool to normalize its representation. bool b; from_string(in,b); return to_string(b); } } break; case treat_direct: break; default: throw usage_error("Unknown treatment for prepared-statement parameter"); } return in; } } // namespace pqxx::prepare::internal::prepared_def & pqxx::connection_base::find_prepared(const PGSTD::string &statement) { PSMap::iterator s = m_prepared.find(statement); if (s == m_prepared.end()) throw argument_error("Unknown prepared statement '" + statement + "'"); return s->second; } void pqxx::connection_base::prepare_param_declare( const PGSTD::string &statement, const PGSTD::string &sqltype, param_treatment treatment) { prepare::internal::prepared_def &s = find_prepared(statement); if (s.complete) throw usage_error("Attempt to add parameter to prepared statement " + statement + " after its definition was completed"); if (s.varargs) throw usage_error("Attempt to add parameters to prepared statement " + statement + " after arbitrary trailing parameters."); s.addparam(sqltype,treatment); } void pqxx::connection_base::prepare_param_declare_varargs( const PGSTD::string &statement, param_treatment treatment) { if (!supports(cap_statement_varargs)) throw feature_not_supported( "Prepared statements do not support variable argument lists " "in this configuration."); prepare::internal::prepared_def &s = find_prepared(statement); if (s.complete) throw usage_error("Attempt to add arbitrary parameters to prepared " "statement " + statement + " after its definition was completed."); s.varargs_treatment = treatment; s.varargs = true; s.complete = true; } pqxx::prepare::internal::prepared_def & pqxx::connection_base::register_prepared(const PGSTD::string &name) { activate(); prepare::internal::prepared_def &s = find_prepared(name); s.complete = true; // "Register" (i.e., define) prepared statement with backend on demand if (!s.registered && supports(cap_prepared_statements)) { #ifdef PQXX_HAVE_PQPREPARE if (protocol_version() >= 3) { result r = make_result( PQprepare(m_Conn, name.c_str(), s.definition.c_str(), 0, 0), "[PREPARE " + name + "]"); check_result(r); s.registered = !name.empty(); return s; } #endif stringstream P; P << "PREPARE \"" << name << "\" "; if (!s.parameters.empty()) P << '(' << separated_list(",", s.parameters.begin(), s.parameters.end(), prepare::internal::get_sqltype()) << ')'; P << " AS " << s.definition; Exec(P.str().c_str(), 0); s.registered = !name.empty(); } return s; } void pqxx::connection_base::prepare_now(const PGSTD::string &name) { register_prepared(name); } // TODO: Can we make this work with std::string instead of C-style? pqxx::result pqxx::connection_base::prepared_exec( const PGSTD::string &statement, const char *const params[], const int paramlengths[], int nparams) { prepare::internal::prepared_def &s = register_prepared(statement); const int expected_params = int(s.parameters.size()); if (nparams < expected_params) throw usage_error("Insufficient parameters for prepared statement " + statement + ": expected " + to_string(expected_params) + ", " "received " + to_string(nparams)); if (nparams > expected_params && !s.varargs) throw usage_error("Too many arguments for prepared statement " + statement + ": expected " + to_string(expected_params) + ", " "received " + to_string(nparams)); result r; activate(); if (supports(cap_prepared_statements)) { #ifdef PQXX_HAVE_PQEXECPREPARED if (protocol_version() >= 3) { internal::scoped_array binary(size_t(nparams+1)); for (int i=0; i= 0; --n) { const string key = "$" + to_string(n+1), val = escape_param(*this, params[n], paramlengths[n], s.parameters[size_t(n)].treatment); const string::size_type keysz = key.size(); // TODO: Skip quoted strings! (And careful with multibyte encodings...) for (string::size_type h=S.find(key); h!=string::npos; h=S.find(key)) S.replace(h,keysz,val); } Q << S; r = Exec(Q.str().c_str(), 0); } get_notifs(); return r; } bool pqxx::connection_base::prepared_exists(const string &statement) const { PSMap::const_iterator s = m_prepared.find(statement); return s != PSMap::const_iterator(m_prepared.end()); } void pqxx::connection_base::Reset() { if (m_inhibit_reactivation) throw broken_connection("Could not reset connection: " "reactivation is inhibited"); if (m_reactivation_avoidance.get()) return; // TODO: Probably need to go through a full disconnect/reconnect! // Forget about any previously ongoing connection attempts m_Conn = m_policy.do_dropconnect(m_Conn); m_Completed = false; if (m_Conn) { // Reset existing connection PQreset(m_Conn); SetupState(); } else { // No existing connection--start a new one activate(); } } void pqxx::connection_base::close() throw () { m_Completed = false; #ifdef PQXX_QUIET_DESTRUCTORS auto_ptr n(new nonnoticer()); set_noticer(n); #endif inhibit_reactivation(false); m_reactivation_avoidance.clear(); try { if (m_Trans.get()) process_notice("Closing connection while " + m_Trans.get()->description() + " still open"); if (!m_listeners.empty()) { process_notice("Closing connection with outstanding listeners"); m_listeners.clear(); } m_Conn = m_policy.do_disconnect(m_Conn); } catch (...) { } } void pqxx::connection_base::RawSetVar(const PGSTD::string &Var, const PGSTD::string &Value) { Exec(("SET " + Var + "=" + Value).c_str(), 0); } void pqxx::connection_base::AddVariables( const PGSTD::map &Vars) { for (map::const_iterator i=Vars.begin(); i!=Vars.end(); ++i) m_Vars[i->first] = i->second; } void pqxx::connection_base::InternalSetTrace() throw () { if (m_Conn) { if (m_Trace) PQtrace(m_Conn, m_Trace); else PQuntrace(m_Conn); } } int pqxx::connection_base::Status() const throw () { return PQstatus(m_Conn); } void pqxx::connection_base::RegisterTransaction(transaction_base *T) { m_Trans.Register(T); } void pqxx::connection_base::UnregisterTransaction(transaction_base *T) throw () { try { m_Trans.Unregister(T); } catch (const exception &e) { process_notice(e.what()); } } #ifndef PQXX_HAVE_PQPUTCOPY namespace { const string theWriteTerminator = "\\."; } #endif bool pqxx::connection_base::ReadCopyLine(PGSTD::string &Line) { if (!is_open()) throw internal_error("ReadCopyLine() without connection"); Line.erase(); bool Result; #ifdef PQXX_HAVE_PQPUTCOPY char *Buf = 0; const string query = "[END COPY]"; switch (PQgetCopyData(m_Conn, &Buf, false)) { case -2: throw failure("Reading of table data failed: " + string(ErrMsg())); case -1: for (result R(make_result(PQgetResult(m_Conn), query)); gate::result_connection(R); R=make_result(PQgetResult(m_Conn), query)) check_result(R); Result = false; break; case 0: throw internal_error("table read inexplicably went asynchronous"); default: if (Buf) { PQAlloc PQA(Buf); Line = Buf; } Result = true; } #else char Buf[10000]; bool LineComplete = false; while (!LineComplete) { switch (PQgetline(m_Conn, Buf, sizeof(Buf))) { case EOF: PQendcopy(m_Conn); throw failure("Unexpected EOF from backend"); case 0: LineComplete = true; break; case 1: break; default: throw failure("Unexpected COPY response from backend"); } Line += Buf; } Result = (Line != theWriteTerminator); if (Result) { if (!Line.empty() && (Line[Line.size()-1] == '\n')) Line.erase(Line.size()-1); } else { Line.erase(); if (PQendcopy(m_Conn)) throw failure(ErrMsg()); } #endif return Result; } void pqxx::connection_base::WriteCopyLine(const PGSTD::string &Line) { if (!is_open()) throw internal_error("WriteCopyLine() without connection"); const string L = Line + '\n'; const char *const LC = L.c_str(); const string::size_type Len = L.size(); #ifdef PQXX_HAVE_PQPUTCOPY if (PQputCopyData(m_Conn, LC, int(Len)) <= 0) { const string Msg = string("Error writing to table: ") + ErrMsg(); PQendcopy(m_Conn); throw failure(Msg); } #else if (PQputnbytes(m_Conn, LC, int(Len)) == EOF) throw failure(string("Error writing to table: ") + ErrMsg()); #endif } void pqxx::connection_base::EndCopyWrite() { #ifdef PQXX_HAVE_PQPUTCOPY int Res = PQputCopyEnd(m_Conn, NULL); switch (Res) { case -1: throw failure("Write to table failed: " + string(ErrMsg())); case 0: throw internal_error("table write is inexplicably asynchronous"); case 1: // Normal termination. Retrieve result object. break; default: throw internal_error("unexpected result " + to_string(Res) + " " "from PQputCopyEnd()"); } check_result(make_result(PQgetResult(m_Conn), "[END COPY]")); #else WriteCopyLine(theWriteTerminator); // This check is a little odd, but for some reason PostgreSQL 7.4 keeps // returning 1 (i.e., failure) but with an empty error message, and without // anything seeming wrong. if ((PQendcopy(m_Conn) != 0) && ErrMsg() && *ErrMsg()) throw failure(ErrMsg()); #endif } void pqxx::connection_base::start_exec(const PGSTD::string &Q) { activate(); if (!PQsendQuery(m_Conn, Q.c_str())) throw failure(ErrMsg()); } pqxx::internal::pq::PGresult *pqxx::connection_base::get_result() { if (!m_Conn) throw broken_connection(); return PQgetResult(m_Conn); } void pqxx::connection_base::add_reactivation_avoidance_count(int n) { m_reactivation_avoidance.add(n); } string pqxx::connection_base::esc(const char str[], size_t maxlen) { string escaped; #if defined(PQXX_HAVE_PQESCAPESTRINGCONN) // We need a connection object... This is the one reason why this function is // not const! if (!m_Conn) activate(); char *const buf = new char[2*maxlen+1]; try { int err = 0; PQescapeStringConn(m_Conn, buf, str, maxlen, &err); if (err) throw argument_error(ErrMsg()); escaped = string(buf); } catch (const exception &) { delete [] buf; throw; } delete [] buf; #elif defined(PQXX_HAVE_PQESCAPESTRING) scoped_array buf(new char[2*maxlen+1]); const size_t bytes = PQescapeString(buf.get(), str, maxlen); escaped.assign(buf.get(), bytes); #else // Last-ditch workaround. This has serious problems with multibyte encodings. for (size_t i=0; str[i] && (i < maxlen); ++i) { // Ensure we don't pass negative integers to isprint()/isspace(), which // Visual C++ chokes on. const unsigned char c(str[i]); if (c & 0x80) { throw failure("non-ASCII text passed to sqlesc(); " "the libpq version that libpqxx was built with does not support this " "yet (minimum is postgres 7.2)"); } else if (isprint(c) || isspace(c)) { if (c=='\\' || c=='\'') escaped += c; escaped += c; } else { char s[8]; // TODO: Number may be formatted according to locale! :-( sprintf(s, "\\%03o", static_cast(c)); escaped.append(s, 4); } } #endif return escaped; } string pqxx::connection_base::esc(const char str[]) { return this->esc(str, strlen(str)); } string pqxx::connection_base::esc(const PGSTD::string &str) { return this->esc(str.c_str(), str.size()); } string pqxx::connection_base::esc_raw(const unsigned char str[], size_t len) { size_t bytes = 0; #ifdef PQXX_HAVE_PQESCAPEBYTEACONN // We need a connection object... This is the one reason why this function is // not const! if (!m_Conn) activate(); PQAlloc buf( PQescapeByteaConn(m_Conn, str, len, &bytes) ); if (!buf.get()) { // TODO: Distinguish different errors in exception type throw failure(ErrMsg()); } #else unsigned char *const s = const_cast(str); PQAlloc buf( PQescapeBytea(s, len, &bytes) ); if (!buf.get()) throw bad_alloc(); #endif return string(reinterpret_cast(buf.get())); } pqxx::internal::reactivation_avoidance_exemption:: reactivation_avoidance_exemption( connection_base &C) : m_home(C), m_count(gate::connection_reactivation_avoidance_exemption(C).get_counter()), m_open(C.is_open()) { gate::connection_reactivation_avoidance_exemption gate(C); gate.clear_counter(); } pqxx::internal::reactivation_avoidance_exemption:: ~reactivation_avoidance_exemption() { // Don't leave the connection open if reactivation avoidance is in effect and // the connection needed to be reactivated temporarily. if (m_count && !m_open) m_home.deactivate(); gate::connection_reactivation_avoidance_exemption gate(m_home); gate.add_counter(m_count); } namespace { void wait_fd(int fd, bool forwrite=false, timeval *tv=0) { if (fd < 0) throw pqxx::broken_connection(); #ifdef PQXX_HAVE_POLL pollfd pfd = { fd, short(POLLERR|POLLHUP|POLLNVAL | (forwrite?POLLOUT:POLLIN)) , 0 }; poll(&pfd, 1, (tv ? int(tv->tv_sec*1000 + tv->tv_usec/1000) : -1)); #else fd_set s; clear_fdmask(&s); set_fdbit(fd, &s); select(fd+1, (forwrite?fdset_none:&s), (forwrite?&s:fdset_none), &s, tv); #endif } } // namespace void pqxx::internal::wait_read(const pq::PGconn *c) { wait_fd(socket_of(c)); } void pqxx::internal::wait_read(const pq::PGconn *c, long seconds, long microseconds) { timeval tv = { seconds, microseconds }; wait_fd(socket_of(c), false, &tv); } void pqxx::internal::wait_write(const pq::PGconn *c) { wait_fd(socket_of(c), true); } void pqxx::connection_base::wait_read() const { internal::wait_read(m_Conn); } void pqxx::connection_base::wait_read(long seconds, long microseconds) const { internal::wait_read(m_Conn, seconds, microseconds); } void pqxx::connection_base::wait_write() const { internal::wait_write(m_Conn); } int pqxx::connection_base::await_notification() { activate(); int notifs = get_notifs(); if (!notifs) { wait_read(); notifs = get_notifs(); } return notifs; } int pqxx::connection_base::await_notification(long seconds, long microseconds) { activate(); int notifs = get_notifs(); if (!notifs) { wait_read(seconds, microseconds); notifs = get_notifs(); } return notifs; } void pqxx::connection_base::read_capabilities() throw () { #ifdef PQXX_HAVE_PQSERVERVERSION m_serverversion = PQserverVersion(m_Conn); #else m_serverversion = 0; try { // Estimate server version by querying 'version()'. This may not be exact! const string VQ = "SELECT version()"; const result r = gate::result_creation::create( PQexec(m_Conn, VQ.c_str()), protocol_version(), VQ, encoding_code()); int x=0, y=0, z=0; if ((sscanf(r[0][0].c_str(), "PostgreSQL %d.%d.%d", &x, &y, &z) == 3) && (x >= 0) && (x < 100) && (y >= 0) && (y < 100) && (z >= 0) && (z < 100)) m_serverversion = 10000*x + 100*y + z; } catch (const exception &) { } #endif const int v = m_serverversion; #if defined(PQXX_HAVE_PQPREPARE) || defined(PQXX_HAVE_PQFTABLECOL) const int p = protocol_version(); #endif m_caps[cap_prepared_statements] = (v >= 70300); #ifdef PQXX_HAVE_PQPREPARE m_caps[cap_statement_varargs] = (v >= 70300 && (p >= 3)); m_caps[cap_prepare_unnamed_statement] = (p >= 3); #else m_caps[cap_statement_varargs] = false; m_caps[cap_prepare_unnamed_statement] = false; #endif m_caps[cap_cursor_scroll] = (v >= 70400); m_caps[cap_cursor_with_hold] = (v >= 70400); m_caps[cap_cursor_fetch_0] = (v >= 70400); m_caps[cap_nested_transactions] = (v >= 80000); m_caps[cap_create_table_with_oids] = (v >= 80000); m_caps[cap_read_only_transactions] = (v >= 80000); #ifdef PQXX_HAVE_PQFTABLECOL m_caps[cap_table_column] = (p >= 3); #endif #ifdef PQXX_HAVE_PQEXECPARAMS m_caps[cap_parameterized_statements] = (p >= 3); #endif } string pqxx::connection_base::adorn_name(const PGSTD::string &n) { const string id = to_string(++m_unique_id); return n.empty() ? ("x"+id) : (n+"_"+id); } int pqxx::connection_base::encoding_code() throw () { #ifdef PQXX_HAVE_PQENCODING activate(); return PQclientEncoding(m_Conn); #else return 0; #endif } #ifdef PQXX_HAVE_PQEXECPARAMS pqxx::result pqxx::connection_base::parameterized_exec( const PGSTD::string &query, const char *const params[], const int paramlengths[], int nparams) { if (!supports(cap_parameterized_statements)) throw feature_not_supported( "Database backend version does not support parameterized statements."); result r = make_result( PQexecParams( m_Conn, query.c_str(), nparams, NULL, params, paramlengths, NULL, 0), query); check_result(r); get_notifs(); return r; } #else pqxx::result pqxx::connection_base::parameterized_exec( const PGSTD::string &, const char *const[], const int[], int) { throw feature_not_supported( "This libpq version does not support parameterized statements."); } #endif // PQXX_HAVE_PQEXECPARAMS libpqxx-3.1.1/src/result.cxx0000664000175000017500000003152512075723515012774 00000000000000/*------------------------------------------------------------------------- * * FILE * result.cxx * * DESCRIPTION * implementation of the pqxx::result class and support classes. * pqxx::result represents the set of result tuples from a database query * * Copyright (c) 2001-2010, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include #include #include "libpq-fe.h" #include "pqxx/except" #include "pqxx/result" using namespace PGSTD; const string pqxx::result::s_empty_string; pqxx::internal::result_data::result_data() : data(0), protocol(0), query(), encoding_code(0) {} pqxx::internal::result_data::result_data(pqxx::internal::pq::PGresult *d, int p, const PGSTD::string &q, int e) : data(d), protocol(p), query(q), encoding_code(e) {} pqxx::internal::result_data::~result_data() { PQclear(data); } void pqxx::internal::freemem_result_data(const result_data *d) throw () { delete d; } pqxx::result::result(pqxx::internal::pq::PGresult *rhs, int protocol, const PGSTD::string &Query, int encoding_code) : super(new internal::result_data(rhs, protocol, Query, encoding_code)), m_data(rhs) {} bool pqxx::result::operator==(const result &rhs) const throw () { if (&rhs == this) return true; const size_type s(size()); if (rhs.size() != s) return false; for (size_type i=0; idata : 0); rhs.m_data = (rhs.get() ? rhs.get()->data : 0); } const pqxx::result::tuple pqxx::result::at(pqxx::result::size_type i) const throw (range_error) { if (i >= size()) throw range_error("Tuple number out of range"); return operator[](i); } void pqxx::result::ThrowSQLError(const PGSTD::string &Err, const PGSTD::string &Query) const { #if defined(PQXX_HAVE_PQRESULTERRORFIELD) // Try to establish more precise error type, and throw corresponding exception const char *const code = PQresultErrorField(m_data, PG_DIAG_SQLSTATE); if (code) switch (code[0]) { case '0': switch (code[1]) { case '8': throw broken_connection(Err); case 'A': throw feature_not_supported(Err, Query); } break; case '2': switch (code[1]) { case '2': throw data_exception(Err, Query); case '3': if (strcmp(code,"23001")==0) throw restrict_violation(Err, Query); if (strcmp(code,"23502")==0) throw not_null_violation(Err, Query); if (strcmp(code,"23503")==0) throw foreign_key_violation(Err, Query); if (strcmp(code,"23505")==0) throw unique_violation(Err, Query); if (strcmp(code,"23514")==0) throw check_violation(Err, Query); throw integrity_constraint_violation(Err, Query); case '4': throw invalid_cursor_state(Err, Query); case '6': throw invalid_sql_statement_name(Err, Query); } break; case '3': switch (code[1]) { case '4': throw invalid_cursor_name(Err, Query); } break; case '4': switch (code[1]) { case '2': if (strcmp(code,"42501")==0) throw insufficient_privilege(Err, Query); if (strcmp(code,"42601")==0) throw syntax_error(Err, Query); if (strcmp(code,"42703")==0) throw undefined_column(Err, Query); if (strcmp(code,"42883")==0) throw undefined_function(Err, Query); if (strcmp(code,"42P01")==0) throw undefined_table(Err, Query); } break; case '5': switch (code[1]) { case '3': if (strcmp(code,"53100")==0) throw disk_full(Err, Query); if (strcmp(code,"53200")==0) throw out_of_memory(Err, Query); if (strcmp(code,"53300")==0) throw too_many_connections(Err); throw insufficient_resources(Err, Query); } break; case 'P': if (strcmp(code, "P0001")==0) throw plpgsql_raise(Err, Query); if (strcmp(code, "P0002")==0) throw plpgsql_no_data_found(Err, Query); if (strcmp(code, "P0003")==0) throw plpgsql_too_many_rows(Err, Query); throw plpgsql_error(Err, Query); } #endif throw sql_error(Err, Query); } void pqxx::result::CheckStatus() const { const string Err = StatusError(); if (!Err.empty()) ThrowSQLError(Err, query()); } string pqxx::result::StatusError() const { if (!m_data) throw failure("No result set given"); string Err; switch (PQresultStatus(m_data)) { case PGRES_EMPTY_QUERY: // The string sent to the backend was empty. case PGRES_COMMAND_OK: // Successful completion of a command returning no data case PGRES_TUPLES_OK: // The query successfully executed break; case PGRES_COPY_OUT: // Copy Out (from server) data transfer started case PGRES_COPY_IN: // Copy In (to server) data transfer started break; case PGRES_BAD_RESPONSE: // The server's response was not understood case PGRES_NONFATAL_ERROR: case PGRES_FATAL_ERROR: Err = PQresultErrorMessage(m_data); break; default: throw internal_error("pqxx::result: Unrecognized response code " + to_string(int(PQresultStatus(m_data)))); } return Err; } const char *pqxx::result::CmdStatus() const throw () { return PQcmdStatus(m_data); } const string &pqxx::result::query() const throw () { return get() ? get()->query : s_empty_string; } pqxx::oid pqxx::result::inserted_oid() const { if (!m_data) throw usage_error("Attempt to read oid of inserted row without an INSERT " "result"); return PQoidValue(m_data); } pqxx::result::size_type pqxx::result::affected_rows() const { const char *const RowsStr = PQcmdTuples(m_data); return RowsStr[0] ? size_type(atoi(RowsStr)) : 0; } const char *pqxx::result::GetValue(pqxx::result::size_type Row, pqxx::result::tuple::size_type Col) const { return PQgetvalue(m_data, int(Row), int(Col)); } bool pqxx::result::GetIsNull(pqxx::result::size_type Row, pqxx::result::tuple::size_type Col) const { return PQgetisnull(m_data, int(Row), int(Col)) != 0; } pqxx::result::field::size_type pqxx::result::GetLength(pqxx::result::size_type Row, pqxx::result::tuple::size_type Col) const throw () { return size_type(PQgetlength(m_data, int(Row), int(Col))); } pqxx::oid pqxx::result::column_type(tuple::size_type ColNum) const { const oid T = PQftype(m_data, int(ColNum)); if (T == oid_none) throw argument_error( "Attempt to retrieve type of nonexistant column " + to_string(ColNum) + " of query result"); return T; } #ifdef PQXX_HAVE_PQFTABLE pqxx::oid pqxx::result::column_table(tuple::size_type ColNum) const { const oid T = PQftable(m_data, int(ColNum)); /* If we get oid_none, it may be because the column is computed, or because we * got an invalid row number. */ if (T == oid_none && ColNum >= columns()) throw argument_error("Attempt to retrieve table ID for column " + to_string(ColNum) + " out of " + to_string(columns())); return T; } #endif #ifdef PQXX_HAVE_PQFTABLECOL pqxx::result::tuple::size_type pqxx::result::table_column(tuple::size_type ColNum) const { const tuple::size_type n = size_type(PQftablecol(m_data, int(ColNum))); if (n) return n-1; // Failed. Now find out why, so we can throw a sensible exception. // Possible reasons: // 1. Column out of range // 2. Not using protocol 3.0 or better // 3. Column not taken directly from a table if (ColNum > columns()) throw range_error("Invalid column index in table_column(): " + to_string(ColNum)); if (!get() || get()->protocol < 3) throw feature_not_supported("Backend version does not support querying of " "column's original number", "[TABLE_COLUMN]"); throw usage_error("Can't query origin of column " + to_string(ColNum) + ": " "not derived from table column"); } #endif int pqxx::result::errorposition() const throw () { int pos = -1; #if defined(PQXX_HAVE_PQRESULTERRORFIELD) if (m_data) { const char *p = PQresultErrorField(m_data, PG_DIAG_STATEMENT_POSITION); if (p) from_string(p, pos); } #endif // PQXX_HAVE_PQRESULTERRORFIELD return pos; } // tuple pqxx::result::field pqxx::result::tuple::at(const char f[]) const { return field(*this, m_Begin + column_number(f)); } pqxx::result::field pqxx::result::tuple::at(pqxx::result::tuple::size_type i) const throw (range_error) { if (i >= size()) throw range_error("Invalid field number"); return operator[](i); } const char * pqxx::result::column_name(pqxx::result::tuple::size_type Number) const { const char *const N = PQfname(m_data, int(Number)); if (!N) throw range_error("Invalid column number: " + to_string(Number)); return N; } pqxx::result::tuple::size_type pqxx::result::columns() const throw () { return m_data ? size_type(PQnfields(m_data)) : 0; } pqxx::result::tuple::size_type pqxx::result::tuple::column_number(const char ColName[]) const { const size_type n = m_Home->column_number(ColName); if (n >= m_End) return result().column_number(ColName); if (n >= m_Begin) return n - m_Begin; const char *const AdaptedColName = m_Home->column_name(n); for (size_type i = m_Begin; i < m_End; ++i) if (strcmp(AdaptedColName, m_Home->column_name(i)) == 0) return i - m_Begin; return result().column_number(ColName); } pqxx::result::tuple::size_type pqxx::result::column_number(const char ColName[]) const { const int N = PQfnumber(m_data, ColName); // TODO: Should this be an out_of_range? if (N == -1) throw argument_error("Unknown column name: '" + string(ColName) + "'"); return tuple::size_type(N); } pqxx::result::tuple pqxx::result::tuple::slice(size_type Begin, size_type End) const { if (Begin > End || End > size()) throw range_error("Invalid field range"); tuple result(*this); result.m_Begin = m_Begin + Begin; result.m_End = m_Begin + End; return result; } bool pqxx::result::tuple::empty() const throw () { return m_Begin == m_End; } // const_iterator pqxx::result::const_iterator pqxx::result::const_iterator::operator++(int) { const_iterator old(*this); m_Index++; return old; } pqxx::result::const_iterator pqxx::result::const_iterator::operator--(int) { const_iterator old(*this); m_Index--; return old; } // const_fielditerator pqxx::result::const_fielditerator pqxx::result::const_fielditerator::operator++(int) { const_fielditerator old(*this); m_col++; return old; } pqxx::result::const_fielditerator pqxx::result::const_fielditerator::operator--(int) { const_fielditerator old(*this); m_col--; return old; } pqxx::result::const_iterator pqxx::result::const_reverse_iterator::base() const throw () { iterator_type tmp(*this); return ++tmp; } pqxx::result::const_reverse_iterator pqxx::result::const_reverse_iterator::operator++(int) { const_reverse_iterator tmp(*this); iterator_type::operator--(); return tmp; } pqxx::result::const_reverse_iterator pqxx::result::const_reverse_iterator::operator--(int) { const_reverse_iterator tmp(*this); iterator_type::operator++(); return tmp; } pqxx::result::const_fielditerator pqxx::result::const_reverse_fielditerator::base() const throw () { iterator_type tmp(*this); return ++tmp; } pqxx::result::const_reverse_fielditerator pqxx::result::const_reverse_fielditerator::operator++(int) { const_reverse_fielditerator tmp(*this); operator++(); return tmp; } pqxx::result::const_reverse_fielditerator pqxx::result::const_reverse_fielditerator::operator--(int) { const_reverse_fielditerator tmp(*this); operator--(); return tmp; } libpqxx-3.1.1/src/strconv.cxx0000664000175000017500000002725512075723515013161 00000000000000/*------------------------------------------------------------------------- * * FILE * strconv.cxx * * DESCRIPTION * implementation of string conversions * * Copyright (c) 2008, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #ifdef PQXX_HAVE_LIMITS #include #endif #ifdef PQXX_HAVE_LOCALE #include #endif #include "pqxx/except" #include "pqxx/strconv" using namespace PGSTD; using namespace pqxx::internal; namespace { // It turns out that NaNs are pretty hard to do portably. If the appropriate // C++ traits functions are not available, C99 defines a NAN macro (also widely // supported in other dialects, I believe) and some functions that can do the // same work. But if none of those are available, we need to resort to // compile-time "0/0" expressions. Most compilers won't crash while compiling // those anymore, but there may be unneeded warnings--which are almost as bad. template void set_to_NaN(T &); #if defined(PQXX_HAVE_QUIET_NAN) template inline void set_to_NaN(T &t) { t = numeric_limits::quiet_NaN(); } #elif defined(PQXX_HAVE_C_NAN) template inline void set_to_NaN(T &t) { t = NAN; } #elif defined(PQXX_HAVE_NAN) template<> inline void set_to_NaN(float &t) { t = fnan(""); } template<> inline void set_to_NaN(double &t) { t = nan(""); } #ifdef PQXX_HAVE_LONG_DOUBLE template<> inline void set_to_NaN(long double &t) { t = lnan(""); } #endif #else const float nan_f(0.0/0.0); template<> inline void set_to_NaN(float &t) { t = nan_f; } const double nan_d(0.0/0.0); template<> inline void set_to_NaN(double &t) { t = nan_d; } #ifdef PQXX_HAVE_LONG_DOUBLE const long double nan_ld(0.0/0.0); template<> inline void set_to_NaN(long double &t) { t = nan_ld; } #endif #endif // TODO: This may need tweaking for various compilers. template inline void set_to_Inf(T &t, int sign=1) { #ifdef PQXX_HAVE_LIMITS T value = numeric_limits::infinity(); #else T value = INFINITY; #endif if (sign < 0) value = -value; t = value; } void report_overflow() { throw pqxx::failure( "Could not convert string to integer: value out of range."); } /** Helper to check for underflow before multiplying a number by 10. * * Needed just so the compiler doesn't get to complain about an "if (n < 0)" * clause that's pointless for unsigned numbers. */ template struct underflow_check; /* Specialization for signed types: check. */ template struct underflow_check { static void check_before_adding_digit(T n) { const T ten(10); if (n < 0 && (numeric_limits::min() / ten) > n) report_overflow(); } }; /* Specialization for unsigned types: no check needed becaue negative * numbers don't exist. */ template struct underflow_check { static void check_before_adding_digit(T) {} }; /// Return 10*n, or throw exception if it overflows. template T safe_multiply_by_ten(T n) { const T ten(10); if (n > 0 && (numeric_limits::max() / n) < ten) report_overflow(); underflow_check::is_signed>::check_before_adding_digit( n); return T(n * ten); } /// Add a digit d to n, or throw exception if it overflows. template T safe_add_digit(T n, T d) { assert((n >= 0 && d >= 0) || (n <=0 && d <= 0)); if ((n > 0) && (n > (numeric_limits::max() - d))) report_overflow(); if ((n < 0) && (n < (numeric_limits::min() - d))) report_overflow(); return n + d; } /// For use in string parsing: add new numeric digit to intermediate value template inline L absorb_digit(L value, R digit) { return L(safe_multiply_by_ten(value) + L(digit)); } template void from_string_signed(const char Str[], T &Obj) { int i = 0; T result = 0; if (!isdigit(Str[i])) { if (Str[i] != '-') throw pqxx::failure("Could not convert string to integer: '" + string(Str) + "'"); for (++i; isdigit(Str[i]); ++i) result = absorb_digit(result, -digit_to_number(Str[i])); } else for (; isdigit(Str[i]); ++i) result = absorb_digit(result, digit_to_number(Str[i])); if (Str[i]) throw pqxx::failure("Unexpected text after integer: '" + string(Str) + "'"); Obj = result; } template void from_string_unsigned(const char Str[], T &Obj) { int i = 0; T result = 0; if (!isdigit(Str[i])) throw pqxx::failure("Could not convert string to unsigned integer: '" + string(Str) + "'"); for (; isdigit(Str[i]); ++i) result = absorb_digit(result, digit_to_number(Str[i])); if (Str[i]) throw pqxx::failure("Unexpected text after integer: '" + string(Str) + "'"); Obj = result; } bool valid_infinity_string(const char str[]) { // TODO: Also accept less sensible case variations. return strcmp("infinity", str) == 0 || strcmp("Infinity", str) == 0 || strcmp("INFINITY", str) == 0; } /* These are hard. Sacrifice performance of specialized, nonflexible, * non-localized code and lean on standard library. Some special-case code * handles NaNs. */ template inline void from_string_float(const char Str[], T &Obj) { bool ok = false; T result; switch (Str[0]) { case 'N': case 'n': // Accept "NaN," "nan," etc. ok = ((Str[1]=='A'||Str[1]=='a') && (Str[2]=='N'||Str[2]=='n') && !Str[3]); set_to_NaN(result); break; case 'I': case 'i': ok = valid_infinity_string(Str); set_to_Inf(result); break; default: if (Str[0] == '-' && valid_infinity_string(&Str[1])) { ok = true; set_to_Inf(result, -1); } else { stringstream S(Str); #if defined(PQXX_HAVE_IMBUE) S.imbue(locale("C")); #endif ok = (S >> result); } break; } if (!ok) throw pqxx::failure("Could not convert string to numeric value: '" + string(Str) + "'"); Obj = result; } template inline string to_string_unsigned(T Obj) { if (!Obj) return "0"; // Every byte of width on T adds somewhere between 3 and 4 digits to the // maximum length of our decimal string. char buf[4*sizeof(T)+1]; char *p = &buf[sizeof(buf)]; *--p = '\0'; while (Obj > 0) { *--p = number_to_digit(int(Obj%10)); Obj /= 10; } return p; } template inline string to_string_fallback(T Obj) { stringstream S; #ifdef PQXX_HAVE_IMBUE S.imbue(locale("C")); #endif // Provide enough precision. #ifdef PQXX_HAVE_LIMITS // Kirit reports getting two more digits of precision than // numeric_limits::digits10 would give him, so we try not to make him lose // those last few bits. S.precision(numeric_limits::digits10 + 2); #else // Guess: enough for an IEEE 754 double-precision value. S.precision(16); #endif S << Obj; return S.str(); } template inline bool is_NaN(T Obj) { return #if defined(PQXX_HAVE_C_ISNAN) isnan(Obj); #elif defined(PQXX_HAVE_LIMITS) !(Obj <= Obj+numeric_limits::max()); #else !(Obj <= Obj + 1000); #endif } template inline bool is_Inf(T Obj) { return #if defined(PQXX_HAVE_C_ISINF) isinf(Obj); #else Obj >= Obj+1 && Obj <= 2*Obj && Obj >= 2*Obj; #endif } template inline string to_string_float(T Obj) { // TODO: Omit this special case if NaN is output as "nan"/"NAN"/"NaN" #ifndef PQXX_HAVE_NAN_OUTPUT if (is_NaN(Obj)) return "nan"; #endif // TODO: Omit this special case if infinity is output as "infinity" #ifndef PQXX_HAVE_INF_OUTPUT if (is_Inf(Obj)) return Obj > 0 ? "infinity" : "-infinity"; #endif return to_string_fallback(Obj); } template inline string to_string_signed(T Obj) { if (Obj < 0) { // Remember--the smallest negative number for a given two's-complement type // cannot be negated. #if PQXX_HAVE_LIMITS const bool negatable = (Obj != numeric_limits::min()); #else T Neg(-Obj); const bool negatable = Neg > 0; #endif if (negatable) return '-' + to_string_unsigned(-Obj); else return to_string_fallback(Obj); } return to_string_unsigned(Obj); } } // namespace namespace pqxx { namespace internal { void throw_null_conversion(const PGSTD::string &type) { throw conversion_error("Attempt to convert null to " + type); } } // namespace pqxx::internal void string_traits::from_string(const char Str[], bool &Obj) { bool OK, result=false; switch (Str[0]) { case 0: result = false; OK = true; break; case 'f': case 'F': result = false; OK = !(Str[1] && (strcmp(Str+1, "alse") != 0) && (strcmp(Str+1, "ALSE") != 0)); break; case '0': { int I; string_traits::from_string(Str, I); result = (I != 0); OK = ((I == 0) || (I == 1)); } break; case '1': result = true; OK = !Str[1]; break; case 't': case 'T': result = true; OK = !(Str[1] && (strcmp(Str+1, "rue") != 0) && (strcmp(Str+1, "RUE") != 0)); break; default: OK = false; } if (!OK) throw argument_error("Failed conversion to bool: '" + string(Str) + "'"); Obj = result; } string string_traits::to_string(bool Obj) { return Obj ? "true" : "false"; } void string_traits::from_string(const char Str[], short &Obj) { from_string_signed(Str, Obj); } string string_traits::to_string(short Obj) { return to_string_signed(Obj); } void string_traits::from_string( const char Str[], unsigned short &Obj) { from_string_unsigned(Str, Obj); } string string_traits::to_string(unsigned short Obj) { return to_string_unsigned(Obj); } void string_traits::from_string(const char Str[], int &Obj) { from_string_signed(Str, Obj); } string string_traits::to_string(int Obj) { return to_string_signed(Obj); } void string_traits::from_string( const char Str[], unsigned int &Obj) { from_string_unsigned(Str, Obj); } string string_traits::to_string(unsigned int Obj) { return to_string_unsigned(Obj); } void string_traits::from_string(const char Str[], long &Obj) { from_string_signed(Str, Obj); } string string_traits::to_string(long Obj) { return to_string_signed(Obj); } void string_traits::from_string( const char Str[], unsigned long &Obj) { from_string_unsigned(Str, Obj); } string string_traits::to_string(unsigned long Obj) { return to_string_unsigned(Obj); } #ifdef PQXX_HAVE_LONG_LONG void string_traits::from_string(const char Str[], long long &Obj) { from_string_signed(Str, Obj); } string string_traits::to_string(long long Obj) { return to_string_signed(Obj); } void string_traits::from_string( const char Str[], unsigned long long &Obj) { from_string_unsigned(Str, Obj); } string string_traits::to_string(unsigned long long Obj) { return to_string_unsigned(Obj); } #endif void string_traits::from_string(const char Str[], float &Obj) { from_string_float(Str, Obj); } string string_traits::to_string(float Obj) { return to_string_float(Obj); } void string_traits::from_string(const char Str[], double &Obj) { from_string_float(Str, Obj); } string string_traits::to_string(double Obj) { return to_string_float(Obj); } #ifdef PQXX_HAVE_LONG_DOUBLE void string_traits::from_string(const char Str[], long double &Obj) { from_string_float(Str, Obj); } string string_traits::to_string(long double Obj) { return to_string_float(Obj); } #endif } // namespace pqxx libpqxx-3.1.1/src/transaction_base.cxx0000664000175000017500000002770012075723515014775 00000000000000/*------------------------------------------------------------------------- * * FILE * transaction_base.cxx * * DESCRIPTION * common code and definitions for the transaction classes * pqxx::transaction_base defines the interface for any abstract class that * represents a database transaction * * Copyright (c) 2001-2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include #include "pqxx/connection_base" #include "pqxx/result" #include "pqxx/tablestream" #include "pqxx/transaction_base" #include "pqxx/internal/gates/connection-transaction.hxx" #include "pqxx/internal/gates/connection-parameterized_invocation.hxx" #include "pqxx/internal/gates/transaction-transactionfocus.hxx" using namespace PGSTD; using namespace pqxx::internal; pqxx::internal::parameterized_invocation::parameterized_invocation( connection_base &c, const PGSTD::string &query) : m_home(c), m_query(query) { } pqxx::result pqxx::internal::parameterized_invocation::exec() { scoped_array values; scoped_array lengths; const int elements = marshall(values, lengths); return gate::connection_parameterized_invocation(m_home).parameterized_exec( m_query, values.get(), lengths.get(), elements); } pqxx::transaction_base::transaction_base(connection_base &C, bool direct) : namedclass("transaction_base"), m_reactivation_avoidance(), m_Conn(C), m_Focus(), m_Status(st_nascent), m_Registered(false), m_PendingError() { if (direct) { gate::connection_transaction gate(conn()); gate.RegisterTransaction(this); m_Registered = true; } } pqxx::transaction_base::~transaction_base() { #ifdef PQXX_QUIET_DESTRUCTORS disable_noticer Quiet(m_Conn); #endif try { reactivation_avoidance_clear(); if (!m_PendingError.empty()) process_notice("UNPROCESSED ERROR: " + m_PendingError + "\n"); if (m_Registered) { m_Conn.process_notice(description() + " was never closed properly!\n"); gate::connection_transaction gate(conn()); gate.UnregisterTransaction(this); } } catch (const exception &e) { try { process_notice(string(e.what()) + "\n"); } catch (const exception &) { process_notice(e.what()); } } } void pqxx::transaction_base::commit() { CheckPendingError(); // Check previous status code. Caller should only call this function if // we're in "implicit" state, but multiple commits are silently accepted. switch (m_Status) { case st_nascent: // Empty transaction. No skin off our nose. return; case st_active: // Just fine. This is what we expect. break; case st_aborted: throw usage_error("Attempt to commit previously aborted " + description()); case st_committed: // Transaction has been committed already. This is not exactly proper // behaviour, but throwing an exception here would only give the impression // that an abort is needed--which would only confuse things further at this // stage. // Therefore, multiple commits are accepted, though under protest. m_Conn.process_notice(description() + " committed more than once\n"); return; case st_in_doubt: // Transaction may or may not have been committed. The only thing we can // really do is keep telling the caller that the transaction is in doubt. throw in_doubt_error(description() + " committed again while in an indeterminate state"); default: throw internal_error("pqxx::transaction: invalid status code"); } // Tricky one. If stream is nested in transaction but inside the same scope, // the commit() will come before the stream is closed. Which means the // commit is premature. Punish this swiftly and without fail to discourage // the habit from forming. if (m_Focus.get()) throw failure("Attempt to commit " + description() + " " "with " + m_Focus.get()->description() + " " "still open"); // Check that we're still connected (as far as we know--this is not an // absolute thing!) before trying to commit. If the connection was broken // already, the commit would fail anyway but this way at least we don't remain // in-doubt as to whether the backend got the commit order at all. if (!m_Conn.is_open()) throw broken_connection("Broken connection to backend; " "cannot complete transaction"); try { do_commit(); m_Status = st_committed; } catch (const in_doubt_error &) { m_Status = st_in_doubt; throw; } catch (const exception &) { m_Status = st_aborted; throw; } gate::connection_transaction gate(conn()); gate.AddVariables(m_Vars); End(); } void pqxx::transaction_base::abort() { // Check previous status code. Quietly accept multiple aborts to // simplify emergency bailout code. switch (m_Status) { case st_nascent: // Never began transaction. No need to issue rollback. break; case st_active: try { do_abort(); } catch (const exception &) { } break; case st_aborted: return; case st_committed: throw usage_error("Attempt to abort previously committed " + description()); case st_in_doubt: // Aborting an in-doubt transaction is probably a reasonably sane response // to an insane situation. Log it, but do not complain. m_Conn.process_notice("Warning: " + description() + " " "aborted after going into indeterminate state; " "it may have been executed anyway.\n"); return; default: throw internal_error("invalid transaction status"); } m_Status = st_aborted; End(); } string pqxx::transaction_base::esc_raw(const PGSTD::string &str) const { const unsigned char *p = reinterpret_cast(str.c_str()); return m_Conn.esc_raw(p, str.size()); } void pqxx::transaction_base::activate() { switch (m_Status) { case st_nascent: // Make sure transaction has begun before executing anything Begin(); break; case st_active: break; case st_committed: case st_aborted: case st_in_doubt: throw usage_error( "Attempt to activate " + description() + " " "which is already closed"); default: throw internal_error("pqxx::transaction: invalid status code"); } } pqxx::result pqxx::transaction_base::exec(const PGSTD::string &Query, const PGSTD::string &Desc) { CheckPendingError(); const string N = (Desc.empty() ? "" : "'" + Desc + "' "); if (m_Focus.get()) throw usage_error("Attempt to execute query " + N + "on " + description() + " " "with " + m_Focus.get()->description() + " " "still open"); try { activate(); } catch (const usage_error &e) { throw usage_error("Error executing query " + N + ". " + e.what()); } // TODO: Pass Desc to do_exec(), and from there on down return do_exec(Query.c_str()); } #ifdef PQXX_HAVE_PQEXECPARAMS pqxx::internal::parameterized_invocation pqxx::transaction_base::parameterized(const PGSTD::string &query) { return internal::parameterized_invocation(conn(), query); } #endif // PQXX_HAVE_PQEXECPARAMS pqxx::prepare::invocation pqxx::transaction_base::prepared(const PGSTD::string &statement) { try { activate(); } catch (const usage_error &e) { throw usage_error( "Error executing prepared statement " + statement + ". " + e.what()); } return prepare::invocation(*this, statement); } void pqxx::transaction_base::set_variable(const PGSTD::string &Var, const PGSTD::string &Value) { // Before committing to this new value, see what the backend thinks about it gate::connection_transaction gate(conn()); gate.RawSetVar(Var, Value); m_Vars[Var] = Value; } string pqxx::transaction_base::get_variable(const PGSTD::string &Var) { const map::const_iterator i = m_Vars.find(Var); if (i != m_Vars.end()) return i->second; return gate::connection_transaction(conn()).RawGetVar(Var); } void pqxx::transaction_base::Begin() { if (m_Status != st_nascent) throw internal_error("pqxx::transaction: " "Begin() called while not in nascent state"); try { // Better handle any pending notifications before we begin m_Conn.get_notifs(); do_begin(); m_Status = st_active; } catch (const exception &) { End(); throw; } } void pqxx::transaction_base::End() throw () { try { try { CheckPendingError(); } catch (const exception &e) { m_Conn.process_notice(e.what()); } if (m_Registered) { m_Registered = false; gate::connection_transaction gate(conn()); gate.UnregisterTransaction(this); } if (m_Status != st_active) return; if (m_Focus.get()) m_Conn.process_notice("Closing " + description() + " " " with " + m_Focus.get()->description() + " " "still open\n"); try { abort(); } catch (const exception &e) { m_Conn.process_notice(e.what()); } gate::connection_transaction gate(conn()); gate.take_reactivation_avoidance(m_reactivation_avoidance.get()); m_reactivation_avoidance.clear(); } catch (const exception &e) { try { m_Conn.process_notice(e.what()); } catch (const exception &) {} } } void pqxx::transaction_base::RegisterFocus(internal::transactionfocus *S) { m_Focus.Register(S); } void pqxx::transaction_base::UnregisterFocus(internal::transactionfocus *S) throw () { try { m_Focus.Unregister(S); } catch (const exception &e) { m_Conn.process_notice(string(e.what()) + "\n"); } } pqxx::result pqxx::transaction_base::DirectExec(const char C[], int Retries) { CheckPendingError(); return gate::connection_transaction(conn()).Exec(C, Retries); } void pqxx::transaction_base::RegisterPendingError(const PGSTD::string &Err) throw () { if (m_PendingError.empty() && !Err.empty()) { try { m_PendingError = Err; } catch (const exception &e) { try { process_notice("UNABLE TO PROCESS ERROR\n"); process_notice(e.what()); process_notice("ERROR WAS:"); process_notice(Err); } catch (...) { } } } } void pqxx::transaction_base::CheckPendingError() { if (!m_PendingError.empty()) { const string Err(m_PendingError); #ifdef PQXX_HAVE_STRING_CLEAR m_PendingError.clear(); #else m_PendingError.resize(0); #endif throw failure(m_PendingError); } } namespace { string MakeCopyString(const string &Table, const string &Columns) { string Q = "COPY " + Table + " "; if (!Columns.empty()) Q += "(" + Columns + ") "; return Q; } } // namespace void pqxx::transaction_base::BeginCopyRead(const PGSTD::string &Table, const PGSTD::string &Columns) { exec(MakeCopyString(Table, Columns) + "TO STDOUT"); } void pqxx::transaction_base::BeginCopyWrite(const PGSTD::string &Table, const PGSTD::string &Columns) { exec(MakeCopyString(Table, Columns) + "FROM STDIN"); } bool pqxx::transaction_base::ReadCopyLine(PGSTD::string &line) { return gate::connection_transaction(conn()).ReadCopyLine(line); } void pqxx::transaction_base::WriteCopyLine(const PGSTD::string &line) { gate::connection_transaction gate(conn()); gate.WriteCopyLine(line); } void pqxx::transaction_base::EndCopyWrite() { gate::connection_transaction gate(conn()); gate.EndCopyWrite(); } void pqxx::internal::transactionfocus::register_me() { gate::transaction_transactionfocus gate(m_Trans); gate.RegisterFocus(this); m_registered = true; } void pqxx::internal::transactionfocus::unregister_me() throw () { gate::transaction_transactionfocus gate(m_Trans); gate.UnregisterFocus(this); m_registered = false; } void pqxx::internal::transactionfocus::reg_pending_error(const PGSTD::string &err) throw () { gate::transaction_transactionfocus gate(m_Trans); gate.RegisterPendingError(err); } libpqxx-3.1.1/src/dbtransaction.cxx0000664000175000017500000000501712075723515014306 00000000000000/*------------------------------------------------------------------------- * * FILE * dbtransaction.cxx * * DESCRIPTION * implementation of the pqxx::dbtransaction class. * pqxx::dbtransaction represents a real backend transaction * * Copyright (c) 2004-2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/dbtransaction" #include "pqxx/internal/gates/connection-dbtransaction.hxx" using namespace PGSTD; using namespace pqxx::internal; namespace { string generate_set_transaction( pqxx::connection_base &C, pqxx::readwrite_policy rw, const string &IsolationString=string()) { string args; if (!IsolationString.empty()) if (IsolationString != pqxx::isolation_traits::name()) args += " ISOLATION LEVEL " + IsolationString; if (rw != pqxx::read_write && C.supports(pqxx::connection_base::cap_read_only_transactions)) args += " READ ONLY"; return args.empty() ? pqxx::internal::sql_begin_work : (string(pqxx::internal::sql_begin_work) + "; SET TRANSACTION" + args); } } // namespace pqxx::dbtransaction::dbtransaction( connection_base &C, const PGSTD::string &IsolationString, readwrite_policy rw) : namedclass("dbtransaction"), transaction_base(C), m_StartCmd(generate_set_transaction(C, rw, IsolationString)) { } pqxx::dbtransaction::dbtransaction( connection_base &C, bool direct, readwrite_policy rw) : namedclass("dbtransaction"), transaction_base(C, direct), m_StartCmd(generate_set_transaction(C, rw)) { } pqxx::dbtransaction::~dbtransaction() { } void pqxx::dbtransaction::do_begin() { const gate::connection_dbtransaction gate(conn()); const int avoidance_counter = gate.get_reactivation_avoidance_count(); DirectExec(m_StartCmd.c_str(), avoidance_counter ? 0 : 2); } pqxx::result pqxx::dbtransaction::do_exec(const char Query[]) { try { return DirectExec(Query); } catch (const exception &) { try { abort(); } catch (const exception &) {} throw; } } void pqxx::dbtransaction::do_abort() { reactivation_avoidance_clear(); DirectExec(internal::sql_rollback_work); } string pqxx::dbtransaction::fullname(const PGSTD::string &ttype, const PGSTD::string &isolation) { return ttype + "<" + isolation + ">"; } libpqxx-3.1.1/src/pipeline.cxx0000664000175000017500000002745712075723515013274 00000000000000/*------------------------------------------------------------------------- * * FILE * pipeline.cxx * * DESCRIPTION * implementation of the pqxx::pipeline class * Throughput-optimized query manager * * Copyright (c) 2003-2013, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/dbtransaction" #include "pqxx/pipeline" #include "pqxx/internal/gates/connection-pipeline.hxx" #include "pqxx/internal/gates/result-creation.hxx" using namespace PGSTD; using namespace pqxx; using namespace pqxx::internal; #define pqxxassert(ARG) /* ignore */ namespace { const string theSeparator("; "); const string theDummyValue("1"); const string theDummyQuery("SELECT " + theDummyValue + theSeparator); } pqxx::pipeline::pipeline(transaction_base &t, const PGSTD::string &Name) : namedclass("pipeline", Name), transactionfocus(t), m_queries(), m_issuedrange(), m_retain(0), m_num_waiting(0), m_q_id(0), m_dummy_pending(false), m_error(qid_limit()) { m_issuedrange = make_pair(m_queries.end(), m_queries.end()); attach(); } pqxx::pipeline::~pipeline() throw () { #ifdef PQXX_QUIET_DESTRUCTORS disable_noticer Quiet(m_Trans.conn()); #endif try { cancel(); } catch (const exception &) {} detach(); } void pqxx::pipeline::attach() { if (!registered()) register_me(); } void pqxx::pipeline::detach() { if (registered()) unregister_me(); } pipeline::query_id pqxx::pipeline::insert(const PGSTD::string &q) { attach(); const query_id qid = generate_id(); pqxxassert(qid > 0); pqxxassert(m_queries.lower_bound(qid)==m_queries.end()); const QueryMap::iterator i = m_queries.insert(make_pair(qid,Query(q))).first; if (m_issuedrange.second == m_queries.end()) { m_issuedrange.second = i; if (m_issuedrange.first == m_queries.end()) m_issuedrange.first = i; } m_num_waiting++; pqxxassert(m_issuedrange.first != m_queries.end()); pqxxassert(m_issuedrange.second != m_queries.end()); if (m_num_waiting > m_retain) { if (have_pending()) receive_if_available(); if (!have_pending()) issue(); } return qid; } void pqxx::pipeline::complete() { if (have_pending()) receive(m_issuedrange.second); if (m_num_waiting && (m_error == qid_limit())) { pqxxassert(!have_pending()); issue(); pqxxassert(!m_num_waiting); pqxxassert(have_pending()); pqxxassert(m_issuedrange.second == m_queries.end()); receive(m_queries.end()); pqxxassert((m_error!=qid_limit()) || !have_pending()); } detach(); pqxxassert((m_num_waiting == 0) || (m_error != qid_limit())); pqxxassert(!m_dummy_pending); } void pqxx::pipeline::flush() { if (!m_queries.empty()) { if (have_pending()) receive(m_issuedrange.second); m_issuedrange.first = m_issuedrange.second = m_queries.end(); m_num_waiting = 0; m_dummy_pending = false; m_queries.clear(); } detach(); } void pqxx::pipeline::cancel() { while (have_pending()) { gate::connection_pipeline(m_Trans.conn()).cancel_query(); QueryMap::iterator canceled_query = m_issuedrange.first; ++m_issuedrange.first; m_queries.erase(canceled_query); } } bool pqxx::pipeline::is_finished(pipeline::query_id q) const { if (m_queries.find(q) == m_queries.end()) throw logic_error("Requested status for unknown query " + to_string(q)); return (QueryMap::const_iterator(m_issuedrange.first)==m_queries.end()) || (q < m_issuedrange.first->first && q < m_error); } pair pqxx::pipeline::retrieve() { if (m_queries.empty()) throw logic_error("Attempt to retrieve result from empty pipeline"); return retrieve(m_queries.begin()); } int pqxx::pipeline::retain(int retain_max) { if (retain_max < 0) throw range_error("Attempt to make pipeline retain " + to_string(retain_max) + " queries"); const int oldvalue = m_retain; m_retain = retain_max; if (m_num_waiting >= m_retain) resume(); return oldvalue; } void pqxx::pipeline::resume() { if (have_pending()) receive_if_available(); if (!have_pending() && m_num_waiting) { issue(); receive_if_available(); } } pipeline::query_id pqxx::pipeline::generate_id() { if (m_q_id == qid_limit()) throw overflow_error("Too many queries went through pipeline"); ++m_q_id; return m_q_id; } void pqxx::pipeline::issue() { pqxxassert(m_num_waiting); pqxxassert(!have_pending()); pqxxassert(!m_dummy_pending); pqxxassert(m_num_waiting); // TODO: Wrap in nested transaction if available, for extra "replayability" // Retrieve that NULL result for the last query, if needed obtain_result(); // Don't issue anything if we've encountered an error if (m_error < qid_limit()) return; // Start with oldest query (lowest id) not in previous issue range QueryMap::iterator oldest = m_issuedrange.second; pqxxassert(oldest != m_queries.end()); // Construct cumulative query string for entire batch string cum = separated_list(theSeparator,oldest,m_queries.end(),getquery()); const QueryMap::size_type num_issued = QueryMap::size_type( internal::distance(oldest, m_queries.end())); const bool prepend_dummy = (num_issued > 1); if (prepend_dummy) cum = theDummyQuery + cum; gate::connection_pipeline(m_Trans.conn()).start_exec(cum); // Since we managed to send out these queries, update state to reflect this m_dummy_pending = prepend_dummy; m_issuedrange.first = oldest; m_issuedrange.second = m_queries.end(); m_num_waiting -= int(num_issued); } void pqxx::pipeline::internal_error(const PGSTD::string &err) throw (logic_error) { set_error_at(0); throw pqxx::internal_error(err); } bool pqxx::pipeline::obtain_result(bool expect_none) { pqxxassert(!m_dummy_pending); pqxxassert(!m_queries.empty()); gate::connection_pipeline gate(m_Trans.conn()); internal::pq::PGresult *r = gate.get_result(); if (!r) { if (have_pending() && !expect_none) { set_error_at(m_issuedrange.first->first); m_issuedrange.second = m_issuedrange.first; } return false; } pqxxassert(r); const result res = gate::result_creation::create( r, 0, m_queries.begin()->second.get_query(), gate::connection_pipeline(m_Trans.conn()).encoding_code()); if (!have_pending()) { set_error_at(m_queries.begin()->first); throw logic_error("Got more results from pipeline than there were queries"); } // Must be the result for the oldest pending query if (!m_issuedrange.first->second.get_result().empty()) internal_error("multiple results for one query"); m_issuedrange.first->second.set_result(res); ++m_issuedrange.first; return true; } void pqxx::pipeline::obtain_dummy() { pqxxassert(m_dummy_pending); gate::connection_pipeline gate(m_Trans.conn()); internal::pq::PGresult *const r = gate.get_result(); m_dummy_pending = false; if (!r) internal_error("pipeline got no result from backend when it expected one"); result R = gate::result_creation::create( r, 0, "[DUMMY PIPELINE QUERY]", gate::connection_pipeline(m_Trans.conn()).encoding_code()); bool OK = false; try { gate::result_creation(R).CheckStatus(); OK = true; } catch (const sql_error &) { } if (OK) { if (R.size() > 1) internal_error("unexpected result for dummy query in pipeline"); if (string(R.at(0).at(0).c_str()) != theDummyValue) internal_error("dummy query in pipeline returned unexpected value"); return; } /* Since none of the queries in the batch were actually executed, we can * afford to replay them one by one until we find the exact query that * caused the error. This gives us not only a more specific error message * to report, but also tells us which query to report it for. */ // First, give the whole batch the same syntax error message, in case all else // is going to fail. for (QueryMap::iterator i = m_issuedrange.first; i != m_issuedrange.second; ++i) i->second.set_result(R); // Remember where the end of this batch was const QueryMap::iterator stop = m_issuedrange.second; // Retrieve that NULL result for the last query, if needed obtain_result(true); // Reset internal state to forget botched batch attempt m_num_waiting += int(internal::distance(m_issuedrange.first, stop)); m_issuedrange.second = m_issuedrange.first; pqxxassert(!m_dummy_pending); pqxxassert(!have_pending()); pqxxassert(m_num_waiting > 0); // Issue queries in failed batch one at a time. unregister_me(); try { do { m_num_waiting--; const string &query = m_issuedrange.first->second.get_query(); const result res(m_Trans.exec(query)); m_issuedrange.first->second.set_result(res); gate::result_creation(res).CheckStatus(); ++m_issuedrange.first; } while (m_issuedrange.first != stop); } catch (const exception &) { pqxxassert(m_issuedrange.first != m_queries.end()); const query_id thud = m_issuedrange.first->first; ++m_issuedrange.first; m_issuedrange.second = m_issuedrange.first; QueryMap::const_iterator q = m_issuedrange.first; set_error_at( (q == m_queries.end()) ? thud + 1 : q->first); pqxxassert(m_num_waiting == internal::distance(m_issuedrange.second, m_queries.end())); } pqxxassert(m_issuedrange.first != m_queries.end()); pqxxassert(m_error <= m_q_id); } PGSTD::pair pqxx::pipeline::retrieve(pipeline::QueryMap::iterator q) { if (q == m_queries.end()) throw logic_error("Attempt to retrieve result for unknown query"); if (q->first >= m_error) throw runtime_error("Could not complete query in pipeline " "due to error in earlier query"); // If query hasn't issued yet, do it now if (m_issuedrange.second != m_queries.end() && (q->first >= m_issuedrange.second->first)) { pqxxassert(internal::distance(m_issuedrange.second, q) >= 0); if (have_pending()) receive(m_issuedrange.second); if (m_error == qid_limit()) issue(); } // If result not in yet, get it; else get at least whatever's convenient if (have_pending()) { if (q->first >= m_issuedrange.first->first) { QueryMap::const_iterator suc = q; ++suc; receive(suc); } else { receive_if_available(); } } pqxxassert((m_error <= q->first) || (q != m_issuedrange.first)); if (q->first >= m_error) throw runtime_error("Could not complete query in pipeline " "due to error in earlier query"); // Don't leave the backend idle if there are queries waiting to be issued if (m_num_waiting && !have_pending() && (m_error==qid_limit())) issue(); const result R = q->second.get_result(); pair P(make_pair(q->first, R)); m_queries.erase(q); gate::result_creation(R).CheckStatus(); return P; } void pqxx::pipeline::get_further_available_results() { pqxxassert(!m_dummy_pending); gate::connection_pipeline gate(m_Trans.conn()); while (!gate.is_busy() && obtain_result()) if (!gate.consume_input()) throw broken_connection(); } void pqxx::pipeline::receive_if_available() { gate::connection_pipeline gate(m_Trans.conn()); if (!gate.consume_input()) throw broken_connection(); if (gate.is_busy()) return; if (m_dummy_pending) obtain_dummy(); if (have_pending()) get_further_available_results(); } void pqxx::pipeline::receive(pipeline::QueryMap::const_iterator stop) { pqxxassert(have_pending()); if (m_dummy_pending) obtain_dummy(); while (obtain_result() && QueryMap::const_iterator(m_issuedrange.first) != stop) ; // Also haul in any remaining "targets of opportunity" if (QueryMap::const_iterator(m_issuedrange.first) == stop) get_further_available_results(); } libpqxx-3.1.1/src/largeobject.cxx0000664000175000017500000001631212075723515013734 00000000000000/*------------------------------------------------------------------------- * * FILE * largeobject.cxx * * DESCRIPTION * Implementation of the Large Objects interface * Allows access to large objects directly, or though I/O streams * * Copyright (c) 2003-2013, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include #include "libpq-fe.h" //#include "libpq/libpq-fs.h" /// Copied from libpq/libpq-fs.h so we don't need that header anymore #define INV_WRITE 0x00020000 /// Copied from libpq/libpq-fs.h so we don't need that header anymore #define INV_READ 0x00040000 #include "pqxx/largeobject" #include "pqxx/internal/gates/connection-largeobject.hxx" using namespace PGSTD; using namespace pqxx::internal; namespace { inline int StdModeToPQMode(ios::openmode mode) { return ((mode & ios::in) ? INV_READ : 0) | ((mode & ios::out) ? INV_WRITE : 0); } inline int StdDirToPQDir(ios::seekdir dir) throw () { // TODO: Figure out whether seekdir values match C counterparts! #ifdef PQXX_SEEKDIRS_MATCH_C return dir; #else int pqdir; switch (dir) { case ios::beg: pqdir=SEEK_SET; break; case ios::cur: pqdir=SEEK_CUR; break; case ios::end: pqdir=SEEK_END; break; /* Added mostly to silence compiler warning, but also to help compiler detect * cases where this function can be optimized away completely. This latter * reason should go away as soon as PQXX_SEEKDIRS_MATCH_C works. */ default: pqdir = dir; break; } return pqdir; #endif } } // namespace pqxx::largeobject::largeobject() throw () : m_ID(oid_none) { } pqxx::largeobject::largeobject(dbtransaction &T) : m_ID() { m_ID = lo_creat(RawConnection(T), INV_READ|INV_WRITE); if (m_ID == oid_none) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); throw failure("Could not create large object: " + Reason(err)); } } pqxx::largeobject::largeobject(dbtransaction &T, const PGSTD::string &File) : m_ID() { m_ID = lo_import(RawConnection(T), File.c_str()); if (m_ID == oid_none) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); throw failure("Could not import file '" + File + "' to large object: " + Reason(err)); } } pqxx::largeobject::largeobject(const largeobjectaccess &O) throw () : m_ID(O.id()) { } void pqxx::largeobject::to_file(dbtransaction &T, const PGSTD::string &File) const { if (lo_export(RawConnection(T), id(), File.c_str()) == -1) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); throw failure("Could not export large object " + to_string(m_ID) + " " "to file '" + File + "': " + Reason(err)); } } void pqxx::largeobject::remove(dbtransaction &T) const { if (lo_unlink(RawConnection(T), id()) == -1) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); throw failure("Could not delete large object " + to_string(m_ID) + ": " + Reason(err)); } } pqxx::internal::pq::PGconn *pqxx::largeobject::RawConnection( const dbtransaction &T) { return gate::connection_largeobject(T.conn()).RawConnection(); } string pqxx::largeobject::Reason(int err) const { if (err == ENOMEM) return "Out of memory"; if (id() == oid_none) return "No object selected"; char buf[500]; return string(strerror_wrapper(err, buf, sizeof(buf))); } pqxx::largeobjectaccess::largeobjectaccess(dbtransaction &T, openmode mode) : largeobject(T), m_Trans(T), m_fd(-1) { open(mode); } pqxx::largeobjectaccess::largeobjectaccess(dbtransaction &T, oid O, openmode mode) : largeobject(O), m_Trans(T), m_fd(-1) { open(mode); } pqxx::largeobjectaccess::largeobjectaccess(dbtransaction &T, largeobject O, openmode mode) : largeobject(O), m_Trans(T), m_fd(-1) { open(mode); } pqxx::largeobjectaccess::largeobjectaccess(dbtransaction &T, const PGSTD::string &File, openmode mode) : largeobject(T, File), m_Trans(T), m_fd(-1) { open(mode); } pqxx::largeobjectaccess::size_type pqxx::largeobjectaccess::seek(size_type dest, seekdir dir) { const size_type Result = cseek(dest, dir); if (Result == -1) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); throw failure("Error seeking in large object: " + Reason(err)); } return Result; } pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::cseek(off_type dest, seekdir dir) throw () { return lo_lseek(RawConnection(), m_fd, int(dest), StdDirToPQDir(dir)); } pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::cwrite(const char Buf[], size_type Len) throw () { const pos_type bytes_written = lo_write( RawConnection(), m_fd, const_cast(Buf), size_t(Len)); return PGSTD::max(bytes_written, -1L); } pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::cread(char Buf[], size_type Bytes) throw () { return PGSTD::max(lo_read(RawConnection(), m_fd, Buf, size_t(Bytes)), -1); } pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::ctell() const throw () { return #if defined(PQXX_HAVE_LO_TELL) lo_tell(RawConnection(), m_fd); #else lo_lseek(RawConnection(), m_fd, 0, SEEK_CUR); #endif } void pqxx::largeobjectaccess::write(const char Buf[], size_type Len) { const long Bytes = cwrite(Buf, Len); if (Bytes < Len) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); if (Bytes < 0) throw failure("Error writing to large object #" + to_string(id()) + ": " + Reason(err)); if (Bytes == 0) throw failure("Could not write to large object #" + to_string(id()) + ": " + Reason(err)); throw failure("Wanted to write " + to_string(Len) + " bytes " "to large object #" + to_string(id()) + "; " "could only write " + to_string(Bytes)); } } pqxx::largeobjectaccess::size_type pqxx::largeobjectaccess::read(char Buf[], size_type Len) { const long Bytes = cread(Buf, Len); if (Bytes < 0) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); throw failure("Error reading from large object #" + to_string(id()) + ": " + Reason(err)); } return Bytes; } void pqxx::largeobjectaccess::open(openmode mode) { m_fd = lo_open(RawConnection(), id(), StdModeToPQMode(mode)); if (m_fd < 0) { const int err = errno; if (err == ENOMEM) throw bad_alloc(); throw failure("Could not open large object " + to_string(id()) + ": " + Reason(err)); } } void pqxx::largeobjectaccess::close() throw () { #ifdef PQXX_QUIET_DESTRUCTORS disable_noticer Quiet(m_Trans.conn()); #endif if (m_fd >= 0) lo_close(RawConnection(), m_fd); } pqxx::largeobjectaccess::size_type pqxx::largeobjectaccess::tell() const { const size_type res = ctell(); if (res == -1) throw failure(Reason(errno)); return res; } string pqxx::largeobjectaccess::Reason(int err) const { return (m_fd == -1) ? "No object opened" : largeobject::Reason(err); } void pqxx::largeobjectaccess::process_notice(const PGSTD::string &s) throw () { m_Trans.process_notice(s); } libpqxx-3.1.1/src/transaction.cxx0000664000175000017500000000331412075723515013776 00000000000000/*------------------------------------------------------------------------- * * FILE * transaction.cxx * * DESCRIPTION * implementation of the pqxx::transaction class. * pqxx::transaction represents a regular database transaction * * Copyright (c) 2001-2008, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include "pqxx/connection_base" #include "pqxx/result" #include "pqxx/transaction" using namespace PGSTD; pqxx::basic_transaction::basic_transaction( connection_base &C, const PGSTD::string &IsolationLevel, readwrite_policy rw) : namedclass("transaction"), dbtransaction(C, IsolationLevel, rw) { } void pqxx::basic_transaction::do_commit() { try { DirectExec(internal::sql_commit_work); } catch (const exception &e) { if (!conn().is_open()) { // We've lost the connection while committing. There is just no way of // telling what happened on the other end. >8-O process_notice(e.what() + string("\n")); const string Msg = "WARNING: " "Connection lost while committing transaction " "'" + name() + "'. " "There is no way to tell whether the transaction succeeded " "or was aborted except to check manually."; process_notice(Msg + "\n"); throw in_doubt_error(Msg); } else { // Commit failed--probably due to a constraint violation or something // similar. throw; } } } libpqxx-3.1.1/src/notify-listen.cxx0000664000175000017500000000223412075723515014255 00000000000000/*------------------------------------------------------------------------- * * FILE * pqxx/notify-listen.cxx * * DESCRIPTION * implementation of the pqxx::notify_listener class. * pqxx::notify_listener describes a notification to wait on, and what it does * * Copyright (c) 2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include "pqxx/notify-listen" #include "pqxx/internal/gates/connection-notify-listener.hxx" using namespace pqxx::internal; pqxx::notify_listener::notify_listener( connection_base &c, const PGSTD::string &n) : m_conn(c), m_Name(n) { gate::connection_notify_listener(c).add_listener(this); } pqxx::notify_listener::~notify_listener() throw () { connection_base &c = conn(); #ifdef PQXX_QUIET_DESTRUCTORS disable_noticer Quiet(c); #endif gate::connection_notify_listener(c).remove_listener(this); } libpqxx-3.1.1/src/tablestream.cxx0000664000175000017500000000210012075723515013744 00000000000000/*------------------------------------------------------------------------- * * FILE * tablestream.cxx * * DESCRIPTION * implementation of the pqxx::tablestream class. * pqxx::tablestream provides optimized batch access to a database table * * Copyright (c) 2001-2006, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/tablestream" #include "pqxx/transaction" using namespace PGSTD; pqxx::tablestream::tablestream(transaction_base &STrans, const PGSTD::string &Null) : internal::namedclass("tablestream"), internal::transactionfocus(STrans), m_Null(Null), m_Finished(false) { } pqxx::tablestream::~tablestream() throw () { } void pqxx::tablestream::base_close() { if (!is_finished()) { m_Finished = true; unregister_me(); } } libpqxx-3.1.1/src/nontransaction.cxx0000664000175000017500000000151312075723515014510 00000000000000/*------------------------------------------------------------------------- * * FILE * nontransaction.cxx * * DESCRIPTION * implementation of the pqxx::nontransaction class. * pqxx::nontransaction provides nontransactional database access * * Copyright (c) 2002-2005, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/nontransaction" using namespace PGSTD; pqxx::nontransaction::~nontransaction() { End(); } pqxx::result pqxx::nontransaction::do_exec(const char Query[]) { return DirectExec(Query, 0); } libpqxx-3.1.1/src/robusttransaction.cxx0000664000175000017500000002107712075723515015243 00000000000000/*------------------------------------------------------------------------- * * FILE * robusttransaction.cxx * * DESCRIPTION * implementation of the pqxx::robusttransaction class. * pqxx::robusttransaction is a slower but safer transaction class * * Copyright (c) 2002-2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include "pqxx/connection_base" #include "pqxx/result" #include "pqxx/robusttransaction" using namespace PGSTD; using namespace pqxx::internal; // TODO: Log username in more places. pqxx::basic_robusttransaction::basic_robusttransaction( connection_base &C, const PGSTD::string &IsolationLevel, const PGSTD::string &table_name) : namedclass("robusttransaction"), dbtransaction(C, IsolationLevel), m_record_id(0), m_xid(), m_LogTable(table_name), m_sequence(), m_backendpid(-1) { if (table_name.empty()) m_LogTable = "pqxx_robusttransaction_log"; m_sequence = m_LogTable + "_seq"; } pqxx::basic_robusttransaction::~basic_robusttransaction() { } void pqxx::basic_robusttransaction::do_begin() { try { CreateTransactionRecord(); } catch (const exception &) { // The problem here *may* be that the log table doesn't exist yet. Create // one, start a new transaction, and try again. try { dbtransaction::do_abort(); } catch (const exception &) {} CreateLogTable(); dbtransaction::do_begin(); m_backendpid = conn().backendpid(); CreateTransactionRecord(); } dbtransaction::do_begin(); // If this transaction commits, the transaction record should also be gone. DirectExec(sql_delete().c_str()); if (conn().server_version() >= 80300) DirectExec("SELECT txid_current()")[0][0].to(m_xid); } void pqxx::basic_robusttransaction::do_commit() { if (!m_record_id) throw internal_error("transaction '" + name() + "' has no ID"); // Check constraints before sending the COMMIT to the database to reduce the // work being done inside our in-doubt window. try { DirectExec("SET CONSTRAINTS ALL IMMEDIATE"); } catch (...) { do_abort(); throw; } // Here comes the critical part. If we lose our connection here, we'll be // left clueless as to whether the backend got the message and is trying to // commit the transaction (let alone whether it will succeed if so). That // case requires some special handling that makes robusttransaction what it // is. try { DirectExec(sql_commit_work); // If we make it here, great. Normal, successful commit. m_record_id = 0; return; } catch (const broken_connection &) { // Oops, lost connection at the crucial moment. Fall through to in-doubt // handling below. } catch (...) { if (conn().is_open()) { // Commit failed--probably due to a constraint violation or something // similar. But we're still connected, so no worries from a consistency // point of view. do_abort(); throw; } // Otherwise, fall through to in-doubt handling. } // If we get here, we're in doubt. Talk to the backend, figure out what // happened. If the transaction record still exists, the transaction failed. // If not, it succeeded. bool exists; try { exists = CheckTransactionRecord(); } catch (const exception &f) { // Couldn't check for transaction record. We're still in doubt as to // whether the transaction was performed. const string Msg = "WARNING: " "Connection lost while committing transaction " "'" + name() + "' (id " + to_string(m_record_id) + ", " "transaction_id " + m_xid + "). " "Please check for this record in the " "'" + m_LogTable + "' table. " "If the record exists, the transaction was executed. " "If not, then it wasn't.\n"; process_notice(Msg); process_notice("Could not verify existence of transaction record " "because of the following error:\n"); process_notice(string(f.what()) + "\n"); throw in_doubt_error(Msg); } // Transaction record is still there, so the transaction failed and all we // have is a "normal" transaction failure. if (exists) { do_abort(); throw broken_connection("Connection lost while committing."); } // Otherwise, the transaction succeeded. Forget there was ever an error. } void pqxx::basic_robusttransaction::do_abort() { dbtransaction::do_abort(); DeleteTransactionRecord(); } // Create transaction log table if it didn't already exist void pqxx::basic_robusttransaction::CreateLogTable() { // Create log table in case it doesn't already exist. This code must only be // executed before the backend transaction has properly started. string CrTab = "CREATE TABLE \"" + m_LogTable + "\" (" "id INTEGER NOT NULL, " "username VARCHAR(256), " "transaction_id xid, " "name VARCHAR(256), " "date TIMESTAMP NOT NULL" ")"; try { DirectExec(CrTab.c_str(), 1); } catch (const exception &e) { conn().process_notice( "Could not create transaction log table: " + string(e.what())); } try { DirectExec(("CREATE SEQUENCE " + m_sequence).c_str()); } catch (const exception &e) { conn().process_notice( "Could not create transaction log sequence: " + string(e.what())); } } void pqxx::basic_robusttransaction::CreateTransactionRecord() { static const string Fail = "Could not create transaction log record: "; // Clean up old transaction records. DirectExec(( "DELETE FROM " + m_LogTable + " " "WHERE date < CURRENT_TIMESTAMP - '30 days'::interval").c_str()); // Allocate id. const string sql_get_id("SELECT nextval(" + quote(m_sequence) + ")"); DirectExec(sql_get_id.c_str())[0][0].to(m_record_id); DirectExec(( "INSERT INTO \"" + m_LogTable + "\" " "(id, username, name, date) " "VALUES " "(" + to_string(m_record_id) + ", " + quote(conn().username()) + ", " + (name().empty() ? "NULL" : quote(name())) + ", " "CURRENT_TIMESTAMP" ")").c_str()); } string pqxx::basic_robusttransaction::sql_delete() const { return "DELETE FROM \"" + m_LogTable + "\" " "WHERE id = " + to_string(m_record_id); } void pqxx::basic_robusttransaction::DeleteTransactionRecord() throw () { if (!m_record_id) return; try { const string Del = sql_delete(); reactivation_avoidance_exemption E(conn()); DirectExec(Del.c_str(), 20); // Now that we've arrived here, we're about as sure as we can be that that // record is quite dead. m_record_id = 0; } catch (const exception &) { } if (m_record_id != 0) try { process_notice("WARNING: " "Failed to delete obsolete transaction record with id " + to_string(m_record_id) + " ('" + name() + "'). " "Please delete it manually. Thank you.\n"); } catch (const exception &) { } } // Attempt to establish whether transaction record with given ID still exists bool pqxx::basic_robusttransaction::CheckTransactionRecord() { bool hold = true; for (int c=20; hold && c; internal::sleep_seconds(5), --c) { if (conn().server_version() > 80300) { const string query( "SELECT " + m_xid + " >= txid_snapshot_xmin(txid_current_snapshot())"); DirectExec(query.c_str())[0][0].to(hold); } else { /* Wait for the old backend (with the lost connection) to die. * * Actually this is only possible if stats_command_string (or maybe * stats_start_collector?) has been set in postgresql.conf and we're * running as the postgres superuser. * * Starting with 7.4, we could also use pg_locks. The entry for a zombied * transaction will have a "relation" field of null, a "transaction" field * with the transaction ID, and "pid" set to our backend pid. If the * relation exists but no such record is found, then the transaction is no * longer running. */ const result R(DirectExec(( "SELECT current_query " "FROM pq_stat_activity " "WHERE procpid = " + to_string(m_backendpid)).c_str())); hold = !R.empty(); } } if (hold) throw in_doubt_error( "Old backend process stays alive too long to wait for."); // Now look for our transaction record const string Find = "SELECT id FROM \"" + m_LogTable + "\" " "WHERE " "id = " + to_string(m_record_id) + " AND " "user = " + conn().username(); return !DirectExec(Find.c_str(), 20).empty(); } libpqxx-3.1.1/src/subtransaction.cxx0000664000175000017500000000372012075723515014511 00000000000000/*------------------------------------------------------------------------- * * FILE * subtransaction.cxx * * DESCRIPTION * implementation of the pqxx::subtransaction class. * pqxx::transaction is a nested transaction, i.e. one within a transaction * * Copyright (c) 2005-2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include "pqxx/connection_base" #include "pqxx/subtransaction" #include "pqxx/internal/gates/transaction-subtransaction.hxx" using namespace PGSTD; using namespace pqxx::internal; pqxx::subtransaction::subtransaction(dbtransaction &T, const PGSTD::string &Name) : namedclass("subtransaction", T.conn().adorn_name(Name)), transactionfocus(T), dbtransaction(T.conn(), false), m_parent(T) { #if defined(PQXX_HAVE_PQSERVERVERSION) check_backendsupport(); #endif } void pqxx::subtransaction::do_begin() { try { DirectExec(("SAVEPOINT \"" + name() + "\"").c_str()); } catch (const sql_error &) { #if !defined(PQXX_HAVE_PQSERVERVERSION) check_backendsupport(); #endif throw; } } void pqxx::subtransaction::do_commit() { const int ra = m_reactivation_avoidance.get(); m_reactivation_avoidance.clear(); DirectExec(("RELEASE SAVEPOINT \"" + name() + "\"").c_str()); gate::transaction_subtransaction(m_parent).add_reactivation_avoidance_count( ra); } void pqxx::subtransaction::do_abort() { DirectExec(("ROLLBACK TO SAVEPOINT \"" + name() + "\"").c_str()); } void pqxx::subtransaction::check_backendsupport() const { if (!m_parent.conn().supports(connection_base::cap_nested_transactions)) throw feature_not_supported( "Backend version does not support nested transactions"); } libpqxx-3.1.1/src/connection.cxx0000664000175000017500000000740412075723515013614 00000000000000/*------------------------------------------------------------------------- * * FILE * connection.cxx * * DESCRIPTION * implementation of the pqxx::connection and sibling classes. * Different ways of setting up a backend connection. * * Copyright (c) 2001-2008, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include "libpq-fe.h" #include "pqxx/connection" using namespace PGSTD; pqxx::connectionpolicy::connectionpolicy(const PGSTD::string &opts) : m_options(opts) { } pqxx::connectionpolicy::~connectionpolicy() throw () { } pqxx::connectionpolicy::handle pqxx::connectionpolicy::normalconnect(handle orig) { if (orig) return orig; orig = PQconnectdb(options().c_str()); if (!orig) throw bad_alloc(); if (PQstatus(orig) != CONNECTION_OK) { const string msg(PQerrorMessage(orig)); PQfinish(orig); throw broken_connection(msg); } return orig; } pqxx::connectionpolicy::handle pqxx::connectionpolicy::do_startconnect(handle orig) { return orig; } pqxx::connectionpolicy::handle pqxx::connectionpolicy::do_completeconnect(handle orig) { return orig; } pqxx::connectionpolicy::handle pqxx::connectionpolicy::do_dropconnect(handle orig) throw () { return orig; } pqxx::connectionpolicy::handle pqxx::connectionpolicy::do_disconnect(handle orig) throw () { orig = do_dropconnect(orig); if (orig) PQfinish(orig); return 0; } bool pqxx::connectionpolicy::is_ready(handle h) const throw () { return h != 0; } pqxx::connectionpolicy::handle pqxx::connect_direct::do_startconnect(handle orig) { if (orig) return orig; orig = normalconnect(orig); if (PQstatus(orig) != CONNECTION_OK) { const string msg(PQerrorMessage(orig)); do_disconnect(orig); throw broken_connection(msg); } return orig; } pqxx::connectionpolicy::handle pqxx::connect_lazy::do_completeconnect(handle orig) { return normalconnect(orig); } pqxx::connect_async::connect_async(const PGSTD::string &opts) : connectionpolicy(opts), m_connecting(false) { } pqxx::connectionpolicy::handle pqxx::connect_async::do_startconnect(handle orig) { if (orig) return orig; // Already connecting or connected m_connecting = false; orig = PQconnectStart(options().c_str()); if (!orig) throw bad_alloc(); if (PQconnectPoll(orig) == PGRES_POLLING_FAILED) { do_dropconnect(orig); throw broken_connection(string(PQerrorMessage(orig))); } m_connecting = true; return orig; } pqxx::connectionpolicy::handle pqxx::connect_async::do_completeconnect(handle orig) { const bool makenew = !orig; if (makenew) orig = do_startconnect(orig); if (!m_connecting) return orig; // Our "attempt to connect" state ends here, for better or for worse m_connecting = false; PostgresPollingStatusType pollstatus; do { pollstatus = PQconnectPoll(orig); switch (pollstatus) { case PGRES_POLLING_FAILED: if (makenew) do_disconnect(orig); throw broken_connection(string(PQerrorMessage(orig))); case PGRES_POLLING_READING: internal::wait_read(orig); break; case PGRES_POLLING_WRITING: internal::wait_write(orig); break; case PGRES_POLLING_ACTIVE: case PGRES_POLLING_OK: break; } } while (pollstatus != PGRES_POLLING_OK); return orig; } pqxx::connectionpolicy::handle pqxx::connect_async::do_dropconnect(handle orig) throw () { m_connecting = false; return orig; } bool pqxx::connect_async::is_ready(handle h) const throw () { return h && !m_connecting; } libpqxx-3.1.1/src/tablereader.cxx0000664000175000017500000001144212075723515013724 00000000000000/*------------------------------------------------------------------------- * * FILE * tablereader.cxx * * DESCRIPTION * implementation of the pqxx::tablereader class. * pqxx::tablereader enables optimized batch reads from a database table * * Copyright (c) 2001-2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/tablereader" #include "pqxx/transaction" #include "pqxx/internal/gates/transaction-tablereader.hxx" using namespace PGSTD; using namespace pqxx::internal; pqxx::tablereader::tablereader(transaction_base &T, const PGSTD::string &Name, const PGSTD::string &Null) : namedclass("tablereader", Name), tablestream(T, Null), m_Done(true) { setup(T, Name); } void pqxx::tablereader::setup(transaction_base &T, const PGSTD::string &Name, const PGSTD::string &Columns) { gate::transaction_tablereader(T).BeginCopyRead(Name, Columns); register_me(); m_Done = false; } pqxx::tablereader::~tablereader() throw () { #ifdef PQXX_QUIET_DESTRUCTORS disable_noticer Quiet(m_Trans.conn()); #endif try { reader_close(); } catch (const exception &e) { reg_pending_error(e.what()); } } bool pqxx::tablereader::get_raw_line(PGSTD::string &Line) { if (!m_Done) try { m_Done = !gate::transaction_tablereader(m_Trans).ReadCopyLine(Line); } catch (const exception &) { m_Done = true; throw; } return !m_Done; } void pqxx::tablereader::complete() { reader_close(); } void pqxx::tablereader::reader_close() { if (!is_finished()) { base_close(); // If any lines remain to be read, consume them to not confuse PQendcopy() if (!m_Done) { try { string Dummy; while (get_raw_line(Dummy)) ; } catch (const broken_connection &) { try { base_close(); } catch (const exception &) {} throw; } catch (const exception &e) { reg_pending_error(e.what()); } } } } namespace { inline bool is_octalchar(char o) throw () { return (o>='0') && (o<='7'); } /// Find first tab character at or after start position in string /** If not found, returns Line.size() rather than string::npos. */ string::size_type findtab(const PGSTD::string &Line, PGSTD::string::size_type start) { // TODO: Fix for multibyte encodings? const string::size_type here = Line.find('\t', start); return (here == string::npos) ? Line.size() : here; } } // namespace string pqxx::tablereader::extract_field(const PGSTD::string &Line, PGSTD::string::size_type &i) const { // TODO: Pick better exception types string R; bool isnull=false; string::size_type stop = findtab(Line, i); for (; i < stop; ++i) { const char c = Line[i]; switch (c) { case '\n': // End of row // Shouldn't happen, but we may get old-style, newline-terminated lines i = stop; break; case '\\': // Escape sequence { const char n = Line[++i]; if (i >= Line.size()) throw failure("Row ends in backslash"); switch (n) { case 'N': // Null value if (!R.empty()) throw failure("Null sequence found in nonempty field"); R = NullStr(); isnull = true; break; case '0': // Octal sequence (3 digits) case '1': case '2': case '3': case '4': case '5': case '6': case '7': { if ((i+2) >= Line.size()) throw failure("Row ends in middle of octal value"); const char n1 = Line[++i]; const char n2 = Line[++i]; if (!is_octalchar(n1) || !is_octalchar(n2)) throw failure("Invalid octal in encoded table stream"); R += char((digit_to_number(n)<<6) | (digit_to_number(n1)<<3) | digit_to_number(n2)); } break; case 'b': // TODO: Escape code? R += char(8); break; // Backspace case 'v': // TODO: Escape code? R += char(11); break; // Vertical tab case 'f': // TODO: Escape code? R += char(12); break; // Form feed case 'n': R += '\n'; break; // Newline case 't': R += '\t'; break; // Tab case 'r': R += '\r'; break; // Carriage return; default: // Self-escaped character R += n; // This may be a self-escaped tab that we thought was a terminator... if (i == stop) { if ((i+1) >= Line.size()) throw internal_error("COPY line ends in backslash"); stop = findtab(Line, i+1); } break; } } break; default: R += c; break; } } ++i; if (isnull && (R.size() != NullStr().size())) throw failure("Field contains data behind null sequence"); return R; } libpqxx-3.1.1/src/prepared_statement.cxx0000664000175000017500000000552412075723515015344 00000000000000/*------------------------------------------------------------------------- * * FILE * prepared_statement.cxx * * DESCRIPTION * Helper classes for defining and executing prepared statements * See the connection_base hierarchy for more about prepared statements * * Copyright (c) 2006-2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/connection_base" #include "pqxx/prepared_statement" #include "pqxx/result" #include "pqxx/transaction_base" #include "pqxx/internal/gates/connection-prepare-declaration.hxx" #include "pqxx/internal/gates/connection-prepare-invocation.hxx" using namespace PGSTD; using namespace pqxx; using namespace pqxx::internal; pqxx::prepare::declaration::declaration(connection_base &home, const PGSTD::string &statement) : m_home(home), m_statement(statement) { } const pqxx::prepare::declaration & pqxx::prepare::declaration::operator()(const PGSTD::string &sqltype, param_treatment treatment) const { gate::connection_prepare_declaration(m_home).prepare_param_declare( m_statement, sqltype, treatment); return *this; } const pqxx::prepare::declaration & pqxx::prepare::declaration::etc(param_treatment treatment) const { gate::connection_prepare_declaration(m_home).prepare_param_declare_varargs( m_statement, treatment); return *this; } pqxx::prepare::invocation::invocation(transaction_base &home, const PGSTD::string &statement) : statement_parameters(), m_home(home), m_statement(statement) { } pqxx::result pqxx::prepare::invocation::exec() const { scoped_array ptrs; scoped_array lens; const int elts = marshall(ptrs, lens); return gate::connection_prepare_invocation(m_home.conn()).prepared_exec( m_statement, ptrs.get(), lens.get(), elts); } bool pqxx::prepare::invocation::exists() const { return gate::connection_prepare_invocation(m_home.conn()).prepared_exists( m_statement); } pqxx::prepare::internal::prepared_def::param::param( const PGSTD::string &SQLtype, param_treatment Treatment) : sqltype(SQLtype), treatment(Treatment) { } pqxx::prepare::internal::prepared_def::prepared_def() : definition(), parameters(), registered(false), complete(false), varargs(false) { } pqxx::prepare::internal::prepared_def::prepared_def(const PGSTD::string &def) : definition(def), parameters(), registered(false), complete(false), varargs(false) { } void pqxx::prepare::internal::prepared_def::addparam( const PGSTD::string &sqltype, param_treatment treatment) { parameters.push_back(param(sqltype,treatment)); } libpqxx-3.1.1/src/binarystring.cxx0000664000175000017500000001027612075723515014171 00000000000000/*------------------------------------------------------------------------- * * FILE * binarystring.cxx * * DESCRIPTION * implementation of bytea (binary string) conversions * * Copyright (c) 2003-2009, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include #include #include #include #include "libpq-fe.h" #include "pqxx/binarystring" using namespace PGSTD; using namespace pqxx::internal; namespace { typedef unsigned char unsigned_char; // Convert textual digit to value inline unsigned char DV(unsigned char d) { return unsigned_char(digit_to_number(char(d))); } } pqxx::binarystring::binarystring(const result::field &F) : super(), m_size(0) { const unsigned char *const b(reinterpret_cast(F.c_str())); #ifdef PQXX_HAVE_PQUNESCAPEBYTEA unsigned char *const p = const_cast(b); size_t sz = 0; super::operator=(super(PQunescapeBytea(p, &sz))); if (!get()) throw bad_alloc(); m_size = sz; #else string s; s.reserve(F.size()); for (result::field::size_type i=0; i(buf))); memcpy(static_cast(buf), s.c_str(), m_size); #endif } bool pqxx::binarystring::operator==(const binarystring &rhs) const throw () { if (rhs.size() != size()) return false; for (size_type i=0; i= m_size) { if (!m_size) throw out_of_range("Accessing empty binarystring"); throw out_of_range("binarystring index out of range: " + to_string(n) + " (should be below " + to_string(m_size) + ")"); } return data()[n]; } void pqxx::binarystring::swap(binarystring &rhs) { // PQAlloc<>::swap() is nothrow super::swap(rhs); // This part very obviously can't go wrong, so do it last const size_type s(m_size); m_size = rhs.m_size; rhs.m_size = s; } string pqxx::binarystring::str() const { return string(get(), m_size); } string pqxx::escape_binary(const unsigned char bin[], size_t len) { #ifdef PQXX_HAVE_PQESCAPEBYTEA size_t escapedlen = 0; unsigned char *p = const_cast(bin); PQAlloc A(PQescapeBytea(p, len, &escapedlen)); const char *cstr = reinterpret_cast(A.get()); if (!cstr) throw bad_alloc(); return string(cstr, escapedlen-1); #else /* Very basic workaround for missing PQescapeBytea() in antique versions of * libpq. Clients that use BYTEA are much better off upgrading their libpq, * but this might just provide usable service in cases where that is not an * option. */ string result; result.reserve(len); for (size_t i=0; i= 0x80 || bin[i] < 0x20) { char buf[8]; sprintf(buf, "\\\\%03o", unsigned(bin[i])); result += buf; } else switch (bin[i]) { case '\'': result += "\\'"; break; case '\\': result += "\\\\\\\\"; break; default: result += char(bin[i]); } } return result; #endif } string pqxx::escape_binary(const unsigned char bin[]) { return escape_binary(bin, strlen(reinterpret_cast(bin))); } string pqxx::escape_binary(const char bin[], size_t len) { return escape_binary(reinterpret_cast(bin), len); } string pqxx::escape_binary(const char bin[]) { return escape_binary(bin, strlen(bin)); } string pqxx::escape_binary(const string &bin) { return escape_binary(bin.c_str(), bin.size()); } libpqxx-3.1.1/src/tablewriter.cxx0000664000175000017500000000662712075723515014007 00000000000000/*------------------------------------------------------------------------- * * FILE * tablewriter.cxx * * DESCRIPTION * implementation of the pqxx::tablewriter class. * pqxx::tablewriter enables optimized batch updates to a database table * * Copyright (c) 2001-2013, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include "pqxx/tablereader" #include "pqxx/tablewriter" #include "pqxx/transaction" #include "pqxx/internal/gates/transaction-tablewriter.hxx" using namespace PGSTD; using namespace pqxx::internal; pqxx::tablewriter::tablewriter(transaction_base &T, const PGSTD::string &WName, const PGSTD::string &Null) : namedclass("tablewriter", WName), tablestream(T, Null) { setup(T, WName); } pqxx::tablewriter::~tablewriter() throw () { #ifdef PQXX_QUIET_DESTRUCTORS disable_noticer Quiet(m_Trans.conn()); #endif try { writer_close(); } catch (const exception &e) { reg_pending_error(e.what()); } } void pqxx::tablewriter::setup(transaction_base &T, const PGSTD::string &WName, const PGSTD::string &Columns) { gate::transaction_tablewriter(T).BeginCopyWrite(WName, Columns); register_me(); } pqxx::tablewriter &pqxx::tablewriter::operator<<(pqxx::tablereader &R) { string Line; // TODO: Can we do this in binary mode? (Might require protocol version check) while (R.get_raw_line(Line)) write_raw_line(Line); return *this; } void pqxx::tablewriter::write_raw_line(const PGSTD::string &Line) { const string::size_type len = Line.size(); gate::transaction_tablewriter(m_Trans).WriteCopyLine( (!len || Line[len-1] != '\n') ? Line : string(Line, 0, len-1)); } void pqxx::tablewriter::complete() { writer_close(); } void pqxx::tablewriter::writer_close() { if (!is_finished()) { base_close(); try { gate::transaction_tablewriter(m_Trans).EndCopyWrite(); } catch (const exception &) { try { base_close(); } catch (const exception &) {} throw; } } } namespace { inline char escapechar(char i) { char r = '\0'; switch (i) { case 8: r='b'; break; // backspace case 11: r='v'; break; // vertical tab case 12: r='f'; break; // form feed case '\n': r='n'; break; // newline case '\t': r='t'; break; // tab case '\r': r='r'; break; // carriage return case '\\': r='\\'; break; // backslash } return r; } inline bool unprintable(char i) { return i < ' ' || i > '~'; } inline char tooctdigit(unsigned int i, int n) { return number_to_digit((i>>(3*n)) & 0x07); } } // namespace string pqxx::internal::Escape(const string &s, const string &null) { if (s == null) return "\\N"; if (s.empty()) return s; string R; R.reserve(s.size()+1); const string::const_iterator s_end(s.end()); for (string::const_iterator j = s.begin(); j != s_end; ++j) { const char c = *j; const char e = escapechar(c); if (e) { R += '\\'; R += e; } else if (unprintable(c)) { R += "\\\\"; unsigned char u = static_cast(c); for (int n=2; n>=0; --n) R += tooctdigit(u,n); } else { R += c; } } return R; } libpqxx-3.1.1/src/cursor.cxx0000664000175000017500000003735012075723515012775 00000000000000/*------------------------------------------------------------------------- * * FILE * cursor.cxx * * DESCRIPTION * implementation of libpqxx STL-style cursor classes. * These classes wrap SQL cursors in STL-like interfaces * * Copyright (c) 2004-2013, Jeroen T. Vermeulen * * See COPYING for copyright license. If you did not receive a file called * COPYING with this source code, please notify the distributor of this mistake, * or contact the author. * *------------------------------------------------------------------------- */ #include "pqxx/compiler-internal.hxx" #include #include #include "pqxx/cursor" #include "pqxx/result" #include "pqxx/strconv" #include "pqxx/transaction" #include "pqxx/internal/gates/connection-sql_cursor.hxx" #include "pqxx/internal/gates/icursor_iterator-icursorstream.hxx" #include "pqxx/internal/gates/icursorstream-icursor_iterator.hxx" #include "pqxx/internal/gates/result-sql_cursor.hxx" using namespace PGSTD; using namespace pqxx; using namespace pqxx::internal; namespace { /// Is this character a "useless trailing character" in a query? /** A character is "useless" at the end of a query if it is either whitespace or * a semicolon. */ inline bool useless_trail(char c) { return isspace(c) || c==';'; } } pqxx::internal::sql_cursor::sql_cursor(transaction_base &t, const string &query, const string &cname, cursor_base::accesspolicy ap, cursor_base::updatepolicy up, cursor_base::ownershippolicy op, bool hold) : cursor_base(t.conn(), cname), m_home(t.conn()), m_empty_result(), m_adopted(false), m_at_end(-1), m_pos(0), m_endpos(-1) { if (&t.conn() != &m_home) throw internal_error("Cursor in wrong connection"); stringstream cq, qn; /* Strip trailing semicolons (and whitespace, as side effect) off query. The * whitespace is stripped because it might otherwise mask a semicolon. After * this, the remaining useful query will be the sequence defined by * query.begin() and last, i.e. last may be equal to query.end() or point to * the first useless trailing character. */ string::const_iterator last = query.end(); // TODO: May break on multibyte encodings! for (--last; last!=query.begin() && useless_trail(*last); --last) ; if (last==query.begin() && useless_trail(*last)) throw argument_error("Cursor created on empty query"); ++last; cq << "DECLARE \"" << name() << "\" "; m_home.activate(); if (m_home.supports(connection_base::cap_cursor_scroll)) { if (ap == cursor_base::forward_only) cq << "NO "; cq << "SCROLL "; } cq << "CURSOR "; if (hold) { if (!m_home.supports(connection_base::cap_cursor_with_hold)) throw failure("Cursor " + name() + " " "created for use outside of its originating transaction, " "but this backend version does not support that."); cq << "WITH HOLD "; } cq << "FOR " << string(query.begin(),last) << ' '; if (up != cursor_base::update) cq << "FOR READ ONLY "; else if (!m_home.supports(connection_base::cap_cursor_update)) throw failure("Cursor " + name() + " " "created as updatable, " "but this backend version does not support that."); else cq << "FOR UPDATE "; qn << "[DECLARE " << name() << ']'; t.exec(cq, qn.str()); // Now that we're here in the starting position, keep a copy of an empty // result. That may come in handy later, because we may not be able to // construct an empty result with all the right metadata due to the weird // meaning of "FETCH 0." init_empty_result(t); // If we're creating a WITH HOLD cursor, noone is going to destroy it until // after this transaction. That means the connection cannot be deactivated // without losing the cursor. if (hold) gate::connection_sql_cursor(t.conn()).add_reactivation_avoidance_count(1); m_ownership = op; } pqxx::internal::sql_cursor::sql_cursor(transaction_base &t, const string &cname, cursor_base::ownershippolicy op) : cursor_base(t.conn(), cname, false), m_home(t.conn()), m_empty_result(), m_adopted(true), m_at_end(0), m_pos(-1), m_endpos(-1) { // If we take responsibility for destroying the cursor, that's one less reason // not to allow the connection to be deactivated and reactivated. // TODO: Go over lifetime/reactivation rules again to be sure they work if (op==cursor_base::owned) gate::connection_sql_cursor(t.conn()).add_reactivation_avoidance_count(-1); m_adopted = true; m_ownership = op; } void pqxx::internal::sql_cursor::close() throw () { if (m_ownership==cursor_base::owned) { try { gate::connection_sql_cursor(m_home).Exec( ("CLOSE \"" + name() + "\"").c_str(), 0); } catch (const exception &) { } if (m_adopted) gate::connection_sql_cursor(m_home).add_reactivation_avoidance_count(-1); m_ownership = cursor_base::loose; } } void pqxx::internal::sql_cursor::init_empty_result(transaction_base &t) { if (pos() != 0) throw internal_error("init_empty_result() from bad pos()"); // This doesn't work with older backends, where "FETCH 0" meant "FETCH ALL." if (m_home.supports(connection_base::cap_cursor_fetch_0)) m_empty_result = t.exec("FETCH 0 IN \"" + name() + '"'); } /// Compute actual displacement based on requested and reported displacements internal::sql_cursor::difference_type pqxx::internal::sql_cursor::adjust(difference_type hoped, difference_type actual) { if (actual < 0) throw internal_error("Negative rows in cursor movement"); if (hoped == 0) return 0; const int direction = ((hoped < 0) ? -1 : 1); bool hit_end = false; if (actual != labs(hoped)) { if (actual > labs(hoped)) throw internal_error("Cursor displacement larger than requested"); // If we see fewer rows than requested, then we've hit an end (on either // side) of the result set. Wether we make an extra step to a one-past-end // position or whether we're already there depends on where we were // previously: if our last move was in the same direction and also fell // short, we're already at a one-past-end row. if (m_at_end != direction) ++actual; // If we hit the beginning, make sure our position calculation ends up // at zero (even if we didn't previously know where we were!), and if we // hit the other end, register the fact that we now know where the end // of the result set is. if (direction > 0) hit_end = true; else if (m_pos == -1) m_pos = actual; else if (m_pos != actual) throw internal_error("Moved back to beginning, but wrong position: " "hoped=" + to_string(hoped) + ", " "actual=" + to_string(actual) + ", " "m_pos=" + to_string(m_pos) + ", " "direction=" + to_string(direction)); m_at_end = direction; } else { m_at_end = 0; } if (m_pos >= 0) m_pos += direction*actual; if (hit_end) { if (m_endpos >= 0 && m_pos != m_endpos) throw internal_error("Inconsistent cursor end positions"); m_endpos = m_pos; } return direction*actual; } result pqxx::internal::sql_cursor::fetch(difference_type rows, difference_type &displacement) { if (!rows) { displacement = 0; return m_empty_result; } const string query = "FETCH " + stridestring(rows) + " IN \"" + name() + "\""; const result r(gate::connection_sql_cursor(m_home).Exec(query.c_str(), 0)); displacement = adjust(rows, difference_type(r.size())); return r; } cursor_base::difference_type pqxx::internal::sql_cursor::move( difference_type rows, difference_type &displacement) { if (!rows) { displacement = 0; return 0; } const string query = "MOVE " + stridestring(rows) + " IN \"" + name() + "\""; const result r(gate::connection_sql_cursor(m_home).Exec(query.c_str(), 0)); // Starting with the libpq in PostgreSQL 7.4, PQcmdTuples() (which we call // indirectly here) also returns the number of rows skipped by a MOVE difference_type d = static_cast(r.affected_rows()); // We may not have PQcmdTuples(), or this may be a libpq version that doesn't // implement it for MOVE yet. We'll also get zero if we decide to use a // prepared statement for the MOVE. if (!d) { static const string StdResponse("MOVE "); const char *const status = gate::result_sql_cursor(r).CmdStatus(); if (strncmp(status, StdResponse.c_str(), StdResponse.size()) != 0) throw internal_error("cursor MOVE returned " "'" + string(status) + "' " "(expected '" + StdResponse + "')"); from_string(status + StdResponse.size(), d); } displacement = adjust(rows, d); return d; } string pqxx::internal::sql_cursor::stridestring(difference_type n) { /* Some special-casing for ALL and BACKWARD ALL here. We used to use numeric * "infinities" for difference_type for this (the highest and lowest possible * values for "long"), but for PostgreSQL 8.0 at least, the backend appears to * expect a 32-bit number and fails to parse large 64-bit numbers. * We could change the typedef to match this behaviour, but that would break * if/when Postgres is changed to accept 64-bit displacements. */ static const string All("ALL"), BackAll("BACKWARD ALL"); if (n >= cursor_base::all()) return All; else if (n <= cursor_base::backward_all()) return BackAll; return to_string(n); } pqxx::cursor_base::cursor_base(connection_base &context, const PGSTD::string &Name, bool embellish_name) : m_name(embellish_name ? context.adorn_name(Name) : Name) { } result::size_type pqxx::internal::obtain_stateless_cursor_size(sql_cursor &cur) { if (cur.endpos() == -1) cur.move(cursor_base::all()); return result::size_type(cur.endpos() - 1); } result pqxx::internal::stateless_cursor_retrieve( sql_cursor &cur, result::difference_type size, result::difference_type begin_pos, result::difference_type end_pos) { if (begin_pos < 0 || begin_pos > size) throw range_error("Starting position out of range"); if (end_pos < -1) end_pos = -1; else if (end_pos > size) end_pos = size; if (begin_pos == end_pos) return cur.empty_result(); const int direction = ((begin_pos < end_pos) ? 1 : -1); cur.move((begin_pos-direction) - (cur.pos()-1)); return cur.fetch(end_pos - begin_pos); } pqxx::icursorstream::icursorstream( transaction_base &context, const PGSTD::string &query, const PGSTD::string &basename, difference_type sstride) : m_cur(context, query, basename, cursor_base::forward_only, cursor_base::read_only, cursor_base::owned, false), m_stride(sstride), m_realpos(0), m_reqpos(0), m_iterators(0), m_done(false) { set_stride(sstride); } pqxx::icursorstream::icursorstream( transaction_base &context, const result::field &cname, difference_type sstride, cursor_base::ownershippolicy op) : m_cur(context, cname.c_str(), op), m_stride(sstride), m_realpos(0), m_reqpos(0), m_iterators(0), m_done(false) { set_stride(sstride); } void pqxx::icursorstream::set_stride(difference_type n) { if (n < 1) throw argument_error("Attempt to set cursor stride to " + to_string(n)); m_stride = n; } result pqxx::icursorstream::fetchblock() { const result r(m_cur.fetch(m_stride)); m_realpos += r.size(); if (r.empty()) m_done = true; return r; } icursorstream &pqxx::icursorstream::ignore(PGSTD::streamsize n) { difference_type offset = m_cur.move(n); m_realpos += offset; if (offset < n) m_done = true; return *this; } icursorstream::size_type pqxx::icursorstream::forward(size_type n) { m_reqpos += difference_type(n) * m_stride; return size_type(m_reqpos); } void pqxx::icursorstream::insert_iterator(icursor_iterator *i) throw () { gate::icursor_iterator_icursorstream(*i).set_next(m_iterators); if (m_iterators) gate::icursor_iterator_icursorstream(*m_iterators).set_prev(i); m_iterators = i; } void pqxx::icursorstream::remove_iterator(icursor_iterator *i) const throw () { gate::icursor_iterator_icursorstream igate(*i); if (i == m_iterators) { m_iterators = igate.get_next(); if (m_iterators) gate::icursor_iterator_icursorstream(*m_iterators).set_prev(0); } else { icursor_iterator *prev = igate.get_prev(), *next = igate.get_next(); gate::icursor_iterator_icursorstream(*prev).set_next(next); if (next) gate::icursor_iterator_icursorstream(*next).set_prev(prev); } igate.set_prev(0); igate.set_next(0); } void pqxx::icursorstream::service_iterators(difference_type topos) { if (topos < m_realpos) return; typedef multimap todolist; todolist todo; for (icursor_iterator *i = m_iterators, *next; i; i = next) { gate::icursor_iterator_icursorstream gate(*i); const icursor_iterator::difference_type ipos = gate.pos(); if (ipos >= m_realpos && ipos <= topos) todo.insert(todolist::value_type(ipos, i)); next = gate.get_next(); } const todolist::const_iterator todo_end(todo.end()); for (todolist::const_iterator i = todo.begin(); i != todo_end; ) { const difference_type readpos = i->first; if (readpos > m_realpos) ignore(readpos - m_realpos); const result r = fetchblock(); for ( ; i != todo_end && i->first == readpos; ++i) gate::icursor_iterator_icursorstream(*i->second).fill(r); } } pqxx::icursor_iterator::icursor_iterator() throw () : m_stream(0), m_here(), m_pos(0), m_prev(0), m_next(0) { } pqxx::icursor_iterator::icursor_iterator(istream_type &s) throw () : m_stream(&s), m_here(), m_pos(difference_type(gate::icursorstream_icursor_iterator(s).forward(0))), m_prev(0), m_next(0) { gate::icursorstream_icursor_iterator(*m_stream).insert_iterator(this); } pqxx::icursor_iterator::icursor_iterator(const icursor_iterator &rhs) throw () : m_stream(rhs.m_stream), m_here(rhs.m_here), m_pos(rhs.m_pos), m_prev(0), m_next(0) { if (m_stream) gate::icursorstream_icursor_iterator(*m_stream).insert_iterator(this); } pqxx::icursor_iterator::~icursor_iterator() throw () { if (m_stream) gate::icursorstream_icursor_iterator(*m_stream).remove_iterator(this); } icursor_iterator pqxx::icursor_iterator::operator++(int) { icursor_iterator old(*this); m_pos = difference_type( gate::icursorstream_icursor_iterator(*m_stream).forward()); m_here.clear(); return old; } icursor_iterator &pqxx::icursor_iterator::operator++() { m_pos = difference_type( gate::icursorstream_icursor_iterator(*m_stream).forward()); m_here.clear(); return *this; } icursor_iterator &pqxx::icursor_iterator::operator+=(difference_type n) { if (n <= 0) { if (!n) return *this; throw argument_error("Advancing icursor_iterator by negative offset"); } m_pos = difference_type( gate::icursorstream_icursor_iterator(*m_stream).forward(size_type(n))); m_here.clear(); return *this; } icursor_iterator & pqxx::icursor_iterator::operator=(const icursor_iterator &rhs) throw () { if (rhs.m_stream == m_stream) { m_here = rhs.m_here; m_pos = rhs.m_pos; } else { if (m_stream) gate::icursorstream_icursor_iterator(*m_stream).remove_iterator(this); m_here = rhs.m_here; m_pos = rhs.m_pos; m_stream = rhs.m_stream; if (m_stream) gate::icursorstream_icursor_iterator(*m_stream).insert_iterator(this); } return *this; } bool pqxx::icursor_iterator::operator==(const icursor_iterator &rhs) const { if (m_stream == rhs.m_stream) return pos() == rhs.pos(); if (m_stream && rhs.m_stream) return false; refresh(); rhs.refresh(); return m_here.empty() && rhs.m_here.empty(); } bool pqxx::icursor_iterator::operator<(const icursor_iterator &rhs) const { if (m_stream == rhs.m_stream) return pos() < rhs.pos(); refresh(); rhs.refresh(); return !m_here.empty(); } void pqxx::icursor_iterator::refresh() const { if (m_stream) gate::icursorstream_icursor_iterator(*m_stream).service_iterators(pos()); } void pqxx::icursor_iterator::fill(const result &r) { m_here = r; } libpqxx-3.1.1/libpqxx.spec.in0000664000175000017500000000346712075723515013117 00000000000000Summary: C++ API to the PostgreSQL database management system. Name: libpqxx Version: @VERSION@ Release: 1 License: LGPL Group: Development/Libraries Source: ftp://pqxx.org/software/libpqxx/libpqxx-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-root URL: http://pqxx.org/ Vendor: Andromeda Technology & Automation Packager: Arjen Baart Requires: postgresql-libs BuildRequires: postgresql-devel Prefix: %{_prefix} Docdir: %{_docdir} %description This is the official C++ client API for postgres. What libpqxx brings you is effective use of templates to reduce the inconvenience of dealing with type conversions; of standard C++ strings to keep you from having to worry about buffer allocation and overflow attacks; of exceptions to take the tedious and error-prone plumbing around error handling out of your hands; of constructors and destructors to bring resource management under control; and even basic object-orientation to give you some extra reliability features that would be hard to get with most other database interfaces. %package devel Summary: Libraries, includes, etc. to develop PostgreSQL applications in C++. Group: Development/Libraries Requires: libpqxx = %{version} %description devel Libraries, include files, etc you can use to develop PostgreSQL applications in C++. %prep %setup -q %build %configure --enable-shared make %install rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %clean rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %defattr(-, root, root) %doc AUTHORS ChangeLog NEWS README COPYING %{_libdir}/lib*.so %files devel %defattr(-, root, root) %{_libdir}/*a %{_libdir}/pkgconfig/libpqxx.pc %{_includedir}/* %{_bindir}/pqxx-config %changelog * Thu Jan 29 2004 Arjen Baart - Built release 2.1.3 libpqxx-3.1.1/aclocal.m40000664000175000017500000011001112076703447011772 00000000000000# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([config/m4/libtool.m4]) m4_include([config/m4/ltoptions.m4]) m4_include([config/m4/ltsugar.m4]) m4_include([config/m4/ltversion.m4]) m4_include([config/m4/lt~obsolete.m4]) libpqxx-3.1.1/autogen.sh0000775000175000017500000000434612075723507012146 00000000000000#! /bin/sh # Run this to generate all the initial makefiles, etc. # Set CONFIG_ARGS to the argument list you wish to pass to configure set -e # Optionally run in "dumb" locale to avoid performance overhead (and risk of # bugs) involved in localization, encoding issues etc. We only do ASCII here. #export LC_ALL=C latest_automake() { for v in "-1.11" "-1.10" "-1.9" "-1.8" "-1.7" "-1.6" "" ; do if which "automake$v" >/dev/null ; then echo "$v" return fi done } ver="`latest_automake`" # The VERSION file defines our versioning PQXXVERSION=`./tools/extract_version` echo "libpqxx version $PQXXVERSION" PQXX_ABI=`./tools/extract_version --abi` echo "libpqxx ABI version $PQXX_ABI" PQXX_MAJOR="`echo "$PQXXVERSION" | sed -e 's/[[:space:]]*\([0-9]*\)\..*$/\1/'`" PQXX_MINOR="`echo "$PQXXVERSION" | sed -e 's/[^.]*\.\([0-9]*\).*$/\1/'`" substitute() { sed -e "s/@PQXXVERSION@/$PQXXVERSION/g" \ -e "s/@PQXX_MAJOR@/$PQXX_MAJOR/g" \ -e "s/@PQXX_MINOR@/$PQXX_MINOR/g" \ -e "s/@PQXX_ABI@/$PQXX_ABI/g" \ "$1" } # Generate configure.ac based on current version numbers substitute configure.ac.in >configure.ac # Generate version header. substitute include/pqxx/version.hxx.template >include/pqxx/version.hxx # Generate Windows makefiles (adding carriage returns to make it MS-DOS format) makewinmake() { ./tools/template2mak.py "$1" | sed -e 's/$/\r/' >"$2" } if which python >/dev/null ; then # Use templating system to generate various Makefiles ./tools/template2mak.py test/Makefile.am.template test/Makefile.am ./tools/template2mak.py test/unit/Makefile.am.template test/unit/Makefile.am makewinmake win32/vc-libpqxx.mak.template win32/vc-libpqxx.mak makewinmake win32/vc-test.mak.template win32/vc-test.mak makewinmake win32/mingw.mak.template win32/MinGW.mak else echo "Python not available--not generating Visual C++ makefiles." fi autoheader libtoolize --force --automake --copy aclocal${ver} -I . -I config/m4 automake${ver} --verbose --add-missing --copy autoconf conf_flags="--enable-maintainer-mode $CONFIG_ARGS" if test -z "$NOCONFIGURE" ; then echo Running $srcdir/configure $conf_flags "$@" ... ./configure $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME || exit 1 else echo Skipping configure process. fi libpqxx-3.1.1/configitems0000664000175000017500000000465012075723507012375 00000000000000HAVE_SYS_TYPES_H internal compiler HAVE_UNISTD_H internal compiler PACKAGE internal autotools PACKAGE_BUGREPORT internal autotools PACKAGE_NAME internal autotools PACKAGE_STRING internal autotools PACKAGE_TARNAME internal autotools PACKAGE_VERSION internal autotools PGSTD public compiler PQXX_BROKEN_ITERATOR public compiler PQXX_BROKEN_USING_DECL public compiler PQXX_HAVE_BOOST_SMART_PTR public compiler PQXX_HAVE_CHAR_TRAITS public compiler PQXX_HAVE_COUNT_IF internal compiler PQXX_HAVE_CPP_PRAGMA_MESSAGE public compiler PQXX_HAVE_CPP_WARNING public compiler PQXX_HAVE_DISTANCE internal compiler PQXX_HAVE_IMBUE internal compiler PQXX_HAVE_IOS public compiler PQXX_HAVE_LIMITS public compiler PQXX_HAVE_LO_TELL internal libpq PQXX_HAVE_LONG_LONG public compiler PQXX_HAVE_LOCALE internal compiler PQXX_HAVE_LONG_DOUBLE public compiler PQXX_HAVE_NAN internal compiler PQXX_HAVE_C_NAN internal compiler PQXX_HAVE_GCC_VISIBILITY internal compiler PQXX_HAVE_POLL internal compiler PQXX_HAVE_PQCANCEL internal libpq PQXX_HAVE_PQDESCRIBEPORTAL internal libpq PQXX_HAVE_PQESCAPEBYTEA internal libpq PQXX_HAVE_PQESCAPEBYTEACONN internal libpq PQXX_HAVE_PQESCAPESTRING internal libpq PQXX_HAVE_PQESCAPESTRINGCONN internal libpq PQXX_HAVE_PQPREPARE internal libpq PQXX_HAVE_PQEXECPARAMS internal libpq PQXX_HAVE_PQEXECPREPARED internal libpq PQXX_HAVE_PQFREEMEM internal libpq PQXX_HAVE_PQFREENOTIFY internal libpq PQXX_HAVE_PQISTHREADSAFE internal libpq PQXX_HAVE_PQSERVERVERSION internal libpq PQXX_HAVE_PQPROTOCOLVERSION internal libpq PQXX_HAVE_PQENCRYPTPASSWORD internal libpq PQXX_HAVE_PQFTABLE internal libpq PQXX_HAVE_PQFTABLECOL internal libpq PQXX_HAVE_PQPUTCOPY internal libpq PQXX_HAVE_PQRESULTERRORFIELD internal libpq PQXX_HAVE_PQUNESCAPEBYTEA internal libpq PQXX_HAVE_PQCLIENTENCODING internal libpq PQXX_HAVE_PQMBLEN internal libpq PQXX_HAVE_QUIET_NAN internal compiler PQXX_HAVE_REVERSE_ITERATOR public compiler PQXX_HAVE_SHARED_PTR public compiler PQXX_HAVE_SLEEP internal compiler PQXX_HAVE_STREAMBUF public compiler PQXX_HAVE_STRERROR_R internal compiler PQXX_HAVE_STRERROR_R_GNU internal compiler PQXX_HAVE_STRING_CLEAR internal compiler PQXX_HAVE_STRNLEN internal compiler PQXX_HAVE_STRLCPY internal compiler PQXX_HAVE_SYS_SELECT_H internal compiler PQXX_SEEKDIRS_MATCH_C internal compiler PQXX_PQ_IN_NAMESPACE public compiler PQXX_SELECT_ACCEPTS_NULL internal compiler PQXX_TR1_HEADERS public compiler PQXXTR1 public compiler VERSION internal autotools libpqxx-3.1.1/README0000664000175000017500000005076712075723506011034 00000000000000Introduction Welcome to libpqxx, the C++ API to the PostgreSQL database management system. This package requires PostgreSQL to be installed--including the C headers for client development. The library builds on top of PostgreSQL's standard C API, libpq, though this fact is almost completely hidden from programs that use libpqxx. Further information, as well as updates, a mailing list, and a bug reporting system can be found at http://pqxx.org/ There are also ready-made libpqxx packages available for several systems: Debian packages are available on any Debian download mirror, Mark Round maintains a Blastwave package for Solaris, and Arjen Baart has made RPM packages (source and i386 binaries) available on http://www.andromeda.nl/UNIX/packages/ You may want to check these before going to the trouble of building libpqxx yourself. Getting Started All of this applies only to operating systems that are either part of, or closely resemble, or support the standard interfaces of, the Unix family. This includes not just the "real" Unices (AIX, HP-UX, Irix, Solaris) but also MacOS X (starting with 10.2, a.k.a. Jaguar) as well as GNU/Linux, the various BSD operating systems, and Microsoft Windows with a Unix-like environment such as Cygwin or MinGW installed. There is a separate section below for Windows users without such an environment. For the Unix-like systems the procedure is essentially the standard "configure, make, make install" sequence, except that in most cases some extra work needs to be done for the optional "make check" step. Let's just step through the full procedure for a Unix-like system. You may be familiar with most of it: ./configure # (plus suitable preparation, to set up the build environment) make # (to build the library) # Run library's self-test suite; in this example, connect to DBMS running on # local Unix socket in /tmp, and use database pqxx as a testing ground. See # below for more details on how to set test parameters. make PGHOST=/tmp PGDATABASE=pqxx check make install # (with superuser privileges, to install the library; see below) Once this has succeeded, you should be able to link your own programs with libpqxx and run them with confidence. If it hasn't succeeded, or isn't quite what you want, it's time to move on to the fineprint we hinted at. 1. Configure A word on that "suitable preparation." In older versions of libpqxx, you would need to specify the location of the PostgreSQL header and library files in some cases; when left alone, the script had a builtin list of usual locations to check. This is no longer necessary; the configure script will use another script provided by Postgres to find them automatically. In the new setup, however, the configure script must be able to find and run this new script. It's called pg_config, and it should be in the bin/ subdirectory of wherever Postgres is installed on your system. Make sure this directory is represented in your executable path before you run the configure script, or it will fail with a message like: configure: error: PostgreSQL configuration script pg_config was not found. Or if you don't want to have pg_config in your path for whatever reason, or you have multiple PostgreSQL installations on your system (each with their own copy of pg_config, naturally) and wish to override the default version, add an option like PG_CONFIG=/home/me/postgres/bin/pg_config to your "configure" command line, where /home/me/postgres/bin/pg_config is an example of where your preferred copy of pg_config might be. This would indicate to the configure script that you wish to build a libpqxx based on the postgres version found in /home/me/postgres. Finally, if you wish to install the libpqxx you're going to build in a custom location, such as your home directory /home/me, you can specify this to the configure script by calling it with the --prefix option, e.g.: ./configure --prefix=/home/me This can be handy if you don't have administrator rights on the machine you're working on! The configure scripts supports many other options to tweak how and where libpqxx is to be built and installed; try the --help option to get an overview if you're interested. If configuration just absolutely plain won't work for whatever reason: take a look in the config/sample-headers/ directory. Here you will find configuration headers for various compilers and libpq versions. Pick the config-internal-*.h and config-public-*.h headers for the compiler and libpq version most closely matching your own, and see if they work for you. 2. Make One problem some people have run into at this stage is that the header files for PostgreSQL need the OpenSSL header files to work. If this happens to you, make sure openssl is installed and try again. Otherwise, if the "make" part of the build procedure fails, you're probably using a different compiler or compiler version than I am. If your C++ compiler is more than a few years old, and it's not one of the highly standard-compliant ones like gcc or Comeau, just forget it. It won't work until you get an up-to-date compiler. If, on the other hand, you're using a shiny new compiler and you're getting errors or warnings, please let me know about them so I can fix them. 3. Make Check This part is optional. It is recommended that you do this just to make sure that you've got a working library, but there is one Very Important Caveat that could affect your existing data. See below. "Make check" is where you compile and run the regression test that typically exercises all public methods in the library. Obviously something or other will have to go wrong at this point, right? Indeed. The "make check" procedure needs a database to play with. In this database, it will create two tables "pqxxevents" and "pqxxorgevents," as well as some tables for its own use. All have names prefixed with pqxx. CAUTION: if this database already contains tables with any of these names, either the check will fail, or worse, your original data will be erased. So choose your test database with at least a little caution. Obviously the safest thing to do is to set up a separate database for this. To direct the regression test to the right database, set some or all of the following environment variables as needed before running "make check" (see description above): PGDATABASE (name of database; defaults to your user name) PGHOST (database server; defaults to local machine) PGPORT (PostgreSQL port to connect to; default is 5432) PGUSER (your PostgreSQL user ID; defaults to your login name) PGPASSWORD (your PostgreSQL password, if needed) Further environment variables that may be of use to you are documented in the libpq documentation and in the manpage for Postgres' command-line client, psql. Setting environment variables works differently depending on your shell, but try (preferably in this order): export VARIABLE=value or VARIABLE=value export VARIABLE or set VARIABLE=value Try printing the variable afterwards to make sure. The command is normally echo $VARIABLE and, if you set the variable successfully, should print the value you assigned. It will print nothing if you failed to set the variable. Should you have trouble finding the socket for a database running locally on a Unix socket, try locating the socket in the filesystem. It should appear as a "file" called .s.PGSQL.5432 (if you are new to Unix-like systems, be warned that files whose name start with a dot are not displayed by default). Set PGHOST to the directory where this "file" resides, as an absolute path--e.g. "/tmp". On most Unix-like systems, it will be located in /tmp, /var/run, or if your system adheres to the FHS (the Filesystem Hierarchy Standard for GNU/Linux systems), in /var/run/postgresql. Be sure to use the absolute path; the leading slash tells libpq that this is not a network address but a local Unix socket. If you've taken care of all this, it should get you through the regression test to ensure that everything's working properly. If it isn't, and it's not something you can fix by tweaking your PostgreSQL setup, let me know about it and I'll try to fix it. 4. Make Install This is supposed to install the libpqxx library and header files to your system. It took me and many others some time to get this to actually work, so please take care to check that it really does work and that especially the headers are really installed to your system. The library and headers are installed to /usr/local/ by default, in their respective subdirectories include/ and lib/. The default installation location has changed in release 2.2.0; it was /usr/local/pqxx before. Assuming this succeeds, you should now be able to build your own programs by adding /usr/local/pqxx/include to your include path, and /usr/local/pqxx/lib to your library search path. See the documentation and the test programs for more information on using libpqxx. One other thing here that may not work is that, if you link with the dynamic version of the library, your program may fail to run because the run-time loader cannot find the library. You can get around this by (i) linking to the static version of the library, or (ii) adding a link in /usr/local/lib to the dynamic libpqxx library, or (iii) adding libpqxx's lib/ directory to your loader's search path before running your program. This is in decreasing order of preference, so try (i) first, and only resort to (iii) if both (i) and (ii) fail. On Unix-like systems including GNU/Linux, the loader's search path can be extended by setting the LD_LIBRARY_PATH variable. Enjoy! Building on Windows Project files for Visual C++ are provided in the win32 directory, along with some other Windows-specific material. You'll need at least version 7 of the VC compiler (also called VC.NET), earlier versions being too severely flawed to build serious post-1996 C++ code. Some of the 7.x versions will work; others may not. Versions of the library have also been built with Intel's compiler running as a Visual C++ plugin. Instead of going this route, you may want to try if the Unix build procedure works for you instead, e.g. using the Cygwin tools. If you don't, or it doesn't, you'll need to copy the most appropriate compile-time configuration files from various subdirectories in config/example-headers/ to include/pqxx. You may need to tweak them manually to define the exact features your system, compiler, and PostgreSQL versions support. Normally the configure script would do this for you; in theory it should be possible to run the configure script with e.g. Visual C++ as your compiler. Before trying to compile with Visual C++, you'll at least need to copy the file win32/common-sample to win32/common, and edit the latter to reflect the proper paths to your PostgreSQL headers and the libpq library. See the win32 subdirectory for more documentation. Manual Configuration: config-*-*.h Normally, on any vaguely Unix-like system, the configuration headers (called config-internal-*.h for the library's internal use, config-public-*.h for both the library and client programs) are generated from config.h.in. All these files, once generated, are situated in the include/pqxx/ directory. The configitems file lists all configuration items and where they go; but see win32/INSTALL.txt for a detailed description of how these files work. Getting the compiler-related configuration right can take several stages of trying to build, looking at error messages, looking for configuration items that may be related, changing them, and building again. If nothing seems to help, try the libpqxx mailing list or register a bug report or support request on the website. Be sure to read the FAQ though, because there are some known problems with various compilers. Windows-Specific Build Problems If you're using Microsoft's compiler, you may find that some features of the library (such as reverse iterators) are left out. This is because Visual C++ is not able to compile all of the library's code, and so the preprocessor was used to disable such code if use of this compiler is detected. Several other workarounds for compiler bugs are automatically switched on for Visual C++, regardless of whether you use the configure script. Another problem specific to Windows is that apparently it doesn't let you free memory in a DLL that was allocated in the main program or in another DLL, or vice versa. This can cause trouble when setting Noticers to process error or warning output; which is one reason why recommended practice is to build libpqxx as a static library, not a DLL. When using Windows you must also take care to set all Noticers from the same context where the Connection is created. Documentation The best information on programming with libpqxx can be found in the header files themselves, in the include/pqxx/ directory. Comments and declarations from these headers are automatically extracted, using a program called Doxygen, to form the HTML reference documentation that can be found in the doc/html/Reference/ directory. You'll want to start off by reading about the connection class and the transaction_base class (though in practice you'll mostly use the convenience typedef "work"). To get a good start in programming libpqxx, however, you may prefer to have some introductory explanation and code examples. The former can be found in the tutorial, doc/html/Tutorial which currently is not being actively maintained but does cover the basics accurately. The tutorial is generated from the input file doc/libpqxx.sgml at release time. For some quick examples, take a look at the test programs in the test/ directory. If you don't know how a certain function or class is used, try searching the test programs for that name. This may be the quickest way to a working example. When reading the test programs, please keep in mind that these do a lot of checking and verifying to see that the library works correctly. This is done at test time precisely so that you won't need to do that in your own code. You are not meant to imitate all those safety checks yourself; libpqxx encourages a relatively care-free programming style. Rely on the exception mechanism for error handling and concentrate on your goals, not the plumbing. Programming with libpqxx Your first program will involve the libpqxx classes connection (see headers "pqxx/connection_base.hxx" and "pqxx/connection.hxx"), and work (a convenience typedef for transaction<> which conforms to the interface defined in "pqxx/transaction_base.hxx"). These "*.hxx" headers are not the ones you include in your program. Instead, include the versions without filename suffix (i.e. "pqxx/connection_base" etc.) and they will include the .hxx files for you. This was done so that includes are in standard C++ style (as in etc.), but an editor will still recognize them as files containing C++ code. Continuing the list of classes, you will most likely also need the result class ("pqxx/result.hxx"). In a nutshell, you create a "connection" based on a Postgres connection string (see below), create a "work" in the context of that connection, and run one or more queries on the work which return "result" objects. The results are containers of rows of data, each of which you can treat as an array of strings: one for each field in the row. It's that simple. Here is a simple example program to get you going, with full error handling: #include #include using namespace std; using namespace pqxx; int main() { try { connection C; cout << "Connected to " << C.dbname() << endl; work W(C); result R = W.exec("SELECT name FROM employee"); cout << "Found " << R.size() << "employees:" << endl; for (result::const_iterator r = R.begin(); r != R.end(); ++r) { cout << r[0].c_str() << endl; } cout << "Doubling all employees' salaries..." << endl; W.exec("UPDATE employee SET salary=salary*2"); cout << "Making changes definite: "; W.commit(); cout << "ok." << endl; } catch (const exception &e) { cerr << e.what() << endl; return 1; } return 0; } Connection strings Postgres connection strings state which database server you wish to connect to, under which username, using which password, and so on. Their format is defined in the documentation for libpq, the C client interface for PostgreSQL. Alternatively, these values may be defined by setting certain environment variables as documented in e.g. the manual for psql, the command line interface to PostgreSQL. Again the definitions are the same for libpqxx-based programs. The connection strings and variables are not fully and definitively documented here; this document will tell you just enough to get going. Check the PostgreSQL documentation for authoritative information. The connection string consists of attribute=value pairs separated by spaces, e.g. "user=john password=1x2y3z4". The valid attributes include: host Name of server to connect to, or the full file path (beginning with a slash) to a Unix-domain socket on the local machine. Defaults to "/tmp". Equivalent to (but overrides) environment variable PGHOST. hostaddr IP address of a server to connect to; mutually exclusive with "host". port Port number at the server host to connect to, or socket file name extension for Unix-domain connections. Equivalent to (but overrides) environment variable PGPORT. dbname Name of the database to connect to. A single server may host multiple databases. Defaults to the same name as the current user's name. Equivalent to (but overrides) environment variable PGDATABASE. user User name to connect under. This defaults to the name of the current user, although PostgreSQL users are not necessarily the same thing as system users. requiressl If set to 1, demands an encrypted SSL connection (and fails if no SSL connection can be created). Settings in the connection strings override the environment variables, which in turn override the default, on a variable-by-variable basis. You only need to define those variables that require non-default values. Linking with libpqxx To link your final program, make sure you link to both the C-level libpq library and the actual C++ library, libpqxx. On most Unix-style compilers, this can be done using the options -lpq -lpqxx while linking. Note that both libraries must be in your link path, so the linker knows where to find them. Any dynamic libraries you use must also be in a place where the loader can find them when loading your program at runtime. Some users have reported problems using the above syntax, however, particularly when multiple versions of libpqxx are partially or incorrectly installed on the system. If you get massive link errors, try removing the "-lpqxx" argument from the command line and replacing it with the name of the libpqxx library binary instead. That's typically libpqxx.a, but you'll have to add the path to its location as well, e.g. /usr/local/pqxx/lib/libpqxx.a. This will ensure that the linker will use that exact version of the library rather than one found elsewhere on the system, and eliminate worries about the exact right version of the library being installed with your program.. APPENDIX A - Links Apple MacOS X http://www.apple.com/macosx/ BSD http://www.bsd.org/ C++ http://www.cs.rpi.edu/~musser/stl-book/ Cygwin http://cygwin.com/ Doxygen http://www.stack.nl/~dimitri/doxygen/ gcc http://gcc.gnu.org/ Google http://www.google.com/ libpq http://candle.pha.pa.us/main/writings/pgsql/sgml/libpq.html libpqxx http://pqxx.org/ Linux http://www.linux.org/ MinGW http://www.mingw.org/ OpenSSL http://www.openssl.org/ PostgreSQL http://www.postgresql.org/ zlib http://www.zlib.org/ APPENDIX B - Projects Using libpqxx This list is far from complete. It is known that there are many other projects using libpqxx that are not included here. Some of them may be proprietary, or even have no names. Inclusion does not imply endorsement. For all I know, the people running the Google projects may be unhappy with libpqxx--or perhaps they may have stopped using it by the time you read this! But obviously I'll do my best to ensure that this does not happen. On to the list: As found on Google: DocConversion http://docconversion.sourceforge.net/ Genea http://savannah.nongnu.org/projects/genea/ Gnucomo http://www.gnucomo.org/ MapServer http://mapserver.gis.umn.edu/ QHacc http://qhacc.sourceforge.net/ Vocal / Mascarpone http://www.vovida.org/ Confirmed by authors: OKE http://www.liacs.nl/home/bsamwel/oke/prerelease-0.10/ KOffice / Kexi http://www.kexi-project.org/ KPoGre http://kpogre.sourceforge.net/ Once MMORPG http://sourceforge.net/projects/once/ Scippy http://dicomlib.swri.ca/scippy.html libpqxx-3.1.1/README-UPGRADE0000664000175000017500000002201112075723514012075 00000000000000NOTICES FOR USERS UPGRADING FROM 3.0 TO 3.1 The machinery to support conversion between the database's textual format and the client's native types are now in a separate header, pqxx/strconv. If your program fails to compile, try adding an include statement to include this new header. In binarystring objects, the results of the str() function are no longer cached inside the object. This means that calling this function repeatedly will be a lot slower (but keeping and caching the result yourself could be a lot faster) than it was in previous versions. It also means that subsequent invocations will return different string objects, not references to the same one. NOTICES FOR USERS UPGRADING FROM 2.x TO 3.x All items marked as deprecated in the 2.x API have been removed. The Cursor and CachedResult classes are gone. A new class "stateless_cursor" offers the functionality of Cursor combined with CachedResult's ease of use. The only thing still missing is that stateless_cursor does not do any client-side caching. The sql_base class is still there, and sql_cursor offers low-level cursor access for those who want to get close to the metal. The cursor stream API remains unchanged. NOTICES FOR USERS UPGRADING FROM 2.0 AND 2.1 VERSIONS TO 2.2.0 OR LATER The default installation location has changed from /usr/local/pqxx to /usr/local which should make it easier to run programs linked to libpqxx. If you upgrade, be sure to remove your old /usr/local/pqxx is removed, or at least remove it from your header and library paths when compiling your libpqxx programs. The configure script no longer requires the --with-postgres options, nor does it recognize them. Instead, it finds the PostgreSQL headers and libraries by running Postgres' pg_config script. This should have been installed in the binaries directory of your PostgreSQL installation; make sure it's in your command path before running the libpqxx configure script. IMPORTANT NOTICE FOR USERS UPGRADING TO 1.9.0 OR LATER FROM OLDER VERSIONS Version 1.9.0 marks a radical change in the library, preparatory to the 2.0.0 release2003. These may require changes in your code; see the NEWS file for quick overview of the changes. Most of these are also relevant for users upgrading from 1.x to 2.x versions of the library. Not all the changes will be of immediate importance to you; where possible, typedefs have been provided to maintain backwards compatibility. In some cases however, your existing code may fail to compile, or changes may be needed to stay compatible with future versions of libpqxx. 1. The Great Renaming Practically all classes have been renamed to fully lower-case names. This was requested by several users, and should help stylistic integration with the C++ Standard Library. Typedefs have been provided where necessary, so no immediate changes in your code are needed on that score (although eventually of course the typedefs will be phased out); however, don't be surprised if class names are spelled differently in the documentation or in compiler messages than you're used to. 2. The Transformed Transaction Taxonomy (TTT) The old Transaction hierarchy has been transformed to accomodate transaction isolation levels as compile-time type properties. Also, there is now a separate dbtransaction base class to indicate that a subclass opens a real transaction on the backend. As you may have guessed, nontransaction is the only type of transaction implementation that isn't derived from dbtransaction. The new root of the inheritance tree is transaction_base. Isolation levels are modeled as template arguments to the transaction types that support them, i.e. those classes derived from dbtransaction. This makes it easy to adapt if the set of isolation levels implemented by the underlying database should ever change. To limit the amount of inlined code, these newly templatized classes (i.e. transaction and robusttransaction) are not derived directly from dbtransaction. Instead, their implementations are mostly contained in basic_transaction and basic_robusttransaction respectively. The template classes inherit their implementations from these classes and only add the minimal changes required to set their isolation levels. To express that a function requires a robusttransaction of any isolation level, for instance, make its parameter refer to a basic_robusttransaction. The database's default isolation level is "read committed," which means that a transaction will read newly changed values as they become available from other transactions as they commit. PostgreSQL also implements "serializable," which completely isolates each transaction from seeing changes made by other transactions while it is active. The drawback of the serializable level is that the database may occasionally need to abort the transaction because its "snapshot" view of the database has become impossible to maintain. Using libpqxx transactors will isolate you from this concern. The old Transaction name is now typedef'ed to mean transaction; to get a serializable one, declare a transaction. The same goes for robusttransaction. To use the default isolation level, just write transaction<> (or, naturally, robusttransaction<>). This will use the default template parameter, which is read_committed. For transaction<>, which you'll usually want to use, there is also a convenience typedef called "work." Isolation levels are defined in the new header file pqxx/isolation.h. 3. If you use Cursor or CachedResult... These classes have contained a serious bug for some time now, which is related to the transaction isolation levels described above. Even if you don't want to upgrade right away, please try to avoid the "absolute positioning" feature of Cursor, and avoid CachedResult altogether. Either will be safe if you only read your result set once, in a strict forward-only manner, but please consider upgrading libpqxx. Newer version ensure that your code will not build until you fix the problem. The problem is this: due to the database's default transaction isolation level of "read committed," it is possible for another transaction to modify the contents of your query's result set as you access them. The Cursor class in recent versions of libpqxx knew how to keep track of their absolute position to let you scroll directly to a given row, or to determine the size of the result set. If another transaction modifies the rows you're interested in, however, that may affect the number of rows in your result set and confuse your cursor object's positioning logic. The CachedResult class was built on top of Cursor's absolute positioning functionality, and so has the same problem. TTT to the rescue. The new transaction hierarchy allows the constructors for cursor and cachedresult to demand that they be passed a transaction with isolation level "serializable." Failure to do so will yield a compile-time or link-time error for the symbol error_permitted_isolation_level(). If you want to continue using cursors and cachedresults the way you were used to, you'll need to replace the relevant transactions with ones declared as serializable: transaction or robusttransaction. This may require some restructuring or templatization of your program in some cases, because the constructors for cursor and cachedresult must be able to see the correct transaction isolation level at compile time, but I hope you'll agree it was the only solution that was both safe and efficient. The offending functionality will be spliced out of the cursor class; in fact, the class may disappear altogether and be replaced by a set of iterator-based interfaces; random-access iterators will only be available in serializable transactions, and some optimizations will be possible for forward-only iterators. The difference between updateable and read-only cursors may be reflected as a distinction between regular iterators and const_iterators. 4. If you use Transactors The old way of setting a transaction type as your transactor's "quality of service," by overriding the nested typedef for "argument_type," has been deprecated. It will still work as far as I can make out, but may at some point in the future development of libpqxx fail to do what you expect. There will be no compile-time warning of this, so please inspect your transactors manually. The new way to set a transactor's quality of service is to pass the desired transaction type as a template argument. The old Transactor name is defined to mean "transactor<>", maintaining the old default of Transaction (which is now really a transaction). To replace this with, say, a nontransaction write: class UnsafeTransactor : public transactor For a super-robust, highly reliable transactor, write: class SafeTransactor : public transactor > Note the space between the two closing angled-brackets: "> >" instead of merely ">>". This is due to an ambiguity in the C++ syntax. Without the whitespace, the two consecutive larger-than signs would be parsed as a >> (shift-right) operator. libpqxx-3.1.1/tools/0000775000175000017500000000000012076704654011361 500000000000000libpqxx-3.1.1/tools/Makefile.am0000664000175000017500000000073012075723506013331 00000000000000EXTRA_DIST = \ extract_version \ maketemporary \ preprelease \ release \ rmlo.cxx \ splitconfig \ template2mak.py \ pqxxthreadsafety.cxx INCLUDES=-I$(top_builddir)/include -I$(top_srcdir)/include ${POSTGRES_INCLUDE} noinst_PROGRAMS = rmlo pqxxthreadsafety rmlo_SOURCES = rmlo.cxx rmlo_LDADD = $(top_builddir)/src/libpqxx.la ${POSTGRES_LIB} pqxxthreadsafety_SOURCES = pqxxthreadsafety.cxx pqxxthreadsafety_LDADD = $(top_builddir)/src/libpqxx.la ${POSTGRES_LIB} libpqxx-3.1.1/tools/preprelease0000775000175000017500000001473612075723506013545 00000000000000#! /bin/sh # # Prepare a release of libpqxx. This is tailored to my machine and my current # postgres installation. It's not supposed to work on anything else. # # Usage: preprelease [sourcedir] # # where sourcedir is the main directory of the libpqxx source tree; defaults # to "." # # The script builds libpqxx and runs a regression test from the tarball # generated by 'make dist'. This ensures that no important files are left out # of the distribution archive, and that there are no regression failures in the # released version. # # If successful, the script leaves a distribution tarball in $TMPDIR (which # defaults to /tmp). # # Set CONFIG_ARGS to any argument list you wish to pass to configure for # compilation. Defaults to "--enable-shared". Don't set the compiler here; # use COMPILERS instead (see below). # # Set CONFIGDIST_ARGS to any argument list you wish to pass to configure when # preparing to make a distribution archive. Defaults to # "--enable-maintainer-mode" so that the HTML documentation is built and # included in the archive. # # The distribution is tested for several compilers by default; override the list # by setting COMPILERS to a space-separated list of compilers. # # Set CONCURRENCY_LEVEL to the number of parallel jobs you want "make" to run. # This can be useful on SMP or SMT systems, or in conjunction with distcc. SOURCEDIR="$1" TMPDIR="${TMPDIR:-/tmp}" export TMPDIR LOGFILE="$TMPDIR/libpqxx-preprelease.log" ERRLOG="$TMPDIR/libpqxx-preprelease.err" DEFAULTCOMPILERS=/usr/bin/g++-[1-9]* if test -z "$CONCURRENCY_LEVEL" ; then CONCURRENCY_LEVEL=1 fi if test -z "$COMPILERS" ; then COMPILERS="$DEFAULTCOMPILERS" fi if test -z "$CONFIG_ARGS" ; then CONFIG_ARGS="--enable-shared" fi if test -z "$CONFIGDIST_ARGS" ; then CONFIGDIST_ARGS="--enable-maintainer-mode" fi print () { echo "$1" >>$LOGFILE echo "$1" >>$ERRLOG } log () { print print "`date`: $1" print } error () { print "$1" echo "$1" >&2 exit 1 } command () { print "$ $1" $2 $1 >>$LOGFILE 2>>$ERRLOG } # In current directory, configure, build, and run regression test using the # compiler given as an argument. If no argument is given, the default compiler # is used. run_test () { if ! test -z "$1" ; then COMPILEROPT="CXX=$1" fi if test -z "$1" || which "$1" >/dev/null ; then log "********* Testing with $1 *********" # Skip documentation build: we tested that the first time around touch doc/reference-stamp doc/tutorial-stamp log "Configuring" command "./configure $CONFIG_ARGS $COMPILEROPT" nice log "Building" command "make -j $CONCURRENCY_LEVEL" nice log "Running regression test" command "make -j $CONCURRENCY_LEVEL check" nice grep '^FAIL:' $LOGFILE 2>>$ERRLOG || true grep '^A*l* *[0-9]* tests* passed$' $LOGFILE else log "********* Skipping $1 *********" fi } # Ensure that the given file has been produced before rolling a tarball require_product () { PRODUCT="$1" TYPE="$2" if ! test -e "$PRODUCT" ; then if test -z "$TYPE" ; then TYPE="file" fi print "Required $TYPE not generated: $PRODUCT" exit 1 fi } LC_ALL=C rm -f -- $LOGFILE $ERRLOG PQXXVERSION="`./tools/extract_version`" # See if debian/changelog needs updating log "Seeing if debian/changelog is up to date..." if ! head -n 1 debian/changelog | grep "($PQXXVERSION-" >/dev/null then error "Please update debian/changelog to mention version $PQXXVERSION" exit 1 fi # See if NEWS describes the new release log "Seeing if NEWS is up to date..." if ! head -n 1 NEWS | grep "^$PQXXVERSION[[:space:]]*$" then error "Please update NEWS to describe $PQXXVERSION release" exit 1 fi # Check that compiler-internal-pre.hxx and compiler-internal-post.hxx inclusions # match up findhdr() { HDR="$1" shift grep "^[[:space:]]*#[[:space:]]*include[[:space:]]*[<\"]$HDR[>\"]" $* } OLDPATH="$PATH" PATH="$OLDPATH:./tools" PREFILES="`maketemporary`" PATH="$OLDPATH" log "Looking for mismatched pre/post compiler headers..." findhdr pqxx/compiler-internal-pre.hxx -l include/pqxx/* >"$PREFILES" if ! findhdr pqxx/compiler-internal-post.hxx -l include/pqxx/* | \ diff "$PREFILES" - ; \ then error "Mismatched compiler-internal-pre/post headers" rm -f -- "$PREFILES" exit 1 fi rm -f -- "$PREFILES" log "Preparing libpqxx release $PQXXVERSION." log "Log file is $LOGFILE, errors go to $ERRLOG" tail -f --pid=$$ $ERRLOG & if test -z "$PGHOST"; then log "Looking for local PostgreSQL socket..." SOCKET=".s.PGSQL.5432" for d in "$TMPDIR" /var/run /tmp /var/run/postgresql ; do if test -S "$d/$SOCKET" ; then log "Found socket in $d." PGHOST="$d" export PGHOST fi done if test -z "$PGHOST" ; then log "WARNING: No local PostgreSQL found. Tests may not run." fi fi if test -z "$PGHOST" ; then log "Using default PostgreSQL location." else log "Accessing PostgreSQL in $PGHOST" fi set -e if test -z "$SOURCEDIR"; then SOURCEDIR="."; fi command "cd $SOURCEDIR" SOURCEDIR=`pwd` log "Building from \"$SOURCEDIR\" (`pwd`)" DISTNAME=libpqxx-$PQXXVERSION TARBALL=$DISTNAME.tar.gz log "Cleaning up old documentation" # Re-generating the reference docs every time just takes too much time... Just # remember to clean them out every once in a while. command "rm -f -- doc/html/Reference/*" command "rm -f -- doc/html/Tutorial/*" command "rm -f -- doc/reference-stamp doc/tutorial-stamp" # No longer needed; the files this generates are in revision control now. #log "Generating autoconf/automake files" #command "env NOCONFIGURE=1 ./autogen.sh" nice log "Configuring for make dist" command "./configure $CONFIGDIST_ARGS" nice log "Preparing documentation" command "make doc" nice log "Creating $TARBALL" command "make dist" nice command "cd $TMPDIR" command "rm -rf -- $DISTNAME" log "Extracting $TARBALL in $TMPDIR" command "tar xzf $SOURCEDIR/$TARBALL" command "cd $DISTNAME" for compiler in $COMPILERS ; do run_test "$compiler" done log "Generating symbol table" mkdir -p "$SOURCEDIR/lib" nm --demangle src/.libs/libpqxx.a | cut -d' ' -f 3- | grep -v '^_' | grep -v '^$' | grep -i '^pqxx' | sort -u -o "$SOURCEDIR/lib/SYMBOLS.$PQXXVERSION" require_product doc/html/Reference/index.html require_product doc/html/Tutorial/index.html command "cd .." command "rm -rf -- $DISTNAME" command "cd $SOURCEDIR" # Can't use "command" function here--breaks redirection: nice md5sum -b "$TARBALL" >"$TARBALL.md5sum" command "mv $TARBALL $TARBALL.md5sum $TMPDIR" log "Finished. Release tarball is $SOURCEDIR/$TARBALL" set +e nice vacuumdb >/dev/null 2>&1 & # Give output time to catch up with command prompt sleep 2 echo libpqxx-3.1.1/tools/Makefile.in0000664000175000017500000004033512076703451013345 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = rmlo$(EXEEXT) pqxxthreadsafety$(EXEEXT) subdir = tools DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/libtool.m4 \ $(top_srcdir)/config/m4/ltoptions.m4 \ $(top_srcdir)/config/m4/ltsugar.m4 \ $(top_srcdir)/config/m4/ltversion.m4 \ $(top_srcdir)/config/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/pqxx/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_pqxxthreadsafety_OBJECTS = pqxxthreadsafety.$(OBJEXT) pqxxthreadsafety_OBJECTS = $(am_pqxxthreadsafety_OBJECTS) am__DEPENDENCIES_1 = pqxxthreadsafety_DEPENDENCIES = $(top_builddir)/src/libpqxx.la \ $(am__DEPENDENCIES_1) am_rmlo_OBJECTS = rmlo.$(OBJEXT) rmlo_OBJECTS = $(am_rmlo_OBJECTS) rmlo_DEPENDENCIES = $(top_builddir)/src/libpqxx.la \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pqxx depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(pqxxthreadsafety_SOURCES) $(rmlo_SOURCES) DIST_SOURCES = $(pqxxthreadsafety_SOURCES) $(rmlo_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR = @MKDIR@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PG_CONFIG = @PG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ POSTGRES_INCLUDE = @POSTGRES_INCLUDE@ POSTGRES_LIB = @POSTGRES_LIB@ PQXXVERSION = @PQXXVERSION@ PQXX_ABI = @PQXX_ABI@ PQXX_MAJOR = @PQXX_MAJOR@ PQXX_MINOR = @PQXX_MINOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMLTO = @XMLTO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ with_postgres_include = @with_postgres_include@ with_postgres_lib = @with_postgres_lib@ EXTRA_DIST = \ extract_version \ maketemporary \ preprelease \ release \ rmlo.cxx \ splitconfig \ template2mak.py \ pqxxthreadsafety.cxx INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include ${POSTGRES_INCLUDE} rmlo_SOURCES = rmlo.cxx rmlo_LDADD = $(top_builddir)/src/libpqxx.la ${POSTGRES_LIB} pqxxthreadsafety_SOURCES = pqxxthreadsafety.cxx pqxxthreadsafety_LDADD = $(top_builddir)/src/libpqxx.la ${POSTGRES_LIB} all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pqxxthreadsafety$(EXEEXT): $(pqxxthreadsafety_OBJECTS) $(pqxxthreadsafety_DEPENDENCIES) $(EXTRA_pqxxthreadsafety_DEPENDENCIES) @rm -f pqxxthreadsafety$(EXEEXT) $(CXXLINK) $(pqxxthreadsafety_OBJECTS) $(pqxxthreadsafety_LDADD) $(LIBS) rmlo$(EXEEXT): $(rmlo_OBJECTS) $(rmlo_DEPENDENCIES) $(EXTRA_rmlo_DEPENDENCIES) @rm -f rmlo$(EXEEXT) $(CXXLINK) $(rmlo_OBJECTS) $(rmlo_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pqxxthreadsafety.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmlo.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libpqxx-3.1.1/tools/release0000775000175000017500000000474412075723506012654 00000000000000#! /bin/bash # Release current libpqxx trunk (or other branch). # # Use this after a successful preprelease run in the parent series. # # Arguments: # [parent] # # The next version number is the one for a future release in the parent series, # not the version that's being released now. So if you're releasing x.y.0, that # would be x.y+1.0. If you're releasing some other x.y.z, it's x.y.z+1. # # The parent branch defaults to "trunk." For x.y.z releases (where z > 0), use # branches/x.y. set -e NEXTVERSION="$1" if test -z "$NEXTVERSION" then echo "Usage: $0 [parent]" >&2 exit 1 fi PARENT="$2" if test -z "$PARENT" then PARENT="trunk" fi REPO="svn+ssh://pqxx.org/srv/svn/libpqxx/" FTP="/srv/ftp/libpqxx" SNAPSHOT="/home/jtv/public_html/tmp/pqxx/snapshot" DOC="/srv/www/devprojects/libpqxx/doc" CHECKOUT="`mktemp -p /tmp -d pqxx.XXXXXXXXXX`" echo "** Checking out source tree to $CHECKOUT **" cd "$CHECKOUT" svn co -q "$REPO" cd libpqxx/ export PATH="$PATH:$CHECKOUT/libpqxx/$PARENT/tools" pushd "$PARENT" >/dev/null PQXXVERSION="`extract_version`" popd >/dev/null if test "$PQXXVERSION" = "$NEXTVERSION" then cat <&2 The given "next version" is the same as the existing version in $PARENT/PQXXVERSION. Instead, give the next version for a future release in the same series. EOF exit 2 fi RELEASEDATE="`date +'%a, %d %b %y %T %z'`" echo "** Updating source tree **" svn cp "$PARENT" "tags/$PQXXVERSION" # Mark new trunk in debian/changelog. cat - <"$PARENT"/debian/changelog libpqxx ($NEXTVERSION-1) unstable; urgency=medium * Forked release $PQXXVERSION. -- Jeroen T. Vermeulen $RELEASEDATE EOF # Mark next version in NEWS. cat - <"$PARENT/NEWS" $NEXTVERSION EOF echo "PQXX_VERSION $NEXTVERSION" >"$PARENT"/VERSION svn commit -m "Forking release $PQXXVERSION, moving on to $NEXTVERSION." cd /tmp rm -rf -- "$CHECKOUT" echo "** Setting up new documentation **" TEMPDOC="`mktemp -p /tmp -d pqxxdoc.XXXXXXXXXX`" cd "$TEMPDOC" tar xzf "$SNAPSHOT"/libpqxx-*.tar.gz cd libpqxx-*/ PREVIOUS='' for d in `ls "$DOC" | grep '[0-9]'` do PREVIOUS="$PREVIOUS --link-dest='$d'" done rsync -r $PREVIOUS doc/html "$DOC/$PQXXVERSION" cd /tmp rm -rf "$TEMPDOC" if test "$PARENT" = "trunk" then # Move snapshot tarball to FTP directory. mv "$SNAPSHOT"/libpqxx-*.tar.* "$FTP/" else echo "*** Remember: Build tarball and make available for upload ***" fi echo "** Done **" libpqxx-3.1.1/tools/maketemporary0000775000175000017500000000064212075723506014105 00000000000000#! /bin/sh # Work around differences in mktemp implementations TMPDIR="${TMPDIR:-/tmp}" export TMPDIR T="`mktemp`" if test -z "$T" ; then T="`mktemp -t pqxx.XXXXXX`" fi if test -z "$T" ; then T="`mktemp pqxx.XXXXXX`" fi if test -z "$T" ; then T="`mktemp "$TMPDIR/pqxx.XXXXXX"`" fi if test -z "$T" ; then UNIQUE="`date '%s.%N'`" T="pqxx.$UNIQUE" if test -d "$TMPDIR" ; then T="$TMPDIR/$T" fi fi echo "$T" libpqxx-3.1.1/tools/pqxxthreadsafety.cxx0000664000175000017500000000031612075723506015425 00000000000000// Print thread-safety information for present libpqxx build. #include #include "pqxx/util" using namespace PGSTD; int main() { cout << pqxx::describe_thread_safety().description << endl; } libpqxx-3.1.1/tools/template2mak.py0000775000175000017500000000710412075723506014242 00000000000000#! /usr/bin/python r""" ------------------------------------------------------------------------- FILE tools/template2mak.py DESCRIPTION Translates a template MAK file into a real MAK file. Used for generating VC++ makefiles. Copyright (c) 2006, Bart Samwel and Jeroen T. Vermeulen See COPYING for copyright license. If you did not receive a file called COPYING with this source code, please notify the distributor of this mistake, or contact the author. ------------------------------------------------------------------------- """ import sys, glob, os # Expand a foreach template with the given path, and write the results to # outfile. def expand_foreach_template(path,template,outfile): basepath = os.path.splitext(os.path.basename(path))[0] for line in template: line = line.replace("###FILENAME###", path) line = line.replace("###BASENAME###", basepath) outfile.write(line) # Expand the given foreach template with the given list of file patterns, and # write the results to outfile. def foreach_file_in_patterns_expand_template(filepatterns,template,outfile): for pattern in filepatterns: files = glob.glob(pattern) files.sort() for path in files: expand_foreach_template(path,template,outfile) # Transform the template in infile into a makfile, and write the results to # outfile. The available template commands are: # # Expand a template section for each file in a list of file patterns: # # ###MAKTEMPLATE:FOREACH my/path*/*.cxx,other*.cxx # ... # ###MAKTEMPLATE:ENDFOREACH # # In the template section, you can use ###BASENAME### to get the base name of # the file being processed (e.g. "base" for "../base.cxx"), and you can use # ###FILENAME### to get the full filename. def template2mak(infile,outfile): lines = infile.readlines() foreachcmd = r"###MAKTEMPLATE:FOREACH " endforeachcmd = r"###MAKTEMPLATE:ENDFOREACH" while lines: line = lines[0] if line.strip().upper().startswith(foreachcmd): filepatterns = line.strip() [ len(foreachcmd): ].split(',') lines = lines[1:] l = 0 for line in lines: if line.strip().upper().startswith(endforeachcmd): break l = l + 1 template = lines[:l] lines = lines[l+1:] foreach_file_in_patterns_expand_template(filepatterns,template,outfile) else: outfile.write(line) lines = lines[1:] if __name__ == '__main__': if len(sys.argv) > 3: print "Too many arguments." sys.exit(1) me = os.path.basename(sys.argv[0]) hr = "#"*80 + "\n" input = sys.stdin inarg = None output = sys.stdout outarg = None if len(sys.argv) >= 2: inarg = os.path.abspath(sys.argv[1]) input = file(inarg) if len(sys.argv) >= 3: outarg = sys.argv[2] output = file(outarg, 'w') #os.chdir(os.path.dirname(inarg)) output.write(hr) output.write("""# AUTOMATICALLY GENERATED FILE--DO NOT EDIT # # This file is generated automatically by libpqxx's %s script. # # If you modify this file, chances are your modifications will be lost because # the file will be re-written from time to time. # # The %s script should be available in the tools directory of the # libpqxx source archive. """ % (me, me)) if len(sys.argv) > 1: output.write("#\n") output.write("# Generated from template '%s'.\n" % inarg) output.write(hr) template2mak(input, output) libpqxx-3.1.1/tools/rmlo.cxx0000664000175000017500000000150412075723506012772 00000000000000// Remove large objects given on the command line from the default database #include #include "pqxx/pqxx" using namespace PGSTD; using namespace pqxx; namespace { class RemoveLO : public transactor<> { oid m_O; public: explicit RemoveLO(oid O) : m_O(O) {} void operator()(argument_type &T) { largeobject L(m_O); L.remove(T); } }; } int main(int, char *argv[]) { lazyconnection C; bool Failures = false; try { for (int i=1; argv[i]; ++i) { oid O; from_string(argv[i], O); try { C.perform(RemoveLO(O)); } catch (const exception &e) { cerr << e.what() << endl; Failures = true; } } } catch (const exception &e) { cerr << e.what() << endl; return 2; } return Failures; } libpqxx-3.1.1/tools/splitconfig0000775000175000017500000001146512075723506013553 00000000000000#! /usr/bin/python """Extract configuration items into various configuration headers. This uses the configitems file, a database consisting of text lines with the following single-tab-separated fields: - Name of the configuration item, e.g. PQXX_HAVE_PTRDIFF_T. - Publication marker: public or internal. - A single environmental factor determining the item, e.g. libpq or compiler. """ from __future__ import ( absolute_import, print_function, unicode_literals, ) __metaclass__ = type import os.path import re import sys usage = """\ Usage: splitconfig [srcdir] where [srcdir] is the main libpqxx source directory containing the configitems file, the include directory etc. This defaults to the current directory. """ def help_and_exit(error_string=None): if error_string != None: sys.stderr.write(error_string + '\n') print(usage) if ok: sys.exit(0) else: sys.exit(1) def read_configitems(filename): """Read the configuration-items database. :param filename: Path to the configitems file. :return: Sequence of text lines from configitems file. """ text = open(filename, 'rb').read().decode('ascii') return [line.split() for line in text.splitlines()] def map_configitems(items): """Map each config item to publication/factor. :param items: Sequence of config items: (name, publication, factor). :return: Dict mapping each item name to a tuple (publication, factor). """ return dict( (item, (publication, factor)) for item, publication, factor in items) def read_header(filename): """Read the original config.h generated by autoconf. :param filename: Path to the config.h file. :return: Sequence of text lines from config.h. """ return open(filename, 'rb').read().decode('ascii').splitlines() def extract_macro_name(config_line): """Extract a cpp macro name from a configuration line. :param config_line: Text line from config.h which may define a macro. :return: Name of macro defined in `config_line` if it is a `#define` statement, or None. """ config_line = config_line.strip() match = re.match('\s*#\s*define\s+([^\s]+)', config_line) if match is None: return None else: return match.group(1) def extract_section(header_lines, items, publication, factor): """Extract config items for given publication/factor from header lines. :param header_lines: Sequence of header lines from config.h. :param items: Dict mapping macro names to (publication, factor). :param publication: Extract only macros for this publication tag. :param factor: Extract only macros for this environmental factor. :return: Sequence of `#define` lines from `header_lines` insofar they fall within the requested section. """ return sorted( line.strip() for line in header_lines if items.get(extract_macro_name(line)) == (publication, factor)) def generate_config(header_lines, items, publication, factor): """Generate config file for a given section. Skip empty ones. :param header_lines: Sequence of header lines from config.h. :param items: Dict mapping macro names to (publication, factor). :param publication: Extract only macros for this publication tag. :param factor: Extract only macros for this environmental factor. """ config_file = "include/pqxx/config-%s-%s.h" % (publication, factor) section = extract_section(header_lines, items, publication, factor) if len(section) == 0: print("Generating %s: no items--skipping." % config_file) return with open(config_file, 'wb') as header: header.write( "/* Automatically generated from config.h: %s/%s config. */\n" % (publication, factor)) header.write('\n'.join(section)) header.write('\n') print("Generating %s: %d item(s)." % (config_file, len(section))) def check_args(argv): if len(argv) > 2: help_and_exit("Too many arguments.") if len(argv) == 2: if argv[1] in ('-h', '--help'): help_and_exit() if not os.path.isdir(argv[1]): help_and_exit("%s is not a directory." % srcdir) def get_base_dir(argv): if len(argv) > 1: return argv[1] else: return "." if __name__ == '__main__': check_args(sys.argv) srcdir = get_base_dir(sys.argv) items = read_configitems(os.path.join(srcdir, "configitems")) config = map_configitems(items) publications = sorted(set(item[1] for item in items)) factors = sorted(set(item[2] for item in items)) original_header = read_header("include/pqxx/config.h") items_map = map_configitems(items) for publication in publications: for factor in factors: generate_config(original_header, items_map, publication, factor) libpqxx-3.1.1/tools/extract_version0000775000175000017500000000115112075723506014440 00000000000000#! /bin/sh set -e ARG="$1" case "$ARG" in '') MODE="lib" ;; -h|--help) cat <&2 Unknown argument. Try $0 --help for usage information. EOF exit 1 esac get_version() { grep -w 'PQXX_VERSION' VERSION | sed -e 's/^[[:space:]A-Z_]*\([^[:space:]#]\+\).*$/\1/' } case "$MODE" in lib) get_version ;; abi) get_version | sed -e 's/\([^.]*\.[^.]*\)\..*/\1/' ;; *) echo "Unknown mode." 2>&1 exit 2 ;; esac libpqxx-3.1.1/libpqxx.pc.in0000664000175000017500000000043212075723506012554 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libpqxx Description: a C++ API to the PostgreSQL database management system. Version: @VERSION@ Libs: -L${libdir} -L@with_postgres_lib@ -lpqxx Cflags: -I${includedir} -I@with_postgres_include@ libpqxx-3.1.1/debian/0000775000175000017500000000000012076704654011443 500000000000000libpqxx-3.1.1/debian/rules0000664000175000017500000000604512075723514012440 00000000000000#!/usr/bin/make -f #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CXXFLAGS = $(CFLAGS) CXXFLAGS += -D_REENTRANT ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) MAKEFLAGS += -j$(NUMJOBS) endif # Get upstream version, and define libpqxx suffix LIBRARY_VERSION = -3.1 autoconfigure: autoconfigure-stamp autoconfigure-stamp: debian/control dh_testdir [ -r config/config.sub.orig ] || \ cp -f config/config.sub config/config.sub.orig [ -r config/config.guess.orig ] || \ cp -f config/config.guess config/config.guess.orig [ ! -r /usr/share/misc/config.sub ] || \ cp -f /usr/share/misc/config.sub config/config.sub [ ! -r /usr/share/misc/config.guess ] || \ cp -f /usr/share/misc/config.guess config/config.guess # Create versioned symlinks cd debian; \ for file in libpqxx.*; do \ ln -sf $$file `echo $$file | sed -e 's/libpqxx/libpqxx$(LIBRARY_VERSION)/'`; \ done -rm debian/libpqxx$(LIBRARY_VERSION)*.in mkdir debian/build && \ cd debian/build && \ ../../configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --enable-shared --disable-static --enable-maintainer-mode CXXFLAGS="$(CXXFLAGS)" && \ mkdir doc/html touch autoconfigure-stamp build: build-stamp build-stamp: autoconfigure-stamp dh_testdir cd debian/build; \ $(MAKE) touch build-stamp clean: dh_testdir dh_testroot [ ! -f Makefile ] || $(MAKE) distclean rm -f build-stamp autoconfigure-stamp rm -rf debian/build debian/install rm -rf debian/libpqxx$(LIBRARY_VERSION)* [ ! -r config/config.guess.orig ] || \ mv -f config/config.guess.orig config/config.guess || : [ ! -r config/config.sub.orig ] || \ mv -f config/config.sub.orig config/config.sub || : dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # Install into virtual root cd debian/build; \ $(MAKE) install DESTDIR=$(CURDIR)/debian/install # We don't want an RPATH in a Debian package chrpath --delete debian/install/usr/lib/lib*.so dh_install # Remove examples which include internal headers rm -f `grep -l config\\.h debian/libpqxx-doc/usr/share/doc/libpqxx-doc/examples/*.cxx` rm -f `grep -l config-internal debian/libpqxx-doc/usr/share/doc/libpqxx-doc/examples/*.cxx` rm -f `grep -l compiler\\.h debian/libpqxx-doc/usr/share/doc/libpqxx-doc/examples/*.cxx` binary-indep: install binary-arch: install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs ChangeLog dh_link dh_strip --dbg-package=libpqxx$(LIBRARY_VERSION)-dbg dh_compress dh_fixperms dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install libpqxx-3.1.1/debian/libpqxx-doc.doc-base.tutorial0000664000175000017500000000047312075723514017055 00000000000000Document: libpqxx-tutorial Title: libpqxx Tutorial Author: Jeroen T. Vermeulen Abstract: Tutorial for libpqxx, a C++ API to the PostgreSQL database management system. Section: Programming/C++ Format: HTML Index: /usr/share/doc/libpqxx-doc/html/Tutorial/index.html Files: /usr/share/doc/libpqxx-doc/html/Tutorial/* libpqxx-3.1.1/debian/Makefile.am0000664000175000017500000000160412075723514013413 00000000000000@SET_MAKE@ MAINT_CHARSET = latin1 EXTRA_DIST = \ changelog \ compat \ control \ copyright \ libpqxx-dev.dirs \ libpqxx-dev.docs \ libpqxx-dev.install \ libpqxx-dev.preinst \ libpqxx-doc.doc-base.reference \ libpqxx-doc.doc-base.tutorial \ libpqxx-doc.install \ libpqxx.docs \ libpqxx.install \ rules \ watch ## Rules dist-hook: # Distribute debian/control (not in EXTRA_DIST to avoid $(srcdir) dependencies # Do nothing actually, left in for compatibility DEBUILD_OPTIONS = -us -uc deb: changelog control rules $(MAKE) -C ../ dist -$(RM) -r debian-build -mkdir debian-build cd debian-build ; \ mv ../../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; \ tar xfvz $(PACKAGE)_$(VERSION).orig.tar.gz ; \ cd $(PACKAGE)-$(VERSION) ; \ debuild $(DEBUILD_OPTIONS) ; \ cd .. ; \ $(RM) -r $(PACKAGE)-$(VERSION) MAINTAINERCLEANFILES = \ Makefile.in .PHONY: deb libpqxx-3.1.1/debian/Makefile.in0000664000175000017500000002727612076703450013437 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = debian DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/libtool.m4 \ $(top_srcdir)/config/m4/ltoptions.m4 \ $(top_srcdir)/config/m4/ltsugar.m4 \ $(top_srcdir)/config/m4/ltversion.m4 \ $(top_srcdir)/config/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/pqxx/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR = @MKDIR@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PG_CONFIG = @PG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ POSTGRES_INCLUDE = @POSTGRES_INCLUDE@ POSTGRES_LIB = @POSTGRES_LIB@ PQXXVERSION = @PQXXVERSION@ PQXX_ABI = @PQXX_ABI@ PQXX_MAJOR = @PQXX_MAJOR@ PQXX_MINOR = @PQXX_MINOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMLTO = @XMLTO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ with_postgres_include = @with_postgres_include@ with_postgres_lib = @with_postgres_lib@ MAINT_CHARSET = latin1 EXTRA_DIST = \ changelog \ compat \ control \ copyright \ libpqxx-dev.dirs \ libpqxx-dev.docs \ libpqxx-dev.install \ libpqxx-dev.preinst \ libpqxx-doc.doc-base.reference \ libpqxx-doc.doc-base.tutorial \ libpqxx-doc.install \ libpqxx.docs \ libpqxx.install \ rules \ watch # Distribute debian/control (not in EXTRA_DIST to avoid $(srcdir) dependencies # Do nothing actually, left in for compatibility DEBUILD_OPTIONS = -us -uc MAINTAINERCLEANFILES = \ Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debian/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu debian/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ dist-hook distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am @SET_MAKE@ dist-hook: deb: changelog control rules $(MAKE) -C ../ dist -$(RM) -r debian-build -mkdir debian-build cd debian-build ; \ mv ../../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; \ tar xfvz $(PACKAGE)_$(VERSION).orig.tar.gz ; \ cd $(PACKAGE)-$(VERSION) ; \ debuild $(DEBUILD_OPTIONS) ; \ cd .. ; \ $(RM) -r $(PACKAGE)-$(VERSION) .PHONY: deb # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libpqxx-3.1.1/debian/copyright0000664000175000017500000000100412075723514013304 00000000000000This package was debianized by Greg Hookey on Thu, 12 Dec 2002 00:27:01 -0800. It was downloaded from ; now moved to Upstream Author: Jeroen T. Vermeulen Copyrights: Copyright © 2001-2008, Jeroen T. Vermeulen. Copyright © 1994-2008, Free Software Foundation. This project is released under the Berkeley/BSD license. On Debian systems, the complete text of the BSD License can be found in the file `/usr/share/common-licenses/BSD'. libpqxx-3.1.1/debian/libpqxx-dev.install0000664000175000017500000000025412075723514015212 00000000000000debian/install/usr/include usr debian/install/usr/lib/libpqxx.la usr/lib debian/install/usr/lib/libpqxx.so usr/lib debian/install/usr/lib/pkgconfig usr/lib libpqxx-3.1.1/debian/libpqxx-dev.dirs0000664000175000017500000000002412075723514014500 00000000000000usr/lib usr/include libpqxx-3.1.1/debian/changelog0000664000175000017500000001767712075723514013252 00000000000000libpqxx (3.1.0-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 15 Feb 2010 21:00:00 +0100 libpqxx (3.0.0-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 01 Nov 2008 00:00:00 +0700 libpqxx (2.6.9-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Thu, 01 Feb 2007 18:00:00 +0700 libpqxx (2.6.8-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Thu, 07 Sep 2006 17:00:00 +0700 libpqxx (2.6.7-1) stable; urgency=high * New upstream release. -- Jeroen T. Vermeulen Fri, 01 Jun 2006 02:30:00 +0700 libpqxx (2.6.6-1) stable; urgency=high * New upstream release. * Fixes security problem with string escaping -- Jeroen T. Vermeulen Sat, 27 May 2006 17:20:00 +0700 libpqxx (2.6.5-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 06 Mar 2006 20:00:00 +0700 libpqxx (2.6.4-1) unstable; urgency=medium [ Jeroen T. Vermeulen ] * New upstream release. [ Roger Leigh ] * debian/control.in: - Build-Depend upon debhelper v4, and libpq-dev rather than postgresql-dev. - libpqxx-dev: Depend upon libpq-dev rather than postgresql-dev. * debian/libpqxx-dev.docs: Include README-UPGRADE. * debian/rules: - Use debhelper v4 compatibility mode. -- Roger Leigh Sat, 11 Feb 2006 14:14:05 +0000 libpqxx (2.6.3-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Sat, 11 Feb 2006 16:00:00 +0700 libpqxx (2.6.2-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Sun, 13 Nov 2005 11:30:00 +0700 libpqxx (2.6.1-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 17 Jul 2005 19:30:00 +0700 libpqxx (2.6.0-1) unstable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Mon, 17 Jul 2005 19:30:00 +0700 libpqxx (2.5.6-1) stable; urgency=high * New upstream release. -- Jeroen T. Vermeulen Fri, 01 Jul 2005 20:30:00 +0700 libpqxx (2.5.5-1) stable; urgency=high * New upstream release. -- Jeroen T. Vermeulen Tue, 28 Jun 2005 16:00:00 +0700 libpqxx (2.5.4-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Tue, 20 Jun 2005 16:00:00 +0700 libpqxx (2.5.3-1) stable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Mon, 16 May 2005 19:00:00 +0700 libpqxx (2.5.2-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 09 May 2005 12:00:00 +0700 libpqxx (2.5.1-1) stable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Thu, 31 Mar 2005 14:00:00 +0700 libpqxx (2.5.0-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Sat, 05 Mar 2005 14:35:00 +0700 libpqxx (2.4.4-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 28 Feb 2005 10:32:00 +0700 libpqxx (2.4.3-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 07 Feb 2005 16:40:00 +0700 libpqxx (2.4.2-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Mon, 15 Nov 2004 17:30:00 +0700 libpqxx (2.4.1-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Wed, 03 Nov 2004 14:10:00 +0700 libpqxx (2.4.0-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Thu, 14 Oct 2004 16:40:00 +0700 libpqxx (2.3.0-2) unstable; urgency=low * debian/control.in: - Add chrpath to build dependencies to strip rpath from binaries - Depend on at least version 7.4.2-1 of postgresql for binary compatibility reasons (libpq dependency). * debian/rules: - Don't package tests which make use of internal headers as examples. -- Roger Leigh Thu, 02 Sep 2004 00:09:51 +0100 libpqxx (2.3.0-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Sat, 21 Aug 2004 03:50:00 +0200 libpqxx (2.2.9-1) unstable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Thu, 12 Aug 2004 21:15:00 +0200 libpqxx (2.2.8-1) unstable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Mon, 9 Aug 2004 00:50:00 +0200 libpqxx (2.2.7-1) stable; urgency=medium * New upstream release. -- Jeroen T. Vermeulen Fri, 2 Jul 2004 21:40:31 +0200 libpqxx (2.2.6-1) unstable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Thu, 19 Jun 2004 23:55:55 +0200 libpqxx (2.2.5-1) unstable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Thu, 17 Jun 2004 19:00:00 +0200 libpqxx (2.2.4-1) unstable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Sun, 6 Jun 2004 20:45:00 +0200 libpqxx (2.2.3-1) stable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Tue, 27 Apr 2004 02:45:00 +0200 libpqxx (2.2.2-1) stable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Tue, 27 Apr 2004 01:25:00 +0200 libpqxx (2.2.1-1) stable; urgency=low * New upstream release. -- Jeroen T. Vermeulen Mon, 23 Feb 2004 15:20:00 +0200 libpqxx (2.2.0-1) stable; urgency=low * New upstream release. -- Roger Leigh Tue, 13 Jan 2004 21:58:03 +0000 libpqxx (2.1.3-1) stable; urgency=low * New upstream release. * Switched to using the new library versioning scheme with package version string in the library DT_SONAME. This requires preprocessing of debian/control, and versioned symlinks are created at build time. -- Roger Leigh Sat, 6 Dec 2003 20:09:44 +0000 libpqxx (2.0.0-1) unstable; urgency=low * New upstream release. * Added myself as the new maintainer of libpqxx. * Merge upstream Debian packaging changes: - 1.7.6-1: Example packaging to be used with libpqxx development version 1.7.6 (Greg Hookey). - 1.9.6-1: Source changes (Jeroen T. Vermeulen). - 2.0.0-1: [debian/control, dedian/rules] Use chrpath to get rid of RPATH in the shared library (J.H.M. Dassen (Ray)) * Merge changes made in pervious NMUs (Closes: #217203, #198441, #201263) * Added the new tutorial to libpqxx-dev. -- Roger Leigh Thu, 20 Nov 2003 21:09:06 +0000 libpqxx (1.5.1-1.2) unstable; urgency=low * Non-maintainer upload. * Include test/*.cxx as usage examples in libpqxx-dev (Closes: #217203). -- Roger Leigh Mon, 27 Oct 2003 22:23:31 +0000 libpqxx (1.5.1-1.1) unstable; urgency=low * Non-maintainer upload. * Add API reference documentation to libpqxx-dev (Closes: #198441, #201263). * Use dh_install instead of the old dh_movefiles, to enable copying of the HTML documentation. * Use DESTDIR rather than prefix for make install, since overriding prefix may cause subtle breakage. * /usr/share/doc/libpqxx-dev may no longer be a symbolic link. libpqxx now has a preinst script to remove the link if it is detected, to prevent the documentation being incorrectly installed under /usr/share/doc/libpqxx0 (since dpkg follows symbolic links). * CVS directories present in the upstream tarball are removed in the debian/rules clean rule, to prevent inclusion in a binary package. * Fold lines over 79 columns in debian/copyright. * Change section of libpqxx-dev from libs to libdevel. -- Roger Leigh Thu, 4 Sep 2003 23:49:17 +0100 libpqxx (1.5.1-1) unstable; urgency=low * Initial Release. (closes: #170932) -- Greg Hookey Sat, 22 Mar 2003 16:00:10 -0800 libpqxx-3.1.1/debian/compat0000664000175000017500000000000212075723514012554 000000000000005 libpqxx-3.1.1/debian/control0000664000175000017500000000354512075723514012770 00000000000000Source: libpqxx Section: libs Priority: optional Maintainer: Eugene V. Lyubimkin Uploaders: Martin Pitt Build-Depends: debhelper (>> 5.0.0), libpq-dev (>= 8.0.3), chrpath, libtool Standards-Version: 3.8.0 Homepage: http://pqxx.org Package: libpqxx-dev Section: libdevel Architecture: any Depends: libpq-dev (>= 8.0.3-1), libpqxx-3.1 (= ${binary:Version}), pkg-config Suggests: libpqxx-doc Description: C++ library to connect to PostgreSQL (development files) C++ library to enable user programs to communicate with the PostgreSQL database back-end. . This package contains header files for linking against libpqxx. Obsoletes the libpqpp-dev package. Package: libpqxx-doc Section: doc Architecture: all Suggests: libpqxx-dev (>= ${binary:Version}) Conflicts: libpqxx-dev (<< 3.0.0~) Replaces: libpqxx-dev (<< 2.6.9-7) Description: C++ library to connect to PostgreSQL (documentation) C++ library to enable user programs to communicate with the PostgreSQL database back-end. . This package contains documentation and examples. Package: libpqxx-3.1 Section: libs Architecture: any Depends: ${shlibs:Depends} Description: C++ library to connect to PostgreSQL C++ library to enable user programs to communicate with the PostgreSQL database back-end. The database back-end can be local or it may be on another machine, accessed via TCP/IP. This package obsoletes the libpqpp package. Package: libpqxx-3.1-dbg Section: libdevel Priority: extra Architecture: any Depends: libpqxx-3.1 (= ${binary:Version}) Description: C++ library to connect to PostgreSQL (debugging symbols) C++ library to enable user programs to communicate with the PostgreSQL database back-end. . This package contains debugging symbols for the libpqxx library. It is usually needed to get a useful backtrace when applications using the libpqxx library crashes. libpqxx-3.1.1/debian/libpqxx-dev.preinst0000664000175000017500000000134612075723514015233 00000000000000#! /bin/sh # preinst script for libpqxx-dev # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * `install' # * `install' # * `upgrade' # * `abort-upgrade' case "$1" in install|upgrade) # Remove symbolic link if it exists. if test -h /usr/share/doc/libpqxx-dev; then rm -f /usr/share/doc/libpqxx-dev fi ;; abort-upgrade) ;; *) echo "preinst called with unknown argument \`$1'" >&2 exit 0 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# exit 0 libpqxx-3.1.1/debian/watch0000664000175000017500000000010012075723514012376 00000000000000version=3 ftp://pqxx.org/software/libpqxx/libpqxx-(.+)\.tar\.gz libpqxx-3.1.1/debian/libpqxx-doc.install0000664000175000017500000000014512075723514015200 00000000000000doc/html usr/share/doc/libpqxx-doc test/*.cxx usr/share/doc/libpqxx-doc/examples libpqxx-3.1.1/debian/libpqxx.docs0000664000175000017500000000002112075723514013710 00000000000000NEWS README TODO libpqxx-3.1.1/debian/libpqxx-dev.docs0000664000175000017500000000004012075723514014465 00000000000000NEWS README README-UPGRADE TODO libpqxx-3.1.1/debian/libpqxx.install0000664000175000017500000000005612075723514014436 00000000000000debian/install/usr/lib/libpqxx-*.so* usr/lib libpqxx-3.1.1/debian/libpqxx-doc.doc-base.reference0000664000175000017500000000046012075723514017144 00000000000000Document: libpqxx-reference Title: libpqxx Reference Manual Author: Jeroen T. Vermeulen Abstract: A C++ API to the PostgreSQL database management system. Section: Programming/C++ Format: HTML Index: /usr/share/doc/libpqxx-doc/html/Reference/index.html Files: /usr/share/doc/libpqxx-doc/html/Reference/* libpqxx-3.1.1/doc/0000775000175000017500000000000012076704654010766 500000000000000libpqxx-3.1.1/doc/Makefile.am0000664000175000017500000000267312075723507012747 00000000000000MAINTAINERCLEANFILES = Makefile.in maintainer-clean-local: $(RM) -rf html/Reference html/Tutorial $(RM) reference-stamp tutorial-stamp $(MKDIR) html/Reference html/Tutorial EXTRA_DIST= Doxyfile.in libpqxx.xml reference-stamp tutorial-stamp all-local: docs if BUILD_REFERENCE REFERENCE_DOCS = reference else REFERENCE_DOCS = endif if BUILD_TUTORIAL TUTORIAL_DOCS = tutorial else TUTORIAL_DOCS = endif if MAINTAINER_MODE REFERENCE_STAMP_DEPENDENCIES = ../src/libpqxx.la else REFERENCE_STAMP_DEPENDENCIES = endif DOCS = $(REFERENCE_DOCS) $(TUTORIAL_DOCS) docs: $(DOCS) reference: reference-stamp reference-stamp: Doxyfile.in $(REFERENCE_STAMP_DEPENDENCIES) $(DOXYGEN) Doxyfile touch $@ ../src/libpqxx.la: cd ../src; \ $(MAKE) libpqxx.la tutorial: tutorial-stamp tutorial-stamp: libpqxx.xml $(XMLTO) -o html/Tutorial xhtml $< touch $@ DISTHOOKDIRS = html/Reference html/Tutorial dist-hook: reference tutorial mkdir $(distdir)/html # Do a shallow copy of each directory for dir in $(DISTHOOKDIRS); do \ if test -d $(srcdir)/$$dir; then \ mkdir $(distdir)/$$dir; \ for dirfile in $(srcdir)/$$dir/*; do \ if test -f $$dirfile; then \ cp -p $$dirfile $(distdir)/$$dir; \ fi ; \ if test -d $$dirfile ; then \ subdir="`basename "$$dirfile"`"; \ if test "$$subdir" != "CVS" && "$$subdir" != ".svn" ; then \ cp -pR $$dirfile $(distdir)/$$dir; \ fi \ fi \ done \ fi \ done libpqxx-3.1.1/doc/Makefile.in0000664000175000017500000003100412076703450012742 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/libtool.m4 \ $(top_srcdir)/config/m4/ltoptions.m4 \ $(top_srcdir)/config/m4/ltsugar.m4 \ $(top_srcdir)/config/m4/ltversion.m4 \ $(top_srcdir)/config/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/pqxx/config.h CONFIG_CLEAN_FILES = Doxyfile CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR = @MKDIR@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PG_CONFIG = @PG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@ POSTGRES_INCLUDE = @POSTGRES_INCLUDE@ POSTGRES_LIB = @POSTGRES_LIB@ PQXXVERSION = @PQXXVERSION@ PQXX_ABI = @PQXX_ABI@ PQXX_MAJOR = @PQXX_MAJOR@ PQXX_MINOR = @PQXX_MINOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMLTO = @XMLTO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ with_postgres_include = @with_postgres_include@ with_postgres_lib = @with_postgres_lib@ MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = Doxyfile.in libpqxx.xml reference-stamp tutorial-stamp @BUILD_REFERENCE_FALSE@REFERENCE_DOCS = @BUILD_REFERENCE_TRUE@REFERENCE_DOCS = reference @BUILD_TUTORIAL_FALSE@TUTORIAL_DOCS = @BUILD_TUTORIAL_TRUE@TUTORIAL_DOCS = tutorial @MAINTAINER_MODE_FALSE@REFERENCE_STAMP_DEPENDENCIES = @MAINTAINER_MODE_TRUE@REFERENCE_STAMP_DEPENDENCIES = ../src/libpqxx.la DOCS = $(REFERENCE_DOCS) $(TUTORIAL_DOCS) DISTHOOKDIRS = html/Reference html/Tutorial all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool dist-hook distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am maintainer-clean-local: $(RM) -rf html/Reference html/Tutorial $(RM) reference-stamp tutorial-stamp $(MKDIR) html/Reference html/Tutorial all-local: docs docs: $(DOCS) reference: reference-stamp reference-stamp: Doxyfile.in $(REFERENCE_STAMP_DEPENDENCIES) $(DOXYGEN) Doxyfile touch $@ ../src/libpqxx.la: cd ../src; \ $(MAKE) libpqxx.la tutorial: tutorial-stamp tutorial-stamp: libpqxx.xml $(XMLTO) -o html/Tutorial xhtml $< touch $@ dist-hook: reference tutorial mkdir $(distdir)/html # Do a shallow copy of each directory for dir in $(DISTHOOKDIRS); do \ if test -d $(srcdir)/$$dir; then \ mkdir $(distdir)/$$dir; \ for dirfile in $(srcdir)/$$dir/*; do \ if test -f $$dirfile; then \ cp -p $$dirfile $(distdir)/$$dir; \ fi ; \ if test -d $$dirfile ; then \ subdir="`basename "$$dirfile"`"; \ if test "$$subdir" != "CVS" && "$$subdir" != ".svn" ; then \ cp -pR $$dirfile $(distdir)/$$dir; \ fi \ fi \ done \ fi \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libpqxx-3.1.1/doc/tutorial-stamp0000664000175000017500000000000012075723507013601 00000000000000libpqxx-3.1.1/doc/Doxyfile.in0000664000175000017500000015365712075723507013037 00000000000000# Doxyfile 1.5.5 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = libpqxx # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PQXXVERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = html/Reference # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, # and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = ../ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = NO # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = NO # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = NO # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@/include/pqxx \ @top_srcdir@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.cxx \ *.hxx \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = *.o \ *.lo \ *.a \ .cvsignore # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = . # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = YES # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = PGSTD=std \ PQXX_ABI="@PQXX_ABI@" \ PQXX_DEPRECATED= \ PQXX_LIBEXPORT= \ PQXX_NOVTABLE= \ PQXX_PRIVATE= \ PQXX_TYPENAME=typename \ PQXX_VERSION="@PQXXVERSION@" \ PQXX_MAJOR=@PQXX_MAJOR@ \ PQXX_MINOR=@PQXX_MINOR@ # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @HAVE_DOT@ # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is enabled by default, which results in a transparent # background. Warning: Depending on the platform used, enabling this option # may lead to badly anti-aliased labels on the edges of a graph (i.e. they # become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO libpqxx-3.1.1/doc/html/0000775000175000017500000000000012076704656011734 500000000000000libpqxx-3.1.1/doc/html/Tutorial/0000775000175000017500000000000012076704656013537 500000000000000libpqxx-3.1.1/doc/html/Tutorial/index.html0000664000175000017500000000712312075723507015452 00000000000000 libpqxx tutorial libpqxx-3.1.1/doc/html/Tutorial/ch03s07.html0000664000175000017500000002417112075723507015434 00000000000000 Doing Transactions Right: Transactors

Doing Transactions Right: Transactors

Writing database code can be tricky. One of the most complicated areas is dealing with unexpected error conditions, such as losing one's connection to the database server. For long-running processes you'll frequently find yourself rewriting code for a simple transaction to make it:

  • Attempt to perform the transaction.

  • Check for "connection lost" errors.

  • Attempt to restore the connection.

  • Repeat until the transaction succeeds.

This is bad for the heart, and clutters up your code besides. The transactor framework will take this work out of your hands if you let it.

Functors

The mechanism is based on the concept of Functors, a powerful object-oriented design pattern that replaces the older practice of passing callback functions (or hooks, as they're sometimes called, or exits) to foreign code. Unlike classic callback functions, Functors provide an elegant way of maintaining custom state in your callback code, when the exact form or size of that state was not known in advance to the writer of the foreign code that will eventually invoke your callback.

Functors in C++ are simple objects that can be invoked just like functions or function pointers can, by virtue of providing the function invocation operator, operator().

A simple functor could look like this:

	  struct HelloFunctor
	  {
	  void operator()() { cout << "Hello World" << endl; }
	  };
	

...And once an object of this functor type has been created, it can be "invoked" just as if it were a function:

	  HelloFunctor Hi;
	  Hi();
	

But the invoking code may also be foreign code knowing nothing about the type of your functor. The foreign code is usually a template, so it automatically becomes "specialized" to your type of functor when the one meets the other:

	  template<typename FUNCTOR> void DoFunctor(const FUNCTOR &Hi)
	  {
	  Hi();
	  }
	

The great thing about functors is that they can carry state. This is most useful when you need to pass a functor object to foreign code like DoFunctor above, but you need certain extra parameters to be passed to your functor that the foreign code isn't going to pass. The classic C solution to this problem is to let you pass both a function pointer and a pointer-to-void as a method of letting you provide any type of data of your liking to it. This generally makes programs a little harder to read, and is not very safe or convenient.

With functors, there is a better way to do the same thing. Let's say you want to adapt the HelloFunctor class to print its output to a different output stream. What you'd really like to do is add a parameter to your () operator to indicate which stream to print to:

	  void operator()(ostream &Stream)
	  {
	  Stream << "Hello World" << endl;
	  }
	

Unfortunately, DoFunctor doesn't know about this new parameter, let alone what argument to pass! So instead, let's make this Stream a class member:

	  struct HelloFunctor
	  {
	  ostream &Stream;

	  // Set Stream when creating a HelloFunctor
	  explicit HelloFunctor(ostream &S) : Stream(S) { }

	  // Print to output stream selected at construction time
	  void operator()()
	  {
	  Stream << "Hello World" << endl;
	  }
	  };
	

We can now provide the necessary information (ie., which stream to print to) to our HelloFunctor before we pass it to DoFunctor:

	  HelloFunctor Hi1(cout), Hi2(cerr);

	  DoFunctor(Hi1);  // Print to cout
	  DoFunctor(Hi2);  // Print to cerr
	

Naturally a functor's () operator may also return some other type than void, and it may take arguments just like any other function. This mechanism is used extensively by the STL to sort containers, to find items in sorted containers like set or map, and so on.

How Transactors Work

A transactor is a functor derived from an instantiation of libpqxx's transactor class template. Instead of writing your database transaction inline with the rest of your code, you encapsulate it in your functor's () operator. When the time comes to execute your transaction, you create an object of your functor type and pass it to the perform method of your connection to the database.

perform will make a copy of your transactor (which means it needs to be copy-constructible, by the way). It will also create a transaction object and invoke your transactor's () operator, passing the transaction object to it. All your transactor needs to do is perform its queries on this object and return, after which perform will commit the transaction. If your () operator throws an exception instead, perform will discard the copy of your original transactor, and try again with a new copy until it either succeeds or eventually gives up [6]. If the connection is lost, the transaction will fail but perform will restore it transparently and simply try again.

To make all this work, your transactor's () operator must make no changes to the rest of your program's state. Any intermediate results, data to be processed, and so on, must stay within your transactor, and be destroyed when the transactor is. That is the magic trick that allows perform to create copies of your transactor and use them to rerun the transaction as many times as needed, without your program noticing.

So how does your transactor pass query results back to the outside world once it's done? For this purpose, you may redefine transactor's on_commit member function to pass any data back to the rest of your program. This member function will be called only if your transaction succeeded.

(You may also wish to go the other route, storing data to variables outside the transactor right away, and override the on_abort and on_doubt functions to remove the data again if the transaction failed, but this is much more likely to cause subtle bugs.)

Please refer to the reference manual, the source code, and the test programs that come with libpqxx to learn more about how transactors work.



[6] perform gives up if the transaction fails too many times in succession. The maximum number of attempts that are made can be passed to perform as an optional second argument.

libpqxx-3.1.1/doc/html/Tutorial/ch03s03.html0000664000175000017500000001171312075723507015426 00000000000000 Performing a transaction

Performing a transaction

What's a Transaction?

A transaction demarcates a "unit of work" operating on the database, ie. a series of operations that must either complete successfully, or if it is aborted at any stage, must not affect the data in the database at all. Hence the process of completing a transaction is called the "commit" operation, and the process of aborting it and undoing any changes it may have made is called "rollback."

All access to the database in libpqxxâ„¢ must go through a transaction object, so familiarity with this class family's interface is essential.

Creating a transaction object

Creating a transaction object is not normally something you will have to do. The transactor class, discussed below, will take care of that and some other red tape besides. Still, there are cases where creating the object is unavoidable (when acting on multiple database connections simultaneously) or just plain easier to do. Please consider using a transactor whereever possible.

When creating a transaction, pass it the connection object it is to act on, and optionally an identifying name for your transaction. The name, which need not be unique but should begin with a letter and may contain only letters, digits and underscores, can be used by libpqxxâ„¢ to make some error messages more specific.

	    transaction<> Xaction(Conn, "DemoTransaction");
	  

Or, alternatively (once you get fed up with typing transaction<>):

	    work Xaction(Conn, "DemoTransaction");
	  

The lifetime of the transaction object demarcates the unit of work. Its construction marks the beginning of the transaction, and its destruction means that the transaction is ended--whether through commit or rollback.

The transaction class hierarchy is built on the principle of "explicit commit," ie. the commit operation must always be explicit in the code. If the transaction is destroyed before a commit was given, the transaction is implicitly aborted (rolled back). If your transaction makes no changes to the database, however, there is nothing to commit or roll back and the commit may safely be omitted.

Destroying the connection object while the transaction still exists is an error that may result in a program crash, although the library will try to log an error message. Transactions cannot be copied, nor assigned, nor constructed without a connection (default-constructed); attempts to do any of these will result in compile errors.

libpqxx-3.1.1/doc/html/Tutorial/ch01.html0000664000175000017500000002152512075723507015100 00000000000000 Chapter 1. About libpqxx

Chapter 1. About libpqxx

libpqxxâ„¢ is a C++ API to PostgreSQLâ„¢. It replaces the earlier libpq++â„¢ with a more Standard Template Library (STL)-conformant interface and makes more extensive use of C++ language features such as exceptions, templates, and strings.

Since libpqxxâ„¢ builds on top of the C frontend libpqâ„¢, you will need a working libpqâ„¢ library on your system prior to getting started with libpqxxâ„¢. This is similar to the situation with the older libpq++â„¢ interface.

See the libpqxxâ„¢ website for more information.

Why another C++ SQL library?

Several open-source C++ wrapper libraries are available for various databases, as well as some database-independent ones; there's libpql++â„¢, libpq++â„¢, libsqlxxâ„¢ and so on.

So was libpqxxâ„¢ really necessary?

I think it is. The C++ Standard, and its standard library in particular, have stabilized over the mid-1990s; compilers and standard library implementations are still following suit at the time of writing. As a result, most older third-party libraries suffer from symptoms such as:

  • Not using exceptions. Many libraries return a status code and expect callers to check for errors "if they're interested." Of course they're interested. But checking each and every call is tedious and error prone.

  • Ad-hoc exception classes. Programs using C++ libraries need to deal with various incompatible exception class hierarchies, and error handling becomes a total nightmare with multiple essentially identical catch clauses for every try block.

  • Ad-hoc string classes. As one member of the C++ standards committee put it, if the C++ wasn't going to have a standard string class, "there will be blood in the streets." Luckily the committee saw the wisdom in this, and civilization was spared.

  • "A Better C." Using only the oldest features of C++ as extensions to the C language really only complicates things, but there was a time when this was the only way to write portable C++.

  • Ad-hoc containers and algorithms. Inventing your own container APIs, interesting as it may be, in most cases is wasted development effort. Besides that, there's also the redundant effort of having to learn how they work.

For these reasons, third-party libraries have tended to grow into intrusive frameworks. Third-party code, and class libraries in particular, need to be rewritten to replace such ad-hockery with the rich and standardized functionality now provided by C++. This is what libpqxxâ„¢ intends to do for PostgreSQLâ„¢. The library was designed to be a forward-looking one, which means that ports to vendor X's compiler Y may have to wait until X improves its support of the Standard.

But there were other reasons to design a new SQL frontend from scratch. C++ is a complex language, and the only things stopping library writers from shooting themselves in the feet are years of experience and an extensive idiom of good practices. To name a few typical symptoms of foot-shooting:

  • Poor language integration. Users need to learn myriads of function names when standard C++ operators can be overloaded instead to make code fit in more naturally with the core language.

  • Overdoing overloading. It's also easy to go overboard with operator or function overloading, and many classes do. Some programmers use identical function names to mean very different things, or define operators whose semantics are not clearly derived from their conventional meanings.

  • Resource management. In the complex world of C++, what the user really needs from a library is a little help in ensuring that objects are deleted at the proper time, pointers don't go off into never-never land, and so on. Perhaps the most compelling aspect of C++ is the "resource acquisition is initialization" paradigm, but too few libraries apply it as yet.

  • Convoluted family trees. Class derivation is a beautiful thing, but it can be overused. Some libraries construe far-fetched relations between classes, or needlessly expose "convenience" relations using public inheritance.

  • Overweight classes. Some classes lump together different pieces of functionality with different lifetimes. For instance, some C++ SQL libraries integrate transaction bracketing into a connection class. Yet it is not unreasonable for an application to perform multiple consecutive transactions using the same connection.

  • Exposure of low-level interfaces. Some C++ wrappers for C-level SQL interface libraries (including libpq++â„¢) don't hide the ugly details of the underlying API. Worse, some only provide "utility" classes that the user can mix in freely with C-level function calls.

Again, libpqxxâ„¢ is an attempt to do better. Hopefully this has resulted in a library that is easier to use than most alternatives while giving you more flexibility, that helps you avoid common pitfalls and reduces the need for debugging.

libpqxx-3.1.1/doc/html/Tutorial/ch03s04.html0000664000175000017500000001435412075723507015433 00000000000000 Ending a transaction

Ending a transaction

A transaction ends either successfully through an explicit commit command, or unsuccessfully in any of a number of ways. The following are the ways to end a transaction:

  • The transaction may be committed through its commit member function:

    	    Xaction.commit();
    	  

    The commit operation is sent to the backend at the point where the commit call occurs. Any exceptions generated by the database transaction will be thrown from here at the latest. The only exceptions that may be generated by Xaction beyond this point are related to incorrect handling of the transaction object, eg. if an attempt is made to abort Xaction after it has been committed, or runtime errors such as memory running out.

    As a consequence, any streams or cursors nested within the transaction (to be discussed later) must have been closed before the commit(). To do otherwise could possibly allow a transaction to be committed before all related actions had completed. The library will throw an exception if any streams are still open when the transaction is ended.

  • A transaction is aborted if it is destroyed without having been explicitly committed:

    • 		{
      		work Xaction(Conn, "DemoTransaction");
      
      		// (Queries)
      
      		} // Xaction destroyed here
      	      
    • 		work *XactionP = new work(Conn, "DemoTransaction");
      
      		// (Queries)
      
      		delete XactionP; // Xaction destroyed here
      	      
    • 		try
      		{
      		work Xaction(Conn, "DemoTransaction");
      
      		// (Queries)
      
      		Xaction.commit();
      		// If we get here, Xaction is committed
      		}
      		catch (...)
      		{
      		// If we get here, Xaction has been rolled back
      		}
      	      

    No matter where exactly the decision to abort is made, the actual abort operation is sent to the backend when the transaction's destructor is called. If the abort fails, eg. because the network connection has been lost, no error is reported [2] and the transaction will die of natural causes (either it has been closed by the backend already, or it soon will be if the connection is lost).

  • If a database error occurs during the transaction, such as an SQL syntax error or lost connection to the backend, the transaction is aborted.

    	    work Xaction(Conn, "DemoTransaction");
    	    try
    	    {
    	    // (Queries)
    	    Xaction.exec("SELECT !?^H^H^H^H");	// Fails: SQL syntax error
    	    }
    	    catch (...)
    	    {
    	    }
    	    Xaction.commit(); // ERROR: Xaction has already aborted!
    	  

    For this reason, it is recommended always to include the "commit" operation inside the try block (if any) surrounding the transaction code, not after the catch block.

    Think of it as a natural extension of structural programming: the transaction is "nested" within the connection, and the transaction code can be "nested" in a try/catch block.

No more queries may be issued to the transaction regardless of how it ended; an exception will be thrown if the application attempts to continue the transaction after that time. Ending a transaction more than once is an error, except that aborting it multiple times is tolerated to facilitate error handling.



[2] Throwing an exception from a destructor to report the error would have serious effects on program correctness. Never throw exceptions from a destructor.

libpqxx-3.1.1/doc/html/Tutorial/ch02.html0000664000175000017500000004133112075723507015076 00000000000000 Chapter 2. Class overview

Chapter 2. Class overview

To work with libpqxxâ„¢, you need to be aware of at least the following classes. These are all introduced in a dedicated namespace, pqxx:

  • connection represents a connection from your program to a PostgreSQLâ„¢ back-end server. Naturally your program may open multiple connections, simultaneous or not, to any number of databases.

  • work, actually a typedef for the transaction class template, represents a transaction being executed in the context of a connection. This is a unit of work that must be completed as a whole by the database backend. If execution fails, everything done within that transaction is undone by the backend as if it had never happened. [1] You may execute any number of transactions on a single connection, but only one at a time.

    I recommend that you do not set up your own transactions however, but have them managed for you by a transactor instead (see below).

  • A result is a container holding the resulting data coming out of a query or command executed in a transaction. It behaves just like a standard C++ container as found in the STL, although its contents can't be modified in any way. (You can assign or copy it cheaply though; it's basically a smart pointer). The tuples held in the result in turn behave much like non-modifiable containers themselves.

I would also like to use this opportunity to plug the invaluable esc function, which you should use whenever you want to include a variable as a string in your SQL (eg. insert it into a text field in a table). See below.

There are other classes that may be of interest to you; these are either not essential to writing a simple program using libpqxxâ„¢, or are used in such a way that knowledge of them is not immediately necessary. You will probably want to look them up at some point when it becomes necessary to understand complex compiler warnings. Unfortunately C++ compilers are not yet very good at unravelling template-related errors and making them readable, so you may find some long and strange names when they happen.

Some of the classes you may become interested in fairly quickly are:

  • broken_connection is an exception class that is thrown if libpqxxâ„¢ loses its connection to the back-end. It is derived from the standard C++ exception std::runtime_error, and can generally be treated as such.

  • sql_error is an exception class that is thrown if a query to the back-end fails. Like broken_connection it is derived from std::runtime_error, but it also carries information about the failed query. This may be useful for debugging.

  • icursorstream is a way of iterating over a query result using an SQL cursor. This can be useful for selectively retrieving parts of a query, or for retrieving and processing results in chunks so your program can do useful work on one chunk while the next is still coming in over a network connection. Or you may want to use this to give progress reports to the user between chunk transfers.

  • in_doubt_error is an exception class to indicate a rare and difficult error condition. Explaining this is a bit painful, since it invalidates some of what was said above (and is commonly said in the database world).

    In theory, a "transaction" is an integral, atomic unit of work that either fails or succeeds. This is a beautiful idea, but in practice there is nothing that cannot be broken. In practice there is a tiny risk that, like Schroedinger's Cat, the transaction ends up in a third, indeterminate state. This happens when the connection to the backend is lost just when you were waiting for confirmation after completing your transaction. Your transaction may have succeeded (in fact it probably has), but if the connection is lost during just this small time window, it has no way to confirm this to your application.

    When this happens, libpqxx throws an in_doubt_error on the client side, which you may want to catch as a special case. If you do, make sure all alarm bells go off!

    See also the description for robusttransaction, which sacrifices some performance to minimize this risk.

  • nontransaction is just like a regular transaction as far your code is concerned (except that it's not a template). The big difference is that where the latter opens a back-end transaction to keep your view and modifications of the database atomic, the former does nothing to maintain integrity. It just passes your queries directly to the database, with no enclosing transaction. This difference is expressed by the fact that the other transaction classes are derived from dbtransaction, an abstract class that expresses the presence of a real backend transaction, whereas nontransaction is not.

    This may give you better performance if your transaction does not modify the database, but if it does, may have unforeseen implications if you expect certain levels of consistency in the database--especially if other programs (perhaps even other instances of your own) may be modifying the database at the same time. You'll probably only want to use this in the following cases:

    • If you only want to read from the database, not modify it, and you know that the data is not going to be updated while your program is running.

    • If you are interested in always getting the very latest information out of your database, even if that means that you may not get a temporally consistent view of the database.

    • When making changes to the database schema; some operations may not be supported by the backend inside backend transactions.

  • robusttransaction (a template just like transaction) is essentially the same as a transaction, ie. an atomic unit of work, except that it works harder to prevent in_doubt_errors from happening. This comes at the cost of some performance, which is one reason why this behaviour isn't the default. It also creates some extra tables in your database to keep track of what's happening.

    Use this class instead of plain old transaction if you get in_doubt_errors in your application--but only after thoroughly inspecting your code for bugs that might be causing the problem, or you'll only be hiding glitches that should be fixed instead.

  • tablestream provides simple, relatively direct access to a table for either reading (through its child class tablereader) or writing (through child class tablewriter) using PostgreSQLâ„¢'s COPY command. This is typically much faster than issuing SELECT or UPDATE queries.

  • transaction_base defines the common public interface for the transaction-like classes: nontransaction, robusttransaction, and transaction itself. To look up methods available in these classes, see the definition (or documentation) for transaction_base instead.

    You'll usually want to refer to the default transaction type as work, a typedef that means "transaction with default (read-committed) isolation level."

  • transactor<> provides a framework that makes it easier for you to write correct, robust transaction code to be executed in a transaction. You should generally try to write your code as a class derived from transactor<>, but this is not required.

    A transactor-derived class may select its own "quality of service" in transactional integrity by choosing a transaction type as its template argument, e.g. transactor<robusttransaction<> >. The default transactor<> is equivalent to transactor<work>. Within your class you can refer to the transaction type used as argument_type.

  • notify_listener is an instance of the Observer design pattern. Any code connected to a backend may flag an event using the PostgreSQLâ„¢ NOTIFY command. Frontends connected to that same backend database may be listening for an event of that name to occur. A frontend using libpqxxâ„¢ does this by registering an observer object derived from notify_listener, which will be invoked by libpqxxâ„¢ to handle the event when it occurs.

    Something every programmer using notification listeners in PostgreSQL should know, by the way, is that notifications are not delivered to your program while it is inside a back-end transaction. Nor are they sent until the notifying process has committed any transaction it may be in. This makes sense from a correctness point of view (otherwise your processing of the event might get rolled back just because the transaction you're in happens to fail), but may be a little confusing to the unaware programmer.

  • result::tuple is a nested class defined within result. It refers to a tuple of data within a result object.

  • result::field, also nested within result, refers to one field within a tuple. A field contains one retrieved value such as a number or a string, and can be read into variables of various types such as ints or strings.

  • result::const_iterator allows you to enumerate the tuples in a result in a similar way to the iterators defined by any standard C++ container.

  • result::tuple::const_iterator similarly iterates over the fields in a tuple.

Finally, there are also some functions that you may want to know about, that live alone in the pqxx namespace without being part of any class:

  • esc, found in the transaction classes, is the canonical way to use strings in your SQL. This function escapes any quotes, backslashes, and other characters in your input string that would otherwise cause syntax errors (or worse, security holes) in your queries when included directly.

    Use these functions whenever you want to have a variable string in your SQL queries. If you don't, you'll be left with annoying bugs or possibly even security holes in your program. Use this function, use this function, use this function. Please. Make me proud.

  • to_string knows how to render many types of values as strings. This is used internally by libpqxx to convert values coming out of or going into the backend, and doesn't respect locale settings.

  • from_string is the inverse of to_string. It is used by eg. result::field::to() to convert the incoming field data (which is in text format) to the desired C++ type.



[1] Actually libpqxxâ„¢ provides three classes doing this at various levels of reliability, called nontransaction, transaction, and robusttransaction for no, standard, and best reliability respectively. You probably shouldn't mess with robusttransaction though, because it comes with complications.

libpqxx-3.1.1/doc/html/Tutorial/ch03s06.html0000664000175000017500000002262212075723507015432 00000000000000 Getting query results

Getting query results

Obviously not all queries are commands--the more common kind actually returns useful data. Result data in libpqxxâ„¢ are encapsulated in a result object, which acts as a container similar to the STL's vector template.

	result R = T.exec("SELECT firstname FROM employee WHERE lastname='Ng'");
      

This executes a query on the database, collects all matching data, and stores it in the form of a result.

Two ways are provided to get at individual rows in a result: first, through indexing with the array index operator [] or the at member function, and second, through random-access iterators. Either will give you a result::tuple object that in turn can be addressed with the array index operator (or the at member function) or using iterators to get at its individual fields [3].

Thus, R[0] will return the first ("zeroth") tuple in R. You won't normally want to bother with tuples though; they don't contain the actual data, but rather serve as placeholders to later tell result which fields to fetch when field values from the tuple are requested. The class exists mostly for technical reasons related to the array index operators [4]. What you'll usually do is index the row directly to get at the field you want, e.g. R[0][0] to get the first field of the first row.

Array indexing of tuples also works with the fields' names instead of their numbers, eg.:

	// Process employees' names one by one.  ProcessNames() doesn't know exactly
	// what columns are going to be in R, but there must be one called "lastname".
	void ProcessNames(result R)
	{
	for (result::size_type i = 0; i != R.size(); ++i)
	Process(R[i]["lastname"]);
	}
      

As for the alternative, accessing the result tuples through an iterator, only const iterators are provided so the contents of the result cannot be modified. Use these iterators as random-access iterators like with any STL-like container:

	for (result::const_iterator i = R.begin(); i != R.end(); ++i)
	Process(*i);
      

Iterators may be incremented or decremented (whether pre- or post-), they may be added to or subtracted from to jump through the result tuples; their positions may be compared (provided they point into the same result), and they may be dereferenced through the * or -> operators.

Finally, the iterated tuples' fields may be addressed using the array index operator on the iterator directly, eg. R.begin()[0] gets you the first field of R's first row, just like R[0][0] would [5].

Either way, once you've indexed the result::tuple you get a result::field--which is another placeholder, but this time encapsulates an actual field value in our query result. A field F also knows its column name, which can be obtained as F.Name().

Again, there is more than one way to read the field's value. Let's start out with the easy one, c_str, which reads the value as a C string:

	cout << "Name: " << F.c_str() << endl;
      

This will return the empty string ("") if field F has the null value. Use is_null to see if this is the case:

	if (!F.is_null())
	cout << "Name: " << F.c_str() << endl;
      

In practice of course, not all data is going to consist of strings. Many fields will be integer values, or decimals, or Booleans. To convert the field's value to one of these, use its to method. This adapts itself to the type of variable you pass it, expecting the field value to be of an appropriate form for that type. For convenience, to returns false if the field had the null value, and true otherwise. In the former case, the variable will retain the value it had before the call.

	// Pay an employee his salary.  Add bonus for managers.
	// The employee tuple must contain the fields
	void PaySalary(result::const_iterator empl)
	{
	long id;
	float salary;
	bool is_manager=false;

	// Get id.  Must never be null.
	if (!empl[0].to(id)) throw runtime_error("No id!");

	// Get salary.  If this employee has no salary, skip payment.
	if (!empl[1].to(salary)) return;

	// Get manager status.  If field is null, variable's original value (false)
	// will be preserved.
	empl[2].to(is_manager);

	if (is_manager) salary += Bonus;

	TransferMoney(id, salary);
	}
      

If conversion fails, e.g. when trying to convert a floating-point value to an integer variable, to will throw a runtime_error reporting the problem in its what message.



[3] The difference between [] and at is that the latter is guaranteed to perform bounds-checking, throwing an exception if you pass it an illegal index value. With the array index operator you may get slightly better performance, but attempting to address a nonexistant row or field will result in undefined behaviour such as program crashes or inexplicably strange results.

[4] This is an instance of the Proxy implementation pattern, needed to allow a result to be indexed as if it were a two-dimensional array. C++'s array index operator doesn't allow this usage directly, but the operator can be applied to the result of a previous use of the same operator. The "result in the middle" needs to have a type of its own, though, and that's what tuple is for.

[5] Or (*R.begin())[0]. It may seem quirky to have R.begin() and *R.begin() mean the same thing, but it makes practical use of iterators a lot easier. In fact it matches how arrays and pointers work in C and C++.

libpqxx-3.1.1/doc/html/Tutorial/ch03s02.html0000664000175000017500000000762212075723507015431 00000000000000 Setting up a connection

Setting up a connection

The very first thing to do before we can begin working with a database, is actually connect to one. We do this by creating a connection object that will serve as our "handle" on the connection:

	connection Conn("dbname=test");
      

This gives us a connection object called Conn.

The connection constructor here takes one argument, the "connect string." This string may be used to specify which host on the network runs the database backend we wish to connect to, which database we're interested in, which user name we'll be using to log in, etc. Refer to the libpq connect call for a complete definition of what may go into the connect string. In this case we're connecting to a database test residing on the local machine. By default the client will try to connect to a server running on the local machine.

If no connection could be established, the connection constructor may throw an exception immediately; or it may decide to retry the connection later in case the problem is only temporary. In the latter case, an exception may occur at some later point if the problem turns out not to be so temporary after all.

The connection can now act as a "service counter" for our database; your client will use it to perform one or more transactions related to the database.

Connections cannot be copied or assigned. Any attempt to do so will be met with a compiler error.

Caution

As a matter of design, libpqxxâ„¢ will not allow you to perform queries on the connection directly. You will need to open a transaction instead.

See the section on transactions below.

libpqxx-3.1.1/doc/html/Tutorial/ch03s05.html0000664000175000017500000000546012075723507015432 00000000000000 Executing queries

Executing queries

So let's execute an actual query. There is no "query class" in libpqxxâ„¢; we really do try to keep your life simple.

A query is executed within a transaction by passing the query string to the transaction object's exec method. If the query fails to complete successfully, this method will throw the appropriate exception.

The query itself is a standard C string in this case, ie. a const char * but you'll frequently want to use a C++ string to make it easy to include variables:

	void DeleteEntry(work &T, string Table, long ID)
	{
	T.exec("DELETE FROM " + Table + " WHERE ID=" + to_string(ID));
	}
      

In some places, even stringstreams will work, so you can use the full stream formatting capabilities, locales etc. in the standard C++ library to compose your SQL queries.

libpqxx-3.1.1/doc/html/Tutorial/ch03.html0000664000175000017500000001532012075723507015076 00000000000000 Chapter 3. Tutorial

Chapter 3. Tutorial

Before we begin programming

This document

This frontend library is built on top of the libpq frontend library, which defines PostgreSQLâ„¢'s C API. Therefore this manual will sometimes refer to the libpq documentation rather than repeat what is said there. This was not done to annoy you, but to ensure that the libpqxxâ„¢ documentation remains up-to-date with any changes in the C frontend. Please bear with us.

Furthermore, if you're ever in doubt about how to use the basic features of libpqxxâ„¢, take a look at the example programs provided; they're called test000, test001 etc. Those should help give you an idea of how simple the library can be in practice. Don't let that keep you from submitting a request for improved documentation though; your questions define what this tutorial needs to say!

C++ conventions

All definitions made by libpqxxâ„¢ reside in a namespace pqxx. If you're not familiar with C++ namespaces, you have two options:

  • Always import the whole of the pqxx namespace in your programs.

    This tells the compiler to always look in the pqxx namespace when trying to resolve a name that doesn't occur in the global (ie. the "default") namespace). To do this, include the directive

    		using namespace pqxx;
    	      

    near the top of each source file that uses libpqxxâ„¢. This is typically best for your source files (you're probably doing it already for the std namespace), though it is not considered good practice in header files.

  • Explicitly qualify each libpqxxâ„¢ name with the pqxx namespace.

    This will tell the compiler exactly which names are supposed to be in the pqxx namespace, avoiding any confusion over multiple classes or functions used in your program possibly having the same name. As long as they're in different namespaces, the compiler will be able to tell them apart without trouble. To do this, write pqxx::connection instead of connection, pqxx::result::const_iterator instead of result::const_iterator, and so on.

    This is the mode of address you will typically want to use in header files, to avoid polluting the namespaces of the actual source files with the definitions of the extra namespace.

libpqxx-3.1.1/doc/html/Reference/0000775000175000017500000000000012076704656013632 500000000000000libpqxx-3.1.1/doc/html/Reference/a00265.html0000664000175000017500000001245112076703501015244 00000000000000 libpqxx: Member List
pqxx::basic_lostream< CHAR, TRAITS > Member List
libpqxx-3.1.1/doc/html/Reference/a00275.html0000664000175000017500000003543412076703501015253 00000000000000 libpqxx: Member List
pqxx::result::tuple Member List

This is the complete list of members for pqxx::result::tuple, including all inherited members.

at(size_type) const pqxx::result::tuple
at(int i) const pqxx::result::tuple
at(const char[]) const pqxx::result::tuple
at(const std::string &s) const pqxx::result::tuple
back() const pqxx::result::tuple
begin() const pqxx::result::tuple
column_number(const std::string &ColName) const pqxx::result::tuple
column_number(const char[]) const pqxx::result::tuple
column_table(size_type ColNum) const pqxx::result::tuple
column_table(int ColNum) const pqxx::result::tuple
column_table(const std::string &ColName) const pqxx::result::tuple
column_type(size_type ColNum) const pqxx::result::tuple
column_type(int ColNum) const pqxx::result::tuple
column_type(const std::string &ColName) const pqxx::result::tuple
column_type(const char ColName[]) const pqxx::result::tuple
const_iterator typedefpqxx::result::tuple
const_reverse_iterator typedefpqxx::result::tuple
difference_type typedefpqxx::result::tuple
empty() const pqxx::result::tuple
end() const pqxx::result::tuple
field classpqxx::result::tuplefriend
front() const pqxx::result::tuple
iterator typedefpqxx::result::tuple
m_Beginpqxx::result::tupleprotected
m_Endpqxx::result::tupleprotected
m_Homepqxx::result::tupleprotected
m_Indexpqxx::result::tupleprotected
num() const pqxx::result::tuple
operator!=(const tuple &rhs) const pqxx::result::tuple
operator==(const tuple &) const pqxx::result::tuple
operator[](size_type i) const pqxx::result::tuple
operator[](int i) const pqxx::result::tuple
operator[](const char f[]) const pqxx::result::tuple
operator[](const std::string &s) const pqxx::result::tuple
pointer typedefpqxx::result::tuple
rbegin() const pqxx::result::tuple
reference typedefpqxx::result::tuple
rend() const pqxx::result::tuple
reverse_iterator typedefpqxx::result::tuple
rownumber() const pqxx::result::tuple
size() const pqxx::result::tuple
size_type typedefpqxx::result::tuple
slice(size_type Begin, size_type End) const pqxx::result::tuple
swap(tuple &)pqxx::result::tuple
table_column(size_type ColNum) const pqxx::result::tuple
table_column(int ColNum) const pqxx::result::tuple
table_column(const std::string &ColName) const pqxx::result::tuple
tuple(const result *r, result::size_type i)pqxx::result::tuple
~tuple()pqxx::result::tuple
libpqxx-3.1.1/doc/html/Reference/a00218.html0000664000175000017500000001044612076703501015244 00000000000000 libpqxx: Member List
pqxx::disable_noticer Member List

This is the complete list of members for pqxx::disable_noticer, including all inherited members.

disable_noticer(connection_base &c)pqxx::disable_noticerexplicit
scoped_noticer(connection_base &c, std::auto_ptr< noticer > t)pqxx::scoped_noticerprivate
scoped_noticer(connection_base &c, noticer *t)pqxx::scoped_noticerprivate
~scoped_noticer()pqxx::scoped_noticerprivate
libpqxx-3.1.1/doc/html/Reference/ftv2cl.png0000664000175000017500000000070512076703502015447 00000000000000‰PNG  IHDRÚ}\ˆŒIDATxíÝ;H#AÇño4Љႇ œ„K‰‡‚á ’ê,m„ØØ vÚžJ°²¹ÚÎþî‚§ XY ÅB|dr³cvo—˜Ä°Ý ù0Ã’™3ÿͤõ”Ëe×´¸Éõ¯1XÞ8Œ‰nQˆ88ööÖ§3*rbñ¯¢û-$¨‚þ´˜“P1Žè@Z…-# Ïú01ÑÏÎêÄ1HkKŸ w¶O@¥ªÈóñ!f§ñu˜åác÷;’sá×Bý[E´Añ±—Í\ß>°ùý¿ÏËÊÂ]–P€zØf| Íñ¯“+Ù´gð5…b  i5ümM³œ_æÍq,ÒcŽõèoÓd´ !¶äò©ô•,ôðÀ{¹¨µYß,€zTÍ8H]𤕘ï7¼»/òó8ËQæ !F€~6ãá?Y ÀA@ŨÁ.@ƒ¶TäÄYïŠËë±r‘µ8Ð*·é>€Šçÿ?€×þŸe[6«xÂIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00026.png0000664000175000017500000000177612076703501015067 00000000000000‰PNG  IHDRЈ¡§•ÜPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2IDATxíëró* E›Nßÿ‘ï'Nê¦ú8ʰGÈ2 ù/9çܓȒÔH’<+€$ɳþ(Mc»–dÆÁ I¯(€ì³Óôøá{»°KÌ£­L-ݧñÂXWŸuZ’^ÕO€æ­žV­¤ýXç•T†’c‰Q$é ý(Cû­ßÕ|)± ¨*¿=­c ñs(¹'@Ë=’ôºîª ¦ÎPcéO3$Iïé¦3Ôn cÓš¬ÎÐI—³‹ªY·Lš‹íÏßw¹ß·„ Ivt$Iþ@’äY$Iž5åœsGøˆ¾zRo@ßßõ4ðôEÔPt9ß Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï €w”RJ=‰ÐÀ³À³~hˆ{%tñ9½á¥::]úÍ@ƒÇä2vøõÂ>eŠ0öÿujÑè^œÖùy²x[ŸùÏ꺅=XNuÁcÞê)(‰ýXçI”Ab?ìO;ª”n[²´YÎuy¿˜:n•”ú³ù­PÍ3dÂ=°´uÐø9”Ü â]-} µ”è/µ+åØª.–Ü1ñ·™3Ôn cÓ:¥Çgè÷€ÎºœÝëšuËdqª»œ-9K]õ³Å~¬µœêZɽóBø9šÚÀó~ pAÿà üC Ï Ï_[)¥Ô>¢/€žÔÐ×WgD½ <}uЙ"?žð¬È€gE†<+2àY‘!ÏŠ xVdÀ³"Cžð¬È€gE†<ëcÊ9çžD–¤~@’äY$Ižõc 4 Iz¨+>’ÔÔé3ÖèôþG@Iiš¾· {Ë`mejÑè^œÖùy²xiÓú°iÆD*k3Oßî?X+ y«çˆIÚu^Ie(i?ìO’ì(ÔÏk©ª‚WúËÐ~1ÅÉÌ—ÅÕ1mW[5]¬ž=´¾4~%÷¨x·"íþmî‹¥ZzíUÒy¨Q)­=»t(¹j—w{Þì3õcŽ»Ù2g¨ÝǦÔ: m WrÏÎÐE ³.gÃ׬[&‹SÝålÉÕ¹ÞºØòmv¯Ùål«Üæç•Zë¾änzgHÒŸés@Ó™¶û.IõÆ-gH’zPI’g$yÖ”sÎé?vˆSœUñKZIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00048.png0000664000175000017500000000215512076703501015063 00000000000000‰PNG  IHDR À´å˜EPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2üIDATxíë’« ›ª¼ÿ#oèà%jÆìRggËV„Þ!É9ç–!KR»„ $yAIòðk‚i¸$é=¿)(I§ &¥aˆî>̰'Íý{ Qÿ,}úÇøE_ÞL$m8džRÒæ:j6ñ©ªÍ#Iö2u’´æ8‚ëÊýJsië¦úÕ7;î’´æ[‚ýßZp¬û†àv OšMЖêM }‚f“í%ÉûæÅ¼Zâ7'ÖI³$q³ÿÂC"ži JÒ  JR„ $yAIòÐ æœsÃ<Ê  eZ|½7l]°ókÛ°yÁÈb!à!<„ €‡ð‚BÀCxA!à!<„ €‡¿'˜sÎ-C–¤v AIò‚’äáqÁ”æÒpI’‡§k¥ßLSŒºû\XTÒð6Ýç Žô/K|%é ÷çy{E)m®ÂªÂ”%é*DÐÎkƒX-êžq;‚ÝJî Ž ’tŸ`¥a›•´\GϽ·I²+XRæ§–ø ‹M({õR1åÒÒ I7øh‰Ÿ;å$é=!(Iÿ-–¤' AIò‚’ä¡Ì9ç†x”@Ë´.øz5nغ`ç×¶aó‚‘Å>BÀCxA!à!<„ €‡ð‚BÀCxAO0çœ[†,Ií‚’ä!%ÉÃW“$=Ä$˜”†‰»û\°2K«L¥W÷o¦B’θ!8L1Ρ¤ãËÎÝ—Ê­ª¤3îD°(Lõ4cilÝ\¿\Þ NAZ ö¿!h×ÔöØ‹àüü¶ Ùe;Ir²$‚Y\÷>‹çÛ*ù%é÷–øÒ9÷ä)ø5Á!9.%’tÄAIúBP’<„ $yèsιaåÐ2­ ¾^¶.Øùµmؼ`d1€ð‚BÀCxA!à!<„ €‡ð‚BÀÃßL)¥–!´KxAWzuYÖ³4o:îY}ðNÁÁþã“.ŒI°+ ¥>¥`¾þOÓ02SCǵ4L¥1¼óôóã¬Sïêë²ËW‹àÜwì“`}%°—yìÌgûÛíPMEb¹êiLàªÅ2ƒ—»Ý)ó„û‚›Žµ`Í ö#A»Ä‚Ã/Ô©à4w‰[õÍøv,XýckÁ7K¼.Ý<øf% ${íÁ`ýÁr»¸²x½ML¿U@6YlvKÅ[Á Y|ëä¸ÍÅqën?!8lùêç`—íÁßZ͹þÈOÀw A!à¡? libpqxx: Performance features
Performance features

If your program's database interaction is not as efficient as it needs to be, the first place to look is usually the SQL you're executing. But libpqxx has a few specialized features to help you squeeze a bit more performance out of how you issue commands and retrieve data:

  • pqxx::pipeline lets you send queries to the database in batch, and continue other processing while they are executing.
  • Prepared statements. These can be executed many times without the server parsing and planning them each and every time. They also save you having to escape string parameters.
  • pqxx::tablewriter inserts any number of rows of data efficiently, without the need to compose repeated (or excessively long) INSERT statements.

As always of course, don't risk the quality of your code for optimizations that you don't need!

libpqxx-3.1.1/doc/html/Reference/a00040.png0000664000175000017500000000217012076703501015050 00000000000000‰PNG  IHDRªÀ£ÇŒPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2IDATxíër«0 ןgòþ|¸‰ÒÔ§ê°`l/BVÿ’sÎm@–¤UIò&T%ɛ益ᤠ|]U’®qªš”†‡uç¹ax2Üß—°õ×2§¿Œ¿èÛÃ铤:çªãJÃC•´;ކMÌVÝæ’${˜>Iªò$ªÛG•ó•á20öMý›ßTÞB’ª|TµÿÛªŽ}ŸUÝá'Ã&K÷.¸^ª&kÛê|xy‡ry’«ïEõ`‹—%Þ¬ÓvœûÞL€“ ødX’ޏ;ÿSªÃÖ9¯‘¿EU’žà®*I¿‡P•$oBU’¼éTsι üy´A;ªG3®í¨v¦­¸6¤ÀŸPð&T¼ UoBÀ›Pð&T¼ UoBÀ›Pð&T¼ Uoþ¼jÎ9·Y’Z T%É›P•$o>£šÒÜIz›¨®å¾«š¦¸uç¹±H¥án:Ïéo–˜KÒe^T zY)íŽÂ¦Ã´%é¯FÕØÀ®>yÍý7ªvß¹®:HÒ=TWBvXIËñ^D}ru¿­ªªe“ý|TÞþ%JÇ´û–IºËë à\5%éœP•$o>òU’ü UIò&T%É›N5眛ÀŸ@´£úx4ãÚŽjgÚŠkCªQü UoBÀ›Pð&T¼ UoBÀ›Pð&T¼ UoBÀ›PðæÏ«æœs%©BU’¼ UIòæsªI’<ùU“Ò Ðç†ÕZF­j*³ºËx2’t‰»ªÃbãjJ:>¬Eß(§U‡$]âvT‹Ì$´^pl£ÕíͽñU·Uíÿ¾«j¿¸Q‹ê|ý9U“•mõ$W8ª ó¼̧Mᤧ¼—ê¦{Uý¬ê°î$I:âÿª$}‹P•$oBU’¼éTsι üy´A;ªG3®í¨v¦­¸6¤ÀŸPð&T¼ UoBÀ›Pð&T¼ UoBÀ›Pð&T¼ Uoþ¼jJ)µ  BÀ›Pðæ²j·sÜxÅÛÑXÿ`º»ªºŸõ=Õ®1´úòUfÚp7žÇK©s#S‡ýXë©«31MZÍoͯ–rº4†ßŽk’¨Ë »NÓÞ>­\æ™îy½ÊÃÌ*û¨nŸ²ÊO£º[r;X{«Õ·Üî¶é½«:~™ò6OŸÏU7 p¦:¯r®ºú®fÖ#zªzìX‰êvÝJ®î·Õa®Ú(]K“ õ\Ý­r¹˜ðš 0Î2U`[æ´Ø$’ÙÖG ¼Èax£ ¼À~e€CœU‡Í°ûÇvÐÿ]U€Ë¼ª ð» UoBÀ›¾þ¦”R üΧgº?˜#IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00027.png0000664000175000017500000000146512076703501015063 00000000000000‰PNG  IHDRèP$îÉRPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÄIDATxíYšã „Ê}ÿ3O¼`‰Å‰'KOF&•$E ñÊ4MÓÀ$Iñ1ˆJR$ ¢’ Ÿ#š–&Iwá|Rrÿ¶Þ¥èLøo$ZzÑCJo&z;æ%â|Þ¹ãWYdHδav7§l_æm>Ko1[”5öfÊëæ~3*I‡8AtÏž¼®’¬e»’¬)©nþ'I¾9šéuˆv¹}T’ŽqFÑz“eÜBÄr‚S½O¥IÝ‹ŠRq3êQIêãMDçO“ºˆšwi]cµÚZJ/>Kô8ãÊtŠèqêö’¸›@o%êµ[Œ:ײC´½ªÏÝÑÏ=ªº^›ò våÍ©¬º>uÛkª®¯Ï{œu;~T’q.uŸy¸$é‹ðD—2óø}¤0•¤HD%)QIŠ„Ñiš¦ à×ñp\…èÏÏE˜^…èç5˜^†(ÀE0ôˆ„¡(@$ E"a(  CQ€HŠDÂP †¢‘0ˆ„¡(@$ E"a(  ÿDÑ”RºHñ1ˆD  /½M?áµUŠš¹õÖ…ûq;£ÿÑr²=Œ{è­³ôæÃË?eqœŸ£lÚ0»›S¶¯Fóv>>ÒŽ¼Øbq‘,ª¹­=·v9»ø2‚FtO…„„µl'aDÝüOß\Öž¶ý2’¨Y±ñmv¸VŠÖ›4'g·M—1ë¤*Y”D».gˆ’°Vøþ ÑùÓ¤î¢æÝ‹TýÛÝ·‘2à:Øj[Ì.]íd\sƧ‰6©Û,ï´èÖ·"7ºŠ¶™rLÔŸP·u®e‡hïö‰Zü*uŸ½£'‰U]¿ly»òæTV]ŸºÕ;˜3sûv§ÚVݪ8ûªëKú>oeàGëÔ}Ëãð…ø=¢KÍð:ÜÇSº¸ž¢‘1ˆD  óãšRJññÎ0\r yIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00202.js0000664000175000017500000000056412076703502014706 00000000000000var a00202 = [ [ "basic_robusttransaction", "a00011.html", null ], [ "robusttransaction", "a00086.html", null ], [ "basic_transaction", "a00012.html", null ], [ "transaction", "a00106.html", null ], [ "read_transaction", "a00202.html#gab81d0f16865bb70a79d4acb0d0657259", null ], [ "work", "a00202.html#ga82685329d6fd91f5ab30772d266fe5f0", null ] ];libpqxx-3.1.1/doc/html/Reference/a00237.html0000664000175000017500000001307312076703501015244 00000000000000 libpqxx: Member List
pqxx::integrity_constraint_violation Member List

This is the complete list of members for pqxx::integrity_constraint_violation, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
integrity_constraint_violation(const std::string &err)pqxx::integrity_constraint_violationexplicit
integrity_constraint_violation(const std::string &err, const std::string &Q)pqxx::integrity_constraint_violation
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/doxygen.png0000664000175000017500000000730312076703500015723 00000000000000‰PNG  IHDRh ;ˆØŠIDATxí]y\•Õº~45%TL Q”PE"q–Û11±]8a„w*©¨(*â" ˆzÀè`8 ¨‰¢mÅ,’òà„p$%”œBó(8k†Ü÷ýÜû6lòö»§k÷Ç÷[ÏÞß·Ö;?k½ëßÕÕÕPxÑêÏ't´ÏùÈ€zÀÇÅ3_€Q4€g@œmÿ ¾ò‰âci‰ôçÿ{ ðÇð¬ù~½Á€4:õHcÂü ðŸÁ³„ª'ÕPÆæ P7^h،♠zb„cóP¨„ 3‚† Ò}çÿO²qÁºNkÝTÛ(É?d Ç~z<’«4Óǡ؞Þv­zµÙ¦õ¬ZâdÛ,Ë6Ók±]Fz< ¾ZçƒsÕ?ìƒsUø2SÉåwê1”c`[ì—}%ѽ.Ô¼6‚BLZ˜û!F8[ ¹…×TéÛ— »Þ#gó]å:vžu?‡vèbÙR˜?wùŽŸ¾ÊÐgbÑÉÌÕ$kF~Ê;عÆ•¢ïX®?ÉèlÆÙôõà»Nʪ¼­,ìHC§gAz•ÆlÓº­gÑú ]œjÎñåM…3ÓÚæoÒ³'=‘$Ò÷f}G•ŸS_‡öèco.Êȹ :ó£ Ãds®Ù:1=¼{ƒå9?÷ý…zqÛvîÓi‰D’p¿Ë šmÙíoÛâýaÖüEqÒµwÌ}¿~{òj€ç{ôºŸFNëí[ëOq·ÇOSúXO]°>‚‚muæÄ¾e¤“5Ë{¨JÕ¯£(›´«bÂçû’ÍlÓÅ}žïú`éUÞy„ac§Á†ÔCºŠóAkl‘±y¥†ô¢ùôs÷Aø¬7ÄõôoJ±äÄ ù.¥Be. Z¬Ð×ÇÈöå¹­ù'Ù-PëìŠyF.ž‚žÝÚ€lp&.êˆð•jò7’re’z19»ã§HGíø%œüq°ïüz׈c¬_k_")ŸHJnÐÑ~ˆÐÖ˜á´äÕ5 µÁq€ÿ5#¸·îà¶+9T‘‚ ðŽ÷Rܸrz“Ï´Ì =Ï…{ðáO£Èf ¡Íwg|Ž’Ü/¢Þ$÷¯¢ëðúÀ;¿à¨Ö™âÒÆ­]¯ÜW"Þ/< ‡÷DÏà°½üB}çyIEc^—ƒ=[V“Ýh²ëMä$l];Kû®¸ýr¦È*Åò ÿtÒõ$]•MŸ÷´;×I€1èó!‚œõ¸M õ¨(fÌæ<ÁÎÎò5~z¿ù¶ž mÌêÕ >–âÚ©âëˆIÎÞçz;ãu[i·eç^ÆÜÙÓ³NÞëF6B\}7†»+üŽÓ,Ã'a ½˜-yHY¿,‘^—ñfú~ß?Hcø¸…¸ñó{Z+4\såƒû·¯Ù·nߣð«íFÆ¡sغëû§D¾?ò<–Ævkx0ÅM±ælذÁIÓxÿd”žÜÉ÷EE»AªM«g*È£YEí7Û™^[uíý®v[wGå†=Ed¼n×¶ÆæÖÅl¡'¨pGÚk+‹æ¢À¬¨C8ªâš2 dz3H£ß ¡¨BÒûSÃÅù[wŘ ~xpçútÁæmö¤Å£¥iQæ­‰AB1ÉfÙ‰›4u¹ïìIÒ]Ë6äò%ÿ†† 1t.’NJph¬zÌ ÎR1Ž"3-"¸‡‹&ìó°1âüžìó[:‡ï„¼‘……N m–“W0®_èÜœ ×õ6ùò&»)Æìꦬýæ}¬ñ~»{múù]z½£M•ºP~^Îá:eQTÙ_*7ÕÄ9É8—·Ëï 3°¶47E•î¿u÷“SÉ»U¯ _ NíºôW¬e¸ÄNÓ|»;™¿;ŒæÅd"ȉôøòÞµõï¾®½"èÄ´ÖMM+bYµ‘_ÉæEÝüÎ]P»¹XKÐI½Þ¥oE<_¹(„EP±Œ|mÇÁ¡‘Ý,ŠÓ©ººZ±Îߺ§×kÝ,kÍMš`Äø…jzeU»æ ™Át3ÓÀ½˜6—ÒöùË·r¨¹Ñ}““wö:Χùë¼ ¿|‚TܵÉQˆKßç_ÁâÀ™œ”pÑÐóໃ¼Ydâ0!®àa –øöçW$ÃÁ‘Á$/\¬$ð 2ÞímÞLH‹Ÿ èd£HVÜ,:ò½»RÍZšJ­a„z*>‹_…NT(ù‚^SVF­U¹8ñEþôñ܈óùnd;«®8™\C]ø=Èêm¬Æ:‚´ÆbãDd=Áãßžˆ‹UU5O‹|]þð®Pèêv‰á\]2ßìÿ"yÈ[ïyʧz£g{Y«{„Ùø5©ÿ;w{N3é­nâĨw§Á¢ÍK¢Ý­ûÏ29Id¿’ì y)ìPÞò8ŒÅ©¯‰±@mPÔñwjl,6 áhWÕ˜d öà uõmÁp®.™á£Ç…twöR x­BδYcŒxg*vo  yò‘•“[¬?ÜVœ˜0ÒN¡O난~Žó’¯·h#´Hkýœ±8kÓß^Àq@]àÓ“ø,56´¯÷Í-κU»n…[>]@nîøÏœp›[œ6# €4tën¯:ŽÒþ}…—8äT9_žY$/´G’K™©ù†•(óÑ’Mø©`ŸÉdѺ;ùO‹B Ó&P{qöhJÉ+Úé–§¦l2«MïöÝ_1ÑÓ«’t¸½±l€ëØya ¦ô©«®½ÆL^¬žêñš¸ùy.¾Û½Š[ u/]½‹iS}øN>²e1™q‡jfÚ&¢©iT\=kÏ›ÀXô-.84V5ðu!TE˜ þ.ŒOH´¶4—zwTr.ï‰¦Ë xõµ·œÖ„HÆù£žÈHùg Ñhñ’T$ßyq¸zþ¨p¿´ë< q•ró÷š‰wÿÍÑð–I]´–æI²é²˜sÂ"×:Õ–bÕ¦“ÈÙL6¢9VÊÓWž§<æ;”3?ý©Mê3AV#µ±ËÞ¯‘ž K£UrÝ9!›qát¦H£Ù+6ÇV…/TS^pÃùqgLP'Ú5E ‚–ÀÞºîÄ Ën"2|Ÿ;®W»Îý"Ö¬TwÖâµtúŽO'› á+W Ã+¦âZÌ–<ÕÆ&nOÝ,IŠ£06.ÁZ.Çñúøh*INÚ’Oe½ÉgBXÐÔZóäøä9èü“hÒíDSš¥¡Ê µA¯/Ôc¸ö“`A§¯"zå|‘ €ÅŸ¨ú;HÍ#‚Î|%ÄOˆƒ«OàÌÉÐÜD ž mÜðâc–ƤÉÂqm¶uË&~÷núÒË £ÇÏ€ZÕj =«_n[‡‡÷nN§ÏÝ$_¾bE˜‚€Õ)ù8¾?6‘lú“ÍÙæÖ}#bW( œ³d-®•p&¡ý’œÖa”"9öõņÐ$’Ú›AÜ!ä;ÐÑõè{~á¹8‘ÛÞ£1ÛÓÉ0ž`²#´kÒuäNÅÖ Q¹bhæ ”8ûÓMáŽa›•¿”w±h²¢®qŠæ°(bK ‚’Z¾Ò%ÐÆémáãÖË(Éý‚ÛJ)@> þ›7% ï{y Á“¾ÆÒîohfòô>{pÿ.­_Î%±ÉèägëlZØ\B2B #™¸ÚüÒºp‚hÝšü®[¥Ü<‹#SpñÌA7’ãØHƒt4:Ÿ|g¨tÓL¶*($Æ©»ì…®ù’ó÷$;b›ÔÙ`=¶£¦M„MÌÄ5ò«·Ç¾“H·ÌH.¼žHeAîº5}r­dõ¨±)ÀT};€Q5iÖ2…O0ü…0óñÃ;óæ,Š´²µ냔}g‘£]‹7å9ˆà©_{üèîêžC>úhê{Ž .ÈìðIIð€?[Kswz6Òuíý¬;µ€ç§OåâJÉa˶zv°éd† ¤µâ‚l´é舊«Åüy¾c÷ÁèÖÍ'ràúÅ™TWÕôÓ°¡L €|ʽŒ¼ì­høBã ÝTëî'ò]Kø£ìâÏ(=¹Kx €¿ LÌ,Pý¤Êµu‡¹…׈ §Å¾÷à1Ý«Äý;¿pGDäxZYÛ kfæ6¸ùóæ7®œ®þ6·ÕoÚ¾ÔH~ò®Þ¸â 8Uø“p<ºw3¡a£ÏÑ’‘3èÏ"€bˆ-ÎܺÏ_ªÅ]+ËM©zü°s“f-êçhÇãÑýÊãôÿ5}ZQNb{Ó?å%ÿ\SUõعIÓæ}~}p[œoÔÄ„êÐMMZáNÅå@>Œ„²á6(?¡Åé âK½+ü?À%ÝÝ·/Ç1‚9áUø?B)”ÕèâÞlÈÒêÏ @=àùÄÞžk­®ÅIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00021.html0000664000175000017500000002644512076703501015242 00000000000000 libpqxx: pqxx::connect_lazy Class Reference
pqxx::connect_lazy Class Reference

Lazy connection policy; causes connection to be deferred until first use. More...

#include <connection.hxx>

Inheritance diagram for pqxx::connect_lazy:
pqxx::connectionpolicy

Public Member Functions

 connect_lazy (const std::string &opts)
virtual handle do_completeconnect (handle)
- Public Member Functions inherited from pqxx::connectionpolicy
 connectionpolicy (const std::string &opts)
virtual ~connectionpolicy () throw ()
const std::string & options () const throw ()
virtual handle do_startconnect (handle orig)
virtual handle do_dropconnect (handle orig) throw ()
virtual handle do_disconnect (handle orig) throw ()
virtual bool is_ready (handle) const throw ()

Additional Inherited Members

- Public Types inherited from pqxx::connectionpolicy
typedef internal::pq::PGconnhandle
- Protected Member Functions inherited from pqxx::connectionpolicy
handle normalconnect (handle)

Detailed Description

Lazy connection policy; causes connection to be deferred until first use.

This is connect_direct's lazy younger brother. It does not open a connection right away; the connection is only created when it is actually used.

Constructor & Destructor Documentation

pqxx::connect_lazy::connect_lazy ( const std::string &  opts)
explicit

Member Function Documentation

pqxx::connectionpolicy::handle pqxx::connect_lazy::do_completeconnect ( handle  orig)
virtual

Reimplemented from pqxx::connectionpolicy.


The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00238.html0000664000175000017500000001416412076703501015247 00000000000000 libpqxx: Member List
pqxx::restrict_violation Member List

This is the complete list of members for pqxx::restrict_violation, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
integrity_constraint_violation(const std::string &err)pqxx::integrity_constraint_violationexplicit
integrity_constraint_violation(const std::string &err, const std::string &Q)pqxx::integrity_constraint_violation
query() const pqxx::sql_error
restrict_violation(const std::string &err)pqxx::restrict_violationexplicit
restrict_violation(const std::string &err, const std::string &Q)pqxx::restrict_violation
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00083.js0000664000175000017500000000027212076703502014711 00000000000000var a00083 = [ [ "restrict_violation", "a00083.html#a595aad1240047206570109fb06936695", null ], [ "restrict_violation", "a00083.html#a3c6a6fa4c970502389cded0863f83122", null ] ];libpqxx-3.1.1/doc/html/Reference/a00215.html0000664000175000017500000001010312076703501015227 00000000000000 libpqxx: Member List
pqxx::nonnoticer Member List

This is the complete list of members for pqxx::nonnoticer, including all inherited members.

nonnoticer()pqxx::nonnoticer
noticer()pqxx::noticer
operator()(const char[])pqxx::nonnoticervirtual
~noticer()pqxx::noticervirtual
libpqxx-3.1.1/doc/html/Reference/functions_func_0x65.html0000664000175000017500000001721412076703502020237 00000000000000 libpqxx: Class Members - Functions
libpqxx-3.1.1/doc/html/Reference/a00051.js0000664000175000017500000000014112076703502014677 00000000000000var a00051 = [ [ "internal_error", "a00051.html#a4514fd8ae629c3e2524b1a8257abeb29", null ] ];libpqxx-3.1.1/doc/html/Reference/a00089.js0000664000175000017500000000147412076703502014724 00000000000000var a00089 = [ [ "sql_cursor", "a00089.html#a78ee80852828a1221357352ce77b9597", null ], [ "sql_cursor", "a00089.html#a4e8540e040830b7834749c51d1eb39c0", null ], [ "~sql_cursor", "a00089.html#a5957a76f8d79ad8eae5feee9722eff40", null ], [ "close", "a00089.html#a866cc9ec5bc766135e80a38901833e37", null ], [ "empty_result", "a00089.html#af02410eca37436cb84547357d0b5a38e", null ], [ "endpos", "a00089.html#a3ae9feae24d5eab6cf30867351cee54e", null ], [ "fetch", "a00089.html#ac356fb51140719a5703d8c5c6784ebb5", null ], [ "fetch", "a00089.html#a7c17e5396e312c2f3e0f66db3d0e4a90", null ], [ "move", "a00089.html#a2aefb76b1cea234cc687735a3f8bc51a", null ], [ "move", "a00089.html#a31a9e2e6f5276c06120111df47f9ac5f", null ], [ "pos", "a00089.html#a5a8ff4f51d2a249f1e772e0953452684", null ] ];libpqxx-3.1.1/doc/html/Reference/a00022.html0000664000175000017500000002453512076703501015241 00000000000000 libpqxx: pqxx::connect_null Class Reference
pqxx::connect_null Class Reference

Nonfunctional, always-down connection policy for testing/debugging purposes. More...

#include <connection.hxx>

Inheritance diagram for pqxx::connect_null:
pqxx::connectionpolicy

Public Member Functions

 connect_null (const std::string &opts)
- Public Member Functions inherited from pqxx::connectionpolicy
 connectionpolicy (const std::string &opts)
virtual ~connectionpolicy () throw ()
const std::string & options () const throw ()
virtual handle do_startconnect (handle orig)
virtual handle do_completeconnect (handle orig)
virtual handle do_dropconnect (handle orig) throw ()
virtual handle do_disconnect (handle orig) throw ()
virtual bool is_ready (handle) const throw ()

Additional Inherited Members

- Public Types inherited from pqxx::connectionpolicy
typedef internal::pq::PGconnhandle
- Protected Member Functions inherited from pqxx::connectionpolicy
handle normalconnect (handle)

Detailed Description

Nonfunctional, always-down connection policy for testing/debugging purposes.

Warning
You don't want to use this policy in normal code. Written for debugging and testing, this "connection policy" always fails to connect, and the internal connection pointer always remains null.

Constructor & Destructor Documentation

pqxx::connect_null::connect_null ( const std::string &  opts)
explicit

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/functions_func_0x72.html0000664000175000017500000002077412076703502020242 00000000000000 libpqxx: Class Members - Functions
 

- r -

libpqxx-3.1.1/doc/html/Reference/a00047.html0000664000175000017500000001752012076703501015244 00000000000000 libpqxx: pqxx::in_doubt_error Class Reference
pqxx::in_doubt_error Class Reference

"Help, I don't know whether transaction was committed successfully!" More...

#include <except.hxx>

Inheritance diagram for pqxx::in_doubt_error:
pqxx::failure pqxx::pqxx_exception

Public Member Functions

 in_doubt_error (const std::string &)
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

"Help, I don't know whether transaction was committed successfully!"

Exception that might be thrown in rare cases where the connection to the database is lost while finishing a database transaction, and there's no way of telling whether it was actually executed by the backend. In this case the database is left in an indeterminate (but consistent) state, and only manual inspection will tell which is the case.

Constructor & Destructor Documentation

pqxx::in_doubt_error::in_doubt_error ( const std::string &  whatarg)
explicit

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00073.html0000664000175000017500000002661312076703501015246 00000000000000 libpqxx: pqxx::plpgsql_no_data_found Class Reference
pqxx::plpgsql_no_data_found Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::plpgsql_no_data_found:
pqxx::plpgsql_error pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 plpgsql_no_data_found (const std::string &err)
 plpgsql_no_data_found (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::plpgsql_error
 plpgsql_error (const std::string &err)
 plpgsql_error (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::plpgsql_no_data_found::plpgsql_no_data_found ( const std::string &  err)
explicit
pqxx::plpgsql_no_data_found::plpgsql_no_data_found ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00309.html0000664000175000017500000001020412076703502015236 00000000000000 libpqxx: Member List
pqxx::internal::unique< GUEST > Member List
libpqxx-3.1.1/doc/html/Reference/a00189.html0000664000175000017500000012060112076703501015246 00000000000000 libpqxx: pqxx::internal Namespace Reference
pqxx::internal Namespace Reference

Private namespace for libpqxx's internal use; do not access. More...

Namespaces

namespace  gate
namespace  pq
 Forward declarations of libpq types as needed in libpqxx headers.

Classes

class  reactivation_avoidance_counter
class  reactivation_avoidance_exemption
 Scoped exemption to reactivation avoidance. More...
class  sql_cursor
 Cursor with SQL positioning semantics. More...
struct  result_data
 Information shared between all copies of a result set. More...
class  Escaper
class  transactionfocus
class  parameterized_invocation
struct  dereference
 Functor: dereference iterator. More...
struct  deref_ptr
class  refcount
class  PQAlloc
 Reference-counted smart pointer to libpq-allocated object. More...
class  scoped_array
class  namedclass
class  unique
 Ensure proper opening/closing of GUEST objects related to a "host" object. More...

Typedefs

typedef unsigned long result_size_type
typedef long result_difference_type
typedef const char * cstring
 Work around problem with library export directives and pointers.

Functions

template<typename T >
ptrdiff_t distance (T first, T last)
 Wrapper for std::distance; not all platforms have std::distance().
void wait_read (const internal::pq::PGconn *)
void wait_read (const internal::pq::PGconn *, long seconds, long microseconds)
void wait_write (const internal::pq::PGconn *)
result::size_type obtain_stateless_cursor_size (sql_cursor &)
result stateless_cursor_retrieve (sql_cursor &, result::difference_type size, result::difference_type begin_pos, result::difference_type end_pos)
void freemem_result_data (const result_data *) throw ()
void throw_null_conversion (const std::string &type)
 Throw exception for attempt to convert null to given type.
int digit_to_number (char c) throw ()
 Compute numeric value of given textual digit (assuming that it is a digit)
char number_to_digit (int i) throw ()
std::string Escape (const std::string &s, const std::string &null)
template<typename STR >
std::string EscapeAny (const std::string &s, const std::string &null)
template<typename STR >
std::string EscapeAny (const char s[], const std::string &null)
template<typename T >
std::string EscapeAny (const T &t, const std::string &null)
void freepqmem (const void *)
template<typename P >
void freepqmem_templated (P *p)
void CheckUniqueRegistration (const namedclass *New, const namedclass *Old)
void CheckUniqueUnregistration (const namedclass *New, const namedclass *Old)
void sleep_seconds (int)
 Sleep for the given number of seconds.
cstring strerror_wrapper (int err, char buf[], std::size_t len) throw ()
 Human-readable description for error code, possibly using given buffer.

Variables

const char sql_begin_work [] = "BEGIN"
 Commonly used SQL commands.
const char sql_commit_work [] = "COMMIT"
const char sql_rollback_work [] = "ROLLBACK"

Detailed Description

Private namespace for libpqxx's internal use; do not access.

This namespace hides definitions internal to libpqxx. These are not supposed to be used by client programs, and they may change at any time without notice.

Conversely, if you find something in this namespace tremendously useful, by all means do lodge a request for its publication.

Warning
Here be dragons!

Typedef Documentation

typedef const char* pqxx::internal::cstring

Work around problem with library export directives and pointers.

typedef unsigned long pqxx::internal::result_size_type

Function Documentation

void pqxx::internal::CheckUniqueRegistration ( const namedclass New,
const namedclass Old 
)
void pqxx::internal::CheckUniqueUnregistration ( const namedclass New,
const namedclass Old 
)
int pqxx::internal::digit_to_number ( char  c) throw ()

Compute numeric value of given textual digit (assuming that it is a digit)

template<typename T >
ptrdiff_t pqxx::internal::distance ( first,
last 
)

Wrapper for std::distance; not all platforms have std::distance().

string pqxx::internal::Escape ( const std::string &  s,
const std::string &  null 
)

Referenced by EscapeAny().

template<typename STR >
std::string pqxx::internal::EscapeAny ( const std::string &  s,
const std::string &  null 
)
template<typename STR >
std::string pqxx::internal::EscapeAny ( const char  s[],
const std::string &  null 
)

References Escape().

template<typename T >
std::string pqxx::internal::EscapeAny ( const T &  t,
const std::string &  null 
)

References Escape(), and pqxx::to_string().

void pqxx::internal::freemem_result_data ( const result_data *  d) throw ()
void pqxx::internal::freepqmem ( const void *  p)

Referenced by freepqmem_templated().

template<typename P >
void pqxx::internal::freepqmem_templated ( P *  p)

References freepqmem().

char pqxx::internal::number_to_digit ( int  i) throw ()
void pqxx::internal::sleep_seconds ( int  s)

Sleep for the given number of seconds.

May return early, e.g. when interrupted by a signal. Completes instantly if a zero or negative sleep time is requested.

References pqxx::to_string().

cstring pqxx::internal::strerror_wrapper ( int  err,
char  buf[],
std::size_t  len 
) throw ()

Human-readable description for error code, possibly using given buffer.

Wrapper for strerror() or strerror_r(), as available. The normal case is to copy the string to the provided buffer, but this may not always be the case. The result is guaranteed to remain usable for as long as the given buffer does.

Parameters
errsystem error code as copied from errno
bufcaller-provided buffer for message to be stored in, if needed
lenusable size (in bytes) of provided buffer
Returns
human-readable error string, which may or may not reside in buf

Referenced by pqxx::largeobject::Reason().

void pqxx::internal::throw_null_conversion ( const std::string &  type)
void pqxx::internal::wait_read ( const internal::pq::PGconn c,
long  seconds,
long  microseconds 
)
void pqxx::internal::wait_write ( const internal::pq::PGconn c)

Variable Documentation

const char pqxx::internal::sql_begin_work = "BEGIN"

Commonly used SQL commands.

const char pqxx::internal::sql_commit_work = "COMMIT"
const char pqxx::internal::sql_rollback_work = "ROLLBACK"
libpqxx-3.1.1/doc/html/Reference/a00004.html0000664000175000017500000001544712076703501015243 00000000000000 libpqxx: pqxx::argument_error Class Reference
pqxx::argument_error Class Reference

Invalid argument passed to libpqxx, similar to std::invalid_argument. More...

#include <except.hxx>

Inheritance diagram for pqxx::argument_error:
pqxx::pqxx_exception

Public Member Functions

 argument_error (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

Invalid argument passed to libpqxx, similar to std::invalid_argument.

Constructor & Destructor Documentation

pqxx::argument_error::argument_error ( const std::string &  whatarg)
explicit

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00091.js0000664000175000017500000000116512076703502014712 00000000000000var a00091 = [ [ "difference_type", "a00091.html#af9cfc40abd39a68880b0df6d618e41fb", null ], [ "size_type", "a00091.html#a85ee6b4652b659565fede97bb00b4232", null ], [ "stateless_cursor", "a00091.html#aa042b1c72b16911a4f2e1c73be3d8942", null ], [ "stateless_cursor", "a00091.html#a8231490bf29aa7686c4daa3b1fc97ed1", null ], [ "close", "a00091.html#a20a0b658655a3b10543abd35717dd633", null ], [ "name", "a00091.html#a9b99a8f9ef260f11a32b29e917bdacda", null ], [ "retrieve", "a00091.html#a97046479f709ae621473c48ed7a0932d", null ], [ "size", "a00091.html#ae278f24bab98d3946061934a48992067", null ] ];libpqxx-3.1.1/doc/html/Reference/a00077.png0000664000175000017500000002427212076703501015071 00000000000000‰PNG  IHDRú¸ÚäcÃPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2(IIDATxíÝqwñHÆÑëÉ9¾ÿGÞ¶Šݶ¨×ÈÓu‰dfM~ï¿PPó¿Íf³yPPPPpÁ õ¢éƒ‚‚‚¯4}PPP°M¬@Ó+ÐôAAAÁ lÌ.ñÍá÷÷oÛû}oö/»3Þ·?ÞÍöÁ5}PPPð•_¥oW®HÙ8{|uxöQ‹Ý³— óÇlüLÓ_ùUúÎrµþÉáýݾÏý'ç\¨"üLÓ_ydúÞÿNÓ·Û×ôAAAÁŸº:}‹Rýäð¡vóݳ—¦ þ̯Òw¬ÓûænÇñß>6qÿ2Ë܆ù£éƒ‚‚‚»úUúö1›mì;öñøâð1ŸE[äñ³ˆ/ŸIüÜ×ôAAAÁü.}ÿ{Ú7‡á+w©VÓ_y@ú6»?øJÓêéƒo4}PPPð§^¨M|¥éƒ‚‚‚hú   `š>(((X¦ V`³Ùl^ü3[((((xmM¼¾í¶íƒ‚‚‚—×ôAAAÁë{+_Û¯®éƒ‚‚‚Uhø   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(xUÛív[Ûív[Ûív[Ûív[Ûív{¼Š×üç½³‚1tV0†¦žZgcè¬` M<µÎ ÆÐYÁš>xjŒ¡³‚14}ðÔ:+Cgchúà©uV0†Î ÆÐôÁSë¬` Œ¡éƒ§ÖYÁ:+CÓO­³‚1tV0†¦žZgcè¬` M<µÎ ÆÐYÁš>xjŒ¡³‚14}ðÔ:+Cgchúà©uV0†Î ÆÐôÁSë¬` ŒáA³š¦iú{Ûiš¦?×YMÓ4ݪ³š¦iºNg5MÓt«ÍjJ’×0ÿ‰’ä5tVI2†Î*IÆÐô%ÉS묒d U’Œ¡éK’§ÖY%É:«$CÓ—$O­³J’1tVI2†¦/IžZg•$c謒d ÿ4}›$¹£ûÝ{6ÿjV›ÃDÞ6þjR8«ãWþß/ÿ'3kú’d M_’<µÏjù£ ˜¾~ù¦/I~¤é{[-›óö|ؘ/¢ÍþýÛËû˜Ý¡—ÏíÏ!»ó?‡ŸŸº;ÿ¸#I~â×?ÑO'4ûÒû)Nv¾sµûÌíÞ ïÿ'ý9ƒýŒŽ¿áâ«'Émn˜Õ7¿Úîÿòþ»Îþ_‡ï§tÏÅw—ßêÛyüvó¡Ç9Ü}Fw˜Õ÷¿×ç ·Üfõ›ôî…CØ6Éüq˜Ãgö7ÐǤï1<ŸþìÄeC’äÿü>}?šÐù—¾0Ù #ï4·»§ï‡¿â?ëUË,I–nIß·Xü(Ç/öÞsñÝ'}ÿ?µ“{j9Û¿™Ñ=Ò÷Ó»lùæïgõ›ô¥àìcg7Î¥ií¾pZ6ÉB’üÈïÓ÷ÿúÜ:ÿÒËB|Ž;?vŸ¹Ý=}?št69>²I’ä6·¤ïÛ ,–]6ÉÂß,¾û¤ï›;lùãüÙ’K2Üš¾ïÜéïñ˜YÝ1}›·¿oÒ·r>ÛÙ©Ù$ Iò#Iߛݿ4óoü¿ëðƹý‹ô~¦Óz|Î%Inó¨ô¯Éãäîºø—¾³{h6Ï»Ïèaé;˜Oîogumú·ÆY•¿JßסŸý´ÿ&}—'ôeúÎÆüß?V·ÌíOÓ÷¿¿â…ô%É]Ü+}'°øþfõ‹ïþé;ŸÚÓX ¹óŒî¾¯Üãgõ›ô¿÷¼Ý–×>ï³—ÿÙbLß&t´K_ò›ôÝ2·»§ïÇ¿âlàÝówKú¾À2}_þs|×ÅwŸôýÿÔ.Oã󤿙Ñ=Ò÷ýïuázÀ¬~“¾ý—žmÌRþ1³ý¢Úm~¾Ì¦5¿‹v§þïYVe±#I~â÷éûÁ„N¿ô៨ù7>_޼ËÜîž¾ÿŸôáÎþ/Ìæ>ûÍ’äj·¤ïÛ Ìÿñ=þ¿žÿH»)ÝsñÝ'}ß-Èųøu?Ìýftô}{—í_f yĬ~•¾K›IrÑn’$ù™+Ò÷ï¾l’üÈýÓ÷ “¾)}Oû«Ýž¾k¦ö×ÿnNßUßôïgõ7é;ü•$_{Ëöû_’ÜÁs¥ï^skú’Ì÷šÀ}ß?JßâFûƒý›ô=fV“¾÷ï›$õ\éK’{hú’ÌOü«=>}¸ÑŸ¾ÇÌê.·S’ü{÷ŽD’ü{U’Œ¡³J’14}IòÔ:«$Cg•$chú’ä©uVI2†Î*IÆÐô%ÉS묒d U’Œ¡éK’§ÖY%É:«$Ã[ú¦iš^Äì'š¦izÕ4MÓ:«iš¦1@A}þm¡   àµ5}PPPðú¶Û¶ ^^Ó¯ï­|m¼º¦ V¡áƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `a»Ýnk»Ýn×zÍÛ©³‚‚‚‚…FÆÐôAAÁM CÓ7i$` Mܤ‘€14}PPp“FÆÐôAAÁM CÓ7i$` Mܤ‘€14}PPp“FÆÐôAAÁM CÓ7i$` Mܤ‘€14}PPp“FÆÐôAAÁM CÓ/mš¦éïm§išþ\g5MÓt«GÏ fJ’×0D’¼†—Ÿ(øWž8}IòŒDÓ—$×kú à_ùövÚdóq'¼=6fwÇaïûžÍÇöûÆÇ¸Ý›Ýñýðý5fÇŽ>¾¼?}y‘$¹àÚH|;ÃóI,¾ÛlÈçSý<ºÜ‘$?s·ô}3ÍÙÑù¼Ó,’,Mü+ß§oW²EŸM·ÐÍ+0KÂçþCFe<^úp±åËÙÀ$ùW§ï›^˜Äb¶§“XLõ³îÇ?ªøŸ¤ïûiÎŽÞyI¦ þ•ïÓwv‡/Öý&ɉÏ1‹óf£Ï¯yö2¯ßùE’ä’«Ó÷í Ï'ñÍ·?ùŸ’M²$?t¿ô}ÿCîÞI¦ þ•¿Kßû߯Òw<á%Ò·›Î0éÛmŸ¥ïN³H²x4}Pð¯ü.}‡ Vþ&ɉݭ³¬ÜOÒw:䟤ïâ ¯JßüõéÒw>Í“£wžE’ţ郂åûôï’÷ÍÝŽÙ=1+ÃñæúªZßUcñò°ô}3à “˜Ízÿî´$‹F(øWn»’äiÜ-Iò4^~VPPð0D’<±¦ H’'ÖôAAÁ½4IòÄš>((¸—F"IžXÓ÷2MÓô*:«iš¦1@AÁËÚBÁÓëo7éícèo·Øn{?Áú[AAÁMz;Áú[AAÁ-Þî¦ÞO0€þVPPp“ÞN0†þVPPp£ÞL0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPPp“ÞN0†þVPðÒ¦išþÞvš¦éÏAÁ-¾iš¦W˜’ä5táÁÍž¾$y ]0Š.<¨¦/InÔ£èƒjú’äF]0Š.<¨¦/InÔ£èƒjú’äF]0ŠëÞ&IþÞÛÇü⓺ðàf£§ï¸b®X¥¿[qI®@ų§/I~¨ n¶öô%É•ºa_,¼M6«àíù°q\›÷wO‡—ÃiŸƒv»?ÏÞÛšŸy²¸Üá>ŽŒH’ ºðàfO¾ÿ_—»ý‹ºXžŸ»>ϸ° /¯¸$ù‘®@ÅWéÛ-‘ÕM.?f/³•wÈßîä ƒgî‡\ºêrßbG’œèƒ›=wú¾_—§ËçâÊ;_j›dþ˜_*I~¤+FñUúÎÖÅþyørúæiúŸA>âìåtù.%ɉ.<¸Ùs§ïÛuy²ú.¥owÆWËð«e›$ßè „QüUú6o§ÿüþ$}Çó¾Hßük$™=ºðàf¯¾ÙêûØÚþ|·Hß…•ÚôÁ«ûIúKâgé;ÍÕÓw:äÒ'}±»ðàfÛívûPIòS߯ËåŠ9[žËeui56}°_¥ï¸ æÿ´îÂÍ黨¼K/_ìK’S]xp³-<Ð+0IÎý`]~“¾Ï¥¸{™Ý$óGÓ/í«ôí×Ôlcþ/í|í-«¶_2ïgÏb-Î<äâØçæ?¿I’œèƒ›=wúþ]ÎWÌnÄnk±òö òd~½â’äGºa_¦ïÒf’\ç.I’ÿÑ…7{òôýÑ’ºËÕºa÷IßÛ¿’ïIrÑþŸ×ÿ”$·èƒ›½`ú~°òš>X•û¤/IþÇßå® îêÓ—$ßhú`U~µð’äyuáÁÍž:}Iò¼ºa]xPM_’ܨ+FÑ…Õô%ɺa]xPM_’ܨ+FÑ…Õô%ɺaÓ4M¯ nñðôMÓ4½(((Æ£ÓÖôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬À£Ó7MÓô*   `O_’¼†¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,M_’\¥éƒ‚‚±4}Ir•¦ Æ2Jú6›$óÇéû$ùÂ/†^:á«Ó›>((Ë é;ÏOÓ?÷,éÛd󑘷çÃÆ1;›w»çÝËûÓǾݹ‡ƒ§W;9²»ÎÎç ÅØÝÛÙYŸ“$§š>((ËÓ¤ï£E»†e“ c±ÎvζO¯¶Ù'q¾ûðy.6û”¦ ^ÃÓ¤oÙµÜÌ¢3KßYÂN^ªälÿ¥£ç;Ù›$§š>((ËHé{ÿû|=¯ÕçÁÿOßî’?JßáSš>((xÛívûPIrÁ"@‡²ª3KÐqäI­¾éÉ¡¥ïìs“d¡éƒ‚‚±lá¦$¹`sÌÝûænÇ1;'Qš ¾˜¿¯Ò·8oÿ‘;:û”¦ ^ÃÓ¤oßºÙÆn÷±^‡(¾ïýŒ×!yŸOJ¹Kã¬}‡9|äñ±Ý]{64IÎ4}PP0–çIߥÍ$ù3ŸŸsõÇ5}PP0–×Jßf÷—$ ÷7}PP°.¯•¾$ù±¦ ÖåYÒ—$ƒiú  `,M_’\¥éƒ‚‚±4}Ir•¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,Oß4MÓ‹€‚‚‚a<:}PPPPð`M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ <:}Ó4M¯ †ñðô%Ékhú  `,M_’\¥éƒ‚‚±4}Ir•¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,#¥o“$lÞ¼9>xùÌÅ _]((xuO•¾M6z{>l̪ôöº8°³ùýqì}ÿáÀçÖÇ‘ÝI‹øøoŸÍÅÙ|—$5}PP0–çJß¡B»úl’ÓÇ&™?f/J6¿üˆù ×;ŒJ’¯4}PP0–çJß2`áÙ=ïÏF|•¾³Ëô-}‘¾ùe“䢦 Æ2fúv{ÿ7}ïß§ïͬ~Ësvï’䲦 ƲÝn·•$_Y´ì3G³nÍ2·HäÅô]ñéûâœ$¹ éƒ‚‚±lá¦$ùÊæ˜»÷ÍÝŽc„µÛ;Kß1cË—ÅGºZž½¨l’\ÐôAAÁXž+}ûÖÍ6v»Oê4·,Ù.™'[ûዸ¾Ypgï’䢦 Æòdé»´™$wóÃëþdXÓcYKú6»¿Ÿ\÷}HÓ¯g-éûÍuß™$ßhú  `,O•¾$GÓciú’ä*MŒ¥éK’«4}PP0–¦/I®ÒôAAÁXš¾$¹JÓcyxú¦iš^ ãÑ郂‚‚‚kú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ VàÑ雦izPPP0Œ‡§/I^CÓciú’ä*MŒ¥éK’«4}PP0–¦/I®ÒôAAÁXš¾$¹JÓc%}›$¹`óvàÍñðÙÀ¯ÎL’›4}PP0–QÒ—$¼wí›¶5}PPPÏ•¾M6‘z{>lÌÂõöº8°³ùýqì}ÿáÀçÖÇ‘ÝIûÏ8ìØ?/vz|6,IÎ4}PP0–çIß.`íÉ&—›dþ˜½,÷ì·Žï–Ÿ‘MŽÅUÎv-ÏO2{4}PP0–çIß29ÁÙ=ïÏF|•¾³'é;}~•Ùeþ·{M g¼ôíöþoúÞÿ¾LßîàWW9\f>,IÎ5}PP0–ív»}¨$¹dQ¡ÝƼ[³@-y1}gW\~ÆÙ%/¥oqR’œiú  `,[x )I.Ùs÷¾¹Ûq Ï¢Sûqgé;örùr’¾EYûújIr¦éƒ‚‚±((KÓ—$¿ö^¾¦ ÆÒô%Éo}”¯éƒ‚‚±<<}Ó4M/ †ñèôAAAAÁƒ5}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ðèôMÓ4½ (((ÆÃÓ—$¯¡éƒ‚‚±4}Ir•¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,M_’\¥éƒ‚‚±$çNÆþÏÕ/úêÚ>((Ës¦ïËjýà@’œ¸æ"ßշ郂‚Ñü£ôm²ù(ÊÛóacV™·×ÝÍái7vwêÇÁý»c¢öÃ>G®»»ÈÇE?ͯ~ìÛÇþÙ ã§ÏwÎiú  `,ÿ*}»Ì|”%›\zÌßÌö¸¯“Q³Óή~vö[Ëë6}PP0ž•¾³NíŸ÷‡/hîbúί<ß7»ôâðWé[ ?ùM g„ô½ÿ%›,ƒôéÛ]ôЫÕÎÒ÷¶yÍùð¦ F·Ýn·u!Pç![¦oqÊÙ©ÿŸ¾e×ü6}g‘mú  `d[x é34Ǥ¼oîvSôU¾KßY¢Wøßôí¶›>((x]ÿ*}ûÖÍ6ö-[¦fQÇy¿fÚçôsØ¢tû§Ã±ýg.r’¾ùvÃ??wqݦ †óÏÒ·LN’üÀéØßœ›$wÕôAAÁXÆIßû¸“±o7»¿$¹Â g7}PP0–qÒ÷^©$³Çµ¹K’;hú  `,ÿ(}I2¸©éƒ‚‚±4}Ir…©éƒ‚‚Á4}Iò{oåkú  `,M_’üÚ{ùš>((KÓ—$¿õQ¾¦ ÆòðôMÓ4½(((Æ£ÓÖôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬À£Ó7MÓô*   `O_’¼†¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,M_’\¥éƒ‚‚±4}Ir•¦ Æ2Pú6IrÁÛþÏC_H’ûkú  `,¥/I.9¯éƒ‚‚‚Ëž)}›l>âõö|ؘííõóÀÁþÝîÍ<}‡CŸÞ}^óó¢‡ÁÇO;L’‹š>((ËS¥o]¥6É…Çakùr((x!ÛívûPIò…EúM»œ¾ãø¥ïä _÷ìs“ä’¦ Ʋ…š’ä ›cvÞ7w;Ž š÷íð´IŽeúf;#‘¾ÿÍ_Ócyªôí[7ÛØí>ËÑ®Iï…Üý8kžÑÃ¥ç|>/z:+áüjû÷Iò•¦ Æò\é»´™$O©éƒ‚‚±¼Xú6»¿$ùÖoÆ&É©¦ ÆòbéK’Giú  `,Ï”¾$HÓciú’ä*MŒ¥éK’«4}PP0–¦/I®ÒôAAÁXš¾$¹JÓcyxú¦iš^ ãÑ郂‚‚‚kú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ V éƒ‚‚‚hú   `š>(((X¦ VàÑ雦izPPP0Œ‡§/I^CÓciú’ä*MŒ¥éK’«4}PP0–¦/I®ÒôAAÁXš¾$¹JÓc*}›$¹àmÿ硯F$ÉwŽçþì*MŒe¨ô%É%¿V’œkú  àµ=Wú6Ù|dçíù°1KÑÛëçƒý»Ý›y´‡>½ú¼æçEg­û8xþ”$_jú  `,O–¾]Äv•Ú$‡­åËñè1“³ó+ÏöÌ“zv½yG“äTÓcy²ô-‹öÑž³D”é¬iÇK%Ùœ8}7{z½¦ ^Ë é{óyðýðÓ·»Ô…ôÍ®·ÛJ’¯4}PP0–ív»}¨$ùÒ"}‹¦]NßqüÒwr…“Ož5÷ôh’œiú  `,[x )I¾´9vì}s·ãØ¡yßO›äøX¦o¶sµ“ôÖó¬£Ir¦éƒ‚‚±Ÿ==øèîîzÇö&Éš>((˳¥ïÒf’<¡¦ ÆòréÛìþ’ä[¿›$KMŒååÒ—$ÑôAAÁXž+}I2Œ¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,M_’\¥éƒ‚‚±4}Ir•¦ ÆòðôMÓ4½(((Æ£ÓÖôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬À£Ó7MÓô*   `O_’¼†¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,M_’\¥éƒ‚‚±4}Ir•¦ Æò´éÛ$Éoû?]qº÷øþ«+þ|@’٣郂‚±lÌúóöúyà`ÿn÷f^ªã•N÷~œtò´õyÊçûñ“ïvixÓCú‡éÛõä£9ÙäÒã°µ|9gòx¥³½ó7ûa‡ž-?èô»]ÞôAAÁþaú–EûHÊYÎN‚sZ³Ù¥öû.í=Kßùû“ô]þȦ F6@úö=Û¼ý]ŽÐî¼ÓôÍöÎ<¹Æñýåô]ÞôAAÁ¶Ûíö¡.§oÑ´Ëé;Ž?OßòJ§{g.vß_LßéG.®ÝôAAÁ`¶ð@Ó1/Ç¢¼oîvó2ïÛái“‹Rö]Ú{9‚‹÷?NßqPÓcù‡éÛ·n¶±Û}Vš]nÞ ¹?ºŒÜìJg{? »;r¨ììòû÷˘vÎ>ò8¼éƒ‚‚!ýËô]ÚL’ÜïJIòÿš>((ËÐéÛìþNÒw¾7I~äW§6}PP0–¡Ó—$K÷»R’ü¿¦ ÆòïÒ—$Ckú  `,M_’\¥éƒ‚‚±4}Ir•¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,Oß4MÓ‹€‚‚‚a<:}PPPPð`M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ <:}Ó4M¯ †ñðô%Ékhú  `,M_’\¥éƒ‚‚±4}Ir•¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,¯’¾M’|å&ÉUš>((KÓ—$Wiú  `,ÏŸ¾M6éz{>lÌrö¹÷Í|àqØû›Yú6û³w',w$ÉÏ5}PP0–Ò÷©]¥²ÉÙãÿ·%܇òÓþi±#I~®éƒ‚‚± ¾ýËG¢f¡:>8;z!}§o~_¾¦ ó²éÛ9Kßû_Ó«´Ýn·•$¿²(Ú!r‡T}™¾åY³Ñ‡×¦ Ve 4%ɯl޹{ßÜí˜ElvøÂÖÇ›eú¥kú  `UHß¾u³Ýîϸ}¼?ní[7{3ëÚ>ŸÇ§eI“䇚>((Ëé»´yaßW¯¨Z’|«éƒ‚‚±¼^úÞ_ÎÒ·Ùý%ÉÝ4}PP0–×Kß{æ’÷ ^Ó£zþô%É3šš>((KÓ—$W˜š>((LÓ—$¿÷V¾¦ ÆÒô%ɯ½—¯éƒ‚‚±4}Iò[åkú  `,Oß4MÓ‹€‚‚‚a<:}PPPPð`M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ 4}PPP°M¬@Ó+ÐôAAAÁ <:}Ó4M¯ †ñðô%Ékhú  `,M_’\¥éƒ‚‚±4}Ir•¦ ÆÒô%ÉUš>((KÓ—$Wiú  `,¯™¾M’üµ¦ ÆÒô%ÉUš>((ËéÛdó‘²·çÃÆT’ü΢l»Ï·ËËô-·Žã¯Mü™)I~gsÌÝûænÇ¢c_§o1rYº¦ þÌ5éÛ·n¶±ïÚG·váš÷죖Çñ³Šw|^êdD’üPÓ_¹*}—6“dáª|%ɵš>(((øÊŸ¥ï«¸ûK’;jú   à+•¾{w-I¾ÑôAAAÁW®H_’<¡©éƒ‚‚‚¯¼Lú¦¦ ¾ô*é{+_Ó_y‘ô½—¯éƒ‚‚‚¯¼Fú>Ê×ôAAAÁW¦iš^¼žÿU.\Y¦ i³IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00204.html0000664000175000017500000001016312076703501015233 00000000000000 libpqxx: Notifications and Listeners
Notifications and Listeners

"Observer" base class for notifications. More...

"Observer" base class for notifications.

To listen on a notification issued using the NOTIFY command, derive your own class from notify_listener and define its function call operator to perform whatever action you wish to take when the given notification arrives. Then create an object of that class and pass it to your connection. DO NOT use raw SQL to listen for notifications, or your attempts to listen won't be resumed when a connection fails–and you'll have no way to notice.

Notifications never arrive inside a backend transaction. Therefore, unless you may be using a nontransaction when a notification arrives, you are free to open a transaction of your own inside your listener's function invocation operator.

Notifications you are listening for may arrive anywhere within libpqxx code, but be aware that PostgreSQL defers notifications occurring inside transactions. (This was done for excellent reasons; just think about what happens if the transaction where you happen to handle an incoming notification is later rolled back for other reasons). So if you're keeping a transaction open, don't expect any of your listeners on the same connection to be notified.

Multiple listeners on the same connection may listen on a notification of the same name. An incoming notification is processed by invoking all listeners (zero or more) of the same name.

libpqxx-3.1.1/doc/html/Reference/functions_0x64.html0000664000175000017500000002312312076703502017217 00000000000000 libpqxx: Class Members
libpqxx-3.1.1/doc/html/Reference/a00052.html0000664000175000017500000002457012076703501015243 00000000000000 libpqxx: pqxx::invalid_cursor_name Class Reference
pqxx::invalid_cursor_name Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::invalid_cursor_name:
pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 invalid_cursor_name (const std::string &err)
 invalid_cursor_name (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::invalid_cursor_name::invalid_cursor_name ( const std::string &  err)
explicit
pqxx::invalid_cursor_name::invalid_cursor_name ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00051.png0000664000175000017500000000103212076703501015046 00000000000000‰PNG  IHDRP æèPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2©IDATxíánà „χÔ÷äÁmºÖÓäŠ Áôa›ô/BÁT$i('p‚ïHj$Ùê«$yÒA ”ä³=µn1Çå±/>±Ë+â{)[G7H¾žÚlZ°1«NHÝ”­‹AïQžÏL—‰lÛíÝšܯÄ_Om·Îa^L«cWó) •èQ%^OW´Ò-ê`ƒI±—•oÞ…½‚Û8 7w1M’3-üß%HÕ¦K’$[}˜€$z–€$MäN°„‚¥à-=ÀTæ‡5‚9Á`Œ`OàwÁ œÀ œÀ ¨æNàNàNðßDDLC9¼JP=/×¼x¤{1øÁ6H£xGË‹ÚrëóD¼Äù‘7¨î±ÓVŸý¡ C‚ä˜=!5=Èj¬¥«Ñ(>Å©Æ1hvRa¨18(M úNÔ}‚ôAí6Îéi?ø÷ šxcÐm<ÌÂÑ?G ò=«Ä‹,Ìëà…LîB_Í]h²Ð©AÝ–ë,Ü»ÔpS!(ü°Ô‹|]Nàå#$"b¨n‡nÈÎ|+IEND®B`‚libpqxx-3.1.1/doc/html/Reference/namespacemembers_eval.html0000664000175000017500000001101112076703502020735 00000000000000 libpqxx: Namespace Members
 
libpqxx-3.1.1/doc/html/Reference/a00031.js0000664000175000017500000000026212076703502014701 00000000000000var a00031 = [ [ "data_exception", "a00031.html#a0e28cd5da6e6cd6fba5ade32b353e51a", null ], [ "data_exception", "a00031.html#a987ace354d0497c66d468ce18dc48487", null ] ];libpqxx-3.1.1/doc/html/Reference/a00068.png0000664000175000017500000000260512076703501015065 00000000000000‰PNG  IHDR¨øO]qPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2IDATxíë’ò*›¦Ê÷ä“DcHL¼¬ã®œo¬tB¡üK­µöUõûIQÕHRT5’?-Ó¥ú˜¿U}Š{¢Å2 5ܯ…føÍãû²ñ9÷çoŒåé­©SÝå®èyžiH‹7×Qs¯Uuó(Ú^Mê÷#ºh¾?Ó<7œë.õ›ïìüÕ=>):~¶¢çºOŠÞ®íƒæ&ˆKõM`cD›M¸—L÷›—_0?ìÑw"zÖóofý% ¯uo-ýïA³ê¯öÿŒè”0wÏÄ/U}@°¨ê×¢ª‘¤¨j$ƒh­µv@8'€èEôtêÄ´ÑÁ³ÓnD3ëbIQ€HR ’ˆ$E"IQ€HR ’ˆ$E"IQ€HR ’ˆäß­µÖ ª~?)ªIŠªFòÑR®¥éR}—Oˆ®ÕþR´\b6ܯ…E©Lo—û5¨gÆ—%ÞªÏò3Ñëü£ª–›kfSÑ”U_á‡mçoƒºZì=óïVx_ôÜ úï‹®tÚf‹ËõV4Cöèm2íŠÎ©õÛKõMhÇŸ0W\rniP}‘/}ì)©zŸUä#ÿõªÑ¤¨j$)ªÉ Zk­Î  z=:1íEtðìôÑÌz€XR ’ˆ$E"IQ€HR ’ˆ$E"IQ€HR ’ˆ$E"ù·Ek­µ¨ªßOŠªF’¢ª‘|L´¨ò?-–I`¸_ ­ÔÒÚŠ–¹×ð8ßš ÕgxQtšê<—Åã«uKómU¡ú ¯FtV¹è¬§;—έ;¢Û——vG¨è%h[Ññó—¢íZ·=ö"z}þ–h³ w’éÁýÕˆdýÈûY½m ÕG¼¾ôO“ѧèGE§$zéR=âQÕ?"EU#IQÕHÑZkí€pN=ЋèéÔ‰i/¢ƒg¦ÝˆfÖÄ’¢‘¤(@$) IŠD’¢‘¤(@$) IŠD’¢‘¤(@$) É¿-Zk­=@Uý~RT5’UäYÑ¢ºC–曎GßT}7#:Z<0‰¢2 9†g.4ÓŒkΔ©÷Ô6Ö_.¥s¸Ûh/ó}lÛÞt[‰ž§»®dÑíU´½šÇºf.-oí>i»mG¹©Z¾ßDt;Iós¶£‰Þt܈n{ßŽÒ ³þòë¢íÒˆŽŸCÑsãÑ(×aÚnÇ¢«µÙŠÞYúmé ¢±ßFtUÚÝ£Gɤ¥½íÑK¿þÎFöÞ=Èúí¨M¿M,n²¾ÙEKpv²~>‰×UGY~ò©Æñ¢Sb4U}™þ"ªúͤ¨j$)ªÉ Zk­Î  z=:1íEtðìôÑÌz€XR ’ˆ$E"IQ€HR ’ˆ$E"IQ€HR ’ˆ$E"ù·EK)¥(ßOŠD’¢‘„‰Þ3$*@Ÿ ^©{¢CÛÔ8žas¡5·óëØag*¯*ÆN—.ÝWïSÅ<ÀwEÏÃM³Rع6%”«ŠË/múnÞç™~,º6i‚º×|Oôö·­ÞWìðË¢Ó!…åj¹·­Ÿ] þNDw"|Ù¯?m#q›LÍ:F,ý;¢GY?O±4¯÷Äõ4ØŠ.M›!h–þ3‡"À-¿%:eÊêïè¶àˆûý¾'¢¦û ø$) IŠD2žå¥”òýüa0†¸´^·ÝIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00098.html0000664000175000017500000002363312076703501015254 00000000000000 libpqxx: pqxx::string_traits< std::stringstream > Struct Template Reference
pqxx::string_traits< std::stringstream > Struct Template Reference

#include <strconv.hxx>

Static Public Member Functions

static const char * name ()
static bool has_null ()
static bool is_null (const std::stringstream &)
static std::stringstream null ()
static void from_string (const char Str[], std::stringstream &Obj)
static std::string to_string (const std::stringstream &Obj)

Member Function Documentation

static void pqxx::string_traits< std::stringstream >::from_string ( const char  Str[],
std::stringstream &  Obj 
)
static
static bool pqxx::string_traits< std::stringstream >::has_null ( )
static
static bool pqxx::string_traits< std::stringstream >::is_null ( const std::stringstream &  )
static
static const char* pqxx::string_traits< std::stringstream >::name ( )
static
static std::stringstream pqxx::string_traits< std::stringstream >::null ( )
static
static std::string pqxx::string_traits< std::stringstream >::to_string ( const std::stringstream &  Obj)
static

The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00189.js0000664000175000017500000000143712076703502014724 00000000000000var a00189 = [ [ "gate", "a00190.html", null ], [ "pq", "a00191.html", null ], [ "reactivation_avoidance_counter", "a00080.html", "a00080" ], [ "reactivation_avoidance_exemption", "a00081.html", "a00081" ], [ "sql_cursor", "a00089.html", "a00089" ], [ "result_data", "a00085.html", "a00085" ], [ "Escaper", "a00038.html", "a00038" ], [ "transactionfocus", "a00108.html", "a00108" ], [ "parameterized_invocation", "a00070.html", "a00070" ], [ "dereference", "a00035.html", "a00035" ], [ "deref_ptr", "a00034.html", "a00034" ], [ "refcount", "a00082.html", "a00082" ], [ "PQAlloc", "a00076.html", "a00076" ], [ "scoped_array", "a00087.html", "a00087" ], [ "namedclass", "a00061.html", "a00061" ], [ "unique", "a00114.html", "a00114" ] ];libpqxx-3.1.1/doc/html/Reference/a00097.html0000664000175000017500000002346512076703501015256 00000000000000 libpqxx: pqxx::string_traits< std::string > Struct Template Reference
pqxx::string_traits< std::string > Struct Template Reference

#include <strconv.hxx>

Static Public Member Functions

static const char * name ()
static bool has_null ()
static bool is_null (const std::string &)
static std::string null ()
static void from_string (const char Str[], std::string &Obj)
static std::string to_string (const std::string &Obj)

Member Function Documentation

static void pqxx::string_traits< std::string >::from_string ( const char  Str[],
std::string &  Obj 
)
static
static bool pqxx::string_traits< std::string >::has_null ( )
static
static bool pqxx::string_traits< std::string >::is_null ( const std::string &  )
static
static const char* pqxx::string_traits< std::string >::name ( )
static
static std::string pqxx::string_traits< std::string >::null ( )
static
static std::string pqxx::string_traits< std::string >::to_string ( const std::string &  Obj)
static

The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00039.html0000664000175000017500000002063312076703501015244 00000000000000 libpqxx: pqxx::failure Class Reference

Run-time failure encountered by libpqxx, similar to std::runtime_error. More...

#include <except.hxx>

Inheritance diagram for pqxx::failure:
pqxx::pqxx_exception pqxx::broken_connection pqxx::in_doubt_error pqxx::sql_error pqxx::too_many_connections pqxx::data_exception pqxx::feature_not_supported pqxx::insufficient_privilege pqxx::insufficient_resources pqxx::integrity_constraint_violation pqxx::invalid_cursor_name pqxx::invalid_cursor_state pqxx::invalid_sql_statement_name pqxx::plpgsql_error pqxx::syntax_error

Public Member Functions

 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

Run-time failure encountered by libpqxx, similar to std::runtime_error.

Constructor & Destructor Documentation

pqxx::failure::failure ( const std::string &  whatarg)
explicit

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00090.html0000664000175000017500000003000212076703501015230 00000000000000 libpqxx: pqxx::sql_error Class Reference

Exception class for failed queries. More...

#include <except.hxx>

Inheritance diagram for pqxx::sql_error:
pqxx::failure pqxx::pqxx_exception pqxx::data_exception pqxx::feature_not_supported pqxx::insufficient_privilege pqxx::insufficient_resources pqxx::integrity_constraint_violation pqxx::invalid_cursor_name pqxx::invalid_cursor_state pqxx::invalid_sql_statement_name pqxx::plpgsql_error pqxx::syntax_error

Public Member Functions

 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

Exception class for failed queries.

Carries a copy of the failed query in addition to a regular error message

Constructor & Destructor Documentation

pqxx::sql_error::sql_error ( )
pqxx::sql_error::sql_error ( const std::string &  whatarg)
explicit
pqxx::sql_error::sql_error ( const std::string &  whatarg,
const std::string &  Q 
)
pqxx::sql_error::~sql_error ( ) throw ()
virtual

Member Function Documentation

const string & pqxx::sql_error::query ( ) const throw ()

The query whose execution triggered the exception.


The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00042.js0000664000175000017500000000174412076703502014711 00000000000000var a00042 = [ [ "char_type", "a00042.html#ab1b72785be292cde0fa9ac2cf2b3f6a4", null ], [ "int_type", "a00042.html#a55e0069841487074956aa376a6e1d72c", null ], [ "off_type", "a00042.html#a594d90685e6d986b1f2200792bd74b03", null ], [ "openmode", "a00042.html#a292655415eeb298c9b09ccb6ed8de959", null ], [ "pos_type", "a00042.html#a40a3219faec0d4870a24060bf66c1673", null ], [ "seekdir", "a00042.html#a4c3e5f527f44cdcd210968493bd0ea0a", null ], [ "traits_type", "a00042.html#a434a97e522097934a05be09ddddcf86a", null ], [ "field_streambuf", "a00042.html#ad66342592807bc4614e0ac87ccd06266", null ], [ "overflow", "a00042.html#aa10890370d62085bde7c01e4e7ddcd92", null ], [ "seekoff", "a00042.html#a11be4abe1a7a982fa05d2ca80630c62c", null ], [ "seekpos", "a00042.html#a8c7796f89ed8ea72203359ef1aeaa042", null ], [ "sync", "a00042.html#ae94ab8fb0c94bf4b100f85f80ff8a2b4", null ], [ "underflow", "a00042.html#ac96fb117de93933fd4dd667cbe88a0b6", null ] ];libpqxx-3.1.1/doc/html/Reference/a00092.html0000664000175000017500000000764212076703501015250 00000000000000 libpqxx: pqxx::string_traits< T > Struct Template Reference
pqxx::string_traits< T > Struct Template Reference

Traits class for use in string conversions. More...

#include <strconv.hxx>

Detailed Description

template<typename T>
struct pqxx::string_traits< T >

Traits class for use in string conversions.

Specialize this template for a type that you wish to add to_string and from_string support for.


The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00023.js0000664000175000017500000001415112076703502014704 00000000000000var a00023 = [ [ "capability", "a00023.html#a306a884246abc1051bab4fb06393ee71", [ [ "cap_prepared_statements", "a00023.html#a306a884246abc1051bab4fb06393ee71af5a4754aea608aaf5fca6caa51c44ce0", null ], [ "cap_create_table_with_oids", "a00023.html#a306a884246abc1051bab4fb06393ee71aba8a02f6bb5d2304bfbf2110c6cd791a", null ], [ "cap_nested_transactions", "a00023.html#a306a884246abc1051bab4fb06393ee71a973dc9e4f56818f82b86fb13a5bbc405", null ], [ "cap_cursor_scroll", "a00023.html#a306a884246abc1051bab4fb06393ee71a8034abdbcd193f25d9d93cf79156e1fc", null ], [ "cap_cursor_with_hold", "a00023.html#a306a884246abc1051bab4fb06393ee71ad97556afc36aff4a62c61b67437c20c4", null ], [ "cap_cursor_update", "a00023.html#a306a884246abc1051bab4fb06393ee71a8ab47c10b60d6bd6664f6e88f300edcb", null ], [ "cap_cursor_fetch_0", "a00023.html#a306a884246abc1051bab4fb06393ee71a86380c8c083847ba3d16764784f5914f", null ], [ "cap_table_column", "a00023.html#a306a884246abc1051bab4fb06393ee71a1f2b785abe834490c33dc4cf19c932d2", null ], [ "cap_read_only_transactions", "a00023.html#a306a884246abc1051bab4fb06393ee71a01e68a67b6a3c92ce9b0c92fa73e90b2", null ], [ "cap_statement_varargs", "a00023.html#a306a884246abc1051bab4fb06393ee71abefe533e379346c7b9644406c613eb02", null ], [ "cap_prepare_unnamed_statement", "a00023.html#a306a884246abc1051bab4fb06393ee71a6b019128f2fdcfa9d316042342846e2f", null ], [ "cap_parameterized_statements", "a00023.html#a306a884246abc1051bab4fb06393ee71a366c98bc3385ecfb39496bf7240e5973", null ], [ "cap_end", "a00023.html#a306a884246abc1051bab4fb06393ee71a4a873c5d7e7fb0a9022cdd110181a7de", null ] ] ], [ "connection_base", "a00023.html#a33700cc6d830d28c3dbd48eb9b7276ab", null ], [ "activate", "a00023.html#a1aa330287775aa1ff83f94714f772673", null ], [ "adorn_name", "a00023.html#a4963aaba6da521d480c21c7ec01835cf", null ], [ "await_notification", "a00023.html#ab5c24029bda3198d826d24757e49c746", null ], [ "await_notification", "a00023.html#aa9e66faad88a94857c0749b9bbc5d352", null ], [ "backendpid", "a00023.html#a7179e32df28bd4bc81b85d99b36ad791", null ], [ "cancel_query", "a00023.html#a9709e4738b1bfb1dba547381749908cb", null ], [ "close", "a00023.html#af02016af0233bed748eb1ddab9685131", null ], [ "dbname", "a00023.html#a043e536c1923594c246f2ca8db31dffa", null ], [ "deactivate", "a00023.html#a10b275082e18dbcb177a8871f92c7523", null ], [ "disconnect", "a00023.html#a9bd21013745b4454e248e637cdae1287", null ], [ "esc", "a00199.html#ga8978ff727c03a1aaaa3a9d3fd3268abf", null ], [ "esc", "a00199.html#gae711f65dd793a70629f97a2e0e54d8db", null ], [ "esc", "a00199.html#gaca9ba750fd096cfd652a4323dab3a653", null ], [ "esc_raw", "a00199.html#ga6a8c83d3dcea7114a00c188fe6a92779", null ], [ "get_noticer", "a00023.html#aedf4e61e94ea58058e4bc592d98f8dc2", null ], [ "get_notifs", "a00023.html#aa839a066c0289a12f664e29c9dbafd38", null ], [ "get_variable", "a00023.html#a908a2ffdf56d8259492e9f3894e24f65", null ], [ "hostname", "a00023.html#a38dde9befa350a07a5ac093d13ee64e2", null ], [ "inhibit_reactivation", "a00023.html#aedf7ac72658efa92e702a06b1964747a", null ], [ "init", "a00023.html#a1d1c129c2c5797a82f251ee9dabec77e", null ], [ "is_open", "a00023.html#a36a26cf7e13f612749d49faf4f1654f8", null ], [ "perform", "a00023.html#abf3b71372850f86e4f5e67eb4b7d56bd", null ], [ "perform", "a00023.html#a5eac9840b79e7f1893d88b63f6d97b1d", null ], [ "port", "a00023.html#a826750f0f13ede4ac4e6ca8a84711b53", null ], [ "prepare", "a00023.html#ad2b9e50c9ebfab7c86a091cd939e1e6c", null ], [ "prepare", "a00023.html#af2dcc39b88897fe2bc3c5742edd43645", null ], [ "prepare_now", "a00023.html#a32efdc645566975851bfc7d6b82d214c", null ], [ "process_notice", "a00023.html#a140578ed1e1c65c61deb0407ff25959f", null ], [ "process_notice", "a00023.html#a9d64420154827b3572dcdb955a93bfff", null ], [ "protocol_version", "a00023.html#ab63e45ad783d8adb8d4a9f03e03ef6ef", null ], [ "quote", "a00199.html#ga81fe65fbb9561af7c5f0b33a9fe27e5a", null ], [ "server_version", "a00023.html#acdd295f691812773133147530aa6ff21", null ], [ "set_client_encoding", "a00023.html#a04895c06c5ae1d8b0863a32a28beff51", null ], [ "set_noticer", "a00023.html#ac6b5f32ac91993b37531e96c2d14b18e", null ], [ "set_variable", "a00023.html#a120b9e03dcaa9b0c3ef7026afa64d954", null ], [ "simulate_failure", "a00023.html#a335ca1d83e65a9e57b907c431c3afbe1", null ], [ "sock", "a00023.html#a8ac078b1077fbe19ee1d713bb6b71e8f", null ], [ "supports", "a00023.html#aefdde864e05f88e84d748236b93659e7", null ], [ "trace", "a00023.html#af53d2c135aa27cdb1a66ff550a26e555", null ], [ "unprepare", "a00023.html#a30ec51634479614b45106532e87e5dc7", null ], [ "username", "a00023.html#ae02522000400fc2782e892ac0387d85b", null ], [ "wait_read", "a00023.html#af860fe4c418cfa4f573f34d73327d111", null ], [ "wait_read", "a00023.html#ab8c7dd5e54493e18d5900dd70012d062", null ], [ "wait_write", "a00023.html#acfb8d53e6f105db280cd5d977c005bea", null ], [ "internal::gate::connection_dbtransaction", "a00023.html#af3dfec559fe2305e57aba653abe4c8ad", null ], [ "internal::gate::connection_largeobject", "a00023.html#ab15ff67d81467d271dc713b2584f1328", null ], [ "internal::gate::connection_notify_listener", "a00023.html#a518f718405d80def662f248b427f0e60", null ], [ "internal::gate::connection_parameterized_invocation", "a00023.html#a0e64dc314f291c6f81a948c59d94aa8a", null ], [ "internal::gate::connection_pipeline", "a00023.html#a3b9c5dc16f04600aa5415e06f6ff8fa6", null ], [ "internal::gate::connection_prepare_declaration", "a00023.html#a1407974cc9c548bee6d31834625c3d45", null ], [ "internal::gate::connection_prepare_invocation", "a00023.html#ac2eff365ba0aa25ebbf5f903ac3c7a54", null ], [ "internal::gate::connection_reactivation_avoidance_exemption", "a00023.html#a2247d8690958f634898bbf014a7d418c", null ], [ "internal::gate::connection_sql_cursor", "a00023.html#a84c1a28176815ab9103c7febec450755", null ], [ "internal::gate::connection_transaction", "a00023.html#a3c60c76e32687adce1e8c0dba0919773", null ] ];libpqxx-3.1.1/doc/html/Reference/a00046.html0000664000175000017500000005435112076703501015246 00000000000000 libpqxx: pqxx::icursorstream Class Reference
pqxx::icursorstream Class Reference

Simple read-only cursor represented as a stream of results. More...

#include <cursor.hxx>

Public Types

typedef cursor_base::size_type size_type
typedef
cursor_base::difference_type 
difference_type

Public Member Functions

 icursorstream (transaction_base &context, const std::string &query, const std::string &basename, difference_type sstride=1)
 Set up a read-only, forward-only cursor.
 icursorstream (transaction_base &context, const result::field &cname, difference_type sstride=1, cursor_base::ownershippolicy op=cursor_base::owned)
 Adopt existing SQL cursor. Use with care.
 operator bool () const throw ()
icursorstreamget (result &res)
 Read new value into given result object; same as operator >>
icursorstreamoperator>> (result &res)
 Read new value into given result object; same as get(result &)
icursorstreamignore (std::streamsize n=1)
 Move given number of rows forward (ignoring stride) without reading data.
void set_stride (difference_type stride)
 Change stride, i.e. the number of rows to fetch per read operation.
difference_type stride () const throw ()

Friends

class internal::gate::icursorstream_icursor_iterator

Detailed Description

Simple read-only cursor represented as a stream of results.

SQL cursors can be tricky, especially in C++ since the two languages seem to have been designed on different planets. An SQL cursor has two singular positions akin to end() on either side of the underlying result set.

These cultural differences are hidden from view somewhat by libpqxx, which tries to make SQL cursors behave more like familiar C++ entities such as iterators, sequences, streams, and containers.

Data is fetched from the cursor as a sequence of result objects. Each of these will contain the number of rows defined as the stream's stride, except of course the last block of data which may contain fewer rows.

This class can create or adopt cursors that live outside any backend transaction, which your backend version may not support.

Member Typedef Documentation

Constructor & Destructor Documentation

pqxx::icursorstream::icursorstream ( transaction_base context,
const std::string &  query,
const std::string &  basename,
difference_type  sstride = 1 
)

Set up a read-only, forward-only cursor.

Roughly equivalent to a C++ Standard Library istream, this cursor type supports only two operations: reading a block of rows while moving forward, and moving forward without reading any data.

Parameters
contextTransaction context that this cursor will be active in
querySQL query whose results this cursor shall iterate
basenameSuggested name for the SQL cursor; a unique code will be appended by the library to ensure its uniqueness
sstrideNumber of rows to fetch per read operation; must be a positive number

References set_stride().

pqxx::icursorstream::icursorstream ( transaction_base context,
const result::field cname,
difference_type  sstride = 1,
cursor_base::ownershippolicy  op = cursor_base::owned 
)

Adopt existing SQL cursor. Use with care.

Forms a cursor stream around an existing SQL cursor, as returned by e.g. a server-side function. The SQL cursor will be cleaned up by the stream's destructor as if it had been created by the stream; cleaning it up by hand or adopting the same cursor twice is an error.

Passing the name of the cursor as a string is not allowed, both to avoid confusion with the other constructor and to discourage unnecessary use of adopted cursors.

Warning
It is technically possible to adopt a "WITH HOLD" cursor, i.e. a cursor that stays alive outside its creating transaction. However, any cursor stream (including the underlying SQL cursor, naturally) must be destroyed before its transaction context object is destroyed. Therefore the only way to use SQL's WITH HOLD feature is to adopt the cursor, but defer doing so until after entering the transaction context that will eventually destroy it.
Parameters
contextTransaction context that this cursor will be active in.
cnameResult field containing the name of the SQL cursor to adopt.
sstrideNumber of rows to fetch per read operation; must be a positive number.
opOwnership policy. Determines whether the cursor underlying this stream will be destroyed when the stream is closed.

References set_stride().

Member Function Documentation

icursorstream& pqxx::icursorstream::get ( result res)

Read new value into given result object; same as operator >>

The result set may continue any number of rows from zero to the chosen stride, inclusive. An empty result will only be returned if there are no more rows to retrieve.

Returns
Reference to this very stream, to facilitate "chained" invocations ("C.get(r1).get(r2);")
icursorstream & pqxx::icursorstream::ignore ( std::streamsize  n = 1)

Move given number of rows forward (ignoring stride) without reading data.

Returns
Reference to this very stream, to facilitate "chained" invocations ("C.ignore(2).get(r).ignore(4);")
pqxx::icursorstream::operator bool ( ) const throw ()
icursorstream& pqxx::icursorstream::operator>> ( result res)

Read new value into given result object; same as get(result &)

The result set may continue any number of rows from zero to the chosen stride, inclusive. An empty result will only be returned if there are no more rows to retrieve.

Returns
Reference to this very stream, to facilitate "chained" invocations ("C >> r1 >> r2;")
void pqxx::icursorstream::set_stride ( difference_type  stride)

Change stride, i.e. the number of rows to fetch per read operation.

Parameters
strideMust be a positive number

References pqxx::to_string().

Referenced by icursorstream().

difference_type pqxx::icursorstream::stride ( ) const throw ()

Friends And Related Function Documentation

friend class internal::gate::icursorstream_icursor_iterator
friend

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00035.html0000664000175000017500000001171512076703501015241 00000000000000 libpqxx: pqxx::internal::dereference< ITER > Struct Template Reference
pqxx::internal::dereference< ITER > Struct Template Reference

Functor: dereference iterator. More...

#include <util.hxx>

Public Member Functions

ITER::value_type operator() (ITER i) const

Detailed Description

template<typename ITER>
struct pqxx::internal::dereference< ITER >

Functor: dereference iterator.

Member Function Documentation

template<typename ITER >
ITER::value_type pqxx::internal::dereference< ITER >::operator() ( ITER  i) const

The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00060.js0000664000175000017500000000311512076703502014703 00000000000000var a00060 = [ [ "off_type", "a00060.html#acb1cfe19cef8d7b46ecddaa5f2231e9a", null ], [ "openmode", "a00060.html#a56b79eb0d4019b7bfd63a914a530f2ca", null ], [ "pos_type", "a00060.html#aea8ca1d1275b9a68f8b991ef253e9067", null ], [ "seekdir", "a00060.html#adaa7a89a1902ba3f13be9c7ed6c1fa0b", null ], [ "size_type", "a00060.html#a546f724f294272c84c85ab4b4b415419", null ], [ "largeobjectaccess", "a00060.html#a6a83ff716d73bdf627d8ad29405b297d", null ], [ "largeobjectaccess", "a00060.html#af58cb0a2bfe6da7b3d17a572fd4ae573", null ], [ "largeobjectaccess", "a00060.html#abe93b38428b31cc1a533381f055fb3b8", null ], [ "largeobjectaccess", "a00060.html#aa93b5a0de67a09ab92514670ebcca638", null ], [ "~largeobjectaccess", "a00060.html#ac984b12f6980c477bfd3d895576635a6", null ], [ "cread", "a00060.html#a2552356fe475dc48fb5f3badb39cccc6", null ], [ "cseek", "a00060.html#afa13d389b11eac8063ade1febb7a4e2c", null ], [ "ctell", "a00060.html#aef7bc42d2a46bbb09c19c802616fa559", null ], [ "cwrite", "a00060.html#a0e047fa337f4df3838e983ca922fa7a5", null ], [ "process_notice", "a00060.html#afb99c68925c9dad182c41036ead832ae", null ], [ "read", "a00060.html#aac375f66e0a9fb817e4e59a1e73f6ba7", null ], [ "seek", "a00060.html#ae74922e23584d6410cf37f89f10c1a53", null ], [ "tell", "a00060.html#af81ac99156f3a319e8c021ac2e12da42", null ], [ "to_file", "a00060.html#a4adb675b5aed487e66d986fde3d54b4c", null ], [ "write", "a00060.html#ad04b47cf5b016f02e855f5e9c0bbccae", null ], [ "write", "a00060.html#aaaad87ca613bccb90e5a8c61a45d83ef", null ] ];libpqxx-3.1.1/doc/html/Reference/functions_func_0x64.html0000664000175000017500000002034612076703502020236 00000000000000 libpqxx: Class Members - Functions
libpqxx-3.1.1/doc/html/Reference/functions_func_0x75.html0000664000175000017500000001525512076703502020243 00000000000000 libpqxx: Class Members - Functions
libpqxx-3.1.1/doc/html/Reference/a00021.png0000664000175000017500000000110412076703501015043 00000000000000‰PNG  IHDR‹P>v!PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÓIDATxíYŽì E©ö¿äW˜bÈ êzZ.åB:6öic’_bŒq%i 9‹$Y9‹$Yý libpqxx: Member List
pqxx::scoped_noticer Member List

This is the complete list of members for pqxx::scoped_noticer, including all inherited members.

scoped_noticer(connection_base &c, std::auto_ptr< noticer > t)pqxx::scoped_noticer
scoped_noticer(connection_base &c, noticer *t)pqxx::scoped_noticerprotected
~scoped_noticer()pqxx::scoped_noticer
libpqxx-3.1.1/doc/html/Reference/a00234.html0000664000175000017500000000725712076703501015250 00000000000000 libpqxx: Member List
pqxx::range_error Member List

This is the complete list of members for pqxx::range_error, including all inherited members.

range_error(const std::string &)pqxx::range_errorexplicit
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
libpqxx-3.1.1/doc/html/Reference/a00246.html0000664000175000017500000001271712076703501015250 00000000000000 libpqxx: Member List
pqxx::syntax_error Member List

This is the complete list of members for pqxx::syntax_error, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
syntax_error(const std::string &err)pqxx::syntax_errorexplicit
syntax_error(const std::string &err, const std::string &Q)pqxx::syntax_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00267.html0000664000175000017500000001130212076703501015240 00000000000000 libpqxx: Member List
pqxx::notify_listener Member List

This is the complete list of members for pqxx::notify_listener, including all inherited members.

Conn() const pqxx::notify_listenerprotected
conn() const pqxx::notify_listenerprotected
name() const pqxx::notify_listener
notify_listener(connection_base &C, const std::string &N)pqxx::notify_listener
operator()(int be_pid)=0pqxx::notify_listenerpure virtual
~notify_listener()pqxx::notify_listenervirtual
libpqxx-3.1.1/doc/html/Reference/functions_func.html0000664000175000017500000001534512076703502017460 00000000000000 libpqxx: Class Members - Functions
libpqxx-3.1.1/doc/html/Reference/open.png0000664000175000017500000000017312076703500015205 00000000000000‰PNG  IHDR à‘BIDATxíÝÁ €0 Ð׬ՙ\Àº€39—b!©9{|ðI>$#Àß´ý8/¨ÄØzƒ/Ï>2À[ÎgiU,/¬~¼Ï\ Ä9Ù¸IEND®B`‚libpqxx-3.1.1/doc/html/Reference/sync_on.png0000664000175000017500000000151512076703500015715 00000000000000‰PNG  IHDRàw=øIDATxíÝ_HTYÀñï8ã¤ó§i§4-g6ÆËÕ&kQ)¨Ô!Š0ÒURKÚ…„ê¡/»PEÁ>ìK-+KÁ²Ñ.Y”¾dEPaA‰ø°¥¶›ZSÓïÜ;3wºŠ–¯—߯gfîïœsçœWKÇñ.€ÉøD­¨a‘'¬âq_ôˆk¢ÀŒ ÀDŽøQ´ÄïC¨¶åñÏÿgÅ ñ 0„Y‚:qZ¦Á)~õâ€èLý0HVñ× žz-¿‰C“%¨g¦˜6€é8%Úõ¬ëwêÙUÏ¿˜ª³Ä }? ?€·3ÀÀž©Š À”K• @hà a±ðaÇæUe‹ sù~ë2²ì“&Ú&B*AÄljæºììi*˨,Ëçí»÷oÆ£T”,d[˜¼3-*ÁÀ…>å‡Ë çLÉŸçfk˜Ò éw#*AEjKUy>ûšËÉõ&{µ¢8—m5Ki¬ jjƒD*¿NŽÖigwÃ7Dª’mz骹úKÛ¾±ˆ¶M!æ¤ÍkÐ?šoý¬_åÓlXí#Ò~–¸¬ê×ÒÑXŠÓ‘ùRÙ*Eû‚ՂדðEÜ;6«e"Q(²Ù=–¿Ezæ5Kؼָ_ 1òzBªJë ±XŒì96åªjL^7{ùãJÑ÷1½i@%8'7M©_\Qœ#ÓUŒËñýÿyõ Wo Éx8¼s¥v¯ªì|×SnÜ q_m Ýé î>bèÕí[JX,½4[Tú{R£ë¼ôˆ¾þa€tÝjjzzÅ'ÅìȶiIžŽòwÏs ¡€—ÕKøõâC^ŽŒ˜Y­¨µÉ%6¨´êˆº]vÛðhâ½iWv–hôëê°Ò¨¾'æÌ‚·ñ|[ßìúÅ^€YrD=<ýDû]äÇ÷s€Ïõ‹8™ºCì? À ¨—t4õᩎ¡Jã‡W‹É± îr¼cjMɘìx| šE©øNÔ‰œøA¢þ«–€Z¼ñ‡jó î#™§¢¢4gIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00027.js0000664000175000017500000000342312076703502014710 00000000000000var a00027 = [ [ "difference_type", "a00027.html#a17ba5e3a754d359042dfa48e5264ddf1", null ], [ "iterator_type", "a00027.html#aba12ec37128048b166810bac273cf799", null ], [ "reference", "a00027.html#aba4cd98f3fa431fd209e2472d2451e70", null ], [ "super", "a00027.html#af6abd41616a8de8c16605fc4f84b4772", null ], [ "const_reverse_fielditerator", "a00027.html#a376a59da3f6fffd6627a1873ea3b5228", null ], [ "const_reverse_fielditerator", "a00027.html#af0ef775d7c883132b7a6f8aeb3df2df3", null ], [ "base", "a00027.html#a5e1afd5bf1dbcee3972e83bb866aa98f", null ], [ "operator!=", "a00027.html#a8d094c558482896eb9a5c292723eba7c", null ], [ "operator+", "a00027.html#abcb961f2b6c90f6036806f40ad46ab56", null ], [ "operator++", "a00027.html#aa5365b5264c106eee2c276007e4765d4", null ], [ "operator++", "a00027.html#a51c35bad2747cbd6c90a267d59aa31ef", null ], [ "operator+=", "a00027.html#ab3b5c56b1d6b15f64d064dfbd26d8cff", null ], [ "operator-", "a00027.html#a2dc27dbf36c0b966ebc25a87450d5c0b", null ], [ "operator-", "a00027.html#a12f99190037d4b490500936a83092a74", null ], [ "operator--", "a00027.html#a346cdf18a3340f2503555f19f71f21a0", null ], [ "operator--", "a00027.html#aa9bd8e32cf5caac0ec911d9518bf8410", null ], [ "operator-=", "a00027.html#aa8e73b46b5e8b33d8c74bce11148632c", null ], [ "operator<", "a00027.html#af98fa99fc9c5358382b6fa47dda74e40", null ], [ "operator<=", "a00027.html#a62749ee41bfe939115ca79e4746b1299", null ], [ "operator=", "a00027.html#a9fdd6003a88bc85a36c6dc046240b63d", null ], [ "operator==", "a00027.html#a4ba542847467824cde9db977878646a2", null ], [ "operator>", "a00027.html#ab9264f0b9381e92d953a882de9f3ebb3", null ], [ "operator>=", "a00027.html#a5743ed64cc92b0fc704e0ba44441000b", null ] ];libpqxx-3.1.1/doc/html/Reference/a00286.html0000664000175000017500000003505012076703501015247 00000000000000 libpqxx: Member List
pqxx::subtransaction Member List

This is the complete list of members for pqxx::subtransaction, including all inherited members.

abort()pqxx::transaction_base
Begin()pqxx::transaction_baseprotected
classname() const pqxx::internal::namedclass
commit()pqxx::transaction_base
conn() const pqxx::transaction_base
dbtransaction(connection_base &, const std::string &IsolationString, readwrite_policy rw=read_write)pqxx::dbtransactionprotected
dbtransaction(connection_base &, bool direct=true, readwrite_policy rw=read_write)pqxx::dbtransactionexplicitprotected
description() const pqxx::internal::namedclass
DirectExec(const char C[], int Retries=0)pqxx::transaction_baseprotected
do_exec(const char Query[])pqxx::dbtransactionprotectedvirtual
End()pqxx::transaction_baseprotected
esc(const char str[]) const pqxx::transaction_base
esc(const char str[], size_t maxlen) const pqxx::transaction_base
esc(const std::string &str) const pqxx::transaction_base
esc_raw(const unsigned char str[], size_t len) const pqxx::transaction_base
esc_raw(const std::string &) const pqxx::transaction_base
exec(const std::string &Query, const std::string &Desc=std::string())pqxx::transaction_base
exec(const std::stringstream &Query, const std::string &Desc=std::string())pqxx::transaction_base
fullname(const std::string &ttype, const std::string &isolation)pqxx::dbtransactionprotectedstatic
get_variable(const std::string &)pqxx::transaction_base
isolation_tag typedefpqxx::transaction_base
m_reactivation_avoidancepqxx::transaction_baseprotected
m_Transpqxx::internal::transactionfocusprotected
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
parameterized(const std::string &query)pqxx::transaction_base
prepared(const std::string &statement=std::string())pqxx::transaction_base
process_notice(const char Msg[]) const pqxx::transaction_base
process_notice(const std::string &Msg) const pqxx::transaction_base
quote(const T &t) const pqxx::transaction_base
reactivation_avoidance_clear()pqxx::transaction_baseprotected
reg_pending_error(const std::string &)pqxx::internal::transactionfocusprotected
register_me()pqxx::internal::transactionfocusprotected
registered() const pqxx::internal::transactionfocusprotected
set_variable(const std::string &Var, const std::string &Val)pqxx::transaction_base
start_backend_transaction()pqxx::dbtransactionprotected
subtransaction(dbtransaction &T, const std::string &Name=std::string())pqxx::subtransactionexplicit
transaction_base(connection_base &c, bool direct=true)pqxx::transaction_baseexplicitprotected
transactionfocus(transaction_base &t)pqxx::internal::transactionfocusexplicit
unregister_me()pqxx::internal::transactionfocusprotected
~dbtransaction()pqxx::dbtransactionvirtual
~transaction_base()=0pqxx::transaction_basepure virtual
libpqxx-3.1.1/doc/html/Reference/bc_s.png0000664000175000017500000000125012076703500015147 00000000000000‰PNG  IHDR /ð9ÐoIDATxíMLAÇßìN»»¥ívKùPJik±R5^ŒChÂŃ!Dzƒ *U4VƒbÄD1~`8xà@ˆ^¿?ð𤡸Ý@јÝná`JLLÝØ¦ƒÜXi v«9ê)·}aV±&Ò0)›¼ð(‰zÛküNcFPÛù'@é¨KZK%!13§5£}Ý€ÒdÀã°’>´Åç´çhï¹G…ÉZ ïz×Ú—Éi£“ì–º=…@O¹«È‚1Ó¯¦3ãF«[ºä’d²¾JÒã`|^3˜Ý\›¿¡]²ó•'fçÓùyˆÄîçâÙ@¥Cos˧d:?$lhûnÝ× nm\†$cÔL6Ñý »Ì´x@N¦oPÀ®Î‘òÕ”€GÔ÷>9¹¨Q@ã±á“.‡qŠÜ´¼°Ø ”PCt(á«yŒQ$±°hÔNý8¤¥Ë MNjÿ$þßþŲo_ƒsLIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00230.html0000664000175000017500000000727312076703501015242 00000000000000 libpqxx: Member List
pqxx::internal_error Member List

This is the complete list of members for pqxx::internal_error, including all inherited members.

internal_error(const std::string &)pqxx::internal_errorexplicit
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
libpqxx-3.1.1/doc/html/Reference/a00279.html0000664000175000017500000003367512076703501015264 00000000000000 libpqxx: Member List
pqxx::robusttransaction< ISOLATIONLEVEL > Member List

This is the complete list of members for pqxx::robusttransaction< ISOLATIONLEVEL >, including all inherited members.

abort()pqxx::transaction_base
basic_robusttransaction(connection_base &C, const std::string &IsolationLevel, const std::string &table_name=std::string())pqxx::basic_robusttransactionprotected
Begin()pqxx::transaction_baseprotected
classname() const pqxx::internal::namedclass
commit()pqxx::transaction_base
conn() const pqxx::transaction_base
dbtransaction(connection_base &, const std::string &IsolationString, readwrite_policy rw=read_write)pqxx::dbtransactionprotected
dbtransaction(connection_base &, bool direct=true, readwrite_policy rw=read_write)pqxx::dbtransactionexplicitprotected
description() const pqxx::internal::namedclass
DirectExec(const char C[], int Retries=0)pqxx::transaction_baseprotected
do_exec(const char Query[])pqxx::dbtransactionprotectedvirtual
End()pqxx::transaction_baseprotected
esc(const char str[]) const pqxx::transaction_base
esc(const char str[], size_t maxlen) const pqxx::transaction_base
esc(const std::string &str) const pqxx::transaction_base
esc_raw(const unsigned char str[], size_t len) const pqxx::transaction_base
esc_raw(const std::string &) const pqxx::transaction_base
exec(const std::string &Query, const std::string &Desc=std::string())pqxx::transaction_base
exec(const std::stringstream &Query, const std::string &Desc=std::string())pqxx::transaction_base
fullname(const std::string &ttype, const std::string &isolation)pqxx::dbtransactionprotectedstatic
get_variable(const std::string &)pqxx::transaction_base
isolation_tag typedefpqxx::robusttransaction< ISOLATIONLEVEL >
m_reactivation_avoidancepqxx::transaction_baseprotected
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
parameterized(const std::string &query)pqxx::transaction_base
prepared(const std::string &statement=std::string())pqxx::transaction_base
process_notice(const char Msg[]) const pqxx::transaction_base
process_notice(const std::string &Msg) const pqxx::transaction_base
quote(const T &t) const pqxx::transaction_base
reactivation_avoidance_clear()pqxx::transaction_baseprotected
robusttransaction(connection_base &C, const std::string &Name=std::string())pqxx::robusttransaction< ISOLATIONLEVEL >explicit
set_variable(const std::string &Var, const std::string &Val)pqxx::transaction_base
start_backend_transaction()pqxx::dbtransactionprotected
transaction_base(connection_base &c, bool direct=true)pqxx::transaction_baseexplicitprotected
~basic_robusttransaction()=0pqxx::basic_robusttransactionpure virtual
~dbtransaction()pqxx::dbtransactionvirtual
~robusttransaction()pqxx::robusttransaction< ISOLATIONLEVEL >virtual
~transaction_base()=0pqxx::transaction_basepure virtual
libpqxx-3.1.1/doc/html/Reference/a00074.png0000664000175000017500000000215712076703501015064 00000000000000‰PNG  IHDRøüSukPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2þIDATxííÒ« „—ÍŒ÷ÉÇ/4 h­=Mçí°ÈGÀ‡Ø¿03 Œ$%|— Í…$K}•€$ÚÓl3Ö[í»˜žúùÓ3ÛLeÅÔž{n¬"X6˜m™x(½iwÂbØ=é‹«|P[äú•é<±Œ­ãÕšÜG ¦_M°Œ½EptóÅ´;ö>|pÅ»èV$žOïhùqMt‚=¯|˜ kocí[8ÉÜ‹i’ìéÂþ)Ám>$I²Ô& É ½J@’!V3³HÀ# ªp‚aˆF'‚â ” "D ®ˆ@"Dð×ÌÌB#É@‰@Ÿ!HikÍ…$ïè1AùÎÿBÖSŽõÖØß•æÞZonX4uv‘dK/lO d:”¬jÀµI²§W|à7ön(üÞBú"Áèì6Á2A’]Ý$(Þã§™¸——Ï?Ž‘Ø$Èqù±[èä‚sÆÄ–Ö€Ý'HòD¯ÝÂûÙN’çþEðCff‘€G TáÃN0#Ä(D ˆ@\D ˆà¯˜™… F’>FHò]ý2Abšwë­áß¶Ïz‚”­ÆÇR¹’<è„`ÞcÙ„‰ýâ7ŸZ³rU äAg>ÈïXßSî³´–ÙAÝé_ÔÛë1k‚é÷_¼Û½EËÛó1»éF$^ÄÁg|ÐÉ…|ôó\ت*…H²Ðù-¼”ï¾#˜#°Ÿq$ÙÓ/û€$¿!ˆ`%03‹<Ò¡ '†h„p‚ !ž@¹ ˆ@"àŠD ˆ@ÀÌ,T0’ ”Dð.A"ÉžN'I²Ö¯$¦y‡±Þn×ut”7ÜͦŽ#Hyõ² è̶‹1å¼µíÞØðV3ÇÛóAÞ+o^ØïÓ•¡›mÔò¢>B°]NI0ýx÷^”«ª˜¼Gàn´‰ïÅÁ=tr!¿ã½\تò@½[8É룇kÃÛ_ƒ§Ÿ.É1H’—zèƒúM}@’ß–D°˜™E i€P… C4B8ÁŒO \D pE"D ‚¿FRJ¡B€@‰@oœ.iOö—|‹ÚªÆîÜŸ²47Ü®ëè(o¸›M·ßÜ™2~Ù!•Œ5Á¼ù² ‡rÞÚ€ÊÝP”ákºeÎ Õteèf lÏÊèãÛå4æ¯3Zú¯ž;'(WUæ…z­H¼5ôKqÐÉ…¼üf.¬±_çÂy^—Ñ2¼ÿuyHÐðélÕI ­§>8úîHÿ"ø‚”RŠÔ?È+hP¾žIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00072.html0000664000175000017500000002561212076703501015243 00000000000000 libpqxx: pqxx::plpgsql_error Class Reference
pqxx::plpgsql_error Class Reference

PL/pgSQL error. More...

#include <except.hxx>

Inheritance diagram for pqxx::plpgsql_error:
pqxx::sql_error pqxx::failure pqxx::pqxx_exception pqxx::plpgsql_no_data_found pqxx::plpgsql_raise pqxx::plpgsql_too_many_rows

Public Member Functions

 plpgsql_error (const std::string &err)
 plpgsql_error (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

PL/pgSQL error.

Exceptions derived from this class are errors from PL/pgSQL procedures.

Constructor & Destructor Documentation

pqxx::plpgsql_error::plpgsql_error ( const std::string &  err)
explicit
pqxx::plpgsql_error::plpgsql_error ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00064.html0000664000175000017500000002662012076703501015244 00000000000000 libpqxx: pqxx::not_null_violation Class Reference
pqxx::not_null_violation Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::not_null_violation:
pqxx::integrity_constraint_violation pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 not_null_violation (const std::string &err)
 not_null_violation (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::integrity_constraint_violation
 integrity_constraint_violation (const std::string &err)
 integrity_constraint_violation (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::not_null_violation::not_null_violation ( const std::string &  err)
explicit
pqxx::not_null_violation::not_null_violation ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00198.html0000664000175000017500000002025012076703501015245 00000000000000 libpqxx: Utility functions
Utility functions

Functions

template<typename ITER >
std::string pqxx::separated_list (const std::string &sep, ITER begin, ITER end)
 Render sequence as a string, using given separator between items.
template<typename OBJ >
std::string pqxx::separated_list (const std::string &sep, OBJ *begin, OBJ *end)
 Render array as a string, using given separator between items.
template<typename CONTAINER >
std::string pqxx::separated_list (const std::string &sep, const CONTAINER &c)
 Render items in a container as a string, using given separator.

Detailed Description

Function Documentation

template<typename ITER >
std::string pqxx::separated_list ( const std::string &  sep,
ITER  begin,
ITER  end 
)

Render sequence as a string, using given separator between items.

References pqxx::separated_list().

template<typename OBJ >
std::string pqxx::separated_list ( const std::string &  sep,
OBJ *  begin,
OBJ *  end 
)

Render array as a string, using given separator between items.

References pqxx::separated_list().

template<typename CONTAINER >
std::string pqxx::separated_list ( const std::string &  sep,
const CONTAINER &  c 
)

Render items in a container as a string, using given separator.

References pqxx::separated_list().

libpqxx-3.1.1/doc/html/Reference/a00061.js0000664000175000017500000000047612076703502014713 00000000000000var a00061 = [ [ "namedclass", "a00061.html#ad703d52d9d96025bf08d9da26f6829be", null ], [ "classname", "a00061.html#a9c216366ea21f1c9cd03b39410185cbb", null ], [ "description", "a00061.html#ab63de628429e771251ab8a2688ad407d", null ], [ "name", "a00061.html#a79dcce75176eef9d2d80fdc2ec2827a7", null ] ];libpqxx-3.1.1/doc/html/Reference/ftv2doc.png0000664000175000017500000000135212076703502015615 00000000000000‰PNG  IHDRÚ}\ˆ±IDATxíMOS[…Ÿžsúa?-XZ(PD4‚ AWbu`b 77wäHFÆCËÔÂÿà/`vo„ˆAPòq‹P @ ­ûÝè980 îà¤+»§Ýy×^ïZï9SW¹\83g‰3'°Nâçl¹¸_b¯p ïåûÆVÜÖ¡€Ÿ×"¬Ö†X€d]Ðà3“ÉÃÄÌ™xŸ ßMàœ[<çSPkvc—hÈ'…™˜^Åm™hØ7 `Û™¦ èÀåráq›‘œ¾!daeKŸþÆÕ˜:Ì*³_דâèi?I–eP*B7Ÿ¿åô!¹Ýgr6Ër6oKbëþãðôrI”ËTˆüªŒ¨xóö=›ù¢&‰(e+ßóÄkýÇ`ëÁÜb.“¸ÐW×w0¥°jÑzN™¬|©WEãµ¢a¯6[öX†AkÓù*/œ¨‰€ÉY­ ÿV’§–u²jÂ>1W *½·°PGŽzÿ¨/Eg{ ŸÇâaoŠÁVú:è¿™¤1$ôR§W,–ªà¨@ŠË56¾ÀÔÜ-¾,mê¸Î/æè¹– òr5¥T*S(Vf8ö9u’ Õ£w›ùóa=Í<{Ò¡UŒ÷r¯+ÉådDÏF$è°…£é¿`zþ»ÎúöN‘µÜ®0Q3£~_^Ëóâ¯N=ˆvpTà±LžT}ˆîkq†Òm<¼ÎÓ?Zh¿X£ï_þÝ¥[)ƒ `gêÃa_Ô*äÔ2`'=õ´Fÿ2EâÁPú ÷»›l=8‹Wv°%THqÉ¿<"¤ïG¾ÆxH{#ÆÖ«aÔJÕÞ‡—m‹„ çñKsÿàñVŠØ¡°·MâÒ^ TÁ– Ý›r¥ß½ømüÿ_™?ªWİ÷#uIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00060.html0000664000175000017500000013646012076703501015244 00000000000000 libpqxx: pqxx::largeobjectaccess Class Reference
pqxx::largeobjectaccess Class Reference

Accessor for large object's contents. More...

#include <largeobject.hxx>

Inheritance diagram for pqxx::largeobjectaccess:
pqxx::largeobject

Public Types

typedef long off_type
typedef size_type pos_type
typedef std::ios::openmode openmode
 Open mode: in, out (can be combined with the "or" operator)
typedef std::ios::seekdir seekdir
 Seek direction: beg, cur, end.
typedef long size_type

Public Member Functions

 largeobjectaccess (dbtransaction &T, openmode mode=std::ios::in|std::ios::out)
 Create new large object and open it.
 largeobjectaccess (dbtransaction &T, oid O, openmode mode=std::ios::in|std::ios::out)
 Open large object with given oid.
 largeobjectaccess (dbtransaction &T, largeobject O, openmode mode=std::ios::in|std::ios::out)
 Open given large object.
 largeobjectaccess (dbtransaction &T, const std::string &File, openmode mode=std::ios::in|std::ios::out)
 Import large object from a local file and open it.
 ~largeobjectaccess () throw ()
void to_file (const std::string &File) const
 Export large object's contents to a local file.
High-level access to object contents
void write (const char Buf[], size_type Len)
 Write data to large object.
void write (const std::string &Buf)
 Write string to large object.
size_type read (char Buf[], size_type Len)
 Read data from large object.
size_type seek (size_type dest, seekdir dir)
 Seek in large object's data stream.
size_type tell () const
 Report current position in large object's data stream.
Low-level access to object contents

These functions provide a more "C-like" access interface, returning special values instead of throwing exceptions on error. These functions are generally best avoided in favour of the high-level access functions, which behave more like C++ functions should.

pos_type cseek (off_type dest, seekdir dir) throw ()
 Seek in large object's data stream.
off_type cwrite (const char Buf[], size_type Len) throw ()
 Write to large object's data stream.
off_type cread (char Buf[], size_type Len) throw ()
 Read from large object's data stream.
pos_type ctell () const throw ()
 Report current position in large object's data stream.
Error/warning output
void process_notice (const std::string &) throw ()
 Issue message to transaction's notice processor.

Additional Inherited Members

- Private Types inherited from pqxx::largeobject
typedef long size_type
- Private Member Functions inherited from pqxx::largeobject
 largeobject () throw ()
 Refer to a nonexistent large object (similar to what a null pointer does)
 largeobject (dbtransaction &T)
 Create new large object.
 largeobject (oid O) throw ()
 Wrap object with given oid.
 largeobject (dbtransaction &T, const std::string &File)
 Import large object from a local file.
 largeobject (const largeobjectaccess &O) throw ()
 Take identity of an opened large object.
oid id () const throw ()
 Object identifier.
void to_file (dbtransaction &T, const std::string &File) const
 Export large object's contents to a local file.
void remove (dbtransaction &T) const
 Delete large object from database.
bool operator== (const largeobject &other) const
 Compare object identities.
bool operator!= (const largeobject &other) const
 Compare object identities.
bool operator<= (const largeobject &other) const
 Compare object identities.
bool operator>= (const largeobject &other) const
 Compare object identities.
bool operator< (const largeobject &other) const
 Compare object identities.
bool operator> (const largeobject &other) const
 Compare object identities.
std::string Reason (int err) const

Detailed Description

Accessor for large object's contents.

Member Typedef Documentation

typedef std::ios::openmode pqxx::largeobjectaccess::openmode

Open mode: in, out (can be combined with the "or" operator)

According to the C++ standard, these should be in std::ios_base. We take them from std::ios instead, which should be safe because it inherits the same definition, to accommodate gcc 2.95 & 2.96.

typedef std::ios::seekdir pqxx::largeobjectaccess::seekdir

Seek direction: beg, cur, end.

According to the C++ standard, these should be in std::ios_base. We take them from std::ios instead, which should be safe because it inherits the same definition, to accommodate gcc 2.95 & 2.96.

Constructor & Destructor Documentation

pqxx::largeobjectaccess::largeobjectaccess ( dbtransaction T,
openmode  mode = std::ios::in | std::ios::out 
)
explicit

Create new large object and open it.

Parameters
TBackend transaction in which the object is to be created
modeAccess mode, defaults to ios_base::in | ios_base::out

References largeobjectaccess().

Referenced by largeobjectaccess().

pqxx::largeobjectaccess::largeobjectaccess ( dbtransaction T,
oid  O,
openmode  mode = std::ios::in | std::ios::out 
)

Open large object with given oid.

Convert combination of a transaction and object identifier into a large object identity. Does not affect the database.

Parameters
TTransaction in which the object is to be accessed
OObject identifier for the given object
modeAccess mode, defaults to ios_base::in | ios_base::out

References largeobjectaccess().

pqxx::largeobjectaccess::largeobjectaccess ( dbtransaction T,
largeobject  O,
openmode  mode = std::ios::in | std::ios::out 
)

Open given large object.

Open a large object with the given identity for reading and/or writing

Parameters
TTransaction in which the object is to be accessed
OIdentity for the large object to be accessed
modeAccess mode, defaults to ios_base::in | ios_base::out

References largeobjectaccess().

pqxx::largeobjectaccess::largeobjectaccess ( dbtransaction T,
const std::string &  File,
openmode  mode = std::ios::in | std::ios::out 
)

Import large object from a local file and open it.

Creates a large object containing the data found in the given file.

Parameters
TBackend transaction in which the large object is to be created
FileA filename on the client program's filesystem
modeAccess mode, defaults to ios_base::in | ios_base::out

References largeobjectaccess().

pqxx::largeobjectaccess::~largeobjectaccess ( ) throw ()

Member Function Documentation

pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::cread ( char  Buf[],
size_type  Len 
) throw ()

Read from large object's data stream.

Does not throw exception in case of error; inspect return value and errno instead.

Parameters
BufArea where incoming bytes should be stored
LenNumber of bytes to read
Returns
Number of bytes actually read, or -1 if an error occurred.
pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::cseek ( off_type  dest,
seekdir  dir 
) throw ()

Seek in large object's data stream.

Does not throw exception in case of error; inspect return value and errno instead.

Parameters
destOffset to go to
dirOrigin to which dest is relative: ios_base::beg (from beginning of the object), ios_base::cur (from current access position), or ios_base;:end (from end of object)
Returns
New position in large object, or -1 if an error occurred.
pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::ctell ( ) const throw ()

Report current position in large object's data stream.

Does not throw exception in case of error; inspect return value and errno instead.

Returns
Current position in large object, of -1 if an error occurred.
pqxx::largeobjectaccess::pos_type pqxx::largeobjectaccess::cwrite ( const char  Buf[],
size_type  Len 
) throw ()

Write to large object's data stream.

Does not throw exception in case of error; inspect return value and errno instead.

Parameters
BufData to write
LenNumber of bytes to write
Returns
Number of bytes actually written, or -1 if an error occurred.
void pqxx::largeobjectaccess::process_notice ( const std::string &  s) throw ()

Issue message to transaction's notice processor.

pqxx::largeobjectaccess::size_type pqxx::largeobjectaccess::read ( char  Buf[],
size_type  Len 
)

Read data from large object.

Throws an exception if an error occurs while reading.

Parameters
BufLocation to store the read data in
LenNumber of bytes to try and read
Returns
Number of bytes read, which may be less than the number requested if the end of the large object is reached

References pqxx::to_string().

pqxx::largeobjectaccess::size_type pqxx::largeobjectaccess::seek ( size_type  dest,
seekdir  dir 
)

Seek in large object's data stream.

Throws an exception if an error occurs.

Returns
The new position in the large object
pqxx::largeobjectaccess::size_type pqxx::largeobjectaccess::tell ( ) const

Report current position in large object's data stream.

Throws an exception if an error occurs.

Returns
The current position in the large object
void pqxx::largeobjectaccess::to_file ( const std::string &  File) const

Export large object's contents to a local file.

Writes the data stored in the large object to the given file.

Parameters
FileA filename on the client's filesystem

References pqxx::largeobject::to_file().

void pqxx::largeobjectaccess::write ( const char  Buf[],
size_type  Len 
)

Write data to large object.

If not all bytes could be written, an exception is thrown.

Parameters
BufData to write
LenNumber of bytes from Buf to write

References pqxx::to_string().

void pqxx::largeobjectaccess::write ( const std::string &  Buf)

Write string to large object.

If not all bytes could be written, an exception is thrown.

Parameters
BufData to write; no terminating zero is written

References write().

Referenced by write().


The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00057.html0000664000175000017500000003724312076703501015251 00000000000000 libpqxx: pqxx::items< T, CONT > Class Template Reference
pqxx::items< T, CONT > Class Template Reference

Container of items with easy contents initialization and string rendering. More...

#include <util.hxx>

Public Member Functions

 items ()
 Create empty items list.
 items (const T &t)
 Create items list with one element.
 items (const T &t1, const T &t2)
 items (const T &t1, const T &t2, const T &t3)
 items (const T &t1, const T &t2, const T &t3, const T &t4)
 items (const T &t1, const T &t2, const T &t3, const T &t4, const T &t5)
 items (const CONT &c)
 Copy container.
itemsoperator() (const T &t)
 Add element to items list.

Detailed Description

template<typename T = std::string, typename CONT = std::vector<T>>
class pqxx::items< T, CONT >

Container of items with easy contents initialization and string rendering.

Designed as a wrapper around an arbitrary container type, this class lets you easily create a container object and provide its contents in the same line. Regular addition methods such as push_back() will also still work, but you can now write things like

items<int> numbers; numbers(1)(2)(3)(4);

Up to five elements may be specified directly as constructor arguments, e.g.

items<int> numbers(1,2,3,4);

One thing that cannot be done with this simple class is create const objects with nontrivial contents. This is because the function invocation operator (which is being used to add items) modifies the container rather than creating a new one. This was done to keep performance within reasonable bounds.

Warning
This class may see substantial change in its interface before it stabilizes. Do not count on it remaining the way it is.

Constructor & Destructor Documentation

template<typename T = std::string, typename CONT = std::vector<T>>
pqxx::items< T, CONT >::items ( )

Create empty items list.

template<typename T = std::string, typename CONT = std::vector<T>>
pqxx::items< T, CONT >::items ( const T &  t)
explicit

Create items list with one element.

template<typename T = std::string, typename CONT = std::vector<T>>
pqxx::items< T, CONT >::items ( const T &  t1,
const T &  t2 
)
template<typename T = std::string, typename CONT = std::vector<T>>
pqxx::items< T, CONT >::items ( const T &  t1,
const T &  t2,
const T &  t3 
)
template<typename T = std::string, typename CONT = std::vector<T>>
pqxx::items< T, CONT >::items ( const T &  t1,
const T &  t2,
const T &  t3,
const T &  t4 
)
template<typename T = std::string, typename CONT = std::vector<T>>
pqxx::items< T, CONT >::items ( const T &  t1,
const T &  t2,
const T &  t3,
const T &  t4,
const T &  t5 
)
template<typename T = std::string, typename CONT = std::vector<T>>
pqxx::items< T, CONT >::items ( const CONT &  c)

Copy container.

Member Function Documentation

template<typename T = std::string, typename CONT = std::vector<T>>
items& pqxx::items< T, CONT >::operator() ( const T &  t)

Add element to items list.


The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00054.png0000664000175000017500000000224412076703501015057 00000000000000‰PNG  IHDRÆÀhìrPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT23IDATxíÛ²« ›EUþÿ“7³žÑš”­ÜÔiÉ+1Æxˆ’tw\C’¬à’dKa8$ékŒiHÒ_øB#( /êιP¼üCw_OŸ»¿¦1ýe¼£/µ¢M’öðÆÅðB­Ž­îâ[/š‹KÊ£h“¤|5õkÒyOwêÛ¦öꞆ¡$íàBþWkŒmÿOc½j>t07¯&å bñ·¶øûîÙ/]>ìófc#¥×ÌTSjÈm'.ª7þC·$mqàã2a¿ÿ¸ƒ†$}àR I²ŠkH’\C’¬ÐiÄãí8›Àýy†ÆëõghtOðxˆ†g*;¸€\À ®`×°‚kXÁ5¬àVp +¸€\À ®`רEŒ1Þ¢$Ý×$+¸†$Yá ri8$éÇ\ ± Ü®F˜¾wwÎ…9à0Ô¦sž‘¾2Ï•$ý‘Ÿhäèz)¬ŽDÕP”%é¿™2ºrB˨åu7ní´5ÆI:ÂÏ5Á–Ý š_ÎÄ{c½Å›iÃÛZT™ª˜–^05L™`î¤cüjQú¯ Iïq§iHÒÆ5$É ®!IVè4bŒñöœÍ àþ¶0„×s¡ yî-5BÕ]ÆSÑ Ià˜ÆÈ‰‚¶2¾4N‹Iúg#:» f,½ ºrdÝ©1}ðZ£ÿÙÕ(WQ9¢5ùjC£Xý-þaošL•&á}¦Ê§*ÁIÒ—^T»þNþ׸RcØÚG’ª$má³!IVp I²‚kH’:c¼=gó¸?ÏÐx½áñ Îâ ÑðL`×°‚kXÁ5¬àVp +¸€\À ®`×°‚kXÁ5¬à»!„ûC¸;®`×°Â^­Q]ûÔÕQ·ÎõïýæûOa]­Ñ†RŸ‚S¡xÖðÕ‡¦Lª•ò­ó“êÖá¦ê4Žšn™ê¹¯Š­5|©1ö ÷h¹´¼Ì½‹…–Ÿ´j-+iXŽmù¢:¶Öðj6ª¡ù«–{ ¾yÏb5ä·j]i¬ë•Fû•‡4Ò-ÝŒnh”‹¯Ùšï¬ž1×ÛíáÛ‹øÚõ—\îÈòIuërQÕY†ÒüÄ«à6öÆÖO;kùèã{cç¢Ú¾/S­ïšVyÊDßdªœƒÊlT<¾Ì…e¦š»‹€š™êo `›ß= à ¿Ô¶\±¸æ}¹lØÅþ[Ÿ6÷Å5¬àVèÿ†Báîü¿–xšÑ!¿PIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00105.png0000664000175000017500000000222612076703501015054 00000000000000‰PNG  IHDR¬À®ÙxËPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2%IDATxíéÒ« ›C•ïÿÈ× Å-qîª&e»°¶#LþcŒ­@”¤6pYI²Àe%É‚?– ã!Iwø{YIºÉ¹lP‡ëÏËM6ÅEõðœB7\S›á2õîǧ¬L’¸æ‡UÐî8ªÎâVg— åGV&Iu®"»,ïT§Š©l.ßô©¼‡$Õ±•~[Ù©ÌZvÿ/ª³`®Å»¿'›-ÊÚ;¯^ß"].Öì·‘=Øîi’/³Á¼1—²¯—ÁIF¼¨–¤#ž¶·“7ÑyÎüYIºÀ@V’~—•$ \V’,èecŒ± èZ¡%Ù®kȶ%ÙÞµÛ¦d=Øà²¸,€. `ËXಸ,€. `ËXಸ,€. `ËBŒ1¶Q’ÚÀe%É—•$ ŒdCXîÆC’¾ÇF¶ÔûkÙ0Ç®?/7«VŸæó܉áa»$ÝçSÙÅaЕÂîHl ²{IzÆÇ‘Íòà¾fÿ›²ý×®ËN’ô7d ¥¼ZAëñeT_Z³û V•MÛí/–ÁA6ÈB<¼F*˜÷áZ!Iùb¼E%é—•$ lþn%É—•$ \V’,èecŒ± èZ¡%Ù®kȶ%ÙÞµÛ¦d=Øà²¸,€. `ËXಸ,€. `ËXಸ,€. `ËBŒ1¶Q’ÚÀe%É—•$ žËI*©IÒ3úA®Æù)YI:£"ÆŽýy¹É[JÇXŒ÷sPÒÃTŸš§1²ºuàõ2œ9‘æPÐîXÔæëì½<ß3—uèe°ò²k()?ª‘ÝvKç¼zë·íW~Ü׿’ûî±~d×ïÈßçP6üYd‹&ŸÈf˳¶Á²±ªËm'{öýÖìýÈdƒ4\&¿dƒ"5äól²A¡RÖ•ÙàÁ2x3JÒ;XÉŽ›§–+%éSZ¬$ý&.+I¸¬$YÐËÆc#дBK²]×mK²½k;¶MÉz6°Áe,pY \À—°Àe,pY \À—°Àe,pY \À—…Bh@¸,€. `Á]ÙÿôJý4'3ýž,À‹l3Þ É,ݬ½‡7–KÖ?+ž{'Ö\^iR ·Ì0ÖmZìd§IÇêGvY4ÖösçJ£¢gjRµ,+ ÊÈnÛe¯t"[vب2ÅîR ·«zUvü;,#tKvíw [[yƒmüoÈn'¸-»mR›i· ²5»ß`ßËž}ÿ£5»_fWÙ ÛÕl-ƒy´â-kÙ`ó‘óº2œ-ƒ7sªEbþTvÜyˆüHÑ:mð£ÈÚüáÝý»øs\À—°`ø !„6øëÃhO’ýá÷IEND®B`‚libpqxx-3.1.1/doc/html/Reference/namespacemembers_type.html0000664000175000017500000001236412076703502021003 00000000000000 libpqxx: Namespace Members
 
libpqxx-3.1.1/doc/html/Reference/a00102.png0000664000175000017500000000356112076703501015054 00000000000000‰PNG  IHDRzÀ=XXPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2IDATxíív« E·‡µòþ|•(ÚÖ$·™hOëö#›qø ðÒüwšk€+ ñï\G€+p>óWQBó—PŸÎiþ µ>3篢þÁ‘åz<û:n8þÜõ9ÃÁ÷¸ˆúçso86CÀèG6çìr¨rp©ÇÓ·0Í@¥¾:Îýêú=çn7ƒ­éªJã_U-€ °Yþê[õ㾞™*G§¿¹•c.eÅ,3so^s}¹®r{Ûþn83igdkNOuºÊÕ23‹ú5·gƒk¿&¾žÉîyKsµŽ,ß@^göWÞ+,³i'§æœ½çtµâ­3ÓÔã¾èT3°Éj½X¯«‰ÙÛäüUÔ÷#Ë áÝxýÕW}Î+n®ÇÍL›ºÞ4—›g4?w~Η'ä^vvªÍEÔoF¶®¨û_û¯ ž‘U+Û~ÎÅ.A7²\mÖ:ýæ/£þóÌþx¸'4 õéœæ¯°Ì¦sæüUÔŸ°Ú\Bý|˜ÿJó§_€]nàÝX=@·›Ý`õŒæíàýX=@‚Õ„`õ!X=@V‚Õ„`õ!X=@V‚Õ„`õ!X=@V‚Õ„`õ!X=@V‚Õ„`õ!X=@V‚Õ„`õ!X=@V‚Õ|IJ)€““$é|X½$…`õ’‚ÕKRV/I!üõÃΙ$u”›ßFIZ·1r<üØÿ/fý/¨—¤†½/¤~˜3mÜ—“JBÎÍ©i(»ÜRõ›%øá´·ú­ú±†´êï Ušƒš`«øŽFýVÚ¶”tKï6ãX7€ƒüéZ¿]fÖúí×cõß“×ûñV}Y{óœäÿª¸”È¥­÷`«ø–*8xìV‚Õ„ðçÔ|V‚Õ„`õ!X=@—P? ÃpB À.7ðn¬ ‚ÛÍî°z€Fóvð~¬ ‹ÁêB°z€¬ «ÁêB°z€¬ «Áêö¸Ýn·“pFΟ”V‚Õ„`õ!X=@V‚Õ„`õ!X=@V‚Õ„`õ!X=@V‚Õ„ð«#H)¥ßâ–RJ¿ÄF$é|Ôê%é|X½$…`õ’‚ÕKRV/I!ü_õC¶6HÒ?HÒ¿§þð Æö§_ßê%©ç‘A¼Qý !ÿÚ¸/'Õ;NWy·f–˜rs=l$é/¨zåâþ²ÓíjLÎãêï/Pƒö·ùvÛ°´Ô1Mã,@’ŽðŠúgQ«ßŸ$æá¬ï_­ùÍõ ­ìJ:ú˜ú†$६v›=ýú¿¢~üþºÄ^¾Þ꼉©$é¿«þ‹Aìªêõ_Tß¼Ë~*W7ÛŒïB_²þ—ú‡1WøMÖ?µâ¾Pë·+Ô÷µ~Ïy·xIÒAþS­r!§¼lû֕ɼvÍ÷ç·Œ¬ŒõÞcΠvè’ô3/eýKƒhÔWó'IðDÁyö“¤ÿÇ‹çaõ’‚ÕKRª—¤Ïàõ’ôX½$…`õ’‚ÕKRV/I!ŒêSJé„TêSJé„üîs…º&ϳIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00121_source.html0000664000175000017500000002427012076703500016614 00000000000000 libpqxx: compiler-internal-pre.hxx Source File
compiler-internal-pre.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/compiler-internal-pre.hxx
5  *
6  * DESCRIPTION
7  * Compiler deficiency workarounds for compiling libpqxx headers.
8  * To be called at the start of each libpqxx header, in order to
9  * push the client program's settings and apply libpqxx's settings.
10  * Must be balanced by an include of -header-post.hxx at the end
11  * of the header.
12  *
13  * Copyright (c) 2006,2007, Jeroen T. Vermeulen <jtv@xs4all.nl>
14  *
15  * See COPYING for copyright license. If you did not receive a file called
16  * COPYING with this source code, please notify the distributor of this mistake,
17  * or contact the author.
18  *
19  *-------------------------------------------------------------------------
20  */
21 // NO GUARDS HERE! This code should be executed every time!
22 
23 #ifdef _WIN32
24 
25 #ifdef _MSC_VER
26 
27 // Save client program warning state, and set warning level 4.
28 // Setting the warning level explicitly ensures that libpqxx
29 // headers will work with this warning level as well.
30 #pragma warning (push,4)
31 
32 #pragma warning (disable: 4251)
33 #pragma warning (disable: 4258) // Complains that for-scope usage is correct
34 #pragma warning (disable: 4273)
35 #pragma warning (disable: 4275)
36 #pragma warning (disable: 4290)
37 #pragma warning (disable: 4355)
38 #pragma warning (disable: 4511) // Copy constructor could not be generated
39 #pragma warning (disable: 4512) // Assignment operator could not be generated
40 #pragma warning (disable: 4786)
41 #pragma warning (disable: 4800) // Performance warning for boolean conversions
42 #pragma warning (disable: 4996) // Complaint that strncpy() "may" be unsafe
43 
44 #endif // _MSC_VER
45 
46 #endif // _WIN32
47 
libpqxx-3.1.1/doc/html/Reference/a00106.html0000664000175000017500000003626712076703501015251 00000000000000 libpqxx: pqxx::transaction< ISOLATIONLEVEL, READWRITE > Class Template Reference
pqxx::transaction< ISOLATIONLEVEL, READWRITE > Class Template Reference

Standard back-end transaction, templatized on isolation level. More...

#include <transaction.hxx>

Inheritance diagram for pqxx::transaction< ISOLATIONLEVEL, READWRITE >:
pqxx::basic_transaction pqxx::dbtransaction pqxx::transaction_base pqxx::internal::namedclass

Public Types

typedef isolation_traits
< ISOLATIONLEVEL > 
isolation_tag

Public Member Functions

 transaction (connection_base &C, const std::string &TName)
 Create a transaction.
 transaction (connection_base &C)
virtual ~transaction () throw ()

Additional Inherited Members

- Protected Member Functions inherited from pqxx::basic_transaction
 basic_transaction (connection_base &C, const std::string &IsolationLevel, readwrite_policy)
- Static Protected Member Functions inherited from pqxx::dbtransaction
static std::string fullname (const std::string &ttype, const std::string &isolation)
- Protected Attributes inherited from pqxx::transaction_base
internal::reactivation_avoidance_counter m_reactivation_avoidance
 Resources allocated in this transaction that make reactivation impossible.

Detailed Description

template<isolation_level ISOLATIONLEVEL = read_committed, readwrite_policy READWRITE = read_write>
class pqxx::transaction< ISOLATIONLEVEL, READWRITE >

Standard back-end transaction, templatized on isolation level.

This is the type you'll normally want to use to represent a transaction on the database.

While you may choose to create your own transaction object to interface to the database backend, it is recommended that you wrap your transaction code into a transactor code instead and let the transaction be created for you.

See Also
pqxx/transactor.hxx

If you should find that using a transactor makes your code less portable or too complex, go ahead, create your own transaction anyway.

Usage example: double all wages

extern connection C;
work T(C);
try
{
T.exec("UPDATE employees SET wage=wage*2");
T.commit(); // NOTE: do this inside try block
}
catch (const exception &e)
{
cerr << e.what() << endl;
T.abort(); // Usually not needed; same happens when T's life ends.
}

Member Typedef Documentation

template<isolation_level ISOLATIONLEVEL = read_committed, readwrite_policy READWRITE = read_write>
typedef isolation_traits<ISOLATIONLEVEL> pqxx::transaction< ISOLATIONLEVEL, READWRITE >::isolation_tag

Constructor & Destructor Documentation

template<isolation_level ISOLATIONLEVEL = read_committed, readwrite_policy READWRITE = read_write>
pqxx::transaction< ISOLATIONLEVEL, READWRITE >::transaction ( connection_base C,
const std::string &  TName 
)
explicit

Create a transaction.

Parameters
CConnection for this transaction to operate on
TNameOptional name for transaction; must begin with a letter and may contain letters and digits only

References pqxx::transaction_base::Begin().

template<isolation_level ISOLATIONLEVEL = read_committed, readwrite_policy READWRITE = read_write>
pqxx::transaction< ISOLATIONLEVEL, READWRITE >::transaction ( connection_base C)
explicit
template<isolation_level ISOLATIONLEVEL = read_committed, readwrite_policy READWRITE = read_write>
virtual pqxx::transaction< ISOLATIONLEVEL, READWRITE >::~transaction ( ) throw ()
virtual

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00088.js0000664000175000017500000000040412076703502014713 00000000000000var a00088 = [ [ "scoped_noticer", "a00088.html#a296496bb9919c4673236347dcc461dab", null ], [ "~scoped_noticer", "a00088.html#ac4392882401ac69ab46ee9a51e500de4", null ], [ "scoped_noticer", "a00088.html#ab2942e4ae61aa62357e193314e1945a8", null ] ];libpqxx-3.1.1/doc/html/Reference/functions_0x75.html0000664000175000017500000001573612076703502017234 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- u -

libpqxx-3.1.1/doc/html/Reference/functions_func_0x66.html0000664000175000017500000001562712076703502020246 00000000000000 libpqxx: Class Members - Functions
libpqxx-3.1.1/doc/html/Reference/a00009.js0000664000175000017500000000117712076703502014714 00000000000000var a00009 = [ [ "char_type", "a00009.html#a6defd7dc017956dcda572ff9d54b394d", null ], [ "int_type", "a00009.html#a7d45a1d6dc270b8a793a5e3cde0fb2c3", null ], [ "off_type", "a00009.html#a94b75418ccf0801a3f7fd62d3f0897d7", null ], [ "pos_type", "a00009.html#a411cd2fbec4a9f5bfa07030d8a77b482", null ], [ "traits_type", "a00009.html#ac41b5c92c32c7d99a86e887d8fc9f33e", null ], [ "basic_lostream", "a00009.html#a82775c94f45b87a6b9e082900d2d9d2b", null ], [ "basic_lostream", "a00009.html#a60e982e6fba23c8067404af0a4f5d05a", null ], [ "~basic_lostream", "a00009.html#a57d98a1321d8f5d00027810bb811025c", null ] ];libpqxx-3.1.1/doc/html/Reference/a00249.html0000664000175000017500000001403212076703501015243 00000000000000 libpqxx: Member List
pqxx::undefined_table Member List

This is the complete list of members for pqxx::undefined_table, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
syntax_error(const std::string &err)pqxx::syntax_errorexplicit
syntax_error(const std::string &err, const std::string &Q)pqxx::syntax_error
undefined_table(const std::string &err)pqxx::undefined_tableexplicit
undefined_table(const std::string &err, const std::string &Q)pqxx::undefined_table
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00240.html0000664000175000017500000001420612076703501015235 00000000000000 libpqxx: Member List
pqxx::foreign_key_violation Member List

This is the complete list of members for pqxx::foreign_key_violation, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
foreign_key_violation(const std::string &err)pqxx::foreign_key_violationexplicit
foreign_key_violation(const std::string &err, const std::string &Q)pqxx::foreign_key_violation
integrity_constraint_violation(const std::string &err)pqxx::integrity_constraint_violationexplicit
integrity_constraint_violation(const std::string &err, const std::string &Q)pqxx::integrity_constraint_violation
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/closed.png0000664000175000017500000000020412076703500015510 00000000000000‰PNG  IHDR à‘KIDATxíÝm @!†ÑGk™É7À-`&séts¦Àñþòð@åk}ª2€… P%Á_Ëþ¿N² .:0Dk¥‹Â›x" Ö›)¡xÒ5õIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00036.js0000664000175000017500000000014212076703502014703 00000000000000var a00036 = [ [ "disable_noticer", "a00036.html#adc6490b8a280f32d283f6a0a6dd8e2f4", null ] ];libpqxx-3.1.1/doc/html/Reference/tab_s.png0000664000175000017500000000027012076703500015332 00000000000000‰PNG  IHDR$ÇÇ[IDATxíÝ ‚@@Ñ£?Q…¤"š¢%¦I‘—Šf–6[´HÃäQƒ<Þâõþ]ždr Í’s?ˆO=Ñññw'ÌF‡Ž íðö-~rÃ[œèŠ­ì¬mƒÖ¬ƒݯнŠÕF)Yº% §`nÌ,9B ™’©!ÑŒ\ý<Å#üîî•IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00006.png0000664000175000017500000000154212076703501015054 00000000000000‰PNG  IHDRP 9±ÁPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ñIDATxíÛ’ë ›qUþÿ“O_ÐÎeãÔIvåb !½2MÓ”.&IJÛ®$"É”D$™’ˆ$S‘dúH"å*Iêlï¾$cŸJD’Fö]DŠÊuÂçß­QÖ»—fñ©®µ¹ü\Ÿ™Gûø…è!I¯Ø¡Dæh¿®IEÅfó<8vßPQÕ±slŒ´+YcÀw‹oš¸Ö~½áßæÿ;‰\®gˆÌþËÉ[þHÒëö6"ÓÅH»û·ˆÔ›7ê’$=oïÊ#ƒÌzï¸ìå'òeyd§Ö¬³öZc«ñg^kp9¤™EEά¨ÎÊ‘" u¥n€$R"?{¹<˜…ë…%PNtâ$‰ß¶±úá+^<é"§2 ªDq”q´\¬«Ò™a–Œ‘©Aÿ€"Ôµ ™êŸèP£}#Eàz{û.8i îp³ê(ADwD¦E<ê¬cE¦$ HdÊÄ ”.:Ù GŽ-`ŒL‚ý¾'¢‰Ä<¤CIª½;ÙÇTZd±i};>èôß‚z×;K×§8t ¤Ž q”:uvÿv•Ý›¬²ÙvEân{„M·FXg¼ÌfZÖ¨°¹‰*›ßÌß©±ù©:›j–YqèÜë#3çÏSøWøÿÿÑr'ø Ôùù‚ ©¡IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00107.js0000664000175000017500000000520512076703502014707 00000000000000var a00107 = [ [ "isolation_tag", "a00107.html#af5e1900b64239bac292f5505f7799654", null ], [ "~transaction_base", "a00107.html#ad5ddea378795d92908af4b65e59d585a", null ], [ "transaction_base", "a00107.html#a92fc088d2f2c3e1e5992b4e14c703684", null ], [ "abort", "a00107.html#a955f2497216d9eae268ac662b46d5a45", null ], [ "Begin", "a00107.html#a1d2a8554499cbd93ff8c2bf5c15843ff", null ], [ "commit", "a00107.html#ab2cf42c4821aff7ff1cd906af9165725", null ], [ "conn", "a00107.html#aed167261c4d76876241b5f615b9b8c7a", null ], [ "DirectExec", "a00107.html#ac80f81e53c31f3a2052dc24fc6bbb7ee", null ], [ "do_abort", "a00107.html#a8fc9a363bcf7defb3c829a633c04ae6c", null ], [ "do_begin", "a00107.html#aa80a7816f63c425c28cd4037aaa8cf8f", null ], [ "do_commit", "a00107.html#a475695c55439007cd2438fb184ed8be3", null ], [ "do_exec", "a00107.html#a6f587ae3bda7a32c8828984e7c4aa16e", null ], [ "End", "a00107.html#af2ddcd7f1def9dfd3f15c0f3242b9136", null ], [ "esc", "a00199.html#ga98dee516d429520627fd94f5ccb2b023", null ], [ "esc", "a00199.html#ga38cc55d0d7637dd53a6508e2bc4beadb", null ], [ "esc", "a00199.html#ga80bbd3626005768e0d39bdfb6930e244", null ], [ "esc_raw", "a00199.html#ga6048218f7af70cd0423429d54203749c", null ], [ "esc_raw", "a00199.html#ga489c7438da9241486297a451a8579dc1", null ], [ "exec", "a00107.html#aed91d0b8029795b477470e854c907c4b", null ], [ "exec", "a00107.html#a938732e87f924fee764cddd8390de20f", null ], [ "get_variable", "a00107.html#a87f5147f2dc2dfbcc3b5aef4b461be86", null ], [ "parameterized", "a00107.html#a6ec73bd0d2a37553c8518e0ef428dee4", null ], [ "prepared", "a00107.html#a1357ac4f6330284129c91882a169276d", null ], [ "process_notice", "a00107.html#a99f99eb85906a7541119c9098a36d799", null ], [ "process_notice", "a00107.html#aa90bc6e1219ff68ef11e1d04b76c205c", null ], [ "quote", "a00199.html#ga263a180c5d0decf645aca3fc1ed4d6ff", null ], [ "reactivation_avoidance_clear", "a00107.html#a84df458282939ef38cfddfaa07bea1d8", null ], [ "set_variable", "a00107.html#ab7510be596a5a14014064c884a10fd93", null ], [ "pqxx::internal::gate::transaction_subtransaction", "a00107.html#ae689290143788842755389246915b9f2", null ], [ "pqxx::internal::gate::transaction_tablereader", "a00107.html#afbc1622f03aeb05c34ac44f1c5c179dc", null ], [ "pqxx::internal::gate::transaction_tablewriter", "a00107.html#a02ad6878f438fc51b297b32e7512e244", null ], [ "pqxx::internal::gate::transaction_transactionfocus", "a00107.html#acf16920b6582767aae17d6c57770e853", null ], [ "m_reactivation_avoidance", "a00107.html#adc48441869caf6a4b84911cd6984c36a", null ] ];libpqxx-3.1.1/doc/html/Reference/a00036.html0000664000175000017500000001655212076703501015246 00000000000000 libpqxx: pqxx::disable_noticer Class Reference
pqxx::disable_noticer Class Reference

Temporarily disable the notice processor. More...

#include <connection_base.hxx>

Inheritance diagram for pqxx::disable_noticer:
pqxx::scoped_noticer

Public Member Functions

 disable_noticer (connection_base &c)

Additional Inherited Members

- Private Member Functions inherited from pqxx::scoped_noticer
 scoped_noticer (connection_base &c, std::auto_ptr< noticer > t) throw ()
 Start period where different noticer applies to connection.
 ~scoped_noticer ()
 scoped_noticer (connection_base &c, noticer *t) throw ()
 Take ownership of given noticer, and start using it.

Detailed Description

Temporarily disable the notice processor.

Constructor & Destructor Documentation

pqxx::disable_noticer::disable_noticer ( connection_base c)
explicit

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00241.html0000664000175000017500000001415012076703501015234 00000000000000 libpqxx: Member List
pqxx::unique_violation Member List

This is the complete list of members for pqxx::unique_violation, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
integrity_constraint_violation(const std::string &err)pqxx::integrity_constraint_violationexplicit
integrity_constraint_violation(const std::string &err, const std::string &Q)pqxx::integrity_constraint_violation
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
unique_violation(const std::string &err)pqxx::unique_violationexplicit
unique_violation(const std::string &err, const std::string &Q)pqxx::unique_violation
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/hierarchy.html0000664000175000017500000014155112076703502016412 00000000000000 libpqxx: Class Hierarchy
Class Hierarchy
This inheritance list is sorted roughly, but not completely, alphabetically:
[detail level 12345]
oCstd::back_insert_iterator< pqxx::tablewriter >Specialized back_insert_iterator for tablewriter
oCpqxx::basic_fieldstream< CHAR, TRAITS >Input stream that gets its data from a result field
oCpqxx::basic_ilostream< CHAR, TRAITS >Input stream that gets its data from a large object
oCpqxx::basic_lostream< CHAR, TRAITS >Stream that reads and writes a large object
oCpqxx::basic_olostream< CHAR, TRAITS >Output stream that writes data back to a large object
oCstd::char_traits< CHAR >Work around missing std::char_traits
oCstd::char_traits< char >Work around missing std::char_traits<char>
oCstd::char_traits< unsigned char >Work around missing std::char_traits<unsigned char>
oCpqxx::connection_baseConnection_base abstract base class; represents a connection to a database
|\Cpqxx::basic_connection< CONNECTPOLICY >The ultimate template that defines a connection type
oCpqxx::connectionpolicy
|oCpqxx::connect_asyncAsynchronous connection policy; connects "in the background"
|oCpqxx::connect_directConnection policy; creates an immediate connection to a database
|oCpqxx::connect_lazyLazy connection policy; causes connection to be deferred until first use
|\Cpqxx::connect_nullNonfunctional, always-down connection policy for testing/debugging purposes
oCpqxx::cursor_baseCommon definitions for cursor types
|\Cpqxx::internal::sql_cursorCursor with SQL positioning semantics
oCpqxx::prepare::declarationHelper class for declaring parameters to prepared statements
oCpqxx::internal::deref_ptr< T >
oCpqxx::internal::dereference< ITER >Functor: dereference iterator
oCpqxx::internal::Escaper< IT >
oCpqxx::result::fieldReference to a field in a result set
|\Cpqxx::result::const_fielditerator
| \Cpqxx::result::const_reverse_fielditerator
oCpqxx::field_streambuf< CHAR, TRAITS >
oCpqxx::prepare::internal::get_sqltypeUtility functor: get prepared-statement parameter's SQL type string
oCpqxx::icursor_iteratorApproximate istream_iterator for icursorstream
oCpqxx::icursorstreamSimple read-only cursor represented as a stream of results
oCpqxx::prepare::invocationHelper class for passing parameters to, and executing, prepared statements
oCpqxx::isolation_traits< LEVEL >Traits class to describe an isolation level; primarly for libpqxx's own use
oCpqxx::items< T, CONT >Container of items with easy contents initialization and string rendering
oCpqxx::largeobjectIdentity of a large object
|\Cpqxx::largeobjectaccessAccessor for large object's contents
oCpqxx::largeobject_streambuf< CHAR, TRAITS >Streambuf to use large objects in standard I/O streams
oCpqxx::internal::namedclass
|oCpqxx::internal::transactionfocus
||oCpqxx::pipelineProcesses several queries in FIFO manner, optimized for high throughput
||oCpqxx::subtransaction"Transaction" nested within another transaction
||\Cpqxx::tablestreamBase class for streaming data to/from database tables
|\Cpqxx::transaction_base
| oCpqxx::dbtransaction
| \Cpqxx::nontransaction
oCpqxx::noticerBase class for user-definable error/warning message processor
|\Cpqxx::nonnoticerNo-op message noticer; produces no output
oCpqxx::notify_listener
oCstd::numeric_limits< T >Work around lacking "limits" header
oCpqxx::prepare::internal::prepared_def::paramParameter definition
oCpqxx::internal::parameterized_invocation
oCpqxx::internal::PQAlloc< T, DELETER >Reference-counted smart pointer to libpq-allocated object
oCpqxx::internal::PQAlloc< const internal::result_data, internal::freemem_result_data >
|\Cpqxx::resultQuery or command result set
oCpqxx::internal::PQAlloc< const unsigned char >
|\Cpqxx::binarystring
oCpqxx::pqxx_exceptionMixin base class to identify libpqxx-specific exception types
|oCpqxx::argument_errorInvalid argument passed to libpqxx, similar to std::invalid_argument
|oCpqxx::conversion_error
|oCpqxx::failureRun-time failure encountered by libpqxx, similar to std::runtime_error
||oCpqxx::broken_connectionException class for lost or failed backend connection
||oCpqxx::in_doubt_error"Help, I don't know whether transaction was committed successfully!"
||\Cpqxx::sql_errorException class for failed queries
|oCpqxx::internal_errorInternal error in libpqxx library
|oCpqxx::range_errorSomething is out of range, similar to std::out_of_range
|\Cpqxx::usage_errorError in usage of libpqxx library, similar to std::logic_error
oCpqxx::prepare::internal::prepared_defInternal representation of a prepared statement definition
oCpqxx::internal::reactivation_avoidance_counter
oCpqxx::internal::reactivation_avoidance_exemptionScoped exemption to reactivation avoidance
oCpqxx::internal::refcount
oCpqxx::internal::result_dataInformation shared between all copies of a result set
oCpqxx::internal::scoped_array< T >
oCpqxx::scoped_noticerTemporarily set different noticer for connection, then restore old one
|\Cpqxx::disable_noticerTemporarily disable the notice processor
oCpqxx::stateless_cursor< up, op >"Stateless cursor" class: easy API for retrieving parts of result sets
oCpqxx::string_traits< T >Traits class for use in string conversions
oCpqxx::string_traits< char * >String traits for non-const C-style string ("pointer to char")
oCpqxx::string_traits< char[N]>String traits for C-style string constant ("array of char")
oCpqxx::string_traits< const char * >String traits for C-style string ("pointer to const char")
oCpqxx::string_traits< const std::string >
oCpqxx::string_traits< std::string >
oCpqxx::string_traits< std::stringstream >
oCpqxx::thread_safety_modelDescriptor of library's thread-safety model
oCpqxx::transactor< TRANSACTION >
oCpqxx::result::tupleReference to one row in a result
|\Cpqxx::result::const_iteratorIterator for rows (tuples) in a query result set
| \Cpqxx::result::const_reverse_iterator
\Cpqxx::internal::unique< GUEST >Ensure proper opening/closing of GUEST objects related to a "host" object
libpqxx-3.1.1/doc/html/Reference/a00088.html0000664000175000017500000002247612076703501015257 00000000000000 libpqxx: pqxx::scoped_noticer Class Reference

Temporarily set different noticer for connection, then restore old one. More...

#include <connection_base.hxx>

Inheritance diagram for pqxx::scoped_noticer:
pqxx::disable_noticer

Public Member Functions

 scoped_noticer (connection_base &c, std::auto_ptr< noticer > t) throw ()
 Start period where different noticer applies to connection.
 ~scoped_noticer ()

Protected Member Functions

 scoped_noticer (connection_base &c, noticer *t) throw ()
 Take ownership of given noticer, and start using it.

Detailed Description

Temporarily set different noticer for connection, then restore old one.

Set different noticer in given connection for the duration of the scoped_noticer's lifetime. After that, the original noticer is restored.

No effort is made to respect any new noticer that may have been set in the meantime, so don't do that.

Constructor & Destructor Documentation

pqxx::scoped_noticer::scoped_noticer ( connection_base c,
std::auto_ptr< noticer t 
) throw ()

Start period where different noticer applies to connection.

Parameters
cconnection object whose noticer should be temporarily changed
ttemporary noticer object to use; will be destroyed on completion
pqxx::scoped_noticer::~scoped_noticer ( )
pqxx::scoped_noticer::scoped_noticer ( connection_base c,
noticer t 
) throw ()
protected

Take ownership of given noticer, and start using it.

This constructor is not public because its interface does not express the fact that the scoped_noticer takes ownership of the noticer through an auto_ptr.


The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00087.js0000664000175000017500000000142612076703502014717 00000000000000var a00087 = [ [ "difference_type", "a00087.html#a2a9085342769fddc1cc5a8c6287b0892", null ], [ "size_type", "a00087.html#ac5ba5559e184842746b13c9545c0ac73", null ], [ "scoped_array", "a00087.html#a38e241073d5b8b235f1d9d35980a8639", null ], [ "scoped_array", "a00087.html#af0349dcca1c6261e641eebf127324a41", null ], [ "scoped_array", "a00087.html#ab139e833e327beb370470269e09e85a6", null ], [ "~scoped_array", "a00087.html#a92873171917fe692165825e4cc5d0b50", null ], [ "get", "a00087.html#af8afa32de4971796d6d15d73b7590b0a", null ], [ "operator*", "a00087.html#ac3891140f89ff6e3e43a818767431c23", null ], [ "operator=", "a00087.html#af0ac2a40f4e23eb28cde185d629a2678", null ], [ "operator[]", "a00087.html#aada7488a2fb51e6d81cdd86469f43ada", null ] ];libpqxx-3.1.1/doc/html/Reference/functions_func_0x6c.html0000664000175000017500000001367612076703502020325 00000000000000 libpqxx: Class Members - Functions
 

- l -

libpqxx-3.1.1/doc/html/Reference/a00200.js0000664000175000017500000000107512076703502014702 00000000000000var a00200 = [ [ "connect_direct", "a00020.html", null ], [ "connect_lazy", "a00021.html", null ], [ "connect_async", "a00019.html", null ], [ "connect_null", "a00022.html", null ], [ "connectionpolicy", "a00024.html", null ], [ "asyncconnection", "a00200.html#ga710db2d58482a4ea8ebbb822c2b0d417", null ], [ "connection", "a00200.html#ga26edb910e4563d1115e22c627914e98b", null ], [ "lazyconnection", "a00200.html#ga8911912522c75dd0b154fefdde735272", null ], [ "nullconnection", "a00200.html#ga830f18f804ec3e4cc8bab713169fb529", null ] ];libpqxx-3.1.1/doc/html/Reference/a00010.html0000664000175000017500000003612712076703501015236 00000000000000 libpqxx: pqxx::basic_olostream< CHAR, TRAITS > Class Template Reference
pqxx::basic_olostream< CHAR, TRAITS > Class Template Reference

Output stream that writes data back to a large object. More...

#include <largeobject.hxx>

Inherits std::ostream.

Public Types

typedef CHAR char_type
typedef TRAITS traits_type
typedef traits_type::int_type int_type
typedef traits_type::pos_type pos_type
typedef traits_type::off_type off_type

Public Member Functions

 basic_olostream (dbtransaction &T, largeobject O, largeobject::size_type BufSize=512)
 Create a basic_olostream.
 basic_olostream (dbtransaction &T, oid O, largeobject::size_type BufSize=512)
 Create a basic_olostream.
 ~basic_olostream ()

Detailed Description

template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
class pqxx::basic_olostream< CHAR, TRAITS >

Output stream that writes data back to a large object.

Use this class exactly as you would any other ostream to write data to a large object. All formatting and streaming operations of std::ostream are supported. What you'll typically want to use, however, is the olostream typedef (which defines a basic_olostream for char). This is similar to how e.g. std::ofstream is related to std::basic_ofstream.

Currently only works for <char, std::char_traits<char> >.

Member Typedef Documentation

template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef CHAR pqxx::basic_olostream< CHAR, TRAITS >::char_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef traits_type::int_type pqxx::basic_olostream< CHAR, TRAITS >::int_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef traits_type::off_type pqxx::basic_olostream< CHAR, TRAITS >::off_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef traits_type::pos_type pqxx::basic_olostream< CHAR, TRAITS >::pos_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef TRAITS pqxx::basic_olostream< CHAR, TRAITS >::traits_type

Constructor & Destructor Documentation

template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
pqxx::basic_olostream< CHAR, TRAITS >::basic_olostream ( dbtransaction T,
largeobject  O,
largeobject::size_type  BufSize = 512 
)

Create a basic_olostream.

Parameters
Ttransaction in which this stream is to exist
Oa large object to access
BufSizesize of buffer to use internally (optional)
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
pqxx::basic_olostream< CHAR, TRAITS >::basic_olostream ( dbtransaction T,
oid  O,
largeobject::size_type  BufSize = 512 
)

Create a basic_olostream.

Parameters
Ttransaction in which this stream is to exist
Oa large object to access
BufSizesize of buffer to use internally (optional)
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
pqxx::basic_olostream< CHAR, TRAITS >::~basic_olostream ( )

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00313.html0000664000175000017500000000772112076703502015243 00000000000000 libpqxx: Member List
pqxx::prepare::internal::prepared_def::param Member List
libpqxx-3.1.1/doc/html/Reference/a00083.html0000664000175000017500000002662012076703501015245 00000000000000 libpqxx: pqxx::restrict_violation Class Reference
pqxx::restrict_violation Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::restrict_violation:
pqxx::integrity_constraint_violation pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 restrict_violation (const std::string &err)
 restrict_violation (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::integrity_constraint_violation
 integrity_constraint_violation (const std::string &err)
 integrity_constraint_violation (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::restrict_violation::restrict_violation ( const std::string &  err)
explicit
pqxx::restrict_violation::restrict_violation ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00062.html0000664000175000017500000001562012076703501015240 00000000000000 libpqxx: pqxx::nonnoticer Struct Reference

No-op message noticer; produces no output. More...

#include <connection_base.hxx>

Inheritance diagram for pqxx::nonnoticer:
pqxx::noticer

Public Member Functions

 nonnoticer ()
virtual void operator() (const char[]) throw ()
- Public Member Functions inherited from pqxx::noticer
 noticer ()
virtual ~noticer () throw ()

Detailed Description

No-op message noticer; produces no output.

Constructor & Destructor Documentation

pqxx::nonnoticer::nonnoticer ( )

Member Function Documentation

virtual void pqxx::nonnoticer::operator() ( const char  []) throw ()
virtual

Implements pqxx::noticer.


The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00288.html0000664000175000017500000001737712076703501015265 00000000000000 libpqxx: Member List
pqxx::tablestream Member List

This is the complete list of members for pqxx::tablestream, including all inherited members.

base_close()pqxx::tablestreamprotected
classname() const pqxx::internal::namedclass
columnlist(ITER colbegin, ITER colend)pqxx::tablestreamprotectedstatic
complete()=0pqxx::tablestreampure virtual
description() const pqxx::internal::namedclass
is_finished() const pqxx::tablestreamprotected
m_Transpqxx::internal::transactionfocusprotected
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
NullStr() const pqxx::tablestreamprotected
reg_pending_error(const std::string &)pqxx::internal::transactionfocusprotected
register_me()pqxx::internal::transactionfocusprotected
registered() const pqxx::internal::transactionfocusprotected
tablestream(transaction_base &Trans, const std::string &Null=std::string())pqxx::tablestreamexplicit
transactionfocus(transaction_base &t)pqxx::internal::transactionfocusexplicit
unregister_me()pqxx::internal::transactionfocusprotected
~tablestream()=0pqxx::tablestreampure virtual
libpqxx-3.1.1/doc/html/Reference/a00091.html0000664000175000017500000004056312076703501015246 00000000000000 libpqxx: pqxx::stateless_cursor< up, op > Class Template Reference
pqxx::stateless_cursor< up, op > Class Template Reference

"Stateless cursor" class: easy API for retrieving parts of result sets More...

#include <cursor.hxx>

Public Types

typedef result::size_type size_type
typedef result::difference_type difference_type

Public Member Functions

 stateless_cursor (transaction_base &trans, const std::string &query, const std::string &cname, bool hold)
 Create cursor.
 stateless_cursor (transaction_base &trans, const std::string adopted_cursor)
 Adopt existing scrolling SQL cursor.
void close () throw ()
size_type size ()
 Number of rows in cursor's result set.
result retrieve (difference_type begin_pos, difference_type end_pos)
 Retrieve rows from begin_pos (inclusive) to end_pos (exclusive)
const std::string & name () const throw ()

Detailed Description

template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
class pqxx::stateless_cursor< up, op >

"Stateless cursor" class: easy API for retrieving parts of result sets

This is a front-end for SQL cursors, but with a more C++-like API.

Actually, stateless_cursor feels entirely different from SQL cursors. You don't keep track of positions, fetches, and moves; you just say which rows you want. See the retrieve() member function.

Member Typedef Documentation

template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
typedef result::difference_type pqxx::stateless_cursor< up, op >::difference_type
template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
typedef result::size_type pqxx::stateless_cursor< up, op >::size_type

Constructor & Destructor Documentation

template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
pqxx::stateless_cursor< up, op >::stateless_cursor ( transaction_base trans,
const std::string &  query,
const std::string &  cname,
bool  hold 
)

Create cursor.

template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
pqxx::stateless_cursor< up, op >::stateless_cursor ( transaction_base trans,
const std::string  adopted_cursor 
)

Adopt existing scrolling SQL cursor.

References pqxx::cursor_base::backward_all().

Member Function Documentation

template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
void pqxx::stateless_cursor< up, op >::close ( ) throw ()
template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
const std::string& pqxx::stateless_cursor< up, op >::name ( ) const throw ()
template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
result pqxx::stateless_cursor< up, op >::retrieve ( difference_type  begin_pos,
difference_type  end_pos 
)

Retrieve rows from begin_pos (inclusive) to end_pos (exclusive)

Rows are numbered starting from 0 to size()-1.

Parameters
begin_posFirst row to retrieve. May be one row beyond the end of the result set, to avoid errors for empty result sets. Otherwise, must be a valid row number in the result set.
end_posRow up to which to fetch. Rows are returned ordered from begin_pos to end_pos, i.e. in ascending order if begin_pos < end_pos but in descending order if begin_pos > end_pos. The end_pos may be arbitrarily inside or outside the result set; only existing rows are included in the result.

References pqxx::internal::stateless_cursor_retrieve().

template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
size_type pqxx::stateless_cursor< up, op >::size ( )

Number of rows in cursor's result set.

Note
This function is not const; it may need to scroll to find the size of the result set.

References pqxx::internal::obtain_stateless_cursor_size().


The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00172_source.html0000664000175000017500000005153212076703501016624 00000000000000 libpqxx: transactor.hxx Source File
transactor.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/transactor.hxx
5  *
6  * DESCRIPTION
7  * definition of the pqxx::transactor class.
8  * pqxx::transactor is a framework-style wrapper for safe transactions
9  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/transactor instead.
10  *
11  * Copyright (c) 2001-2008, Jeroen T. Vermeulen <jtv@xs4all.nl>
12  *
13  * See COPYING for copyright license. If you did not receive a file called
14  * COPYING with this source code, please notify the distributor of this mistake,
15  * or contact the author.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PQXX_H_TRANSACTOR
20 #define PQXX_H_TRANSACTOR
21 
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
24 
25 #include "pqxx/connection_base"
26 #include "pqxx/transaction"
27 
28 
29 /* Methods tested in eg. self-test program test001 are marked with "//[t1]"
30  */
31 
32 namespace pqxx
33 {
34 
36 
65 template<typename TRANSACTION=transaction<read_committed> >
66  class transactor :
67  public PGSTD::unary_function<TRANSACTION, void>
68 {
69 public:
70  explicit transactor(const PGSTD::string &TName="transactor") : //[t4]
71  m_Name(TName) { }
72 
74 
85  void operator()(TRANSACTION &T); //[t4]
86 
87  // Overridable member functions, called by connection_base::perform() if an
88  // attempt to run transaction fails/succeeds, respectively, or if the
89  // connection is lost at just the wrong moment, goes into an indeterminate
90  // state. Use these to patch up runtime state to match events, if needed, or
91  // to report failure conditions.
92 
94 
102  void on_abort(const char[]) throw () {} //[t13]
103 
105 
109  void on_commit() {} //[t6]
110 
112 
123  void on_doubt() throw () {} //[t13]
124 
125  // TODO: Rename Name()--is there a compatible way?
127  PGSTD::string Name() const { return m_Name; } //[t13]
128 
129 private:
130  PGSTD::string m_Name;
131 };
132 
133 
134 }
135 
136 
137 template<typename TRANSACTOR>
138 inline void pqxx::connection_base::perform(const TRANSACTOR &T,
139  int Attempts)
140 {
141  if (Attempts <= 0) return;
142 
143  bool Done = false;
144 
145  // Make attempts to perform T
146  // TODO: Differentiate between db-related exceptions and other exceptions?
147  do
148  {
149  --Attempts;
150 
151  // Work on a copy of T2 so we can restore the starting situation if need be
152  TRANSACTOR T2(T);
153  try
154  {
155  typename TRANSACTOR::argument_type X(*this, T2.Name());
156  T2(X);
157  X.commit();
158  Done = true;
159  }
160  catch (const in_doubt_error &)
161  {
162  // Not sure whether transaction went through or not. The last thing in
163  // the world that we should do now is retry.
164  T2.on_doubt();
165  throw;
166  }
167  catch (const PGSTD::exception &e)
168  {
169  // Could be any kind of error.
170  T2.on_abort(e.what());
171  if (Attempts <= 0) throw;
172  continue;
173  }
174  catch (...)
175  {
176  // Don't try to forge ahead if we don't even know what happened
177  T2.on_abort("Unknown exception");
178  throw;
179  }
180 
181  T2.on_commit();
182  } while (!Done);
183 }
184 
185 
186 #include "pqxx/compiler-internal-post.hxx"
187 
188 #endif
189 
libpqxx-3.1.1/doc/html/Reference/functions_0x6d.html0000664000175000017500000001532412076703502017303 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- m -

libpqxx-3.1.1/doc/html/Reference/a00055.js0000664000175000017500000000115612076703502014712 00000000000000var a00055 = [ [ "invocation", "a00055.html#a7f15ffe53fbbeeafc0f4bc13c2981646", null ], [ "exec", "a00055.html#af937364fbb9bf4cead8c646220a4507d", null ], [ "exists", "a00055.html#a06644bfe2c67479f5bcae0174cf8ae05", null ], [ "operator()", "a00055.html#a10e6e640885617f52bf43d9e59477424", null ], [ "operator()", "a00055.html#a38c217d6210b26006af97dc23a4c014e", null ], [ "operator()", "a00055.html#a7d1afea38e1c822c02560331b82d8dfe", null ], [ "operator()", "a00055.html#afe3111c309189f822255744df4fa8bff", null ], [ "operator()", "a00055.html#ac0b4fbda217ac490ed72c923d02cdef3", null ] ];libpqxx-3.1.1/doc/html/Reference/a00104.js0000664000175000017500000000076412076703502014711 00000000000000var a00104 = [ [ "description", "a00104.html#adddd2eaf6dbc5feca29ce00f91b4d648", null ], [ "have_strerror_r", "a00104.html#ac9720d695f70efb40cb3c5967208f2ef", null ], [ "safe_kerberos", "a00104.html#abe3528c0d2e42d6e98d80f0b45d79002", null ], [ "safe_libpq", "a00104.html#a3fe3fa8e530712e5228d2b5379871540", null ], [ "safe_query_cancel", "a00104.html#ace2546ec39e30e8793cc4a296216f259", null ], [ "safe_result_copy", "a00104.html#adb5c47ea21c35c73432de0d0b7e80bdb", null ] ];libpqxx-3.1.1/doc/html/Reference/a00045.html0000664000175000017500000005453012076703501015244 00000000000000 libpqxx: pqxx::icursor_iterator Class Reference
pqxx::icursor_iterator Class Reference

Approximate istream_iterator for icursorstream. More...

#include <cursor.hxx>

Public Types

typedef icursorstream istream_type
typedef istream_type::size_type size_type
typedef
istream_type::difference_type 
difference_type

Public Member Functions

 icursor_iterator () throw ()
 icursor_iterator (istream_type &) throw ()
 icursor_iterator (const icursor_iterator &) throw ()
 ~icursor_iterator () throw ()
const resultoperator* () const
const resultoperator-> () const
icursor_iteratoroperator++ ()
icursor_iterator operator++ (int)
icursor_iteratoroperator+= (difference_type)
icursor_iteratoroperator= (const icursor_iterator &) throw ()
bool operator== (const icursor_iterator &rhs) const
bool operator!= (const icursor_iterator &rhs) const throw ()
bool operator< (const icursor_iterator &rhs) const
bool operator> (const icursor_iterator &rhs) const
bool operator<= (const icursor_iterator &rhs) const
bool operator>= (const icursor_iterator &rhs) const

Friends

class internal::gate::icursor_iterator_icursorstream

Detailed Description

Approximate istream_iterator for icursorstream.

Intended as an implementation of an input_iterator (as defined by the C++ Standard Library), this class supports only two basic operations: reading the current element, and moving forward. In addition to the minimal guarantees for istream_iterators, this class supports multiple successive reads of the same position (the current result set is cached in the iterator) even after copying and even after new data have been read from the stream. This appears to be a requirement for input_iterators. Comparisons are also supported in the general case.

The iterator does not care about its own position, however. Moving an iterator forward moves the underlying stream forward and reads the data from the new stream position, regardless of the iterator's old position in the stream.

The stream's stride defines the granularity for all iterator movement or access operations, i.e. "ici += 1" advances the stream by one stride's worth of tuples, and "*ici++" reads one stride's worth of tuples from the stream.

Warning
Do not read from the underlying stream or its cursor, move its read position, or change its stride, between the time the first icursor_iterator on it is created and the time its last icursor_iterator is destroyed.
Manipulating these iterators within the context of a single cursor stream is not thread-safe. Creating a new iterator, copying one, or destroying one affects the stream as a whole.

Member Typedef Documentation

Constructor & Destructor Documentation

pqxx::icursor_iterator::icursor_iterator ( ) throw ()
pqxx::icursor_iterator::icursor_iterator ( istream_type s) throw ()
explicit
pqxx::icursor_iterator::icursor_iterator ( const icursor_iterator rhs) throw ()
pqxx::icursor_iterator::~icursor_iterator ( ) throw ()

Member Function Documentation

bool pqxx::icursor_iterator::operator!= ( const icursor_iterator rhs) const throw ()
const result& pqxx::icursor_iterator::operator* ( ) const
icursor_iterator & pqxx::icursor_iterator::operator++ ( )
icursor_iterator pqxx::icursor_iterator::operator++ ( int  )
icursor_iterator & pqxx::icursor_iterator::operator+= ( difference_type  n)
const result* pqxx::icursor_iterator::operator-> ( ) const
bool pqxx::icursor_iterator::operator< ( const icursor_iterator rhs) const
bool pqxx::icursor_iterator::operator<= ( const icursor_iterator rhs) const
icursor_iterator & pqxx::icursor_iterator::operator= ( const icursor_iterator rhs) throw ()
bool pqxx::icursor_iterator::operator== ( const icursor_iterator rhs) const

References pqxx::result::empty().

bool pqxx::icursor_iterator::operator> ( const icursor_iterator rhs) const
bool pqxx::icursor_iterator::operator>= ( const icursor_iterator rhs) const

Friends And Related Function Documentation

friend class internal::gate::icursor_iterator_icursorstream
friend

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00232.html0000664000175000017500000000727312076703501015244 00000000000000 libpqxx: Member List
pqxx::argument_error Member List

This is the complete list of members for pqxx::argument_error, including all inherited members.

argument_error(const std::string &)pqxx::argument_errorexplicit
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
libpqxx-3.1.1/doc/html/Reference/a00125_source.html0000664000175000017500000001405612076703500016621 00000000000000 libpqxx: config-internal-compiler.h Source File
config-internal-compiler.h
1 /* Automatically generated from config.h: internal/compiler config. */
2 #define HAVE_SYS_TYPES_H 1
3 #define HAVE_UNISTD_H 1
4 #define PQXX_HAVE_COUNT_IF 1
5 #define PQXX_HAVE_C_NAN 1
6 #define PQXX_HAVE_DISTANCE 1
7 #define PQXX_HAVE_GCC_VISIBILITY 1
8 #define PQXX_HAVE_IMBUE 1
9 #define PQXX_HAVE_LOCALE 1
10 #define PQXX_HAVE_NAN 1
11 #define PQXX_HAVE_POLL 1
12 #define PQXX_HAVE_QUIET_NAN 1
13 #define PQXX_HAVE_SLEEP 1
14 #define PQXX_HAVE_STRERROR_R 1
15 #define PQXX_HAVE_STRERROR_R_GNU 1
16 #define PQXX_HAVE_STRING_CLEAR 1
17 #define PQXX_HAVE_STRNLEN 1
18 #define PQXX_HAVE_SYS_SELECT_H 1
libpqxx-3.1.1/doc/html/Reference/a00036.png0000664000175000017500000000107412076703501015057 00000000000000‰PNG  IHDR‚Pâ+]ëPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ËIDATxíÑšë „‡±ïÿÌ'ÑDÑàÆt»‡^ЕjðϾ½EJ)ùIzZ Âß I¶íÏŽþ#IÚV„’·ïºÐÁ禚šgT—ª³ý+ôþ‡{C(bå §COãfI=¤£° 5Uo¥Â˜½O©|ûÌ—Váú"~D(kaÿjFȵ¦å€û&ÀÇ!ôUOûXBfœIòIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00054.html0000664000175000017500000002472312076703501015245 00000000000000 libpqxx: pqxx::invalid_sql_statement_name Class Reference
pqxx::invalid_sql_statement_name Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::invalid_sql_statement_name:
pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 invalid_sql_statement_name (const std::string &err)
 invalid_sql_statement_name (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::invalid_sql_statement_name::invalid_sql_statement_name ( const std::string &  err)
explicit
pqxx::invalid_sql_statement_name::invalid_sql_statement_name ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00242.html0000664000175000017500000001414212076703501015236 00000000000000 libpqxx: Member List
pqxx::check_violation Member List

This is the complete list of members for pqxx::check_violation, including all inherited members.

check_violation(const std::string &err)pqxx::check_violationexplicit
check_violation(const std::string &err, const std::string &Q)pqxx::check_violation
failure(const std::string &)pqxx::failureexplicit
integrity_constraint_violation(const std::string &err)pqxx::integrity_constraint_violationexplicit
integrity_constraint_violation(const std::string &err, const std::string &Q)pqxx::integrity_constraint_violation
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00004.png0000664000175000017500000000106612076703501015053 00000000000000‰PNG  IHDRƒP é6ÕPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÅIDATxíkŽÃ „ǃÔûyË36”’>v‰V®˜@À&ŽþE!lIn•38Ã&I$;ý-IŽ:„’¬î×6Pž‹åx_ûj»ìÇéNÍ y‹dMáÐfËê”fZuBê¦æ†8ô6õzf¹.ä¹2ßù<Àû2Cüõ yîM†1Ø‹euôczÇ’A½ðG9ù|ù€«Ý"&q˜$~õý°.J.·¹Ù»xRÉ‹e’œieÿ1CÊ;œ$iõë $¹Ðy’Ü#gp†Ž!„ö >Ó 6ë ·Û~ˆ 0ܶC\Áë¨æ Îà `å Îà `å Îà `å ÿŠADd³ °UÎà Âð¶—b¸Ò(Vkè­bWû\Ññ>ue\L²1]³ÿ1aòNú è–ÕlCz¨¹oT-"ÕU;–Sš8ègéPŒ›YÓSu£0z‰!}SŸ3d“‘A¹B£9ƒ9Û£Ìâ`Wmvž`Ðçs²¾I‹ï½‹I]ÔmÄ+9Ø'o« õ6m]´K>ÂJû›_•wt`¢”‹]iÀ ·âpjg8'ÿßt† 2ˆˆìÕPêô‘ôjIEND®B`‚libpqxx-3.1.1/doc/html/Reference/sync_off.png0000664000175000017500000000152512076703500016054 00000000000000‰PNG  IHDRàw=øIDATxíÝKhTWÀñÿä1I&3™8M¦Iš™†I3Ú©b$cÌ I1V1±-(Tö±±Ð.* t!‚K[¥Ä¥ˆ„¨´f£`l(øl©"Y”¤6ÆgÌTú}·sgîܹ ±d{8?æÌ¹÷;çÜuíÚ`:!±F¬¢BäŠ?ŰÄm'yÊÅ>ÑlU¯½üý‰è_‹?€Œê ]€Y(ŠNñ±8fý1°Öqún-eâ¨øtºmâÈ Ó0}b›ù%·©µ×Œ®=Ÿ0´³?Š1sŸ‹0€¯8À‘;_ ‹W|%\ Zð— >舽ln¨p©.aÇ{ )t;Ú b nŸš¯›65°¢¡2çÅÔ?Žž>Oдàuönm¤¢Ì`×­Z¬WjC~>‘Ö¾0+á {{©fÝ×Mæ·æÅ•ìÙ¼˜` Ý›%uA6´½ÅÆö¨Á,]k¢ÄW¼™u±›]‹ˆ7§¯iòh€ ¶¶¬ÏÖu1 ló —Ҷ̺–:ÞÍ\ÄcãÏxøhR²Êè‡Qt$¿ß§¨ ª fdºü<4BÿÙ[•f¸d7=.Mé9/—éªÃëù/ÿO Üaàò}€,‘j?Ÿõ.5Úšm?œÿŸ®ŽXÿ2¬#¸d píæ(£?cÛú¼!½›a1¥Þ—ŽòØ©ܾ7dÔK:‚ùÒ‰ì)Ê3‚Ü™àÌà]€,±H€µ+køöäu<|`·LhC7¹ÔeÍ Ÿ×Ÿ˜tÜ‹ óH$^2%l.êaeÐäýE”ÌÉ|ÅÜìî‰Ýsä }¸ýDû^hzé~ðR›¦Ã¡¿]|#ü¯@×—Ö‡[k¹–<|š(Ç*€Ý¹dÇtMé:Ýñø«Ø,êÅû¢]”' øXÓ_nò¡Æ|Øý /c§fžâOIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00043.png0000664000175000017500000000303012076703501015047 00000000000000‰PNG  IHDRÌø—ù{PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2§IDATxíéÒ« ›C•ïÿÈ×]PÜbÌš”m”MÚñ/1ÆX DIª—‘$‹¸Œ$YĘLèIú{2’ô!÷d‚Bÿ¸ö<_$S8©îî§WßýOmº¿¡GwÝß%e’t‘›2Ã\úÇ*hsìU'ï=+Nþ‚”I™$]ãndÖ›ÎWª§Š¡l,_õ)xJÒ5~+ÓýÖ2CÙÿ–Ù®£“ê$Kñ&@¿“I6E)W/–ÓßÉžy;2;éjšÄÃl6&޹ìõevðE8©–¤=ž}`~)ÓoòãoÆß‘‘¤þƒŒ$Æe$É".#IiebŒ±~@P 5É4ME65É´.õØT%ãÙ À&.`—°ˆËXÄe,â2q‹¸ €E\À".`—°ˆËXÄeîcŒµ@”¤:pI²ˆËH’E~$Â|Õ’ô}~#“OߺLß}{ž/–i‡þn<ÏÁèn–¸IÒç|Kfžc§#…Í1±*H®%é_‹L:Ç48ÙÂ*ÙýM™v5•e† IzÈ2Ù”Ój-Ç—£òÒžÙ&€¢Ì”,.³l–„¨Óœ Æ<±THÒc¾¸ÌÞþŠHÒ1.#I9UÉHÒÿÇe$É".#IiebŒ±~@P 5É4ME65É´.õØT%ãÙ À&.`—°ˆËXÄe,â2q‹¸ €E\À".`—°ˆËXÄeîcŒµ@”¤:pI²ˆËH’E~($éU\&›aè'Ùžç‹tâKm*¦VíßpJ $é3ËôÓ棠ý#gwÕ3²IúŒç‘™¦;N9ŸÒp5ÔdÖ7WâË2ãË_Ët?ë2éºJ[”"3ÿ[’IvE!œìs‘ÙÉfS@޳Ù|Z%AIºÏ7–Ù¥ïÈû_™Ëôÿaú•¤=<2’d—‘$‹¸Œ$Y¤•‰1ÆJø @-Ô$Ó4ÙÔ$ÓºÔcS•Œg3›¸ €E\À".`—°ˆËXÄe,â2q‹¸ €E\À".`—¸GŒ1ÖQ’êÀe$É".#I¹* W«úr…$mYµ=½Tµ÷°û‘Ùó™Kƒœ½ÏD&(ômÚó|‘ôë_FWæÓÐvèÚWNwËC§fc«yÜa~б.}™ñ‚¹Ñòô´xî³È û¶ *éMR¶­(LgÕ*é¶}Ó{ç*w™u‹éœ.Óõ˜)E™íÈiY2tV½'“5_Íâc™î'e¬_mYf æT=´‘–ázÖIó«2Û©m"#)äÌ]eŽƒz,S\f%™doì%€½=s ³yh¾dÆÐ}$³—ÍŠn•Ír±½l–.³iÞCfZ¯ï\f•Íú ®Š Ëì Œ;}%é«<‘ÙD"ÙÔÉC’nð ÷£Èlžù_ã’ÈHÒ_Çe$É".#IiebŒ±~@P 5É4ME65É´.õØT%ãÙ À&.`—°ˆËXÄe,â2q‹¸ €E\À".`—°ˆËXÄeîBµ@¨—°ˆËXä‘L›>Vì xþ ¥Evuy†Odnö¼Ó¼¤pÌ¡L[Ù×v |ºXÆïòútÆKÆKÿì'²o«»«éã1—Ã%™áý˜ ÇÂr?÷˜ ÓG¥ó.Èì\M7Ç‹î$2둲}€ÙDÒÏa½$³so@€Œ¯Êt¿S™¬Ñ&jù‚{M&x72Û)–ÙöÁ™â2{"“ì€m @‰dÏ’ìÒ0{ð4ð‹2{Ù, ÑœÍV™hcŒ 5²lÖ?x/dœ.³Ï¾)z<øX”xG&{ƒý–ß|–lpøé¸ÌK‘9á q9‘øK¸ €E\À"ÝW)„êànz£’ŸIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00228.html0000664000175000017500000001162012076703501015240 00000000000000 libpqxx: Member List
pqxx::sql_error Member List

This is the complete list of members for pqxx::sql_error, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/ftv2mo.png0000664000175000017500000000062312076703502015463 00000000000000‰PNG  IHDRÚ}\ˆZIDATxí1Kû@ÆiƒØB…Ò¡(h¬"EÄI'ÁoàªèÚ©ßÀáâä 8ùçR-‚â B«TPˆï]z¥B’3 _Þã’»ç}ŸË]VÇ÷}€ÌÈdIæ®i쟯JØ–b¸šÍÃõ+º™|KÂ…°,[Pï\ʘMÆ¢#€ä…F`JݤìÛk³úA±àþè?ØY4ck6"¹Z)ê¸0SHM¨@ï㋺WÖmo¼4èHJ¨Àÿö+…QobŒút ¤ú’*Ð~êè8_+3Y-ñðÜå½÷ ˜PwA¶+^ý}ºì£+xìhÏ•MAE]€TD~EÞߴ^R)`ÖAùŸÏ9©pÔq-Û¾õÛ3tÝÊÆ›ˆÃTÐHÈ)€ ½Š’ICªxëd#1ôú§é€ m@Vüý?Zæßgo_½3-³\IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00306.html0000664000175000017500000001475212076703501015246 00000000000000 libpqxx: Member List
libpqxx-3.1.1/doc/html/Reference/a00261.html0000664000175000017500000003151112076703501015236 00000000000000 libpqxx: Member List
pqxx::largeobjectaccess Member List

This is the complete list of members for pqxx::largeobjectaccess, including all inherited members.

cread(char Buf[], size_type Len)pqxx::largeobjectaccess
cseek(off_type dest, seekdir dir)pqxx::largeobjectaccess
ctell() const pqxx::largeobjectaccess
cwrite(const char Buf[], size_type Len)pqxx::largeobjectaccess
id() const pqxx::largeobjectprivate
largeobject()pqxx::largeobjectprivate
largeobject(dbtransaction &T)pqxx::largeobjectexplicitprivate
largeobject(oid O)pqxx::largeobjectexplicitprivate
largeobject(dbtransaction &T, const std::string &File)pqxx::largeobjectprivate
largeobject(const largeobjectaccess &O)pqxx::largeobjectprivate
largeobjectaccess(dbtransaction &T, openmode mode=std::ios::in|std::ios::out)pqxx::largeobjectaccessexplicit
largeobjectaccess(dbtransaction &T, oid O, openmode mode=std::ios::in|std::ios::out)pqxx::largeobjectaccess
largeobjectaccess(dbtransaction &T, largeobject O, openmode mode=std::ios::in|std::ios::out)pqxx::largeobjectaccess
largeobjectaccess(dbtransaction &T, const std::string &File, openmode mode=std::ios::in|std::ios::out)pqxx::largeobjectaccess
off_type typedefpqxx::largeobjectaccess
openmode typedefpqxx::largeobjectaccess
operator!=(const largeobject &other) const pqxx::largeobjectprivate
operator<(const largeobject &other) const pqxx::largeobjectprivate
operator<=(const largeobject &other) const pqxx::largeobjectprivate
operator==(const largeobject &other) const pqxx::largeobjectprivate
operator>(const largeobject &other) const pqxx::largeobjectprivate
operator>=(const largeobject &other) const pqxx::largeobjectprivate
pos_type typedefpqxx::largeobjectaccess
process_notice(const std::string &)pqxx::largeobjectaccess
pqxx::largeobject::RawConnection(const dbtransaction &T)pqxx::largeobjectprivatestatic
read(char Buf[], size_type Len)pqxx::largeobjectaccess
remove(dbtransaction &T) const pqxx::largeobjectprivate
seek(size_type dest, seekdir dir)pqxx::largeobjectaccess
seekdir typedefpqxx::largeobjectaccess
size_type typedefpqxx::largeobjectaccess
tell() const pqxx::largeobjectaccess
to_file(const std::string &File) const pqxx::largeobjectaccess
pqxx::largeobject::to_file(dbtransaction &T, const std::string &File) const pqxx::largeobjectprivate
write(const char Buf[], size_type Len)pqxx::largeobjectaccess
write(const std::string &Buf)pqxx::largeobjectaccess
~largeobjectaccess()pqxx::largeobjectaccess
libpqxx-3.1.1/doc/html/Reference/a00024.js0000664000175000017500000000145512076703502014710 00000000000000var a00024 = [ [ "handle", "a00024.html#a15bb552a890c0fb28fab2413200dee18", null ], [ "connectionpolicy", "a00024.html#ab46be4bfe19a8a022f441d120b6b2f09", null ], [ "~connectionpolicy", "a00024.html#a69870c553a2ea10b2f1fbd6073c2fb25", null ], [ "do_completeconnect", "a00024.html#a0bbbedd08b7f579e5a2577e97b7e09b7", null ], [ "do_disconnect", "a00024.html#ae74d43f05d575eb142e18ed0939de151", null ], [ "do_dropconnect", "a00024.html#a3358c5c2ab741a6fd798db538516a349", null ], [ "do_startconnect", "a00024.html#ab7c76ae54326197bcbe6d35b5bbb246f", null ], [ "is_ready", "a00024.html#ae6c506b9822a94dffd7e58a917d5509e", null ], [ "normalconnect", "a00024.html#a5b4be97db7a8739e9f4fc7e1b7ab587c", null ], [ "options", "a00024.html#ae3164a06f63e76709e17065bea2bf938", null ] ];libpqxx-3.1.1/doc/html/Reference/a00018.js0000664000175000017500000000026412076703502014710 00000000000000var a00018 = [ [ "check_violation", "a00018.html#a2d18d99434781303ae1099876049d623", null ], [ "check_violation", "a00018.html#a33fa66dcc36972c8afa2d17987fb391d", null ] ];libpqxx-3.1.1/doc/html/Reference/a00019.html0000664000175000017500000003400412076703501015237 00000000000000 libpqxx: pqxx::connect_async Class Reference
pqxx::connect_async Class Reference

Asynchronous connection policy; connects "in the background". More...

#include <connection.hxx>

Inheritance diagram for pqxx::connect_async:
pqxx::connectionpolicy

Public Member Functions

 connect_async (const std::string &opts)
virtual handle do_startconnect (handle)
virtual handle do_completeconnect (handle)
virtual handle do_dropconnect (handle) throw ()
virtual bool is_ready (handle) const throw ()
- Public Member Functions inherited from pqxx::connectionpolicy
 connectionpolicy (const std::string &opts)
virtual ~connectionpolicy () throw ()
const std::string & options () const throw ()
virtual handle do_disconnect (handle orig) throw ()

Additional Inherited Members

- Public Types inherited from pqxx::connectionpolicy
typedef internal::pq::PGconnhandle
- Protected Member Functions inherited from pqxx::connectionpolicy
handle normalconnect (handle)

Detailed Description

Asynchronous connection policy; connects "in the background".

Connection is initiated immediately, but completion is deferred until the connection is actually needed.

This may help performance by allowing the client to do useful work while waiting for an answer from the server.

Constructor & Destructor Documentation

pqxx::connect_async::connect_async ( const std::string &  opts)
explicit

Member Function Documentation

pqxx::connectionpolicy::handle pqxx::connect_async::do_completeconnect ( handle  orig)
virtual
pqxx::connectionpolicy::handle pqxx::connect_async::do_dropconnect ( handle  orig) throw ()
virtual

Reimplemented from pqxx::connectionpolicy.

pqxx::connectionpolicy::handle pqxx::connect_async::do_startconnect ( handle  orig)
virtual

Reimplemented from pqxx::connectionpolicy.

bool pqxx::connect_async::is_ready ( handle  h) const throw ()
virtual

Reimplemented from pqxx::connectionpolicy.


The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00025.png0000664000175000017500000000210412076703501015050 00000000000000‰PNG  IHDRèˆÚƒWPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÓIDATxíí–« E7‡Yóþ|«V ‚3N?æ:!]œ–B lâ_rÎy‘%É¿T’<)@%É“þ;hšÛú'Ù?Õ$=£KÖL½ÅbÞÒ”µc·9Ç*™©»&óiêÌÃÅÀ†X’Öë@—MÎ4JÚ·u^I¥)ißÚ™ëE´Ú¤ j5_RµÂéú(IÒ“ú]ÐéÓ¤n º˜ýÐ*ëˆV%è8¢•$=«·ÜÑ~1ê\Ë©{Á;zPum`ê3Ø"oRàTÝnW’®¡•¤ŸhPIº²T’<)@%É“n 9ç<€~]Ÿ#hÐÏÏAHG½qŽA: hT]_ PO PO PO PO PO PO PO PO PO PO PO P€w)¥”F À¿À“À“Þzó{Ƶ±©*ã½·xé;úÑÎ/Z[ÐC¤ƒÞ,f“é¼×Ž]eö0½§Ö©»&ób´Î/“źØÌ½yºxY|ß§Öu×~3 p¨[ö¬ë’(m'Q‰}³? l3jß»h—ÛFŽuæ(ö›¬ýVA¬0Qï£4©Û£Ø!U7c? Ð׋@§O“ºß€ëzvñÕÆ¶¤ôüç½ ÇW— S Ç©ÛKân½Ôj·u®e´½ªÝÑ÷U]›ú ¶È£ºêÚÔmO¬©º¶>o~–íØQ€CKÝG^\Ò@ç2óýûà ED<)@<)@FÐ( ƒŽzãƒtP€Añð¤ˆ(€'ED<)" àIQOŠˆxRDÀ“"¢žð¤ˆ(€'ED<)" àIÿ%¢9ç<‚È’ä_*Iž ’äIOƒ¦¹IÒ—:c#I}¥dÜ{ËÂ}¿Ñ?Z?\@ý~z;³yz:¼µc™Ï4™©»&ób´Î/“ÅÚØXO›ÖÅæã©x-fKϬ]?]}ÝG+Ð-V'J*mWRiJÚ7û“$ÛLî-ËökO&@ÍŠm³ÃmtÑý&‹‘™/›®}¦¨A»&Vg@•TZeßýèôiR÷ÐbÝó´û·™ßGj‡Ë`ÛêéÚäÐNÆ5g|´IÝêôw±èÖ·*7ºm3åÔžP·u®e´wû Åÿ.u½£'Aª®]¶>ƒ-òŨ®º6uwïÁ53ïßæTÛª»+ζêÚ’¾=·ØÑ}ê¾äå.IÔïÎ5ÃÆI’¾ÖHRWãET’<+@%É“T’<éšsÎèëÚ]59¶¬^IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00097.js0000664000175000017500000000071512076703502014720 00000000000000var a00097 = [ [ "from_string", "a00097.html#a6465318808c87143b12749de6049f615", null ], [ "has_null", "a00097.html#a0c8b270690a4e950acfd0670c8705cb4", null ], [ "is_null", "a00097.html#a042390d6d2b08a908b78bc7741e8dc55", null ], [ "name", "a00097.html#a2b582fcdd58e83012f111d2c6daa4bb6", null ], [ "null", "a00097.html#ade264b724da3d0a7e05fe78cb3e4220f", null ], [ "to_string", "a00097.html#a766e009cf12622f50242fe6a6577280f", null ] ];libpqxx-3.1.1/doc/html/Reference/a00273.html0000664000175000017500000006442412076703501015252 00000000000000 libpqxx: Member List
pqxx::result::const_reverse_iterator Member List

This is the complete list of members for pqxx::result::const_reverse_iterator, including all inherited members.

at(size_type) const pqxx::result::tupleprivate
at(int i) const pqxx::result::tupleprivate
at(const char[]) const pqxx::result::tupleprivate
at(const std::string &s) const pqxx::result::tupleprivate
back() const pqxx::result::tupleprivate
base() const pqxx::result::const_reverse_iterator
begin() const pqxx::result::tupleprivate
column_number(const std::string &ColName) const pqxx::result::tupleprivate
column_number(const char[]) const pqxx::result::tupleprivate
column_table(size_type ColNum) const pqxx::result::tupleprivate
column_table(int ColNum) const pqxx::result::tupleprivate
column_table(const std::string &ColName) const pqxx::result::tupleprivate
column_type(size_type ColNum) const pqxx::result::tupleprivate
column_type(int ColNum) const pqxx::result::tupleprivate
column_type(const std::string &ColName) const pqxx::result::tupleprivate
column_type(const char ColName[]) const pqxx::result::tupleprivate
const_iterator()pqxx::result::const_iteratorprivate
const_iterator(const tuple &t)pqxx::result::const_iteratorprivate
pqxx::result::tuple::const_iterator typedefpqxx::result::tupleprivate
const_reverse_iterator(const const_reverse_iterator &rhs)pqxx::result::const_reverse_iterator
const_reverse_iterator(const const_iterator &rhs)pqxx::result::const_reverse_iteratorexplicit
pqxx::result::const_iterator::const_reverse_iterator typedefpqxx::result::tupleprivate
difference_type typedefpqxx::result::const_reverse_iterator
empty() const pqxx::result::tupleprivate
end() const pqxx::result::tupleprivate
front() const pqxx::result::tupleprivate
iterator typedefpqxx::result::tupleprivate
iterator_type typedefpqxx::result::const_reverse_iterator
m_Beginpqxx::result::tupleprivate
m_Endpqxx::result::tupleprivate
m_Homepqxx::result::tupleprivate
m_Indexpqxx::result::tupleprivate
num() const pqxx::result::tupleprivate
operator!=(const const_reverse_iterator &rhs) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator!=(const const_iterator &i) const pqxx::result::const_iteratorprivate
pqxx::result::tuple::operator!=(const tuple &rhs) const pqxx::result::tupleprivate
operator*() const pqxx::result::const_iteratorprivate
operator+(difference_type i) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator+(difference_type) const pqxx::result::const_iteratorprivate
operator++()pqxx::result::const_reverse_iterator
operator++(int)pqxx::result::const_reverse_iterator
operator+=(difference_type i)pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator+=(difference_type i)pqxx::result::const_iteratorprivate
operator-(difference_type i)pqxx::result::const_reverse_iterator
operator-(const const_reverse_iterator &rhs) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator-(difference_type) const pqxx::result::const_iteratorprivate
pqxx::result::const_iterator::operator-(const_iterator) const pqxx::result::const_iteratorprivate
operator--()pqxx::result::const_reverse_iterator
operator--(int)pqxx::result::const_reverse_iterator
operator-=(difference_type i)pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator-=(difference_type i)pqxx::result::const_iteratorprivate
operator->() const pqxx::result::const_iteratorprivate
operator<(const const_reverse_iterator &rhs) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator<(const const_iterator &i) const pqxx::result::const_iteratorprivate
operator<=(const const_reverse_iterator &rhs) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator<=(const const_iterator &i) const pqxx::result::const_iteratorprivate
operator=(const const_reverse_iterator &r)pqxx::result::const_reverse_iterator
operator==(const const_reverse_iterator &rhs) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator==(const const_iterator &i) const pqxx::result::const_iteratorprivate
pqxx::result::tuple::operator==(const tuple &) const pqxx::result::tupleprivate
operator>(const const_reverse_iterator &rhs) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator>(const const_iterator &i) const pqxx::result::const_iteratorprivate
operator>=(const const_reverse_iterator &rhs) const pqxx::result::const_reverse_iterator
pqxx::result::const_iterator::operator>=(const const_iterator &i) const pqxx::result::const_iteratorprivate
operator[](size_type i) const pqxx::result::tupleprivate
operator[](int i) const pqxx::result::tupleprivate
operator[](const char f[]) const pqxx::result::tupleprivate
operator[](const std::string &s) const pqxx::result::tupleprivate
pointer typedefpqxx::result::const_reverse_iterator
rbegin() const pqxx::result::tupleprivate
reference typedefpqxx::result::const_reverse_iterator
rend() const pqxx::result::tupleprivate
reverse_iterator typedefpqxx::result::tupleprivate
rownumber() const pqxx::result::tupleprivate
size() const pqxx::result::tupleprivate
size_type typedefpqxx::result::const_iteratorprivate
slice(size_type Begin, size_type End) const pqxx::result::tupleprivate
super typedefpqxx::result::const_reverse_iterator
swap(tuple &)pqxx::result::tupleprivate
table_column(size_type ColNum) const pqxx::result::tupleprivate
table_column(int ColNum) const pqxx::result::tupleprivate
table_column(const std::string &ColName) const pqxx::result::tupleprivate
tuple(const result *r, result::size_type i)pqxx::result::tupleprivate
~tuple()pqxx::result::tupleprivate
libpqxx-3.1.1/doc/html/Reference/a00026.html0000664000175000017500000014362212076703501015244 00000000000000 libpqxx: pqxx::result::const_iterator Class Reference
pqxx::result::const_iterator Class Reference

Iterator for rows (tuples) in a query result set. More...

#include <result.hxx>

Inheritance diagram for pqxx::result::const_iterator:
pqxx::result::tuple pqxx::result::const_reverse_iterator

Public Types

typedef const tuplepointer
typedef tuple reference
typedef result::size_type size_type
typedef result::difference_type difference_type
- Public Types inherited from pqxx::result::tuple
typedef unsigned int size_type
typedef signed int difference_type
typedef const_fielditerator const_iterator
typedef const_iterator iterator
typedef field reference
typedef const_fielditerator pointer
typedef const_reverse_fielditerator const_reverse_iterator
typedef const_reverse_iterator reverse_iterator

Public Member Functions

 const_iterator () throw ()
 const_iterator (const tuple &t) throw ()
Dereferencing operators
pointer operator-> () const
reference operator* () const
Manipulations
const_iterator operator++ (int)
const_iteratoroperator++ ()
const_iterator operator-- (int)
const_iteratoroperator-- ()
const_iteratoroperator+= (difference_type i)
const_iteratoroperator-= (difference_type i)
Comparisons
bool operator== (const const_iterator &i) const
bool operator!= (const const_iterator &i) const
bool operator< (const const_iterator &i) const
bool operator<= (const const_iterator &i) const
bool operator> (const const_iterator &i) const
bool operator>= (const const_iterator &i) const
- Public Member Functions inherited from pqxx::result::tuple
 tuple (const result *r, result::size_type i) throw ()
 ~tuple () throw ()
const_iterator begin () const throw ()
const_iterator end () const throw ()
size_type size () const throw ()
void swap (tuple &) throw ()
result::size_type rownumber () const throw ()
result::size_type num () const
tuple slice (size_type Begin, size_type End) const
bool empty () const throw ()
bool operator== (const tuple &) const throw ()
bool operator!= (const tuple &rhs) const throw ()
reference front () const throw ()
reference back () const throw ()
const_reverse_fielditerator rbegin () const
const_reverse_fielditerator rend () const
reference operator[] (size_type i) const throw ()
reference operator[] (int i) const throw ()
reference operator[] (const char f[]) const
reference operator[] (const std::string &s) const
reference at (size_type) const throw (range_error)
reference at (int i) const throw (range_error)
reference at (const char[]) const
reference at (const std::string &s) const
size_type column_number (const std::string &ColName) const
 Number of given column (throws exception if it doesn't exist)
size_type column_number (const char[]) const
 Number of given column (throws exception if it doesn't exist)
oid column_type (size_type ColNum) const
 Type of given column.
oid column_type (int ColNum) const
 Type of given column.
oid column_type (const std::string &ColName) const
 Type of given column.
oid column_type (const char ColName[]) const
 Type of given column.
oid column_table (size_type ColNum) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
oid column_table (int ColNum) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
oid column_table (const std::string &ColName) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
size_type table_column (size_type ColNum) const
 What column number in its table did this result column come from?
size_type table_column (int ColNum) const
 What column number in its table did this result column come from?
size_type table_column (const std::string &ColName) const
 What column number in its table did this result column come from?

Friends

class pqxx::result

Arithmetic operators

const_iterator operator+ (difference_type, const_iterator)
const_iterator operator+ (difference_type) const
const_iterator operator- (difference_type) const
difference_type operator- (const_iterator) const

Additional Inherited Members

- Protected Attributes inherited from pqxx::result::tuple
const resultm_Home
result::size_type m_Index
size_type m_Begin
size_type m_End

Detailed Description

Iterator for rows (tuples) in a query result set.

A result, once obtained, cannot be modified. Therefore there is no plain iterator type for result. However its const_iterator type can be used to inspect its tuples without changing them.

Member Typedef Documentation

Constructor & Destructor Documentation

Member Function Documentation

bool pqxx::result::const_iterator::operator!= ( const const_iterator i) const
reference pqxx::result::const_iterator::operator* ( ) const
result::const_iterator pqxx::result::const_iterator::operator+ ( difference_type  o) const
pqxx::result::const_iterator pqxx::result::const_iterator::operator++ ( int  )
const_iterator& pqxx::result::const_iterator::operator++ ( )
const_iterator& pqxx::result::const_iterator::operator+= ( difference_type  i)
result::const_iterator pqxx::result::const_iterator::operator- ( difference_type  o) const
result::const_iterator::difference_type pqxx::result::const_iterator::operator- ( const_iterator  i) const
pqxx::result::const_iterator pqxx::result::const_iterator::operator-- ( int  )
const_iterator& pqxx::result::const_iterator::operator-- ( )
const_iterator& pqxx::result::const_iterator::operator-= ( difference_type  i)
pointer pqxx::result::const_iterator::operator-> ( ) const

The iterator "points to" its own tuple, which is also itself. This allows a result to be addressed as a two-dimensional container without going through the intermediate step of dereferencing the iterator. I hope this works out to be similar to C pointer/array semantics in useful cases.

IIRC Alex Stepanov, the inventor of the STL, once remarked that having this as standard behaviour for pointers would be useful in some algorithms. So even if this makes me look foolish, I would seem to be in distinguished company.

bool pqxx::result::const_iterator::operator< ( const const_iterator i) const
bool pqxx::result::const_iterator::operator<= ( const const_iterator i) const
bool pqxx::result::const_iterator::operator== ( const const_iterator i) const
bool pqxx::result::const_iterator::operator> ( const const_iterator i) const
bool pqxx::result::const_iterator::operator>= ( const const_iterator i) const

Friends And Related Function Documentation

const_iterator operator+ ( difference_type  o,
result::const_iterator  i 
)
friend
friend class pqxx::result
friend

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00070.html0000664000175000017500000002200112076703501015226 00000000000000 libpqxx: pqxx::internal::parameterized_invocation Class Reference
pqxx::internal::parameterized_invocation Class Reference

#include <transaction_base.hxx>

Public Member Functions

 parameterized_invocation (connection_base &, const std::string &query)
parameterized_invocationoperator() ()
template<typename T >
parameterized_invocationoperator() (const T &v)
template<typename T >
parameterized_invocationoperator() (const T &v, bool nonnull)
result exec ()

Constructor & Destructor Documentation

pqxx::internal::parameterized_invocation::parameterized_invocation ( connection_base c,
const std::string &  query 
)

Member Function Documentation

pqxx::result pqxx::internal::parameterized_invocation::exec ( )
parameterized_invocation& pqxx::internal::parameterized_invocation::operator() ( )
template<typename T >
parameterized_invocation& pqxx::internal::parameterized_invocation::operator() ( const T &  v)
template<typename T >
parameterized_invocation& pqxx::internal::parameterized_invocation::operator() ( const T &  v,
bool  nonnull 
)

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00103.html0000664000175000017500000010315312076703501015233 00000000000000 libpqxx: pqxx::tablewriter Class Reference
pqxx::tablewriter Class Reference

Efficiently write data directly to a database table. More...

#include <tablewriter.hxx>

Inheritance diagram for pqxx::tablewriter:
pqxx::tablestream pqxx::internal::transactionfocus pqxx::internal::namedclass

Public Types

typedef unsigned size_type

Public Member Functions

 tablewriter (transaction_base &, const std::string &WName, const std::string &Null=std::string())
template<typename ITER >
 tablewriter (transaction_base &, const std::string &WName, ITER begincolumns, ITER endcolumns)
 Write only the given sequence of columns.
template<typename ITER >
 tablewriter (transaction_base &T, const std::string &WName, ITER begincolumns, ITER endcolumns, const std::string &Null)
 Write only the given sequence of columns, with customized "null" string.
 ~tablewriter () throw ()
template<typename IT >
void insert (IT Begin, IT End)
template<typename TUPLE >
void insert (const TUPLE &)
template<typename IT >
void push_back (IT Begin, IT End)
template<typename TUPLE >
void push_back (const TUPLE &)
void reserve (size_type)
template<typename TUPLE >
tablewriteroperator<< (const TUPLE &)
tablewriteroperator<< (tablereader &)
 Copy table from one database to another.
template<typename IT >
std::string generate (IT Begin, IT End) const
 Translate tuple of data to a string in DBMS-specific format.
template<typename TUPLE >
std::string generate (const TUPLE &) const
virtual void complete ()
 Finish stream action, check for errors, and detach from transaction.
void write_raw_line (const std::string &)
 Write line of raw data (e.g. obtained from tablereader.get_raw_line).
- Public Member Functions inherited from pqxx::tablestream
 tablestream (transaction_base &Trans, const std::string &Null=std::string())
virtual ~tablestream ()=0 throw ()
- Public Member Functions inherited from pqxx::internal::transactionfocus
 transactionfocus (transaction_base &t)
- Public Member Functions inherited from pqxx::internal::namedclass
 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Additional Inherited Members

- Protected Member Functions inherited from pqxx::tablestream
const std::string & NullStr () const
bool is_finished () const throw ()
void base_close ()
- Static Protected Member Functions inherited from pqxx::tablestream
template<typename ITER >
static std::string columnlist (ITER colbegin, ITER colend)
 Construct a comma-separated column list from given sequence.
- Protected Attributes inherited from pqxx::internal::transactionfocus
transaction_basem_Trans

Detailed Description

Efficiently write data directly to a database table.

A tablewriter provides a Spartan but efficient way of writing data tuples into a table. It provides a plethora of STL-like insertion methods: it has insert() methods, push_back(), as well as an overloaded insertion operator (<<), and it supports inserters created by std::back_inserter(). All of these are templatized so you can use any container type or iterator range to feed tuples into the table.

Note that in each case, a container or range represents the fields of a single tuple–not a collection of tuples.

Member Typedef Documentation

typedef unsigned pqxx::tablewriter::size_type

Constructor & Destructor Documentation

pqxx::tablewriter::tablewriter ( transaction_base T,
const std::string &  WName,
const std::string &  Null = std::string() 
)
template<typename ITER >
pqxx::tablewriter::tablewriter ( transaction_base T,
const std::string &  WName,
ITER  begincolumns,
ITER  endcolumns 
)

Write only the given sequence of columns.

Since
PostgreSQL backend 7.3.

This constructor takes a sequence of names of columns to write to. Only those columns will be written, and they will be taken from your input data in that order.

References pqxx::tablestream::columnlist().

template<typename ITER >
pqxx::tablewriter::tablewriter ( transaction_base T,
const std::string &  WName,
ITER  begincolumns,
ITER  endcolumns,
const std::string &  Null 
)

Write only the given sequence of columns, with customized "null" string.

Since
PostgreSQL backend 7.3.

This constructor takes a sequence of names of columns to write to. Only those columns will be written, and they will be taken from your input data in that order.

Parameters
TThe transaction that this tablewriter will operate on.
WNameA name for this table writer, to help with debugging.
begincolumnsBeginning of a sequence of names of columns to write.
endcolumnsEnd of a sequence of names of columns to write.
NullThe string that is used in your input data to denote null.

References pqxx::tablestream::columnlist().

pqxx::tablewriter::~tablewriter ( ) throw ()

Member Function Documentation

void pqxx::tablewriter::complete ( )
virtual

Finish stream action, check for errors, and detach from transaction.

It is recommended that you call this function before the tablestream's destructor is run. This function will check any final errors which may not become apparent until the transaction is committed otherwise.

As an added benefit, this will free up the transaction while the tablestream object itself still exists.

Implements pqxx::tablestream.

template<typename IT >
std::string pqxx::tablewriter::generate ( IT  Begin,
IT  End 
) const

Translate tuple of data to a string in DBMS-specific format.

Warning
This is definitely not portable between databases.

References pqxx::tablestream::NullStr(), and pqxx::separated_list().

Referenced by generate(), and insert().

template<typename TUPLE >
std::string pqxx::tablewriter::generate ( const TUPLE &  T) const

References generate().

template<typename IT >
void pqxx::tablewriter::insert ( IT  Begin,
IT  End 
)

References generate(), and write_raw_line().

Referenced by insert(), operator<<(), and push_back().

template<typename TUPLE >
void pqxx::tablewriter::insert ( const TUPLE &  T)

References insert().

template<typename TUPLE >
tablewriter & pqxx::tablewriter::operator<< ( const TUPLE &  T)

References insert().

pqxx::tablewriter & pqxx::tablewriter::operator<< ( pqxx::tablereader R)

Copy table from one database to another.

References pqxx::tablereader::get_raw_line().

template<typename IT >
void pqxx::tablewriter::push_back ( IT  Begin,
IT  End 
)

References insert().

template<typename TUPLE >
void pqxx::tablewriter::push_back ( const TUPLE &  T)

References insert().

void pqxx::tablewriter::reserve ( size_type  )
void pqxx::tablewriter::write_raw_line ( const std::string &  Line)

Write line of raw data (e.g. obtained from tablereader.get_raw_line).

Referenced by insert().


The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00063.html0000664000175000017500000006366312076703501015253 00000000000000 libpqxx: pqxx::nontransaction Class Reference
pqxx::nontransaction Class Reference

#include <nontransaction.hxx>

Inheritance diagram for pqxx::nontransaction:
pqxx::transaction_base pqxx::internal::namedclass

Public Member Functions

 nontransaction (connection_base &C, const std::string &Name=std::string())
 Constructor.
virtual ~nontransaction ()
- Public Member Functions inherited from pqxx::transaction_base
virtual ~transaction_base ()=0
void commit ()
 Commit the transaction.
void abort ()
 Abort the transaction.
std::string esc (const char str[]) const
 Escape string for use as SQL string literal in this transaction.
std::string esc (const char str[], size_t maxlen) const
 Escape string for use as SQL string literal in this transaction.
std::string esc (const std::string &str) const
 Escape string for use as SQL string literal in this transaction.
std::string esc_raw (const unsigned char str[], size_t len) const
 Escape binary data for use as SQL string literal in this transaction.
std::string esc_raw (const std::string &) const
 Escape binary data for use as SQL string literal in this transaction.
template<typename T >
std::string quote (const T &t) const
 Represent object as SQL string, including quoting & escaping.
result exec (const std::string &Query, const std::string &Desc=std::string())
 Execute query.
result exec (const std::stringstream &Query, const std::string &Desc=std::string())
internal::parameterized_invocation parameterized (const std::string &query)
 Parameterize a statement.
connection_baseconn () const
 Connection this transaction is running in.
void set_variable (const std::string &Var, const std::string &Val)
 Set session variable in this connection.
std::string get_variable (const std::string &)
 Get currently applicable value of variable.
prepare::invocation prepared (const std::string &statement=std::string())
 Execute prepared statement.
void process_notice (const char Msg[]) const
 Have connection process warning message.
void process_notice (const std::string &Msg) const
 Have connection process warning message.
- Public Member Functions inherited from pqxx::internal::namedclass
 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Additional Inherited Members

- Public Types inherited from pqxx::transaction_base
typedef isolation_traits
< read_committed
isolation_tag
 If nothing else is known, our isolation level is at least read_committed.
- Protected Member Functions inherited from pqxx::transaction_base
 transaction_base (connection_base &c, bool direct=true)
 Create a transaction (to be called by implementation classes only)
void Begin ()
 Begin transaction (to be called by implementing class)
void End () throw ()
 End transaction. To be called by implementing class' destructor.
virtual void do_begin ()=0
 To be implemented by derived implementation class: start transaction.
virtual result do_exec (const char Query[])=0
 To be implemented by derived implementation class: perform query.
virtual void do_commit ()=0
 To be implemented by derived implementation class: commit transaction.
virtual void do_abort ()=0
 To be implemented by derived implementation class: abort transaction.
result DirectExec (const char C[], int Retries=0)
 Execute query on connection directly.
void reactivation_avoidance_clear () throw ()
 Forget about any reactivation-blocking resources we tried to allocate.
- Protected Attributes inherited from pqxx::transaction_base
internal::reactivation_avoidance_counter m_reactivation_avoidance
 Resources allocated in this transaction that make reactivation impossible.

Constructor & Destructor Documentation

pqxx::nontransaction::nontransaction ( connection_base C,
const std::string &  Name = std::string() 
)
explicit

Constructor.

Create a "dummy" transaction.

Parameters
CConnection that this "transaction" will operate on.
NameOptional name for the transaction, beginning with a letter and containing only letters and digits.
pqxx::nontransaction::~nontransaction ( )
virtual

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00084.png0000664000175000017500000000200212076703501015052 00000000000000‰PNG  IHDRáPu=XPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2‘IDATxíÛrã D­üÿ7¯Iˆ›³’•ÚZÆâ8º ¦éá•eY³,ËI2’+,I‘±Â’+,I‘±Â’™³ §Á•$5ä—éù—¯ª·ßǤÔF’†t±ü8òåióÊ%é>×¢}ÛÃ'ÞòÅów¿¹«ðÕh$iÈ[9»–Iú%î)üHÿšÿâ¢vÍúâÛ‘›-Ÿ’ݳž¥ÂÛƒÜýxºÑïóêMNî{5šuê<î±ùžý+ËåÈÊ‘« ŸŸ6/ _Òž‘æþW£í^gùQ+o¶Á˧JªZ«pjqµ;¼,ÁE‡$•-§úJ4ûs%­³µ¹ïp% ÝbW îËâ~/ÚBëÂÃm^«~ñJš"²ŸÃgî§Ԟ×¢iæî©;õÕçÝ$ ¦NRÙ”t´ßŒ6'ô=… ùŽ­¼ï¨V‹¢,ï_uÊ5yì:ªÕ;ÑÔó÷[­IlþxûâVŠ©÷Íc…ïG»ÞŒî§–Šáöì.šÁþ=åá¦÷Åhšzûºîmz+ M%Øö¥‡ïD;ðp¹³Ž.gëâ+…ÛUŽþùU²«Ñô'D}x^8‡/'áv•~'Úñ9œ…­îâ)6A],†æ_kGïác#•9Ü¿8þÕUº>xNG³åºZX~]íûâãmäñÆ:Ÿ„zêFæ¾ÚïF+©lU•ný'Ifò„XáµÊ JÉ?ÏÇßâ¸ÒË KÒg–$#IÁ°Â’+,I‘±Â’+,I‘y(¼,Ëb–eYbðQ|€ Xa€À|}Yb€¸Xa€À<¶Äa±ÂÀ̈ ` À|ØÃÀ̇= ` À|ØÃÀ̇= ` À|ØÃÀ̇= ` À|ØÃÀ̇= ` À|ØÃÀ̇= ` À|ØÃÀÌÇçy8¥”LJ)…`Bb…"c…"c…"c…"c…Ë\DL†¶ÂsñXÓ÷¢¿ùb°Xs*^m<»‡Ì@(ž2mmRÑö÷$ŽV\"¦‡+Ý WïE­0ÀDœRøù×Ui+ ðÿS)\•âÚÃùÎ LDyÎ íl»9Ý ÌÀcM»°µÂ‡][ñ³×Cf Í‘ ðÁXa€ÈXa€ÈDTÀXa€OÀ DÆ DÆ Dæ¡pJ)™”RŠÉæ_ "ódIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00300.html0000664000175000017500000000732012076703501015231 00000000000000 libpqxx: Member List
pqxx::internal::Escaper< IT > Member List

This is the complete list of members for pqxx::internal::Escaper< IT >, including all inherited members.

Escaper(const std::string &null)pqxx::internal::Escaper< IT >explicit
operator()(IT i) const pqxx::internal::Escaper< IT >
libpqxx-3.1.1/doc/html/Reference/a00050.js0000664000175000017500000000032212076703502014677 00000000000000var a00050 = [ [ "integrity_constraint_violation", "a00050.html#a9fa871a08c23b2722a42fa545cecd2ab", null ], [ "integrity_constraint_violation", "a00050.html#a505ae8d71add1a4c19e69f5cf96cea9d", null ] ];libpqxx-3.1.1/doc/html/Reference/a00284.html0000664000175000017500000001117512076703501015247 00000000000000 libpqxx: Member List
pqxx::string_traits< const std::string > Member List
libpqxx-3.1.1/doc/html/Reference/functions_func_0x77.html0000664000175000017500000001323512076703502020241 00000000000000 libpqxx: Class Members - Functions
 

- w -

libpqxx-3.1.1/doc/html/Reference/functions_0x69.html0000664000175000017500000003100512076703502017222 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- i -

libpqxx-3.1.1/doc/html/Reference/a00210.html0000664000175000017500000001410012076703501015223 00000000000000 libpqxx: Member List
pqxx::connect_direct Member List

This is the complete list of members for pqxx::connect_direct, including all inherited members.

connect_direct(const std::string &opts)pqxx::connect_directexplicit
connectionpolicy(const std::string &opts)pqxx::connectionpolicyexplicit
do_completeconnect(handle orig)pqxx::connectionpolicyvirtual
do_disconnect(handle orig)pqxx::connectionpolicyvirtual
do_dropconnect(handle orig)pqxx::connectionpolicyvirtual
do_startconnect(handle)pqxx::connect_directvirtual
handle typedefpqxx::connectionpolicy
is_ready(handle) const pqxx::connectionpolicyvirtual
normalconnect(handle)pqxx::connectionpolicyprotected
options() const pqxx::connectionpolicy
~connectionpolicy()pqxx::connectionpolicyvirtual
libpqxx-3.1.1/doc/html/Reference/a00011.png0000664000175000017500000000374612076703501015060 00000000000000‰PNG  IHDR øÁäC$PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2uIDATxíë’³*EÛª¼ÿ#墙d’Ì$ßÙ–[.6˦û/ÔkÙ®­ù?m׺òår» Ã0Îe>0†ÐÊ…ÅZYi¼î#©µÓWvéöyû<ééë-4~…|ÞÅ-Ðî˜'#|ò:s†}t“i]U~–J^cYäþs™È]¹;÷çGõ„lÜÆ­ÅÚ½Ùoã³å ©Œoí\¨ó”­÷¨¯É*e“ååÚú,n_7Ñú{{ÛÌ8n¶oãKG3´Û¸þ½¿µÿ2Ån¶þɲ™ýOíg{õ˜m·Ý¾•Û¸1løuÞüp¼„?÷ŒNc+6·a r½4Ö®! ŽÝÄ:r„2Ù¿û³’9"Úÿ| ý6Xûí°mª›ìG¸‡ùvbÒî)5+=Xk†}$…öEO­ÃšÎvÇcÀbOoÇ2¶{`?•ÆD×8·GûÁ]÷l0¸wuøé8lIa”S -i§ClYc;“Ý–Mj–z`?…Æ#î5DñÝô ʥĎ&×£æÊ³JË=Vüaü[¥aŒ%9rÆ^Ö kµ¬4 £–™FËví±äÿÙx],Ó˜u¹‡iœ”a‡i2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$ÓxG˲,Öv±H’U.Ó0 IŠd¦!I‘~F’¤›”-¯ß>‰$ݯ÷¤!I‘>‡FR*‹ÍÏVéHk+¿Ùj£õþv7Z'h}»ÝñçÁ’ô¨žH£zxÙ’‚{7Ùl”Ôï¹8Ù¾¡¤~?ÍgžéÇ]ìÏñõæv7 'iöŸM#;ö°ËæìwѨöuðZs“Ï9îòä(ßÓ8 –¤gè5qãE¯Ðø>nÌ4>(n\É)-´¶“R;ç“2¤›9§Ì¾q°ßœV%ésô4J¤|ž HR(ûÆkhHÒ§Ë4LC’"™†iHR¤LcY–ŪÀè`™À¬ËÅ8LठÃ8L Y˜@$Ó0 €H¦a‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘LÃ4"™Æ;ÒX–e±¶‹E’¬r™†iHR$Ó0 IŠôG4R¹·š$Ý >F’^¢Ï¢!I¯Ô+h$¥²òül•q7kÿn•Ê£´‹ÕaÈP¬b1ÙIÒóôõÏ—()ºwUF[µ½î¹8ÙIÒõß8®{F¯¯™{ƒ3“¤çè}hä04Ûù·hL.þÓ.OŽò©4†øDÑ nDŒ¾‰äWrJš-§ôpXsÆé¤ éfÎ)ŸtRÎUIzw™†iHR¤WФϔi˜†$E2 Ó¤H™Æ²,‹U/€7ÐÀ2 €Y—‹q˜ÀI†q˜@ ³0 €H¦a‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘LÃ4"™†iD2w¤‘RJÖv‘¬ê¦aLÃ4"½†F4ç—ß¹2àöµÝe ê÷h\Õ3h<¨ÒÈÃʸ5Cï•aM½·¿,ªíñÛµkÐíÊ‹òîluœ|{ß?°ÛÜ¥ŸÒ¨?®¬ƒÄén5Ó=~n³ún@d5Ù’è÷`pŸ~ìǯïÏñõäïçÞp.NøŽ¯ç9#B÷éµ4ª¯·Sp+iÀ~ޝ‡¾·¢19jkZìM4ŽGëÊë·ñ!DDQô¶¸1ì39Wi|7~Ý7®ä”}U=Þï')Ê)§,ÐRCŸ{˜ètR†t3ç”ß?)OÍô¯? ±F¿ÙIÞBö'Ðøe¦É4L R¦‘RJÖ[¥ý €e³.ã0 €“2 ã0 €@fa‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘LÃ4"™†iD2 ÓˆdïHcY–åïuY–eù{±H’U.Ó0 IŠd¦!I‘~B#IÒA¹/ê–¤³¾3^_¦|ÕÆVé#j³^½Ñmúô›ÍÐ?uHÒ¤¿¢!IWµOV¨L•ÚØ÷z¶Ùk£E@é[ùæ^9­¡þ‚Í¢ib~´jÏ^ì¿t¶‹Ñöm]§1Úl‹:Ðèk½•F£,VIÇ{¿´^) wl5Ù*©ßƒ]ã6ýæ€FßÔ“h ?cðã'»q¾s1¶Íé¸O{›§?6À¹—Æ0÷7†Dq£}úqmÕý·gy\D@c:-¦=¾†6»g#ïtðOg³vÄ4ŽŒ¿¤qØÝµ×÷ùF¼Ó“[<‡FàC܈£h’4Þ1³oâÆ|4¾Ë)c%¢1Ž»)n\É)‡3p0m'¥v6«φœÒÓÍœSNŽ»Ÿðv2†Ñè6 æf|8V=n´~IýžNÊ×éG’þq™†iHR¤FC’þ÷2 Ó¤H¦a’)ÓX–e±êõ”ú»Øm…`ÙIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00085.html0000664000175000017500000002473512076703501015254 00000000000000 libpqxx: pqxx::internal::result_data Struct Reference
pqxx::internal::result_data Struct Reference

Information shared between all copies of a result set. More...

#include <result.hxx>

Public Member Functions

 result_data ()
 result_data (pqxx::internal::pq::PGresult *, int protocol, const std::string &, int encoding_code)
 ~result_data ()

Public Attributes

pqxx::internal::pq::PGresultdata
 Underlying libpq-managed result set.
int protocol
 Frontend/backend protocol version.
std::string query
 Query string that yielded this result.
int encoding_code

Detailed Description

Information shared between all copies of a result set.

Constructor & Destructor Documentation

pqxx::internal::result_data::result_data ( )
pqxx::internal::result_data::result_data ( pqxx::internal::pq::PGresult d,
int  protocol,
const std::string &  q,
int  encoding_code 
)
pqxx::internal::result_data::~result_data ( )

Member Data Documentation

pqxx::internal::pq::PGresult* pqxx::internal::result_data::data

Underlying libpq-managed result set.

Warning
This member is duplicated in the result object as a performance shortcut.
int pqxx::internal::result_data::encoding_code
int pqxx::internal::result_data::protocol

Frontend/backend protocol version.

std::string pqxx::internal::result_data::query

Query string that yielded this result.


The documentation for this struct was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00046.js0000664000175000017500000000160112076703502014705 00000000000000var a00046 = [ [ "difference_type", "a00046.html#a79c9e623be28567215d88087cd7e80d0", null ], [ "size_type", "a00046.html#a6f29a9a658eeb39c09075bfc655c5d90", null ], [ "icursorstream", "a00046.html#a9d23e2f3cdac465efb354e0ab689304c", null ], [ "icursorstream", "a00046.html#a80455b4571fe3508710f5df2d656b0c1", null ], [ "get", "a00046.html#a0602dd0f6ed2641bbb98ad584bcf60e7", null ], [ "ignore", "a00046.html#a777b5c8fe3f9e0160cea11ba00be5a27", null ], [ "operator bool", "a00046.html#a462bf00fed476b503116f1c769deeb2f", null ], [ "operator>>", "a00046.html#a7ac105c3e882661d8f1220ccf9164c27", null ], [ "set_stride", "a00046.html#a255914b05d1f935922338eeebcb10144", null ], [ "stride", "a00046.html#a89f9c7dc295e4befa9bdbd2bfedbe800", null ], [ "internal::gate::icursorstream_icursor_iterator", "a00046.html#a81bc68e9ddb56368929d58e0820e72f0", null ] ];libpqxx-3.1.1/doc/html/Reference/a00299.html0000664000175000017500000001151612076703501015254 00000000000000 libpqxx: Member List
pqxx::internal::result_data Member List
libpqxx-3.1.1/doc/html/Reference/a00112.png0000664000175000017500000000247312076703501015056 00000000000000‰PNG  IHDR—øÖã„ÄPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÊIDATxíír« —e&ïÿÈ×h4h49iMËž ‹ÛÃGÿRk­BUíŽôR“^ªq~Å«ŒIõßòR}ÆžW±Œ_ùRhF{Ñ|}Ÿr}Î}®é‹ky|kêÔUÚõš†G°øŽš›h¬ª›GÑ65uj›öãµýnÎ#ÍsÃTw«ß|³£¬¶é^×ßÖkª;Ñëq¡^47!ºW?„íK^ÍÚÛ÷Ï›ïÂóãÅþz#^nï›çñv^–ºwÖñÉMó¢Yõˆxÿ½Æ½½wý²—ê ¾ç¥úÛ¤—jœôR3xÕZkœÅ C:õº\úëÔkÐêR¬W¯<ï^qÒ NzÄI/€8é'½â¤@œôˆ“^qÒ NzÄù^µÖÚ!TÕîH/Õ8é¥çT¯R–Ò˜T¿È™^k“ô*·ˆ ùR¸”ñí–/!›¸¾Ü£©ú‚÷¼–é®fZÒ̦¢)«x3^ítmÈV+·'úë^Ãrí{M ª¾îµš½m¶xO_‰Õ·ö×ã¾ßõšOÁ‡×ñà<6»Ï·ãqoPñö:žr;©>'½Tãü‰ÿÛª'‘^ªq:öªµÖþ8‹ @‡têu¹ô)Ö©× Õ¥X¯^yÞ!½â¤@œôˆ“^qÒ NzÄI/€8é'½â¤@œôˆó'¼j­µC¨ªÝ‘^ªqÒK5ÎÙ^Eõþk¯bçò¥Ð:Ü[[¯2÷SÖT¨>#æ5Ž< mñ8µS^K#s¶ªP}F0^óÌ·Ù×£O¥©uÇkûZê3¼n!Ùz]?èÕ.\Ûc/^ËóC^ÍÚÙ÷/ö×'ãupç0=?K¶9ƪG„×1t?u{}ÂkÜï¡»@õˆÿ:^ª?Lz©ÆI/Õ8ƒW­µöÀY\:¤S¯Ë¥O±N½­.ÅzõÊóðé'½â¤@œôˆ“^qÒ NzÄI/€8é'½â¤@œ?áUk­BUíŽôR“^ªqÎõ*ª§ðzË8Ï/…vîñõÆÔ¥Ü³µåX7öš³¦Bõg^Óøã(ӭǦb¥53g« ÕžÆk;ój ©´éÔ|ÙLÙV‹kTùº×²Ž«å—èÁk®;ßkµNëk¯£u\žß÷jö×ξo•¼6'ääu<8Ë‚=a>›“{?~K¶í¡®Ò‹u ÜKçÝY§z=Už~ªïò]¯ÏDë¯üßV=‡ôRÓ±W­µöÀY\:¤S¯Ë¥O±N½­.ÅzõÊóðé'½â¤@œôˆ“^qÒ NzÄI/€8é'½â¤@œ?áUJ)BèŽôˆ“^q¾îÕ|wtzÖ]ª>ý¾×áouš´x …±týÛçBóÝõ9þm÷^ÓÝ7gm[Ûe¾#w†¸}» ´4­¼æÁoؤ[Û½×}¦M[ÓeýgíwÛ6mâµí±7ðÛ¯Õ®ÚJžã5þÃxZy®×*ÀÏãõdÂs¼š³¿ïס٠Ôö±îÝn/âupçþ÷Òæì5‚£»àˆîãÐé'½â\oÑRJéŽMËzØ­dIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00257.html0000664000175000017500000001410212076703501015240 00000000000000 libpqxx: Member List
pqxx::plpgsql_no_data_found Member List

This is the complete list of members for pqxx::plpgsql_no_data_found, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
plpgsql_error(const std::string &err)pqxx::plpgsql_errorexplicit
plpgsql_error(const std::string &err, const std::string &Q)pqxx::plpgsql_error
plpgsql_no_data_found(const std::string &err)pqxx::plpgsql_no_data_foundexplicit
plpgsql_no_data_found(const std::string &err, const std::string &Q)pqxx::plpgsql_no_data_found
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00050.png0000664000175000017500000000666112076703501015062 00000000000000‰PNG  IHDR$øûÇ|PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2 @IDATxíÝmRòH@ÑÃC•û_ò¼ŠhZñ°®•ƒ! 1mÒ—¿¸ûý~ÿW@ 8ƒýÌÌßP$ 8—"@`Q$ ,ŠE‘€@ °¸ªHì–™™ï(œËµEbf曊çò•Hìf÷0ÿ½>­l¦ö»ïßÿ[?n{xsüuøÄýúûͶ™™O*œË—"q˜ãÓyvójyk÷SDfv›eûk7³]6Ûff>§H@ p._ŠÄ«‰}|ýÌîãŽÃ¶Çí/>s¢33ŸS$ 8—ߌÄýÏËH¶ ®Ê·#±ÌéÏì~êÂvóæW‘€@àj|)Ïóø~õ°áy&°û¹Ç_› ìf¶K‘€@àõ¥H§ýfå8ã–7v?Gæqî/!ylÇïÇx6áㆇqxìÊÌÌÏ ÎåL‘8µ:3ó›ŠçR$ ,ŠÅY"13óÿ+œK‘€@ °(EÀ¢H@ Xì÷ûý_@àfÜA H‘€@ ð–»»*@°]ŠÁ²ükD•€@ Ø,EÀ %À¢H@ X ‹"@`Q$ ,ŠE‘€@ °(EÀ¢H@ X ‹"@`Q$ ,ŠE‘€@ °(EÀ¢H@ X ‹"@`Q$ ,ŠE‘€@ °(EÀ¢H@ pSöûýþ¯€@ pû™™¿¡H@ p.EÀ¢H@ X ‹"@`ñk‘ØÍÌ\T‘€@à\ŠÅÏ"±›ÝÃäÿ÷ú´² ÂóÞm$vÇ£þý:¼l6ÌÌ|O‘€@à\~‰‡i~˜ç³›·—íü¿_{p|Y6ÌÌ|O‘€@à\~‰ƒã¯‡I¾™ê‡µÃÞ‘xùæg(œÍE#qX‰ûŸ"À;c$+o7G¼ŠÄöw‘€@à ý0Ïa¸_=lX2pÜû"OM(\¡FâX…ÍÊaóã´Ú»-À1(Ï/k[ff¾¡H@ p.?ĩՙ™~8ÿgf>T$ 8—_ŒÄîð33sEsùÅHÌÌ\R‘€@à\~‰™™«Q$ 8—"@`Q$ ,ŠE‘€@ °Øï÷û¿À͸ƒ@ "@à-wwU`» ‚eù׈*@°YŠJE‘€@ °(EÀ¢H@ X ‹"@`Q$ ,ŠE‘€@ °(EÀ¢H@ X ‹"@`Q$ ,ŠE‘€@ °(EÀ¢H@ X ‹"@`Q$ ,ŠE‘€@à¦ìv»Ý_@à þÐÌ*œK‘€@ °(EÀ¢H@ X|nf=uúø[¿2E_ûÎÙOízë Îå«3ëÍã‰Oä£N ÎçqfíìÖþ½>­læÝ×÷ý¦ÝÓËáØÃGvß=ŸúxØãQOç=œäá¤û¶g¾®‡í›ƒžÿúvóÓgŠçrŒÄaB>ÌA;§–í›Í¶×;NLóGm>öêì¯>ýÆÚzÞ"À9m&Ø:óޝÇݧæêÖÉH¼>óvÛæÔËî·"±þâ*ŠgôHÜÿ°³xžºïùpÒ§™ýt¦W‘ø·ú:/ÛË—sj*¿žòk$–¼úèû‘X‹±œóÃH¼ÊQ‘€@à2Žìyò=|×¾ñŸæÝ[sõ£H¼šÌËÞÄa½H@ ðxš`OmX#ñjR.ÙÎôÍt=†çñ°¥ Ç—§}Ç¿ñt’‘Øžàpøãß]Î[$ 8£×ì+síå±ÿë<-œË÷#±ù_¿ü?ð ?øt‘€@à\¾‰ûùŒÍò?ÏÒ"À¹ü¡™U$ 8—"@`Q$ ,ŠE‘€@ °Øív»¿À͸ƒ@ "@à-wwU`» ‚eù׈*@°YŠJE‘€@ °(EÀ¢H@ X ‹"@`Q$ ,ŠE‘€À¯º»»»ËÝÝÝ]îîîîrwwwwðWüÍo§F·¡QÁUëÁmhTpŠ\µF·¡QÁUëÁmhTpŠ\µF·¡QÁUëÁmhTpŠ\µF·¡QÁUëÁmhTpŠ\µF·¡QÁUëÁmhTpŠ\µF·¡QÁUëÁmhTpŠ\µF·¡QÁUëÁmhTpŠ\µF·¡QÁ7í÷ûýåÝí÷ûýÅ5ªý~¿ÿ©Fµßï÷ßóGGµŸ™ù¶·hfæohT33·á¯Žª[43sÅÕÌÌm(33W­ofæ64ª™™ÛP$ff®Z£š™¹ EbfæªõàÍÌ܆F53s.‰ÝÌÌK§6>o[ÖN~~fæCç¹E»Oà½íçæe¼wÆõj×9oدL§ã•ºð‹<„—Õ§.ìÌ3ëÿŒÄûƒš™ù¢³Ü¢/^ÁWÿÞ0¯'ç¼a¿‰OÝ®s<„¿2ª™™Ï:ËÌúR$vß²ÿ^ŸV¶~÷ðþyçæ×òÌm6<í=¬Ý¿l7ŸþVŸ™9ås·èýQ<þåã¶Çk:^âá²·Wõzçæ—¼nÓrºÙþ|Õ½aß™N>Ï·ëa×á ›O ÷á·"ñáýz¼Ðõ9\.ù²3ëk‘xzxŽÓev³,û¶ïž†xj(o¬­gš™ù”OFâS£8Þöêª6wëíHüh˜_Ä|u^~ìHœí†}+ïìÄí:5¬K>„ߋħÕÓ{äff»|-ë¼ßTïi÷룞ÿïåù[ùU`ff>å“‘øx»™yá­«z®þ§îØ7†ùõH|j€ïÌšOEâ‡7ì[‘x`/s}bÃeÇôÝH|ñ~Ö.ùÈÍÌv¹`$îNGâÕÅ_Zy=‘Ø^Ø›‘X:ï0¯ ¸a‹Äá²Ûß‹ÄEÂÿ!ã½äÌú~$–¿{*/6~0{–µß‹ÄéQ¼ôúÿþz(æÏ"ñæ‰Þ°GâõÀ^«~5?~‰Oܯ53³Y.2³¾‰ç¿µíÝó 9q'Ÿ¹Ãúÿ‰Oâ¥ã'N?ŠÏ.×{–a~=_½M/·?Ÿàr7ì[‘x`'n×;ýÈCø½H|x¿6ÝÓ:ù4^ff}-ÇË߬lò÷8Æ'Çc^|'o‡²Ýû0ðÃèOhfæ]ŸŒÄû£Ø\ôvýpU¯ÿÁÇÿúá/.÷,Ãüz$>àæ¿žbËâR7ì[‘øèùÛÞºãàÞîEÂïEâÃiõrz±™f—œY_ŒÄ©Õ™™ëðÙHü`}âÿ—oDâºoÓ"qíûf$¾>¬_ÿ¯Fâ_Åîff.â‘Xò{z,Çï²sóÒ‘xçr/xÃþ·H\ô!ü¿"qÙ™õ«‘˜™¹¤ GâþVÌ̼í:¦ÓõáþŸ‘˜™¹˜ÿ+33—ó¥HÌÌ\³oÝ¢™™«Ö¨ffnÃ_U·hfæŠ5ª™™ÛP$ff®ZÞÌÌmhT33·¡HÌÌ\µF53sŠÄÌÌUëÁ›™¹ jfæ6ü‹Ä~¿ßÿ›[´ßï÷D£Úï÷ûÛð7GõòàUŠâç½IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00009.html0000664000175000017500000003574612076703501015254 00000000000000 libpqxx: pqxx::basic_lostream< CHAR, TRAITS > Class Template Reference
pqxx::basic_lostream< CHAR, TRAITS > Class Template Reference

Stream that reads and writes a large object. More...

#include <largeobject.hxx>

Public Types

typedef CHAR char_type
typedef TRAITS traits_type
typedef traits_type::int_type int_type
typedef traits_type::pos_type pos_type
typedef traits_type::off_type off_type

Public Member Functions

 basic_lostream (dbtransaction &T, largeobject O, largeobject::size_type BufSize=512)
 Create a basic_lostream.
 basic_lostream (dbtransaction &T, oid O, largeobject::size_type BufSize=512)
 Create a basic_lostream.
 ~basic_lostream ()

Detailed Description

template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
class pqxx::basic_lostream< CHAR, TRAITS >

Stream that reads and writes a large object.

Use this class exactly as you would a std::iostream to read data from, or write data to a large object. All formatting and streaming operations of std::iostream are supported. What you'll typically want to use, however, is the lostream typedef (which defines a basic_lostream for char). This is similar to how e.g. std::fstream is related to std::basic_fstream.

Currently only works for <char, std::char_traits<char> >.

Member Typedef Documentation

template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef CHAR pqxx::basic_lostream< CHAR, TRAITS >::char_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef traits_type::int_type pqxx::basic_lostream< CHAR, TRAITS >::int_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef traits_type::off_type pqxx::basic_lostream< CHAR, TRAITS >::off_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef traits_type::pos_type pqxx::basic_lostream< CHAR, TRAITS >::pos_type
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
typedef TRAITS pqxx::basic_lostream< CHAR, TRAITS >::traits_type

Constructor & Destructor Documentation

template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
pqxx::basic_lostream< CHAR, TRAITS >::basic_lostream ( dbtransaction T,
largeobject  O,
largeobject::size_type  BufSize = 512 
)

Create a basic_lostream.

Parameters
TTransaction in which this stream is to exist
OLarge object to access
BufSizeSize of buffer to use internally (optional)
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
pqxx::basic_lostream< CHAR, TRAITS >::basic_lostream ( dbtransaction T,
oid  O,
largeobject::size_type  BufSize = 512 
)

Create a basic_lostream.

Parameters
TTransaction in which this stream is to exist
OLarge object to access
BufSizeSize of buffer to use internally (optional)
template<typename CHAR = char, typename TRAITS = std::char_traits<CHAR>>
pqxx::basic_lostream< CHAR, TRAITS >::~basic_lostream ( )

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00089.html0000664000175000017500000007402412076703501015254 00000000000000 libpqxx: pqxx::internal::sql_cursor Class Reference
pqxx::internal::sql_cursor Class Reference

Cursor with SQL positioning semantics. More...

#include <cursor.hxx>

Inheritance diagram for pqxx::internal::sql_cursor:
pqxx::cursor_base

Public Member Functions

 sql_cursor (transaction_base &t, const std::string &query, const std::string &cname, cursor_base::accesspolicy ap, cursor_base::updatepolicy up, cursor_base::ownershippolicy op, bool hold)
 sql_cursor (transaction_base &t, const std::string &cname, cursor_base::ownershippolicy op)
 ~sql_cursor () throw ()
result fetch (difference_type rows, difference_type &displacement)
result fetch (difference_type rows)
difference_type move (difference_type rows, difference_type &displacement)
difference_type move (difference_type rows)
difference_type pos () const throw ()
 Current position, or -1 for unknown.
difference_type endpos () const throw ()
 End position, or -1 for unknown.
const resultempty_result () const throw ()
 Return zero-row result for this cursor.
void close () throw ()
- Public Member Functions inherited from pqxx::cursor_base
const std::string & name () const throw ()
 Name of underlying SQL cursor.

Additional Inherited Members

- Public Types inherited from pqxx::cursor_base
enum  accesspolicy { forward_only, random_access }
 Cursor access-pattern policy. More...
enum  updatepolicy { read_only, update }
 Cursor update policy. More...
enum  ownershippolicy { owned, loose }
 Cursor destruction policy. More...
typedef result::size_type size_type
typedef result::difference_type difference_type
- Static Public Member Functions inherited from pqxx::cursor_base
static difference_type all () throw ()
 Special value: read until end.
static difference_type next () throw ()
 Special value: read one row only.
static difference_type prior () throw ()
 Special value: read backwards, one row only.
static difference_type backward_all () throw ()
 Special value: read backwards from current position back to origin.
- Protected Member Functions inherited from pqxx::cursor_base
 cursor_base (connection_base &, const std::string &Name, bool embellish_name=true)
- Protected Attributes inherited from pqxx::cursor_base
const std::string m_name

Detailed Description

Cursor with SQL positioning semantics.

Thin wrapper around an SQL cursor, with SQL's ideas of positioning.

SQL cursors have pre-increment/pre-decrement semantics, with on either end of the result set a special position that does not repesent a row. This class models SQL cursors for the purpose of implementing more C++-like semantics on top.

Positions of actual rows are numbered starting at 1. Position 0 exists but does not refer to a row. There is a similar non-row position at the end of the result set.

Don't use this at home. You deserve better. Use the stateles_cursor instead.

Constructor & Destructor Documentation

pqxx::internal::sql_cursor::sql_cursor ( transaction_base t,
const std::string &  cname,
cursor_base::ownershippolicy  op 
)
pqxx::internal::sql_cursor::~sql_cursor ( ) throw ()

Member Function Documentation

void pqxx::internal::sql_cursor::close ( ) throw ()
const result& pqxx::internal::sql_cursor::empty_result ( ) const throw ()

Return zero-row result for this cursor.

Referenced by pqxx::internal::stateless_cursor_retrieve().

difference_type pqxx::internal::sql_cursor::endpos ( ) const throw ()

End position, or -1 for unknown.

Returns the final position, just after the last row in the result set. The starting position, just before the first row, counts as position zero.

End position is unknown until it is encountered during use.

Referenced by pqxx::internal::obtain_stateless_cursor_size().

result pqxx::internal::sql_cursor::fetch ( difference_type  rows,
difference_type displacement 
)
result pqxx::internal::sql_cursor::fetch ( difference_type  rows)

References fetch().

Referenced by fetch().

difference_type pqxx::internal::sql_cursor::move ( difference_type  rows)

References move().

Referenced by move().

difference_type pqxx::internal::sql_cursor::pos ( ) const throw ()

Current position, or -1 for unknown.

The starting position, just before the first row, counts as position zero.

Position may be unknown if (and only if) this cursor was adopted, and has never hit its starting position (position zero).

Referenced by pqxx::internal::stateless_cursor_retrieve().


The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00094.html0000664000175000017500000002445112076703501015247 00000000000000 libpqxx: pqxx::string_traits< char[N]> Struct Template Reference
pqxx::string_traits< char[N]> Struct Template Reference

String traits for C-style string constant ("array of char") More...

#include <strconv.hxx>

Static Public Member Functions

static const char * name ()
static bool has_null ()
static bool is_null (const char t[])
static const char * null ()
static void from_string (const char Str[], const char *&Obj)
static std::string to_string (const char Obj[])

Detailed Description

template<size_t N>
struct pqxx::string_traits< char[N]>

String traits for C-style string constant ("array of char")

Member Function Documentation

template<size_t N>
static void pqxx::string_traits< char[N]>::from_string ( const char  Str[],
const char *&  Obj 
)
static
template<size_t N>
static bool pqxx::string_traits< char[N]>::has_null ( )
static
template<size_t N>
static bool pqxx::string_traits< char[N]>::is_null ( const char  t[])
static
template<size_t N>
static const char* pqxx::string_traits< char[N]>::name ( )
static
template<size_t N>
static const char* pqxx::string_traits< char[N]>::null ( )
static
template<size_t N>
static std::string pqxx::string_traits< char[N]>::to_string ( const char  Obj[])
static

The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/index.html0000664000175000017500000001000112076703502015524 00000000000000 libpqxx: Main Page
libpqxx Documentation
Author
Jeroen T. Vermeulen jtv@x.nosp@m.s4al.nosp@m.l.nl

Welcome to libpqxx, the C++ API to the PostgreSQL database management system.

Compiling this package requires PostgreSQL to be installed–including the C headers for client development. The library builds on top of PostgreSQL's standard C API, libpq. The libpq headers are not needed to compile client programs, however.

For a quick introduction to installing and using libpqxx, see the README file; a more extensive tutorial is available in doc/html/Tutorial/index.html.

The latest information, as well as updates, a mailing list, and a bug reporting system can be found at http://pqxx.org/

Some links that should help you find your bearings:

See Also
http://pqxx.org/
libpqxx-3.1.1/doc/html/Reference/a00260.html0000664000175000017500000001674312076703501015247 00000000000000 libpqxx: Member List
pqxx::largeobject Member List

This is the complete list of members for pqxx::largeobject, including all inherited members.

id() const pqxx::largeobject
largeobject()pqxx::largeobject
largeobject(dbtransaction &T)pqxx::largeobjectexplicit
largeobject(oid O)pqxx::largeobjectexplicit
largeobject(dbtransaction &T, const std::string &File)pqxx::largeobject
largeobject(const largeobjectaccess &O)pqxx::largeobject
operator!=(const largeobject &other) const pqxx::largeobject
operator<(const largeobject &other) const pqxx::largeobject
operator<=(const largeobject &other) const pqxx::largeobject
operator==(const largeobject &other) const pqxx::largeobject
operator>(const largeobject &other) const pqxx::largeobject
operator>=(const largeobject &other) const pqxx::largeobject
RawConnection(const dbtransaction &T)pqxx::largeobjectprotectedstatic
Reason(int err) const pqxx::largeobjectprotected
remove(dbtransaction &T) const pqxx::largeobject
size_type typedefpqxx::largeobject
to_file(dbtransaction &T, const std::string &File) const pqxx::largeobject
libpqxx-3.1.1/doc/html/Reference/a00296.html0000664000175000017500000001027512076703501015252 00000000000000 libpqxx: Member List
libpqxx-3.1.1/doc/html/Reference/a00117_source.html0000664000175000017500000003507312076703500016624 00000000000000 libpqxx: basic_connection.hxx Source File
basic_connection.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/basic_connection.hxx
5  *
6  * DESCRIPTION
7  * definition of the pqxx::basic_connection class template
8  * Instantiations of basic_connection bring connections and policies together
9  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/connection_base instead.
10  *
11  * Copyright (c) 2006-2009, Jeroen T. Vermeulen <jtv@xs4all.nl>
12  *
13  * See COPYING for copyright license. If you did not receive a file called
14  * COPYING with this source code, please notify the distributor of this mistake,
15  * or contact the author.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PQXX_H_BASIC_CONNECTION
20 #define PQXX_H_BASIC_CONNECTION
21 
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
24 
25 #include <memory>
26 #include <string>
27 
28 #include "pqxx/connection_base"
29 
30 namespace pqxx
31 {
32 
33 // TODO: Also mix in thread synchronization policy here!
35 
49 template<typename CONNECTPOLICY> class basic_connection :
50  public connection_base
51 {
52 public:
54  connection_base(m_policy),
55  m_options(PGSTD::string()),
56  m_policy(m_options)
57  { init(); }
58 
59  explicit basic_connection(const PGSTD::string &opt) :
60  connection_base(m_policy), m_options(opt), m_policy(m_options) {init();}
61 
62  explicit basic_connection(const char opt[]) :
63  connection_base(m_policy),
64  m_options(opt?opt:PGSTD::string()),
65  m_policy(m_options)
66  { init(); }
67 
68  ~basic_connection() throw ()
69  {
70 #ifdef PQXX_QUIET_DESTRUCTORS
71  PGSTD::auto_ptr<noticer> n(new nonnoticer);
72  set_noticer(n);
73 #endif
74  close();
75  }
76 
77  const PGSTD::string &options() const throw () //[t1]
78  {return m_policy.options();}
79 
80 private:
82  PGSTD::string m_options;
84  CONNECTPOLICY m_policy;
85 };
86 
87 } // namespace
88 
89 #include "pqxx/compiler-internal-post.hxx"
90 
91 #endif
92 
libpqxx-3.1.1/doc/html/Reference/a00209.html0000664000175000017500000003273012076703501015244 00000000000000 libpqxx: Member List
pqxx::binarystring Member List

This is the complete list of members for pqxx::binarystring, including all inherited members.

at(size_type) const pqxx::binarystring
back() const pqxx::binarystring
begin() const pqxx::binarystring
binarystring(const result::field &F)pqxx::binarystringexplicit
char_type typedefpqxx::binarystring
const_iterator typedefpqxx::binarystring
const_pointer typedefpqxx::binarystring
const_reference typedefpqxx::binarystring
content_type typedefpqxx::internal::PQAlloc< const unsigned char >private
data() const pqxx::binarystring
difference_type typedefpqxx::binarystring
empty() const pqxx::binarystring
end() const pqxx::binarystring
escape_binary(const std::string &bin)pqxx::binarystringrelated
escape_binary(const char bin[])pqxx::binarystringrelated
escape_binary(const char bin[], size_t len)pqxx::binarystringrelated
escape_binary(const unsigned char bin[])pqxx::binarystringrelated
escape_binary(const unsigned char bin[], size_t len)pqxx::binarystringrelated
front() const pqxx::binarystring
get() const pqxx::binarystring
length() const pqxx::binarystring
operator bool() constpqxx::internal::PQAlloc< const unsigned char >private
operator!() constpqxx::internal::PQAlloc< const unsigned char >private
operator!=(const binarystring &rhs) const pqxx::binarystring
operator*() constpqxx::internal::PQAlloc< const unsigned char >private
operator->() constpqxx::internal::PQAlloc< const unsigned char >private
operator=(const PQAlloc &rhs)pqxx::internal::PQAlloc< const unsigned char >private
operator==(const binarystring &) const pqxx::binarystring
operator[](size_type i) const pqxx::binarystring
PQAlloc()pqxx::internal::PQAlloc< const unsigned char >private
PQAlloc(const PQAlloc &rhs)pqxx::internal::PQAlloc< const unsigned char >private
PQAlloc(const unsigned char *obj)pqxx::internal::PQAlloc< const unsigned char >explicitprivate
reset()pqxx::internal::PQAlloc< const unsigned char >private
size() const pqxx::binarystring
size_type typedefpqxx::binarystring
str() const pqxx::binarystring
swap(binarystring &)pqxx::binarystring
PQAlloc< const unsigned char >::swap(PQAlloc &rhs)pqxx::internal::PQAlloc< const unsigned char >private
value_type typedefpqxx::binarystring
~PQAlloc()pqxx::internal::PQAlloc< const unsigned char >private
libpqxx-3.1.1/doc/html/Reference/a00071.png0000664000175000017500000000211012076703501015046 00000000000000‰PNG  IHDR¸ˆc—ÑXPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2×IDATxíí²« Eq¦ïÿÈo±G{Û´ÌÄq .bHÿÂ~léH·¿¿âµÆU¹wð¹ý¸­É½±­šï~3Ε{uîç®Ï[çq9"øëëv×Öwcž~%ηÃé<ÎOàG'þ ÓÅùr^ü³·ûŸ=¿>ªÄÿžüS|2ÇørfŠö8Oˆ¯ö0ï|ý©öÈóÐãk<ºÈözŸÞÛÆõþ%>pN?k½/qõ=Ù^î/öñ”¯<4ëÏu¾CàoÀ›1ŵu›ò6¬¿çlê«ðžÕÛ¼ÇïÕƒûßv]M~‘ꨌñ³—}VÖµ›kžó}“×êw|ïß}¼æ3Ôg“§²® ^óšÞ_ã:ÿ6Ã|ÙÜ쟜ÿ½/M÷ë¼§|íùlöI]WW‡c¹4üÇ<4û¤Þ7Ëšû]ìã© ¤}T¾WîÍ÷û4Öa·€Ø(&ûw7—õ–¾‘ê«óKýdïSûx³¯öUíñ¬wûôÿ÷OúøKÿÛªã¼/0®Ê}ÒÇç}|‰|Ïúø£ß÷ç–ŽÔf~ÿàcz¬¨UÁEÉW÷Ük’/ n]@W )ДhÊÀ4eàš2pM8€¦ @S )ДhÊÀFmÛ¶­(6‘õdà""š2pM]w“+‘AåáS/©§÷<:»?ãïgüà"".Dp—VéËE3EÌK0¹ò-M\Š{ôŠQÉÞMÚ á'z4~ézœx7À÷OÃÄÉìloÊ,Õ*Nº3?:ÄV_qRÏÞïèÕxö'è*í;j¨Ö.ýÝì£ïÉb†Ã¯‡c„OÕ1‚W{ýÒï-ðY©´!Ýœg¼›í˜‘a]õ|ïOJ¥©å³Íù¤T®ÿ]ãSðq]ë*ÓýSWÕ”Jçœ_Qì}©4 §ï*®ë*ÕmV*·{°ˆÈ—dà""šºÿ—/"ò2pM¸ˆˆ¦<ø¶mÛ‚ø˜+jUðÇcQòUÁ=÷šäË‚[WЕhÊÀ4eàš2pM8€¦ @S )ДhÊÀ4eàš2p€QÎ9·¢pëÉÀ4eàšú0øaroxÏ µ3þ¶·½ îcdh¨ù¢KÖ˜àü¼Àm½ž":¸áœ\Íž¾ü þ#ãO“ôáñà8±Ü–xü›žÚnë=àÑyÆOl·õ–ŸmÎç5þÕR9é*]ß8í*Ißè*Ï{s_ío–íù»àß”hÊÀ4þœsn=ý˜9“i#IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00266.html0000664000175000017500000002634512076703501015254 00000000000000 libpqxx: Member List
pqxx::nontransaction Member List

This is the complete list of members for pqxx::nontransaction, including all inherited members.

abort()pqxx::transaction_base
Begin()pqxx::transaction_baseprotected
classname() const pqxx::internal::namedclass
commit()pqxx::transaction_base
conn() const pqxx::transaction_base
description() const pqxx::internal::namedclass
DirectExec(const char C[], int Retries=0)pqxx::transaction_baseprotected
End()pqxx::transaction_baseprotected
esc(const char str[]) const pqxx::transaction_base
esc(const char str[], size_t maxlen) const pqxx::transaction_base
esc(const std::string &str) const pqxx::transaction_base
esc_raw(const unsigned char str[], size_t len) const pqxx::transaction_base
esc_raw(const std::string &) const pqxx::transaction_base
exec(const std::string &Query, const std::string &Desc=std::string())pqxx::transaction_base
exec(const std::stringstream &Query, const std::string &Desc=std::string())pqxx::transaction_base
get_variable(const std::string &)pqxx::transaction_base
isolation_tag typedefpqxx::transaction_base
m_reactivation_avoidancepqxx::transaction_baseprotected
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
nontransaction(connection_base &C, const std::string &Name=std::string())pqxx::nontransactionexplicit
parameterized(const std::string &query)pqxx::transaction_base
prepared(const std::string &statement=std::string())pqxx::transaction_base
process_notice(const char Msg[]) const pqxx::transaction_base
process_notice(const std::string &Msg) const pqxx::transaction_base
quote(const T &t) const pqxx::transaction_base
reactivation_avoidance_clear()pqxx::transaction_baseprotected
set_variable(const std::string &Var, const std::string &Val)pqxx::transaction_base
transaction_base(connection_base &c, bool direct=true)pqxx::transaction_baseexplicitprotected
~nontransaction()pqxx::nontransactionvirtual
~transaction_base()=0pqxx::transaction_basepure virtual
libpqxx-3.1.1/doc/html/Reference/pages.html0000664000175000017500000000703012076703502015524 00000000000000 libpqxx: Related Pages
Related Pages
Here is a list of all related documentation pages:
libpqxx-3.1.1/doc/html/Reference/a00066.js0000664000175000017500000000072712076703502014717 00000000000000var a00066 = [ [ "notify_listener", "a00066.html#aa017125bb75b03bef2da0159fa182699", null ], [ "~notify_listener", "a00066.html#ac4593cefb4b75ef4373b2aa44d4bd061", null ], [ "Conn", "a00066.html#a183d105d5bd011d45843526004bc0f40", null ], [ "conn", "a00066.html#a9b6ca1f8939f82c391fecb7082364ec7", null ], [ "name", "a00066.html#a61fecb70ec917b3403dff4228b69a61a", null ], [ "operator()", "a00066.html#a0f8b3a6f5183bc9466fba30bd760af85", null ] ];libpqxx-3.1.1/doc/html/Reference/a00316.html0000664000175000017500000001056012076703502015241 00000000000000 libpqxx: Member List
std::char_traits< char > Member List

This is the complete list of members for std::char_traits< char >, including all inherited members.

char_type typedefstd::char_traits< char >
eof()std::char_traits< char >static
int_type typedefstd::char_traits< char >
off_type typedefstd::char_traits< char >
pos_type typedefstd::char_traits< char >
libpqxx-3.1.1/doc/html/Reference/a00024.png0000664000175000017500000000231612076703501015054 00000000000000‰PNG  IHDRJPÑ/ªPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2]IDATxíÝír²JEá‡M•÷É'‰Áqò"Fs:Å„fØ™Y6á/3 Ãð"@ïÉë,`©oL©l¤T‚6R*A)• €ÁæiùW•vˆu~¹£+?eú\6¼Ëç]<ýâU2ÏÍ­%kv¥‡§Z_n…ow¥]‚M»eº$‹í^WÚy¾öVéÔ×ÿýñüÜ /WnW•n¤:s+ü~*µ‚M¯žëÓ´«J]óõc•V±Ëç³_Õ²x>ÚªÒCSýî7©ô°`ëPÇK²Ü~ ÒóÕ¥Òâ-»yºï^O¼ñò_½£ÏTZFº©Ò.©¦_ße ~•ö v¶ª?Wi×UìîJó³×!¦á§³W„X_[¤øl>3ÿS‹[îw¥=R­d¾Uv¯+=<Øtésĵ?éJûÄZN[× îò0IEkØÖ nßTIrƒ{/¸Ýƒý‹J¿2_»©ôù£:ë:÷F}‚J×S%É-ž¤ÒÍ`W~šJ?™¯çv¥ö Õ•’dÍõqß +%ÉïÑž $ù*T’ôP*%Iƒ •$=”JIÒ B%I¥R’4¨PIÒC©”$ *T’ôð¡Ò8Žãk°˜ qÇ× Bã8öð%¯xk}LJ0IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00047.js0000664000175000017500000000014112076703502014704 00000000000000var a00047 = [ [ "in_doubt_error", "a00047.html#a378d91b2f08324db0725a7c89f6dedcf", null ] ];libpqxx-3.1.1/doc/html/Reference/a00318.html0000664000175000017500000001152612076703502015246 00000000000000 libpqxx: Member List
libpqxx-3.1.1/doc/html/Reference/a00064.js0000664000175000017500000000027212076703502014710 00000000000000var a00064 = [ [ "not_null_violation", "a00064.html#a43eceacf51e6bb47d6bb90517a574c2a", null ], [ "not_null_violation", "a00064.html#a5372bb4e822109abf338516fa6b0733e", null ] ];libpqxx-3.1.1/doc/html/Reference/namespacemembers_enum.html0000664000175000017500000000716312076703502020767 00000000000000 libpqxx: Namespace Members
 
libpqxx-3.1.1/doc/html/Reference/a00058.png0000664000175000017500000000116112076703501015060 00000000000000‰PNG  IHDR’PÅ…ÜPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2IDATxíÙ’«0 D›üÿ7‹¼ f|o©ŠƒˆðÒiËæ•Bè @O¸$ —`ñ¤OzÆ6MÓƒ¾¿$  àª¤ñåüv:*ÒC6ܧc$ O””šCìYçã3@ñ¤©ór-sBh®8]j–R)ÔM³°áR=zº×u’±J-Jš?¥¤%ÕJZówI*V ½@Eé]éÒÁ¼PKÛåÝ8ô|-íì¸l’wáŸÚqùúÅe.܉3èÚ1Pp£¤ä@ÍI:8ÿN}!þ³Ï.À¸$‹>%…BWÜà  /ú“ôzu§©?I£¢Þ4u(  ;Ü# w ÀÂ]°p—,Ü% w ÀÂ]°p—,Ü% w ÀÂ]°p—,îsi†¡/$©'\’$Y¸$I²øTR$ƒØ¦iúIßg%IRÁUIAaî:ÞßÙpS )5†©Y–šCìYç×ÛnXï…¤©ßr-sJ¡¹ât©YJ¥P7]C“h^ÇߥKõè™ð¢N2¦ÈæXC“X“ëTg$>×’–T+iÍ}+IiÀ½…ˇ­½,®þƒÛ.5ölº”?5 —ÕÒvy7=_K;;.ó]ø§vÜ"5ö=µãNŸ#7C’TpQRrC’jþHRò\’*¾Uô/v%é—pI’dѧ¤a†®øÒn'ñIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00145_source.html0000664000175000017500000002747712076703501016637 00000000000000 libpqxx: nontransaction.hxx Source File
nontransaction.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/nontransaction.hxx
5  *
6  * DESCRIPTION
7  * definition of the pqxx::nontransaction class.
8  * pqxx::nontransaction provides nontransactional database access
9  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/nontransaction instead.
10  *
11  * Copyright (c) 2002-2008, Jeroen T. Vermeulen <jtv@xs4all.nl>
12  *
13  * See COPYING for copyright license. If you did not receive a file called
14  * COPYING with this source code, please notify the distributor of this mistake,
15  * or contact the author.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PQXX_H_NONTRANSACTION
20 #define PQXX_H_NONTRANSACTION
21 
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
24 
25 #include "pqxx/connection_base"
26 #include "pqxx/result"
27 #include "pqxx/transaction_base"
28 
29 /* Methods tested in eg. self-test program test001 are marked with "//[t1]"
30  */
31 
32 
33 namespace pqxx
34 {
35 
37 
62 class PQXX_LIBEXPORT nontransaction : public transaction_base
63 {
64 public:
66 
72  const PGSTD::string &Name=PGSTD::string()) : //[t14]
73  namedclass("nontransaction", Name), transaction_base(C) { Begin(); }
74 
75  virtual ~nontransaction(); //[t14]
76 
77 private:
78  virtual void do_begin() {} //[t14]
79  virtual result do_exec(const char C[]); //[t14]
80  virtual void do_commit() {} //[t14]
81  virtual void do_abort() {} //[t14]
82 };
83 
84 
85 } // namespace pqxx
86 
87 
88 #include "pqxx/compiler-internal-post.hxx"
89 
90 #endif
91 
libpqxx-3.1.1/doc/html/Reference/a00147_source.html0000664000175000017500000003221412076703501016622 00000000000000 libpqxx: notify-listen.hxx Source File
notify-listen.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/notify-listen.hxx
5  *
6  * DESCRIPTION
7  * definition of the pqxx::notify_listener functor interface.
8  * pqxx::notify_listener describes a notification to wait on, and what it does
9  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/notify-listen instead.
10  *
11  * Copyright (c) 2001-2008, Jeroen T. Vermeulen <jtv@xs4all.nl>
12  *
13  * See COPYING for copyright license. If you did not receive a file called
14  * COPYING with this source code, please notify the distributor of this mistake,
15  * or contact the author.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PQXX_H_NOTIFY_LISTEN
20 #define PQXX_H_NOTIFY_LISTEN
21 
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
24 
25 #include "pqxx/connection_base"
26 
27 
28 /* Methods tested in eg. self-test program test001 are marked with "//[t1]"
29  */
30 
31 namespace pqxx
32 {
34 
59 class PQXX_LIBEXPORT PQXX_NOVTABLE notify_listener :
60  public PGSTD::unary_function<int, void>
61 {
62 public:
64 
68  notify_listener(connection_base &C, const PGSTD::string &N); //[t4]
69 
70  virtual ~notify_listener() throw (); //[t4]
71 
72  const PGSTD::string &name() const { return m_Name; } //[t4]
73 
75 
80  virtual void operator()(int be_pid) =0; //[t4]
81 
82 
83 protected:
85  connection_base &Conn() const throw () { return conn(); } //[t23]
86 
88  connection_base &conn() const throw () { return m_conn; } //[t23]
89 
90 private:
94  notify_listener &operator=(const notify_listener &);
95 
96  connection_base &m_conn;
97  PGSTD::string m_Name;
98 };
99 
100 }
101 
102 
103 #include "pqxx/compiler-internal-post.hxx"
104 
105 #endif
libpqxx-3.1.1/doc/html/Reference/a00285.html0000664000175000017500000001171712076703501015252 00000000000000 libpqxx: Member List
pqxx::string_traits< std::stringstream > Member List

This is the complete list of members for pqxx::string_traits< std::stringstream >, including all inherited members.

from_string(const char Str[], std::stringstream &Obj)pqxx::string_traits< std::stringstream >static
has_null()pqxx::string_traits< std::stringstream >static
is_null(const std::stringstream &)pqxx::string_traits< std::stringstream >static
name()pqxx::string_traits< std::stringstream >static
null()pqxx::string_traits< std::stringstream >static
to_string(const std::stringstream &Obj)pqxx::string_traits< std::stringstream >static
libpqxx-3.1.1/doc/html/Reference/a00018.html0000664000175000017500000002655112076703501015246 00000000000000 libpqxx: pqxx::check_violation Class Reference
pqxx::check_violation Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::check_violation:
pqxx::integrity_constraint_violation pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 check_violation (const std::string &err)
 check_violation (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::integrity_constraint_violation
 integrity_constraint_violation (const std::string &err)
 integrity_constraint_violation (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::check_violation::check_violation ( const std::string &  err)
explicit
pqxx::check_violation::check_violation ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00101.js0000664000175000017500000000142712076703502014703 00000000000000var a00101 = [ [ "tablereader", "a00101.html#abdaa2d21ae6f3bbb52b8cb6c75870ff5", null ], [ "tablereader", "a00101.html#a07a03ef6630e8e5e0e8103b9b9bce6d5", null ], [ "tablereader", "a00101.html#ad233a53fdc5622adf57f353794a3c62f", null ], [ "~tablereader", "a00101.html#a84da29cd4c12724f74891631ade8f1d5", null ], [ "complete", "a00101.html#a4028c87ef2895f34a824f09970476e24", null ], [ "get_raw_line", "a00101.html#aa70c070397bcd38df197b05c33614100", null ], [ "operator bool", "a00101.html#a4010de33fe9ec72cbbc19c3dd81c8959", null ], [ "operator!", "a00101.html#aae84e7e743e090f9c29220f37074cf40", null ], [ "operator>>", "a00101.html#adbb71a08559825b55b801771b6161d56", null ], [ "tokenize", "a00101.html#a235d3894806c150e2db680ebe5c766d1", null ] ];libpqxx-3.1.1/doc/html/Reference/a00227.html0000664000175000017500000001031112076703501015233 00000000000000 libpqxx: Member List
pqxx::broken_connection Member List

This is the complete list of members for pqxx::broken_connection, including all inherited members.

broken_connection()pqxx::broken_connection
broken_connection(const std::string &)pqxx::broken_connectionexplicit
failure(const std::string &)pqxx::failureexplicit
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
libpqxx-3.1.1/doc/html/Reference/functions_0x67.html0000664000175000017500000001507212076703502017226 00000000000000 libpqxx: Class Members
libpqxx-3.1.1/doc/html/Reference/a00169_source.html0000664000175000017500000004523212076703501016632 00000000000000 libpqxx: transaction.hxx Source File
transaction.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/transaction.hxx
5  *
6  * DESCRIPTION
7  * definition of the pqxx::transaction class.
8  * pqxx::transaction represents a standard database transaction
9  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/transaction instead.
10  *
11  * Copyright (c) 2001-2008, Jeroen T. Vermeulen <jtv@xs4all.nl>
12  *
13  * See COPYING for copyright license. If you did not receive a file called
14  * COPYING with this source code, please notify the distributor of this mistake,
15  * or contact the author.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PQXX_H_TRANSACTION
20 #define PQXX_H_TRANSACTION
21 
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
24 
25 #include "pqxx/dbtransaction"
26 
27 
28 
29 /* Methods tested in eg. self-test program test1 are marked with "//[t1]"
30  */
31 
32 
33 namespace pqxx
34 {
35 
40 
41 class PQXX_LIBEXPORT basic_transaction : public dbtransaction
42 {
43 protected:
44  basic_transaction( //[t1]
45  connection_base &C,
46  const PGSTD::string &IsolationLevel,
48 
49 private:
50  virtual void do_commit(); //[t1]
51 };
52 
53 
55 
83 template<
84  isolation_level ISOLATIONLEVEL=read_committed,
85  readwrite_policy READWRITE=read_write>
87 {
88 public:
90 
92 
97  explicit transaction(connection_base &C, const PGSTD::string &TName): //[t1]
98  namedclass(fullname("transaction", isolation_tag::name()), TName),
99  basic_transaction(C, isolation_tag::name(), READWRITE)
100  { Begin(); }
101 
102  explicit transaction(connection_base &C) : //[t1]
103  namedclass(fullname("transaction", isolation_tag::name())),
104  basic_transaction(C, isolation_tag::name(), READWRITE)
105  { Begin(); }
106 
107  virtual ~transaction() throw ()
108  {
109 #ifdef PQXX_QUIET_DESTRUCTORS
110  disable_noticer Quiet(conn());
111 #endif
112  End();
113  }
114 };
115 
116 
119 
122 
124 
125 }
126 
127 
128 #include "pqxx/compiler-internal-post.hxx"
129 
130 #endif
131 
libpqxx-3.1.1/doc/html/Reference/a00052.png0000664000175000017500000000213012076703501015047 00000000000000‰PNG  IHDR¡À['ó{PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2çIDATxíë’« ›*ßÿ‘¢(â5³áìΖ­aÿcŒMC”¤†qCI²á†’dã{†!]’tÎW %é’CàÆèïs¡÷¢yxÏAž¹Ïð¿Êé­¨“¤ džãi,m®£æ"B«êâ¤ò*ê$©æ$†õù~§97ŒuS}õÍŽ¼$Õ|Ìpø« Ǻn—ñ¢¹ÛR½ ¥Ñ°Øh{™rÞ¼¨çÇÅ>|+†ÉšG6æò”asÝ{«|rr]4KÒ/öÚ0eÃáÙÖ‚¡$]ð”¡$5J’ 7”$½aŒ1¶ À£tMÓ¼a×µ®Ø¼a/ظbû†žËVÜÀ†ØpCn`à l¸!€ 7°á†6ÜÀ†ØpCÑ0Æ›†(I ㆒dà %ÉÆó†!Ì¥tI’…Ç ×N_1 S”úû\X\Bz›îsG†—%Â’t‡7 ç‰G)l®LUQ”%é.ïİœ¸ ãj]÷”2ìsßpl¤Û We³‚–ëíøÙ÷á6Sv sÞüØ*ärÌÁ=WL µ4HÒ ¼·ÊÏv’tŽJ’çÿ/KÒ“¸¡$ÙpCI²ÑÆcËD–eYÞÁ.˲,ï`,’;JˆH2…ˆ$SˆH2…ˆ$Ó³DŠ$u6{&IOصëƒÞåZ¬±Ýµ{©>ë}YëIßµÚž_‘dú IúC{ø¹c"µ±·jcpî.Þðg‰ÜЮk£éRŸÖ—ë8ÛÖ%«]†žëj6½w±:—­‡5¼F¤í;FfCJRU%²º¯kP¤^GKE¦ñ'{uÒSEUDZ ÿ‘fIšéi~{Ýž‡?e0ŒÍ_õ¿ˆ¨Èµ;*Έld&ß%²ÿ¬[¦'ˆØè'D|ûM‰¬“°ÆiŒ<&Òï™ms"דYÚœž‘Éš+F~“È$FÚ`œœ¬pŽ|]DZ&'ùâ3Û-³\3~¤ûž“œž#'¹f|Mû®z˜kºhßy®™œúÛö¬îìjΑÖÙgÚ¾¯,÷!Ï2M·kæûK’þ!{ ‘u±þ‰I¦ƒˆ$ÅBD’: I¦‘d I¦+‘eY–X-ÿè¦7Ñvx×IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00032.js0000664000175000017500000000132412076703502014702 00000000000000var a00032 = [ [ "~dbtransaction", "a00032.html#ace1dc32cc5ab0d51481518e659675b79", null ], [ "dbtransaction", "a00032.html#a49d5c0050ec02eba8440b1bdb20a1539", null ], [ "dbtransaction", "a00032.html#a12e833c152ed73fabe7c4c30020140e2", null ], [ "do_abort", "a00032.html#a38c5eb7ae19ad150f89e951261873aba", null ], [ "do_begin", "a00032.html#a0b4da4b562a51ec0f03a9abf75acd14c", null ], [ "do_commit", "a00032.html#ae434c2ec625a55ec8c6c4f57d1cb0a54", null ], [ "do_exec", "a00032.html#a9b3e988901d4bec05d414543314a945b", null ], [ "fullname", "a00032.html#a4e35ec39c80f088ebe239b15a16488de", null ], [ "start_backend_transaction", "a00032.html#a601f599d9c5cca86ce84a77bdac941db", null ] ];libpqxx-3.1.1/doc/html/Reference/a00012.png0000664000175000017500000000437212076703501015055 00000000000000‰PNG  IHDR:øKËÚePLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2‰IDATxíë–²:+;kùþ|¸…$€£ôÇñÛ3–ÜšHŠN÷_˜ÿòò·úøññ¼£áÏÛó[°¹wo³MĶ™lќսû—Ózœ~ŠÞ·Ž“Þ5IÝ/¾»q¢O>1ΰ÷žçÏÃ×%FRš¶ãΔ ÓŒJn ÛùBÏ_sŽ ÿë}cüPâ—ûÇÍ8š‡Í¤ng¼¿žŸN_cpn±/y22åÂ8­yg1VÏ×ãeæí}}üzÿhfrp\×€ú;åüz|Mî]ðN–œ) š(õ¨Ltέ’cM®-·¯õkÉÍèM5«|5vQÎ]en^5Õ಺Z³MŽŒËj^·ãâ«5[N—\[ÃjnÕ¸ýï¾¼Ç^0rÍ©©€Õ\YÍ.9ÖäVI­õ¾.¾}›ñŠº¦Ž–œ{ô5cê°¯¹$ǶbW³]=ªõn»šÞDS/ëq“|ÇqWäܨîå#Ï-±TôuÕ”ÞØ—Áyuõõnì]][{èxa5¾öÐe•wqKo{öë×Ö¤îõ#7=íšÕòÛ<|]0rS™/zç¿¿[ìËG^{c­o_ið{gfsŸºÍ6ÛNÖ&b97ª³‰ÀvP7×»¼ü--×Ç>—€8‹ÕD¸Ýì €ÕDÌÙÀy¬ ˆÅ„°:€VÂêBX@«au!¬ „Õ„°:€VÂêBX@«au!¬ „Õ„°:€VÂêBX@«au!¬ „Õ„ølu9çlrÎù,dI2’t«“¤V'I!¬N’BX$…øeuI’žbˆ¼üü ’ô2þ’:I:âKÕ%¥ifÃ÷ºSg›Æ£áʲ×F—«%h`=Wâ¶¿±¿Y’.âruóB›&¯¤ƒO Yb”T?ýf·û %ÕÏÕÙx}Öm§\¾ÛËm5ë­Ô=йdÿ‡Ô ë«Q²®¹Sêæøùæqÿ›ÔuË©ŸõVÉ.«ÛÝ,IòÎZ·owÔ=®u½ºo­uw:ìÚ;Ö;ŸìlÓ|ûÛgÝ&þK:ìá®$ýyþ²º©\ž\’tˆ³N’B\­N’¾«“¤V'I!¬N’BX$…Ô圳É9ç“|.7p«ˆp»Ù@«ˆ0˜³;€óX@‹au!¬ „Õ„°:€VÂêBX@«au!¬ „Õ„°:€VÂêBX@«au!¬ „Õ„°:€VÂêBX@«ñÙêrÎÙäœóYÈ’d$éV'I!¬N’BX$…°:I ñQêÒôYö$é ê=’ôN¾A$ýïS—”¦ißëN;õñ|‰JÓ×tÍcÍ6jT‚ös4@p —gÝv6廽ÜÕ©ÝŒ[‘½­m…;Ò p Ÿ¡nXb%·~P7GÕ{ús_­®[Rf»ÉïÕÝ þÚ¬kÊÚQ›xºÖí3øa­ûóYw§Ã–YÖYô¶ÃÖz?GílÓ|ûû÷ì~àïóÁêÆÐ¥Àá¬q±:€oÅêBX@«au!u)¥dRJé$ŸË ÀœÅê"ÜnvÀê" æìà(bö1e¯8PºW·{£å¥l´µÏÖHÒ–UÝhw~u§Þ·¼Íù­ôÑåj Z’¥;ÎÊêྺ6¦]wOïÿœºr娛çÉ+éàSB–%ÕO¿ÙÅ­’»:PW \©®¿¡{îGêšLh²n;å.nóhý$ö“Ü ·i9qV]3v[ºêñºnÑn^ÀF]_Èw1eAl[K—GY×ÔVÏVݶÄîìò„Çê¶/XJêè~x·Žeݱ–]½RݾͽùÀÖ]uY×Ôº}›¸£îq­ëWè£{ n»s¤®½ï´º®àkÝ»öŽuÁ¶©Ýœ+Mµï°û·¶®ðf§«R›§^cÖ/Á›Õ]k]·Û_iŠØOêúZwÜ&î¼5Iú‹\ libpqxx: include/ Directory Reference
include Directory Reference

Directories

directory  pqxx
libpqxx-3.1.1/doc/html/Reference/functions_0x6f.html0000664000175000017500000005063412076703502017310 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- o -

libpqxx-3.1.1/doc/html/Reference/a00048.js0000664000175000017500000000030212076703502014704 00000000000000var a00048 = [ [ "insufficient_privilege", "a00048.html#a5cce5dbd2519b461a7c8064528999097", null ], [ "insufficient_privilege", "a00048.html#a288de88661b6c5094151d90975bb0531", null ] ];libpqxx-3.1.1/doc/html/Reference/a00075.js0000664000175000017500000000030012076703502014702 00000000000000var a00075 = [ [ "plpgsql_too_many_rows", "a00075.html#a8b2c0fa01d76add8d15f1024562521fe", null ], [ "plpgsql_too_many_rows", "a00075.html#a77fc4dece10e4aa3efffc7f4dcbeb81e", null ] ];libpqxx-3.1.1/doc/html/Reference/a00048.html0000664000175000017500000002463712076703501015254 00000000000000 libpqxx: pqxx::insufficient_privilege Class Reference
pqxx::insufficient_privilege Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::insufficient_privilege:
pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 insufficient_privilege (const std::string &err)
 insufficient_privilege (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::insufficient_privilege::insufficient_privilege ( const std::string &  err)
explicit
pqxx::insufficient_privilege::insufficient_privilege ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00069.js0000664000175000017500000000035612076703502014720 00000000000000var a00069 = [ [ "param", "a00069.html#a1b747a6f501eb642f86697ba9a59f5f6", null ], [ "sqltype", "a00069.html#a2848e4f145eee99ab06cb4608e19b0a9", null ], [ "treatment", "a00069.html#a4c84b43298291ae805af849cf07604ce", null ] ];libpqxx-3.1.1/doc/html/Reference/a00226.html0000664000175000017500000000723712076703501015247 00000000000000 libpqxx: Member List
pqxx::failure Member List

This is the complete list of members for pqxx::failure, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
libpqxx-3.1.1/doc/html/Reference/functions_func_0x63.html0000664000175000017500000002464012076703502020236 00000000000000 libpqxx: Class Members - Functions
 

- c -

libpqxx-3.1.1/doc/html/Reference/a00061.png0000664000175000017500000001571312076703501015062 00000000000000‰PNG  IHDR0ø'¤t)PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ZIDATxíÝáVâJàÊ9¼ÿ#ß]EI^•ÁȆÚåSœL‚Ö™îþ ÿ¨Ãáp¨Ãápø.((((((Ø™Î=¸Aƒƒ‚‚‚‚‚=ê܃48(((((Ø£Î=¸Aƒƒ‚‚‚‚‚=ê܃48(((((Ø£Î=¸Aƒƒ‚‚‚‚‚=ú¹wþÌÿýôoüj_|"ÜËo?éwçÞÿ~ú7~µóÖÍþžß  îïGæÞÁáå¹¾¾¿™}ÖŸï¯ï_^Vf÷ýýöþ«­—_îÿùåS7×ß¿Â}ýÐc¡     à×üÈÜû;¤O¯·ñ~`ñšÿpšòóU³×rùÏ#ßžºÜ°|ââà¾~æ©PPPPPPð{~dîGöÛ8ûúvùb¼/œ÷Ìw^^Ü9ûvåö›ë?ö`((((((ø%?2÷V£üå3^¿Î§ùiìÿýw¾çÕËÒû Ë‹;g¶Øwù¹p7?ôX((((((ø5?2÷f3üààüz¿|Þñ¶zZY^¼ò8ç×êêbßê+ÜÓÏ< ~Ï̽Ãy¨ÿ}ûºpþ¬õð_›}{ÿ×÷,¾öÄÅ>¸¯Ÿy*üž™{‡—þ2Èßß¼.¯‡ú‹ÓÅ™¿7:8¿®-¿ßù²vúé¼oñÑp_?ôX((((((ø5?2÷fÝí\ÝíOíGæÞì¡»«»ýà    à©ýÈÜ›=t·su·<µÎ=¸Aƒƒ‚‚‚‚‚=ê܃48(((((Ø£Î=¸Aƒƒ‚‚‚‚‚=ê܃48(((((Ø£Î=¸Aƒƒ‚‚‚‚‚=:‡:‡ï‚‚‚‚‚‚‚‚m¡       ŽPPPPPPPðôŽÇ#<»ãñOîø÷<·ãßPPPPPPPðìŽPPPPPPPPG(((((((¨#Ô êu„‚‚‚‚‚‚‚:BAAAAAAA¡       ŽPPPPPPPPG(((((x ÇãñXÇãñXÇãñXÇãñXÇãñø”   0{µ@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBÁo™¦izXÇiš¦Gÿºiš¦‡Õ~¿eJ’J’ïi@AÁ.´&É ÚaÿZ IrƒìBûa’Ü ýö¯’$7h@AÁ.´&É ÚaÿZ IrƒìBûa’Ü ýö¯’$7h@AÁ.´&É Úaÿ6*ÕwI²ò~ñw%9¿þì¼Ü|øúýIr‹ìÂFý0I. v½ï>$Iî¦ýöoóùßóü~ñ[¥“$ [ÔL  vaó~x[ßúŸ[4¿$Yi?„ý»Wrx9©¾¾¿™Þ?ß_/Þ¿¼¬Ìîûûí}ûË®—»N닇ξýýò²c¶ïô~ýà×Å$¹‡ì½úa’\úÿ.9Öõ.?ãòæ$ù!퇰÷*׳þzØsȵ×ü‡÷é}^Í!‹×Û¥‹{Ï{sÈùµÜw¹k¶3IFµ@  `îÕ“äÒç]r ë]|F9¿îÖø’äŠöCØ¿{Èê<¿œÎׯo——3{í¼gþ¸Ë{—këG.¿-w-$CZ PP° ÷ê‡Iréó.9Ðõ.ò¾¹#Iî®ýöï^òy)œwþþ›ã/Kï7¼Ÿðóúë®åÚ¥3{ðy×ìI2ª»p¯~˜$—>ï’]oõ·&ûöþn/I.µÂþÝ«@g÷ý8¿ÒÅé~[]ÍõÕþ+—¯í½V:«;ç¥8«¬$¹]  vá^ý0I.}Þ%ºÞµÏ˜Ýœ$?¨ýöï^r8ÿ¿o_Î'uqºIV–å²°¸÷KkWv­ª3I´@  `îÕ“äÒç]r ë]|F9¿îÖø’äŠöCØ¿{ÈáíìÏÞ¼.¯O÷¬ZæþÞ8Ûü6Úß×O»Îk§§¼¾ûá\Aç’|ÿ½Þ$£Z PP° ÷ê‡Iré³.9Ôõ.>ã´Ö“䇴ÂþÝ«@fçñ§f’ü¾ì½úa’\Úq—l?„ý»W츒äR  vá^ý0I.ýd—<¼þK’ßÐ~ûw¯ùÉRH’‡Ó‚‚]¸W?L’K;î’퇰?[ I²S-((Ø…öÃ$¹Aû!ì_ $InЂ‚]h?L’´Âþµ@’ä-((Ø…öÃ$¹Aû!ì_ $InЂ‚]h?L’´Âþµ@’ä-((Ø…öÃ$¹Aû!ìß4MSMÓ4}üë¦išjš¦é»  à7¡   à µBAÁJ  žUû!,­(((xNí‡PP°Ò‚‚‚gÕ~Kê£O©ý VZ PPPð¬Ú¡ àBË žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµBAÁJ  žUû!¬´@   àYµÂNÇcÇcÇ㯂‚‚+ŽÇ㱎Çãq|W£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ4C¸I£ƒ1ÍÆ4C((øH+Æ l‘Òì§k«‹zŽÓÆúƒ4/›í¬QŸ7~°–$ÛûÕãwu:}xú.NÕç±níÖ~ãô]$¹¨ôy²ëÓºñ©œe{¶U¥|¹Cÿ­æñ:öÕ=ÇiãF=Kóœàß·¯ ç¿z~ù²sÿÆqK²xm~ü> l‘×"¦«Ãïóµ$ùa[gø½0—§ïZR¦˜$™e{¶U¥|¡Fþ¡Vóûj:ã´q£ž¥ùßìÍëò)—ŸÏïN¡¯Žçë¥$ÙÜæÇïÿ›]=§÷6¾þæôra±óuëÛÎsžÛUñÖ~ùô‚yù¿:l—ÉÎ~[O’mÌ2„‚=ÛªR¾Ðpþ¡Vóx{ÙWÞ†Ûƒç8mܨçi^{{emãþ›$_²ýñ{øH’ä[¶ÎpaÎ2„‚=ÛªRv×pÚ±“dÌ´q£þršçµGͺÇ/IÆláÜe{¶U¥ì®á´c'ɘiãFýå4Ïkšu_’ŒÙ:Ã=†9Ë öl«JÙ]ÃiÇN’1ÓÆ:Ivâ׆]’ìD3L’1³ ¡`ÏZ)Irƒv›$35º$¹E_’Œi†I2f–!ìY+%InÐn“$c¦F—$·èñK’1Í0IÆÌ2„‚=k¥$É Úm’dÌÔè’ä=~I2¦&ɘY†P°g­”$¹A»M’Œ™]’Ü¢Ç/IÆ4Ã$3Ë ö¬•’$7h·I’1“iš¦š¦iú®Ùñ›¦iªiš¦oj†Ó4Mc à9LÓ4Õ4MÓw5Ãiš¦1PPP°v„‚‚‚+Z)PPPðdÚ¡ à#­(((x.Çcû \×J‚‚‚'Ó6i¥@AAÁsùÓÛ¡ àªV <™¶A((øH+ žN› |¤•O¦m >ÒJ‚‚‚'Ó6i¥@AAÁ“i„‚‚´R   àÉ´ BAÁGZ)PPPðdÚ¡ à#­(((x2mƒPPð‘V <™¶A((øH+ žLÛ |¤•O¦m >ÒJ‚‚‚»:Ç:ÇPp³ãñx¬ãñx¬ãñxü5PPP˜½Z 0¦˜fcš!Œi†PP°Ò1ÍÆ4CÓ aL3„‚‚•Œi†0¦˜fcš!¬´@`L3„1ÍÆ4CÓ ¡ `¥cš!Œi†0¦˜f+-Ó aL3„1ÍÆ4C((XiÀ˜fcš!Œi†0¦BAÁJ Æ4CÓ aL3„1Í VZ 0¦˜fcš!Œi†PP°Ò1ÍÆ4CÓ aL3„‚‚•Œi†0¦˜fcš!¬´@`L3„1ÍÆ4CÓ ¡ `¥cš!Œi†0¦˜f+-Ó aL3„1ÍÆ4C((XiÀ˜fcš!Œi†0¦BÁo™¦izXÇiš¦GÕ §išÆ4Ãiš¦1Ípš¦iL3œ¦i»6%I%É÷Ì›L’T’|O3L’1Í0IÆ4Ã$3Ë v¨’$7h“I’1Í0IÆ4Ã$Ó “dÌ,C(Ø¡H’Ü M&IÆ4Ã$Ó “dL3L’1³ ¡`‡Z Irƒ6™$Ó “dL3L’1Í0IÆÌ2„‚j$É Úd’dL3L’1Í0IÆ4Ã$3Ë vè¡ ä°~w^H’+>Ý$?â›Ì—cü³þ{þV†×þâÿMჾžÜÆü çðK©>HdI²ðÀµüåNøÛE=Ë vè¡ ä˓$÷ôÀMæ;1þ^€¿•á·ÿâfá·Zx’üŒ9‡_ú$²$YxàZþr'ü튞e;´mrx9Ͼ¾¿™Åߟ^¾¼m|ñ¶çýâùÛņ$ÙÆo6™›c|ÿá5®¿—g©nÞk~&ÃÿOgvù|qvŒÎ»®…xºáÏ…Sžë]뇟®Ÿ?àm_’ÜÃVçð©>JdI²°u-’åâ¼½nyØè®e;´í°; ­—sC®¿N—— o+ó=‹ÅÍ*ã—šÌ]bœ7¢« 'Év~&ÃÏÒY&´NaùÏnø ê˃ºÞ—$w±Õ9¼GªY’,l]Ë_ªß+§ï£»–!ìжÃnu´_ŽòlNÞ­ÉÂzϺÛ'ÉOÛºÉÜ'Æ‹L/ÀËð é,𽹨u­/ÏÝåi\=üj[O’»ØêÞ#Õ‰,I¶®å/ÕïÕÓ÷pÑ]Ë vhÛa÷•®óçßbœ½.¼_»Ü3Û$ÙºÉÜ'ÆE7¹’p’lçg2üâh{?K×FÛ*¢Ehë^¼ˆúýóÞÖ~º…ouï‘êƒD–$ [×ò'Y¾§w-ƒ‹îZ†P°CÛ»Å1^̯ÙY_~{»8;ú—¥ô¶š$ÙºÉÜ'Æ¿Û_nù á$ÙÎÏdøy:ËVºº¾€ÿ{Ãå®kGóG[øVçð©>HdI²°u-’å%üÑ]Ë vhÛaw8WÇß·¯ ‹‘õvÐet½ZÎÛ6¬‹_k2wŽqâïøc~–κ£.S¸œmóç%‡ÙëƒCù•µ$¹‹­Îá=R}È’daëZþRý¾·‡:mIrÝ,C(Ø¡m‡Ýá­4fo^—gò÷§Óõ³jz¯¯×;^¾.6$É6¶n2wŒqþæmïöþX†Ÿ¥ó¾úvˆÍfÛiiþ¼·§ž={Ðù1‹‡¿mž=í¾Iouï‘êƒD–$ [×ò'Y.ÎÛ[ ?ht×2„‚ÚvØÍ›G’üön2{Œñg2ÜÑ!K’Olu÷œêÖµ¼Ç,gBÁm;ìvT)[7™=Æø3ޤsxý—$ÿˆ­ÎážSݺ–wÔ¯e;´í°ÛQ¥lÝdöãÏd¸Çvœ$×mu÷œêÖµ¼Ç,gBÁm>ì’d¶n2I²7Í0IÆ4Ã$Ó “dÌ,C(Ø¡H’Ü M&IÆ4Ã$Ó “dL3L’1³ ¡`‡Z Irƒ6™$Ó “dL3L’1Í0IÆÌ2„‚j$É Úd’dL3L’1Í0IÆ4Ã$3Ë v¨’$7h“I’1Í0IÆ4Ã$Ó “dÌ,C(Ø¡iš¦š¦iú®f8MÓ4¦NÓ4i†Ó4Mcšá4MÓ((((x6G(¸Y3„‚‚‚‚‚Ýè°ƒ1Í öâxì´ƒÍ v£ÃÆ4C(((((Ø‹?³®Ó4C(((((Ø;Ó ¡    `G:ê`L3„‚‚‚‚‚Ýè°ƒ1Í v£ÃÆ4C(((((Ø;Ó ¡    `7:ì`L3„‚‚‚‚‚Ýè°ƒ1Í v£ÃÆ4C(((((Ø;Ó ¡    `7:ì`L3„‚‚‚‚‚Ýè°ƒ1Í v£ÃÆ4C(((((Ø;Ó ¡    `7:ì`L3„‚‚‚‚‚Ýè°ƒ1Í v£ÃÆ4C(((((Ø;Ó ¡    `7:ì`L3„‚‚‚‚‚Ýè°ƒ1Í v£ÃÆ4C(((((Ø;Ó ¡    `7:ì`L3„‚‚‚‚‚Ýè°ƒ1Í v£ÃÆ4C(((((Ø;Ó ¡    `7:ì`L3„‚‚‚‚‚Ýè°ƒ1Í ¾cš¦éa§išU3œ¦igJ’J’ï™ »f˜$7˜e¢Ã.In0vÍ0In0Ë D‡]’Ü`6ìša’Ü`–!<ˆ»$¹ÁlØ5Ã$¹Á,C(((((xvIrƒÙ°k†IrƒY†PPPPPð î5ìI²ògíÚr’\úlóß‹‡?ÿ^8½9ßñúãë¿óç=çÇŸöÌÖ Iò³a÷µ ÿå(NËï×ÏÏš?úä}óù—8ß–äüšeâkÃ.Iþßµ ÷­!üÙ燽M¦ó›×Þfàåž·wóW¦ç7~×Õ°ûZ†ÿr«ûΟ²øŒ“Åæó—$Y™eâ‡ÝŸ©ðÚðgo.fÓáeñ´ãÝë…—k—»Þ¿ž¿ýýòzã|ß•)yþüù»˜’ó=óA¶¸g9j¿>ÑWÃî”áÿ§õOG±zÔùS^NWæŸ}ÿ8ÙY†PPPPPð NÃ.I.½Î¸×!—CÖ¯·ë§ ³¹ñù®ÅÞr~Íö½ÏÓ·iô>Ÿ®ÌÍÙµñ)y1¤“da6ìN~’Ö¿Å•G­oXüÞËÍç/W¢eâ4ì’äÒj޽6ÿY÷ŸËoËråò•y¶zÌüÃfCó»Sröì—Güý7ÿíO Ë)9ÿ;“dm6ìN~’Ö¿Åiýê ³Ï|ý?Û|þ%Þ–VÑÎ2„‚‚‚‚‚qvIré“8ׯÛìç—™±ž~‹áteJ.föjÖ®¦äû@º:%_'ÙyéýQç™¶¸°škIra6ìN~’Ö?Åü÷ŸÊù“þ>áõ)‹Í‹Ç®£eâ4ì’äÒrfÍ'ÙÅY~[O½._̳վ弽>cë~Sr1¢“de6ìN~’Ö¿ÅÅ£–¿øìã.?wñØu´³ ¡    àAœ†]’\úÛÙO¯×&úzeη&‡ÙëÊ”¼6¯NÉÙp™O å›«SrýæÚ”œß·k³ñœ$W̆Ý)ÃOÒúW£˜?jy}þ{¬>iymñ¸Y´³ ¡    àAœ†]’\:¼Í¼Ù›×åÅz}{Þú¶ñtÛû®Ó¥ós^7Ÿðvã|°®fÖŸ‹o³óý çù·Pï{Þ‡ÛióéûlÏ.$ɗ̆Ý)ÃOÒú£xû෻߯¯ôþ[-6/>ÿZ´³ ¡    àAœ†]’\šõø¯OÒ$y³awÊp‡iýðß1Ë ÄiØ%É¥ŽÀ$¹‹Ù°;e¸¿´~úϘeâ4ì’äÒþF`’ÜÇlØ2lZIò³ ¡    àAœ†]’T’|ÕlØ5Ã$¹Á,C(((((xvIrƒÙ°k†IrƒY†PPPPPð :ì’ä³a× “ä³ ¡    àAtØ%É fî&É fBAAAAÁƒè°K’̆]3L’Ì2„‚‚‚‚‚1MÓTÓ4MßÕ §išÆ@Áíþx¤Ô^XCIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00090.png0000664000175000017500000001305112076703501015055 00000000000000‰PNG  IHDR¢¸p =PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2¸IDATxíÑ–ª¼‹b-ßÿ‘¢`8:ÎüœÞÎç¦ $!Ìî¢;·Œã8~ ȨúD‘ji¢Hµ4Q¤Zš(R-M©þÇ Ó¡úQ¤úó?Qt‹à0ñ|^M`Ÿ _îç4¹\ç9—Ëõ‰K{ºkúT_$Š®!¿S,íŽGÃMŽtÝÍeÐöhúT_#ŠöÂ:Ÿ_ž®}·þÕ3;öT_#Š~®èò[+ºöEÀÞV´­dO†›Ä¹wo’)Š:ÞÝ‹š™ãødøîn¾<Ù‹¢è,ZBß;˜Cû`¸©t·ÛVãÍÜ­^/˶¥ú*QÔl/vO†UñÝùª¢èmE礸üTEH”æ;ŠT Eª¥‰"ÕÒD‘ji¢Hµ4«hÇñCopU‰"€ÊœNqP˜(¨ÌÙPÔ%ŠŠA¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€7Çqü>Qõ3ˆ"ÕÒD‘ji¢Hµ4Q¤Zš(R}“aXZÓ¡úûD‘ê{ôR¢àüŠ¢á–'çóҸ˦»ÛyI¤+—›{Ž©¾O©>àäÛqºý1³êhÚª?#ŠTpÿMS·ÿ,öœEÀ—¦è\Ïö]TH©> SÔ‰h‡¼¿œAQ¤úí^Ô¤PSà6Ц)tÏø¥,ZÌôŠštºÈ›;¦‰MTý9Q¤ú€&Æ¿W·T¿E©> Šþ+¢ 4¿¢HõÿO©–&ŠTKEª¥‰"ÕÒ|¬¢qÇ ¼Á T%Š*s:Å@a¢ 2gCqP—((N”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠÞd†áSø@>èÿE¥‰"€ÒD@i¢ 4QðþûEÀˆ"€wøÙÿk`˜8Ÿ—F»è}´}Ñ0Ï:_®§¦à=¢`Í%´·ãpöŽ6ú—ÖÄ|ê:Þ#ŠÖÜ‚;_šDj¿Žî(Zßü0ÆQ°æ‰¢[¢¬]~Q𿨨­l팽,Z®Qð%¿·5)ÔHøj/Š"€§ü4‹3½¢9y–ÑöE³Îû©7 ðQ°¦;ÀCŽ_¬ù–¢s®\~ÿ Q°&YðóAÿ¯((M”&ŠJE¥ùXEÃ0 @xƒ@¨JTætŠ#€ÂD@eΆâ .QPœ(M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”æhEã8ŽŸÀ®Hõ3ˆ"ÕÒD‘ji¢Hµ4Q¤Zš(R}ΰÓR}‰ó#o<Eª¯óSEªoES‡)ŠçóÒh#{éŸ.—tXN÷ǧ®9]æ¦'¦•.íåùåeª/E7#·c æ ëã&aéX¥U;·½ ÚíRª/E]çÎçv¸ßU¶Ã·Ù[qÇžêkDÑëŠÎ…jžÕVºËÍFQ3÷ŸQt:NG¢ú*]ðº>L‰UuC{É”,èx{/jRhäK{Ñí‰ö¢(z«Ð-fzEK]›ËÛmêµÕTº[Ô[É7s«ç£èý½hÛTý!¿²Z½­èœ—Ÿê#¢àÉ"€oQZ‘j]¢Hµ4Q¤Zš(R-M©–æcã8~p´"€ð2QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@iŽV4Žãø)ÀáŠT?ƒ(R-M©–&ŠTKEª¥‰"µ9†Amõ½ê¾1uïGG‘z?¶aŠ"€ÿ‚GІ[žœÏKãžaº»ž¯—Ëiê»>» ®W[\×¹r›ÔͽÞ6OÝ^£ºæÏ)šbvµƒ;Ç=²›Î¦½^m¾, Ñt/ïÛY¬yKÝ«I½.8¢M¨×ƒ{6»šµÝ.¶êU]E[E× 4¢UToƒ_+Zº¯-oùÿ+:N§#QÝ¡ TWߺ,êfîgЗŠ»Ùɢݥ³µûtžG{Q›¯ºfÚß‹6o‰¢9x‹™^Q“N‹¼Kï-È‹š¶ÎµåoU0——,¯¼¿pù(®k7SU7üŽhÛTýÏhj™ê·‰"Õï2mò;•i·?ж$‹¾EEªÿQ¤Zš(R-M©–&ŠTKó±ŠÆq?€8Z@x™((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4G+ÇqüàpEªŸA©–&ŠTKEª¥‰"ÕÒD‘jÏ ºÃp8sÞLܲ{àÑâªûD‘êK\‚û$À/Ä?Š^Rt΄)R—”˜Mô¦o½¸2L³oy05ºÖ5ÅËÓ¿Yo÷ôœ‘ÍSªþ¦¢%Z×( º>mæ²ñv~ÿŠv`g½e–ê#þh­Ã;ŸÛc ù¾¢ÍÄ^QÏEí²ª»DÑWŠÚB÷@Ñå÷\ѵÜ-¹Ó=s½SÝç0E§Óét$ªèbÞ}ÜkE_ºuëŠ<£ºÃŸß‹ššƒµS˜ÚMcw/Ú(긟²½Xè3½¢õvÑÌ[%Žvµ°ÉÄ»öµ¢æÃhîTwù³{Ѷ©úk¼¸î+Ó¢Hõ÷˜6ÿ[z¨~ÁÓ Eÿ÷,zVáþ²"Õ‡(R-M©–&ŠTKEª¥ùXEã8ŽÀ­ ¼L”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš£ã8~ p¸"ÕÏ ŠTKEª¥‰"ÕÒD‘ji¢HmŽAu‡á¼™øèIÕEªO¹Äÿ‰ƒ(ø3a æ%%æFàK²´W†iö4vé_n­kеvï˜Ï÷ÅÖãÍ4Õ OÑ5ÐKÝt} ÚÍ¥ï™[÷»þÞn•MWÿ¼Ú0‹Öáí>á>xm&®­goWi–ùÒO}¡¨-t]~]­²,ÓNSÝr˜¢Óét:Õ=ºhu•h­è‹B·n=È¢ù¶Î¢uKm?½µûù^<»½éñ^ô¤ÐõϬ4e/Rí9§Îl¦W´Žg3oõýßÃÜU±UBô_@»Øj|]kÕîø“{ѳҢZ‡(Rý¦­ÿ‹tP}ƒ(R-ÍŸS¤úO1F‘jaÆ(R-ÌÙP©–åb(ŠT«2úXEã8ŽÀ­ ¼L”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš£ã8~ p¸"ÕÏ ŠTKEª¥‰"ÕÒD‘jiþ¶¢a§µßPݲšûÅê{C^–,úJÑWª+ÞYäÙWòñЇé~>/&Ó‡{é–ÓuîõÑip¾»‡ržv›µ¬{]dZô6Ö®~÷pK—eÒýím÷ò̧+º†cŠ€ƒ{G{Óômv‚¼šÕ<¶Y}óôƒV¿îŸÈ¢õÿ{>·å©–]EÛ•Û¾fénø‘¢núꯈ¢þ‹¿UªEmÛ[ù–xóð²ÒFѵ®]4ÓÿŠN§ÓéHv¹ ø&‹Ô¡gyôkE_'à׊v ÝßÉ¢fÏiR¨¯Fö¢/mBÙWįÝÒ,Šî…n1Ó+ÚÝžïs›8÷;ѵ,Ý/}¡›m\ÆæwÜ+l¯¨]à:ýöÞ¾fþ‰½¨/PªOYÏýγª¿J©Ý±Éš{f\·uÕo󃧣HµcÉÿk}¼"Õœ1ŠT 3F‘jaΆ¢Hµ,CQ¤Z•ÉÐÇ*ÇqüàhEàe¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€Ò­hÇñS8€Ã©~Q¤Zš(R-M©–&ŠTKEªƒêçþÛУª¿O©¾Ä]Lü”¯ SÏç¥Ñ~Ê–©ka¾»Þ´Š–¡—I·5o‹.“ïo»Omfªîò']ƒsæ ;ÇÒê/÷Ñ&Ÿî3Ú•›žÍkçW/š¾tô7³h«U(7‘_)Ú–¼>“Ö=ýk׫E‘ꊗÍeê\Š^W´ª‘[E«Õ.·5N§Ó‘¨> SÔÅ~_ѺÐ=Q´ZáÑ—±y¯ê}/jRhŽUëa9 z?öö¢6w¾­(…Nmi£¾šémÃvÛX¦}î¿U¿Y÷²TWè–ÝB×¾kž©ºË_Ý‹¶MÕ’D‘ê·™öø'_ÿ;sU×D‘jiþ¢"Õˆ(R-M©–&ŠTKEª¥ùXEã8ŽÀ­ ¼L”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš£ã8~ p¸"ÕÏ ŠTKEª¥‰"ÕÒD‘ji¢HuÅ ºÃ¹ÿ6ôh†ê3îϾ¶J©¾Èwƒ«º%Š^Q48Lá9Ÿ—F²)[¦®…ùîzÓwºq™t[ó¶hãdÜžTòG]ƒ}æ ;ÇÒê/÷Ñ&î3Ú•›ž®P®×{–L5‹ºH5‰Ôî9}7±ïŠUŸIëžnîz½(R]ó²¢¹LËÑëŠV5r•½sáœóñi¥;LÑét:‰êC:E]ì÷­ ÝE«VoÞ:Õ/È^ԤЯÖÃrô~ìíEmîì+Ê^ôB·˜émSå¶\f.ý·ê7ë^–ê Ý2°)t·/ãúî§uîïEÛ¦jA¢Hõ ¦}þi|®jO©–æo*Rýgˆ"ÕÒD‘ji¢Hµ4Q¤ZšU4Žãø!ÀÑŠÀËD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥9ZÑ8Žã§p‡+Rý ¢Hµ4Q¤Zš(R-M©–æÏ+Tw8÷߆ög¬{ï÷V|}‚ÚÉ"Õž…<Š~Â]Ñà0Åä|^Mœ¦l™ºæ»ëMÑûJëÞé¡Õé:ëöÈí~[ým{ÓÿŽ¢ëÿ{Šƒ{ÇÒê/÷Ñ®ø-+mzÛ›yÚ÷þEë¿moúÊ¢U–lh÷œ>0ë¨wjùà7½EÛû•¢ýWFÑEsÜÏUæA°Ú‚¸Û»<¹Zã~¿¯húÑŠN§ÓéHöu±ßW´Î€~woWZ÷ö…n½Lÿ§ì~>›?îîEM Íah=,§AïÇö¢ ݃é¨Ð-fzEÛˆÜv•IÀÜ¿-i×¾M¡»}×·\¿†fù¦D6Ò›B×þAóÇô—ö¢mSõüÞJª_EªO˜¶ïöÃ^öø¾Wõ%¾õh©~›dÀϸ+Rý§‰"ÕÒD‘ji¢Hµ4Q¤ZšU4Žãø!ÀÑŠÀËD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥9ZÑ8Žã§p‡+Rý ¢Hµ4Q¤Zš(R-M©–&ŠT_gP}Ä—ƒªoEª¯E¿Â÷ SˆÏç¥Ñ„ýÖ{¦xŸv¹i óÓ×úÕ׉¢{Pon±´;¾n-Æîù´ø»Mk„ª¾L­¢:_šDZ ¯&6£;ŠÖ7oÔÂ(ú¡¢¥þõŠ.¿MÑét:‰ê·è"ßV°'Šú§šÙË5Y°ág{Q“BK°ßÛ‹¢`—w Ýb¦W4K˜+W;ñ>írÓÄÖ|?õÆU_$ŠÖµéA·El=ñè«>%ŠÞU´)[×”š~ª¿F½EkÉ"€×ù¾"ÕŠŒQ¤Z˜1ŠT s6Eªe¹Š"ÕªL†>VÑ8Žã‡pG+/E¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”&ŠJE¥‰"€ÒD@i¢ 4QPš((M”æhEã8ŽŸÀ®Hõ3ˆ"ÕÒD‘ji¢Hµ4Q¤Zš(R}—Aõ¿&ŠTß%ŠÞä EƒÃòóyi´¦Û×)ÃýÔ ›ú¦Yó©éPýQÔÄõýI’ŽÛŒUGghf>uªß!ŠÖm$t1½¶V“š'›è7馃=ªß"Š^U´º®ÞM5l£hîû·N§Ó‘¨~Î@WÈú½¢G…n¹þ3ŠŽä‡{Q“BM¼+êfþ£…àHÞ*t‹™^ÑRÑ6©1Y½Ïo+]7µëPýQ´)OOBùV˜Uß%о©èK{ןê/EßStxE‘jmÆ(R-ÌEª…9Š"Õ²\ E‘jU&C«hÇñCø±çý,­pQIEND®B`‚libpqxx-3.1.1/doc/html/Reference/functions_0x73.html0000664000175000017500000002742612076703502017231 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- s -

libpqxx-3.1.1/doc/html/Reference/a00105.html0000664000175000017500000002035312076703501015235 00000000000000 libpqxx: pqxx::too_many_connections Class Reference
pqxx::too_many_connections Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::too_many_connections:
pqxx::broken_connection pqxx::failure pqxx::pqxx_exception

Public Member Functions

 too_many_connections (const std::string &err)
- Public Member Functions inherited from pqxx::broken_connection
 broken_connection ()
 broken_connection (const std::string &)
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::too_many_connections::too_many_connections ( const std::string &  err)
explicit

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00100.js0000664000175000017500000000025612076703502014701 00000000000000var a00100 = [ [ "syntax_error", "a00100.html#a4f9f763f575081c79c255f7e6e0d852a", null ], [ "syntax_error", "a00100.html#a35ecbf64c26b9c3d4798725cbc3f25b9", null ] ];libpqxx-3.1.1/doc/html/Reference/a00250.html0000664000175000017500000001301312076703501015231 00000000000000 libpqxx: Member List
pqxx::insufficient_privilege Member List

This is the complete list of members for pqxx::insufficient_privilege, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
insufficient_privilege(const std::string &err)pqxx::insufficient_privilegeexplicit
insufficient_privilege(const std::string &err, const std::string &Q)pqxx::insufficient_privilege
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00308.html0000664000175000017500000001022112076703501015233 00000000000000 libpqxx: Member List
pqxx::internal::namedclass Member List

This is the complete list of members for pqxx::internal::namedclass, including all inherited members.

classname() const pqxx::internal::namedclass
description() const pqxx::internal::namedclass
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
libpqxx-3.1.1/doc/html/Reference/a00041.html0000664000175000017500000007611112076703501015237 00000000000000 libpqxx: pqxx::result::field Class Reference

Reference to a field in a result set. More...

#include <result.hxx>

Inheritance diagram for pqxx::result::field:
pqxx::result::const_fielditerator pqxx::result::const_reverse_fielditerator

Public Types

typedef size_t size_type

Public Member Functions

 field (const tuple &T, tuple::size_type C) throw ()
 Constructor.
template<>
bool to (const char *&Obj) const
 Specialization: to(const char *&).
Comparison
bool operator== (const field &) const
 Byte-by-byte comparison of two fields (all nulls are considered equal)
bool operator!= (const field &rhs) const
 Byte-by-byte comparison (all nulls are considered equal)
Column information
const char * name () const
 Column name.
oid type () const
 Column type.
oid table () const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
tuple::size_type num () const
tuple::size_type table_column () const
 What column number in its originating table did this column come from?
Content access
const char * c_str () const
 Read as plain C string.
template<typename T >
bool to (T &Obj) const
 Read value into Obj; or leave Obj untouched and return false if null.
template<typename T >
bool operator>> (T &Obj) const
 Read value into Obj; or leave Obj untouched and return false if null.
template<typename T >
bool to (T &Obj, const T &Default) const
 Read value into Obj; or use Default & return false if null.
template<typename T >
as (const T &Default) const
 Return value as object of given type, or Default if null.
template<typename T >
as () const
 Return value as object of given type, or throw exception if null.
bool is_null () const
size_type size () const throw ()

Protected Member Functions

tuple::size_type col () const throw ()

Protected Attributes

tuple m_tup
tuple::size_type m_col

Detailed Description

Reference to a field in a result set.

A field represents one entry in a tuple. It represents an actual value in the result set, and can be converted to various types.

Member Typedef Documentation

Constructor & Destructor Documentation

pqxx::result::field::field ( const tuple T,
tuple::size_type  C 
) throw ()

Constructor.

Create field as reference to a field in a result set.

Parameters
TTuple that this field is part of.
CColumn number of this field.

Member Function Documentation

template<typename T >
T pqxx::result::field::as ( const T &  Default) const

Return value as object of given type, or Default if null.

Note that unless the function is instantiated with an explicit template argument, the Default value's type also determines the result type.

template<typename T >
T pqxx::result::field::as ( ) const

Return value as object of given type, or throw exception if null.

const char* pqxx::result::field::c_str ( ) const

Read as plain C string.

Since the field's data is stored internally in the form of a zero-terminated C string, this is the fastest way to read it. Use the to() or as() functions to convert the string to other types such as int, or to C++ strings.

Referenced by pqxx::binarystring::binarystring(), pqxx::from_string(), operator==(), and pqxx::to_string().

tuple::size_type pqxx::result::field::col ( ) const throw ()
protected
bool pqxx::result::field::is_null ( ) const

Referenced by operator==().

const char* pqxx::result::field::name ( ) const

Column name.

bool pqxx::result::field::operator!= ( const field rhs) const

Byte-by-byte comparison (all nulls are considered equal)

Warning
See operator==() for important information about this operator
bool pqxx::result::field::operator== ( const field rhs) const

Byte-by-byte comparison of two fields (all nulls are considered equal)

Warning
null handling is still open to discussion and change!

Handling of null values differs from that in SQL where a comparison involving a null value yields null, so nulls are never considered equal to one another or even to themselves.

Null handling also probably differs from the closest equivalent in C++, which is the NaN (Not-a-Number) value, a singularity comparable to SQL's null. This is because the builtin == operator demands that a == a.

The usefulness of this operator is questionable. No interpretation whatsoever is imposed on the data; 0 and 0.0 are considered different, as are null vs. the empty string, or even different (but possibly equivalent and equally valid) encodings of the same Unicode character etc.

References c_str(), is_null(), and size().

template<typename T >
bool pqxx::result::field::operator>> ( T &  Obj) const

Read value into Obj; or leave Obj untouched and return false if null.

size_type pqxx::result::field::size ( ) const throw ()
oid pqxx::result::field::table ( ) const

What table did this column come from? Requires PostgreSQL 7.4 C API.

Only defined if the libpqxx library was compiled against a libpq version that supports the PQftable function.

If you get a link error saying this function is undefined, that must be because libpqxx was compiled against an older version of libpq. The PQftable function first became available in PostgreSQL 7.4.

tuple::size_type pqxx::result::field::table_column ( ) const

What column number in its originating table did this column come from?

template<typename T >
bool pqxx::result::field::to ( T &  Obj) const

Read value into Obj; or leave Obj untouched and return false if null.

References pqxx::from_string().

template<typename T >
bool pqxx::result::field::to ( T &  Obj,
const T &  Default 
) const

Read value into Obj; or use Default & return false if null.

template<>
bool pqxx::result::field::to ( const char *&  Obj) const

Specialization: to(const char *&).

The buffer has the same lifetime as the data in this result (i.e. of this result object, or the last remaining one copied from it etc.), so take care not to use it after the last result object referring to this query result is destroyed.

oid pqxx::result::field::type ( ) const

Column type.

Member Data Documentation

tuple::size_type pqxx::result::field::m_col
protected
tuple pqxx::result::field::m_tup
protected

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00095.html0000664000175000017500000002377512076703501015260 00000000000000 libpqxx: pqxx::string_traits< const char * > Struct Template Reference
pqxx::string_traits< const char * > Struct Template Reference

String traits for C-style string ("pointer to const char") More...

#include <strconv.hxx>

Static Public Member Functions

static const char * name ()
static bool has_null ()
static bool is_null (const char *t)
static const char * null ()
static void from_string (const char Str[], const char *&Obj)
static std::string to_string (const char *Obj)

Detailed Description

template<>
struct pqxx::string_traits< const char * >

String traits for C-style string ("pointer to const char")

Member Function Documentation

static void pqxx::string_traits< const char * >::from_string ( const char  Str[],
const char *&  Obj 
)
static
static bool pqxx::string_traits< const char * >::has_null ( )
static
static bool pqxx::string_traits< const char * >::is_null ( const char *  t)
static
static const char* pqxx::string_traits< const char * >::name ( )
static
static const char* pqxx::string_traits< const char * >::null ( )
static
static std::string pqxx::string_traits< const char * >::to_string ( const char *  Obj)
static

The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00012.js0000664000175000017500000000014412076703502014677 00000000000000var a00012 = [ [ "basic_transaction", "a00012.html#ac37eaf1787575f972034ddb87c496eb7", null ] ];libpqxx-3.1.1/doc/html/Reference/a00304.html0000664000175000017500000000665312076703501015245 00000000000000 libpqxx: Member List
pqxx::internal::deref_ptr< T > Member List

This is the complete list of members for pqxx::internal::deref_ptr< T >, including all inherited members.

operator()(T *i) const pqxx::internal::deref_ptr< T >
libpqxx-3.1.1/doc/html/Reference/a00066.html0000664000175000017500000002606712076703501015253 00000000000000 libpqxx: pqxx::notify_listener Class Reference
pqxx::notify_listener Class Reference

#include <notify-listen.hxx>

Public Member Functions

 notify_listener (connection_base &C, const std::string &N)
 Constructor. Registers the listener with connection C.
virtual ~notify_listener () throw ()
const std::string & name () const
virtual void operator() (int be_pid)=0
 Overridable: action to invoke when notification arrives.

Protected Member Functions

connection_baseConn () const throw ()
connection_baseconn () const throw ()
 Get the connection that this listener listens on.

Constructor & Destructor Documentation

pqxx::notify_listener::notify_listener ( connection_base C,
const std::string &  N 
)

Constructor. Registers the listener with connection C.

Parameters
CConnection this listener resides in.
NName of the notification to listen for.
pqxx::notify_listener::~notify_listener ( ) throw ()
virtual

Member Function Documentation

connection_base& pqxx::notify_listener::Conn ( ) const throw ()
protected
Deprecated:
Use conn() instead.
connection_base& pqxx::notify_listener::conn ( ) const throw ()
protected

Get the connection that this listener listens on.

const std::string& pqxx::notify_listener::name ( ) const
virtual void pqxx::notify_listener::operator() ( int  be_pid)
pure virtual

Overridable: action to invoke when notification arrives.

Parameters
be_pidProcess ID of the database backend process that served our connection when the notification arrived. The actual process ID behind the connection may have changed by the time this method is called.

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00233.html0000664000175000017500000000730312076703501015237 00000000000000 libpqxx: Member List
pqxx::conversion_error Member List

This is the complete list of members for pqxx::conversion_error, including all inherited members.

conversion_error(const std::string &)pqxx::conversion_errorexplicit
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
libpqxx-3.1.1/doc/html/Reference/a00094.js0000664000175000017500000000071512076703502014715 00000000000000var a00094 = [ [ "from_string", "a00094.html#a5cbb125963a89a699067083b427af668", null ], [ "has_null", "a00094.html#a3eb1069f8c250f8d19f20ce53cb200a9", null ], [ "is_null", "a00094.html#adc93379fe5f2ddc78e1f8144c0f735ab", null ], [ "name", "a00094.html#a492de5b973073ced2b6df88ef2e2deb1", null ], [ "null", "a00094.html#a758dc122ae4ab3926b0110baa7146cc5", null ], [ "to_string", "a00094.html#af1b0d4263b555e6a90dbf6a2e2e7b73e", null ] ];libpqxx-3.1.1/doc/html/Reference/navtreeindex4.js0000664000175000017500000000567112076703502016666 00000000000000var NAVTREEINDEX4 = { "a00199.html#gad1faeced6ee13b17fbc3aca21712cc7c":[4,4,15], "a00199.html#gad40c643f4f483941c07c7f25d9091abc":[4,4,11], "a00199.html#gae711f65dd793a70629f97a2e0e54d8db":[4,4,4], "a00199.html#gae711f65dd793a70629f97a2e0e54d8db":[6,0,0,10,13], "a00199.html#gaeb5da84878d4ea8f902f956b8240e73e":[4,4,17], "a00199.html#gaeb5da84878d4ea8f902f956b8240e73e":[6,0,0,3,27], "a00200.html":[4,5], "a00200.html#ga26edb910e4563d1115e22c627914e98b":[4,5,6], "a00200.html#ga710db2d58482a4ea8ebbb822c2b0d417":[4,5,5], "a00200.html#ga830f18f804ec3e4cc8bab713169fb529":[4,5,8], "a00200.html#ga8911912522c75dd0b154fefdde735272":[4,5,7], "a00201.html":[4,6], "a00202.html":[4,7], "a00202.html#ga82685329d6fd91f5ab30772d266fe5f0":[4,7,5], "a00202.html#gab81d0f16865bb70a79d4acb0d0657259":[4,7,4], "a00203.html":[4,8], "a00204.html":[4,9], "a00205.html":[4,10], "a00206.html":[3], "annotated.html":[6,0], "classes.html":[6,1], "functions.html":[6,3,0,0], "functions.html":[6,3,0], "functions_0x62.html":[6,3,0,1], "functions_0x63.html":[6,3,0,2], "functions_0x64.html":[6,3,0,3], "functions_0x65.html":[6,3,0,4], "functions_0x66.html":[6,3,0,5], "functions_0x67.html":[6,3,0,6], "functions_0x68.html":[6,3,0,7], "functions_0x69.html":[6,3,0,8], "functions_0x6c.html":[6,3,0,9], "functions_0x6d.html":[6,3,0,10], "functions_0x6e.html":[6,3,0,11], "functions_0x6f.html":[6,3,0,12], "functions_0x70.html":[6,3,0,13], "functions_0x71.html":[6,3,0,14], "functions_0x72.html":[6,3,0,15], "functions_0x73.html":[6,3,0,16], "functions_0x74.html":[6,3,0,17], "functions_0x75.html":[6,3,0,18], "functions_0x76.html":[6,3,0,19], "functions_0x77.html":[6,3,0,20], "functions_0x7e.html":[6,3,0,21], "functions_enum.html":[6,3,4], "functions_eval.html":[6,3,5], "functions_func.html":[6,3,1], "functions_func.html":[6,3,1,0], "functions_func_0x62.html":[6,3,1,1], "functions_func_0x63.html":[6,3,1,2], "functions_func_0x64.html":[6,3,1,3], "functions_func_0x65.html":[6,3,1,4], "functions_func_0x66.html":[6,3,1,5], "functions_func_0x67.html":[6,3,1,6], "functions_func_0x68.html":[6,3,1,7], "functions_func_0x69.html":[6,3,1,8], "functions_func_0x6c.html":[6,3,1,9], "functions_func_0x6d.html":[6,3,1,10], "functions_func_0x6e.html":[6,3,1,11], "functions_func_0x6f.html":[6,3,1,12], "functions_func_0x70.html":[6,3,1,13], "functions_func_0x71.html":[6,3,1,14], "functions_func_0x72.html":[6,3,1,15], "functions_func_0x73.html":[6,3,1,16], "functions_func_0x74.html":[6,3,1,17], "functions_func_0x75.html":[6,3,1,18], "functions_func_0x77.html":[6,3,1,19], "functions_func_0x7e.html":[6,3,1,20], "functions_rela.html":[6,3,6], "functions_type.html":[6,3,3], "functions_vars.html":[6,3,2], "hierarchy.html":[6,2], "index.html":[], "modules.html":[4], "namespacemembers.html":[5,1,0], "namespacemembers_enum.html":[5,1,4], "namespacemembers_eval.html":[5,1,5], "namespacemembers_func.html":[5,1,1], "namespacemembers_type.html":[5,1,3], "namespacemembers_vars.html":[5,1,2], "namespaces.html":[5,0], "pages.html":[] }; libpqxx-3.1.1/doc/html/Reference/a00235.html0000664000175000017500000001300512076703501015235 00000000000000 libpqxx: Member List
pqxx::feature_not_supported Member List

This is the complete list of members for pqxx::feature_not_supported, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
feature_not_supported(const std::string &err)pqxx::feature_not_supportedexplicit
feature_not_supported(const std::string &err, const std::string &Q)pqxx::feature_not_supported
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00067.html0000664000175000017500000001745012076703502015251 00000000000000 libpqxx: std::numeric_limits< T > Struct Template Reference
std::numeric_limits< T > Struct Template Reference

Work around lacking "limits" header. More...

#include <compiler-internal.hxx>

Public Member Functions

template<>
long max () throw()
template<>
long min () throw()

Static Public Member Functions

static T max () throw ()
static T min () throw ()

Detailed Description

template<typename T>
struct std::numeric_limits< T >

Work around lacking "limits" header.

Member Function Documentation

template<typename T >
static T std::numeric_limits< T >::max ( ) throw ()
static
template<>
long std::numeric_limits< long >::max ( ) throw()
template<typename T >
static T std::numeric_limits< T >::min ( ) throw ()
static
template<>
long std::numeric_limits< long >::min ( ) throw()

The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00101.html0000664000175000017500000005737212076703501015244 00000000000000 libpqxx: pqxx::tablereader Class Reference
pqxx::tablereader Class Reference

Efficiently pull data directly out of a table. More...

#include <tablereader.hxx>

Inheritance diagram for pqxx::tablereader:
pqxx::tablestream pqxx::internal::transactionfocus pqxx::internal::namedclass

Public Member Functions

 tablereader (transaction_base &, const std::string &Name, const std::string &Null=std::string())
template<typename ITER >
 tablereader (transaction_base &, const std::string &Name, ITER begincolumns, ITER endcolumns)
 Read only the given sequence of columns.
template<typename ITER >
 tablereader (transaction_base &, const std::string &Name, ITER begincolumns, ITER endcolumns, const std::string &Null)
 ~tablereader () throw ()
template<typename TUPLE >
tablereaderoperator>> (TUPLE &)
 operator bool () const throw ()
bool operator! () const throw ()
bool get_raw_line (std::string &Line)
 Read a line of raw, unparsed table data.
template<typename TUPLE >
void tokenize (std::string, TUPLE &) const
virtual void complete ()
 Finish stream action, check for errors, and detach from transaction.
- Public Member Functions inherited from pqxx::tablestream
 tablestream (transaction_base &Trans, const std::string &Null=std::string())
virtual ~tablestream ()=0 throw ()
- Public Member Functions inherited from pqxx::internal::transactionfocus
 transactionfocus (transaction_base &t)
- Public Member Functions inherited from pqxx::internal::namedclass
 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Additional Inherited Members

- Protected Member Functions inherited from pqxx::tablestream
const std::string & NullStr () const
bool is_finished () const throw ()
void base_close ()
- Static Protected Member Functions inherited from pqxx::tablestream
template<typename ITER >
static std::string columnlist (ITER colbegin, ITER colend)
 Construct a comma-separated column list from given sequence.
- Protected Attributes inherited from pqxx::internal::transactionfocus
transaction_basem_Trans

Detailed Description

Efficiently pull data directly out of a table.

A tablereader provides efficient read access to a database table. This is not as flexible as a normal query using the result class however:

  • Can only dump tables, not views or arbitrary queries
  • Has no knowledge of metadata
  • Is unable to reorder, rename, omit or enrich fields
  • Does not support filtering of records

On the other hand, it can read rows of data and transform them into any container or container-like object that supports STL back-inserters. Since the tablereader has no knowledge of the types of data expected, it treats all fields as strings.

Constructor & Destructor Documentation

pqxx::tablereader::tablereader ( transaction_base T,
const std::string &  Name,
const std::string &  Null = std::string() 
)
template<typename ITER >
pqxx::tablereader::tablereader ( transaction_base T,
const std::string &  Name,
ITER  begincolumns,
ITER  endcolumns 
)

Read only the given sequence of columns.

Since
PostgreSQL backend 7.3

References pqxx::tablestream::columnlist().

template<typename ITER >
pqxx::tablereader::tablereader ( transaction_base T,
const std::string &  Name,
ITER  begincolumns,
ITER  endcolumns,
const std::string &  Null 
)
pqxx::tablereader::~tablereader ( ) throw ()

Member Function Documentation

void pqxx::tablereader::complete ( )
virtual

Finish stream action, check for errors, and detach from transaction.

It is recommended that you call this function before the tablestream's destructor is run. This function will check any final errors which may not become apparent until the transaction is committed otherwise.

As an added benefit, this will free up the transaction while the tablestream object itself still exists.

Implements pqxx::tablestream.

bool pqxx::tablereader::get_raw_line ( std::string &  Line)

Read a line of raw, unparsed table data.

Parameters
LineVariable to hold the raw data line read from the table.
Returns
Whether a line could be read

Referenced by pqxx::tablewriter::operator<<().

pqxx::tablereader::operator bool ( ) const throw ()
bool pqxx::tablereader::operator! ( ) const throw ()
template<typename TUPLE >
tablereader & pqxx::tablereader::operator>> ( TUPLE &  T)
template<typename TUPLE >
void pqxx::tablereader::tokenize ( std::string  Line,
TUPLE &  T 
) const

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00124_source.html0000664000175000017500000001064012076703500016613 00000000000000 libpqxx: config-internal-autotools.h Source File
config-internal-autotools.h
1 /* Automatically generated from config.h: internal/autotools config. */
2 #define PACKAGE "libpqxx"
3 #define PACKAGE_BUGREPORT "Jeroen T. Vermeulen <jtv@xs4all.nl>"
4 #define PACKAGE_NAME "libpqxx"
5 #define PACKAGE_STRING "libpqxx 3.1.1"
6 #define PACKAGE_TARNAME "libpqxx"
7 #define PACKAGE_VERSION "3.1.1"
8 #define VERSION "3.1.1"
libpqxx-3.1.1/doc/html/Reference/a00177_source.html0000664000175000017500000001534512076703501016633 00000000000000 libpqxx: version.hxx Source File
version.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/version.hxx
5  *
6  * DESCRIPTION
7  * libpqxx version description.
8  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/version instead.
9  *
10  * Copyright (c) 2009, Jeroen T. Vermeulen <jtv@xs4all.nl>
11  *
12  * See COPYING for copyright license. If you did not receive a file called
13  * COPYING with this source code, please notify the distributor of this mistake,
14  * or contact the author.
15  *
16  *-------------------------------------------------------------------------
17  */
18 #ifndef PQXX_H_VERSION
19 
21 #define PQXX_VERSION "3.1.1"
22 
24 #define PQXX_VERSION_MAJOR 3
25 
27 #define PQXX_VERSION_MINOR 1
28 
30 #define PQXX_ABI "3.1"
31 
32 #endif
libpqxx-3.1.1/doc/html/Reference/a00200.html0000664000175000017500000002634712076703501015242 00000000000000 libpqxx: Connection classes
Connection classes

Classes

class  pqxx::connect_direct
 Connection policy; creates an immediate connection to a database. More...
class  pqxx::connect_lazy
 Lazy connection policy; causes connection to be deferred until first use. More...
class  pqxx::connect_async
 Asynchronous connection policy; connects "in the background". More...
class  pqxx::connect_null
 Nonfunctional, always-down connection policy for testing/debugging purposes. More...
class  pqxx::connectionpolicy

Typedefs

typedef basic_connection
< connect_direct > 
pqxx::connection
 The "standard" connection type: connect to database right now.
typedef basic_connection
< connect_lazy > 
pqxx::lazyconnection
 A "lazy" connection type: connect to database only when needed.
typedef basic_connection
< connect_async > 
pqxx::asyncconnection
 "Asynchronous" connection type: start connecting, but don't wait for it
typedef basic_connection
< connect_null > 
pqxx::nullconnection
 A "dummy" connection type: don't connect to any database at all.

Detailed Description

The connection classes are where the use of a database begins. You must connect to a database in order to access it. Your connection represents a session with the database. In the context of that connection you can create transactions, which in turn you can use to execute SQL. A connection can have only one regular transaction open at a time, but you can break your work down into any number of consecutive transactions and there is also some support for transaction nesting (using the subtransaction class).

Many things come together in the connection classes. Handling of error and warning messages, for example, is defined by noticers in the context of a connection. Prepared statements are also defined here.

Several types of connections are available, including plain connection and lazyconnection. These types are typedefs combining a derivative of the connection_base class (where essentially all connection-related functionality is defined) with a policy class which governs how the connection is to be established. You pass details such as the database you wish to connect to, username and password, and so on as as PostgreSQL "connection string" and certain environment variables that you can learn more about from the core postgres documentation.

See the connection_base documentation for a full list of features inherited by all connection classes. Connections can be deactivated and reactivated if needed (within reason, of course–you can't do this in the middle of a transaction), and where possible, disabled or broken connections are transparently re-enabled when you use them again. This is called "reactivation," and you may need to understand it because you'll want it disabled in certain situations.

You can also set certain variables defined by the backend to influence its behaviour for the duration of your session, such as the applicable text encoding. You can query the connection's capabilities (because some features will depend on the versions of libpq and of the server backend that you're using) and parameters that you set in your connection string and/or environment variables.

Typedef Documentation

typedef basic_connection<connect_async> pqxx::asyncconnection

"Asynchronous" connection type: start connecting, but don't wait for it

typedef basic_connection<connect_direct> pqxx::connection

The "standard" connection type: connect to database right now.

typedef basic_connection<connect_lazy> pqxx::lazyconnection

A "lazy" connection type: connect to database only when needed.

typedef basic_connection<connect_null> pqxx::nullconnection

A "dummy" connection type: don't connect to any database at all.

libpqxx-3.1.1/doc/html/Reference/a00247.html0000664000175000017500000001404012076703501015240 00000000000000 libpqxx: Member List
pqxx::undefined_column Member List

This is the complete list of members for pqxx::undefined_column, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
syntax_error(const std::string &err)pqxx::syntax_errorexplicit
syntax_error(const std::string &err, const std::string &Q)pqxx::syntax_error
undefined_column(const std::string &err)pqxx::undefined_columnexplicit
undefined_column(const std::string &err, const std::string &Q)pqxx::undefined_column
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00298.html0000664000175000017500000002506012076703501015252 00000000000000 libpqxx: Member List
pqxx::internal::sql_cursor Member List

This is the complete list of members for pqxx::internal::sql_cursor, including all inherited members.

accesspolicy enum namepqxx::cursor_base
all()pqxx::cursor_basestatic
backward_all()pqxx::cursor_basestatic
close()pqxx::internal::sql_cursor
cursor_base(connection_base &, const std::string &Name, bool embellish_name=true)pqxx::cursor_baseprotected
difference_type typedefpqxx::cursor_base
empty_result() const pqxx::internal::sql_cursor
endpos() const pqxx::internal::sql_cursor
fetch(difference_type rows, difference_type &displacement)pqxx::internal::sql_cursor
fetch(difference_type rows)pqxx::internal::sql_cursor
forward_only enum valuepqxx::cursor_base
loose enum valuepqxx::cursor_base
m_namepqxx::cursor_baseprotected
move(difference_type rows, difference_type &displacement)pqxx::internal::sql_cursor
move(difference_type rows)pqxx::internal::sql_cursor
name() const pqxx::cursor_base
next()pqxx::cursor_basestatic
owned enum valuepqxx::cursor_base
ownershippolicy enum namepqxx::cursor_base
pos() const pqxx::internal::sql_cursor
prior()pqxx::cursor_basestatic
random_access enum valuepqxx::cursor_base
read_only enum valuepqxx::cursor_base
size_type typedefpqxx::cursor_base
sql_cursor(transaction_base &t, const std::string &query, const std::string &cname, cursor_base::accesspolicy ap, cursor_base::updatepolicy up, cursor_base::ownershippolicy op, bool hold)pqxx::internal::sql_cursor
sql_cursor(transaction_base &t, const std::string &cname, cursor_base::ownershippolicy op)pqxx::internal::sql_cursor
update enum valuepqxx::cursor_base
updatepolicy enum namepqxx::cursor_base
~sql_cursor()pqxx::internal::sql_cursor
libpqxx-3.1.1/doc/html/Reference/a00064.png0000664000175000017500000000272712076703501015066 00000000000000‰PNG  IHDRÌø—ù{PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2fIDATxíëÒ«*›E•ïÿÈÇ x‰‰‰ßlΤlƒ€0-8þ%Æ[(Imà2’d—‘$‹“ ã!IŸ`OF’>ä=™ 0Nן—B‹æá:=úá?õþ¦;†òx•ÕIÒEÞ”™b§UÐæ8jΞ{Qý)?²:IºÆ»+SO–ÎWšSÃT7×W÷ìxJÒ5ž•~µÌT÷×2Û}ô¢9[Œµz³@ÏÉd/Å^8o^-Óß‹wæ×+s®R7³Ùœ8–ºŸo³“/‹fI:âÞæI™ñ%?ÿfü;2’ô‚?‘$øŒ$YÄe$É"½LŒ16Àt­Ð’L×5dÓ’LïÒŽMS2žÍlâ2q‹¸ €E\À".`—°ˆËXÄe,â2q‹¸ €E\à=bŒ±ˆ’Ô.#IqI²ÈC2!,¥ñ¤ïóŒL¾u™0?ûþ¼Ö°Ãx5Ÿ—Å™.Öu“¤Ïù–Ìã #…Í‘¨*²²$Ýãk+“ǘ/N±±öìþM™~7íËL ’t“_È!çÍ Z/¯ÊÞ™mØ•IéÀâ6;ÈfÙ š©bÎkƒ$Ýæ‹Ûì×_I:Çe$©¤)Iú{\F’,â2’d‘^&Æà:€VhI¦ë²iI¦wiǦ)Ïf6q‹¸ €E\À".`—°ˆËXÄe,â2q‹¸ €E\À".ð1ÆØ DIj—‘$‹¸Œ$YäA™ I?ÅeŠÃd^ yàkk.R¯þo:e’ô·eÆp¦xt|äq¥‘t**$é3î¯L w¹ i*M­;2õÅÍøc™ùá×2ÃϺL¾¯ò{+³ü[’ÉÞŠðâ1·2Ù,-Èy6[NU”¤÷ùÆ6»ôùýWæa™ñÅ¿™~%é_I²ˆËH’E\F’,ÒËÄc#<@Ð -Ét]C6-Éô.íØ4%ãÙ À&.`—°ˆËXÄe,â2q‹¸ €E\À".`—°ˆËXÄeÞ#Æ[(Imà2’d—‘$‹\• ;¥ª}¿A’¶T}OFßk:šìý•9Œù†Ì¥A^=ÏL&(Œ}úóRÈîÆP–ÓÔwºulLW뤩ÛÜkwdtnËG_#ž—`é´ÎžW/÷¬2Óc_íùEV·mØ §ê•ݶ}s÷A©·Z™ºG:çÛ´3gWf;r^— ]4ÉÝ«(>–~RPAýh÷eæÅLÍËH™iÖQgݯÊlCÛ¬Œ¤P²Üz.s¾¨ç2»ÛlO&{7ŽÀÑ;s"³™´Üg2óÒ}$s”Ív_¸*›•bGÙ,ßf)î)3Õû»”©²Ù`U½³Í¾ðÁxç^Iú*wd6+‘½ÔÙC’ÞàÆÝ·Vf3矮K&#Iÿ:.#IqI²H/cŒð@+´$Óu Ù´$Ó»´cÓ”Œg3›¸ €E\À".`—°ˆËXÄe,â2q‹¸ €E\À".`—xBh@¸ €E\À"?‘9²¯ß4­E飨þ\æ\ à:Weú~cÇ!—§B6íZ;<•³ú™Bf­›oXJ郑ª×áN¸,³Ä2Í 8ÖPˈëú=™ƒRº¸¾é®¯L=A:ï5ןˬ{±¬6/3O]E=í³'eŠù¾)³»Í~ “½» à•LööIëOd޲Y1qJ@õŠYc#Se³q†ªà5ïl³›_€ßò#™áEÎ>7›îð¿\ó¸ €E\À"Ã*„Úà?9¢Ù PIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00029.html0000664000175000017500000001502412076703501015241 00000000000000 libpqxx: pqxx::conversion_error Class Reference
pqxx::conversion_error Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::conversion_error:
pqxx::pqxx_exception

Public Member Functions

 conversion_error (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::conversion_error::conversion_error ( const std::string &  whatarg)
explicit

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00258.html0000664000175000017500000001410212076703501015241 00000000000000 libpqxx: Member List
pqxx::plpgsql_too_many_rows Member List

This is the complete list of members for pqxx::plpgsql_too_many_rows, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
plpgsql_error(const std::string &err)pqxx::plpgsql_errorexplicit
plpgsql_error(const std::string &err, const std::string &Q)pqxx::plpgsql_error
plpgsql_too_many_rows(const std::string &err)pqxx::plpgsql_too_many_rowsexplicit
plpgsql_too_many_rows(const std::string &err, const std::string &Q)pqxx::plpgsql_too_many_rows
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00029.js0000664000175000017500000000014312076703502014706 00000000000000var a00029 = [ [ "conversion_error", "a00029.html#aa26b38ec0b49d925597fb0924d34e5a2", null ] ];libpqxx-3.1.1/doc/html/Reference/a00287.html0000664000175000017500000002413112076703501015246 00000000000000 libpqxx: Member List
pqxx::tablereader Member List

This is the complete list of members for pqxx::tablereader, including all inherited members.

base_close()pqxx::tablestreamprotected
classname() const pqxx::internal::namedclass
columnlist(ITER colbegin, ITER colend)pqxx::tablestreamprotectedstatic
complete()pqxx::tablereadervirtual
description() const pqxx::internal::namedclass
get_raw_line(std::string &Line)pqxx::tablereader
is_finished() const pqxx::tablestreamprotected
m_Transpqxx::internal::transactionfocusprotected
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
NullStr() const pqxx::tablestreamprotected
operator bool() const pqxx::tablereader
operator!() const pqxx::tablereader
operator>>(TUPLE &)pqxx::tablereader
reg_pending_error(const std::string &)pqxx::internal::transactionfocusprotected
register_me()pqxx::internal::transactionfocusprotected
registered() const pqxx::internal::transactionfocusprotected
tablereader(transaction_base &, const std::string &Name, const std::string &Null=std::string())pqxx::tablereader
tablereader(transaction_base &, const std::string &Name, ITER begincolumns, ITER endcolumns)pqxx::tablereader
tablereader(transaction_base &, const std::string &Name, ITER begincolumns, ITER endcolumns, const std::string &Null)pqxx::tablereader
tablestream(transaction_base &Trans, const std::string &Null=std::string())pqxx::tablestreamexplicit
tokenize(std::string, TUPLE &) const pqxx::tablereader
transactionfocus(transaction_base &t)pqxx::internal::transactionfocusexplicit
unregister_me()pqxx::internal::transactionfocusprotected
~tablereader()pqxx::tablereader
~tablestream()=0pqxx::tablestreampure virtual
libpqxx-3.1.1/doc/html/Reference/annotated.html0000664000175000017500000013647412076703502016421 00000000000000 libpqxx: Class List
Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 12345]
oNpqxxThe home of all libpqxx classes, functions, templates, etc
|oNinternalPrivate namespace for libpqxx's internal use; do not access
|oNprepareDedicated namespace for helper types related to prepared statements
|oCbasic_connectionThe ultimate template that defines a connection type
|oCbinarystring
|oCconnect_directConnection policy; creates an immediate connection to a database
|oCconnect_lazyLazy connection policy; causes connection to be deferred until first use
|oCconnect_asyncAsynchronous connection policy; connects "in the background"
|oCconnect_nullNonfunctional, always-down connection policy for testing/debugging purposes
|oCnoticerBase class for user-definable error/warning message processor
|oCnonnoticerNo-op message noticer; produces no output
|oCconnection_baseConnection_base abstract base class; represents a connection to a database
|oCscoped_noticerTemporarily set different noticer for connection, then restore old one
|oCdisable_noticerTemporarily disable the notice processor
|oCconnectionpolicy
|oCcursor_baseCommon definitions for cursor types
|oCstateless_cursor"Stateless cursor" class: easy API for retrieving parts of result sets
|oCicursorstreamSimple read-only cursor represented as a stream of results
|oCicursor_iteratorApproximate istream_iterator for icursorstream
|oCdbtransaction
|oCpqxx_exceptionMixin base class to identify libpqxx-specific exception types
|oCfailureRun-time failure encountered by libpqxx, similar to std::runtime_error
|oCbroken_connectionException class for lost or failed backend connection
|oCsql_errorException class for failed queries
|oCin_doubt_error"Help, I don't know whether transaction was committed successfully!"
|oCinternal_errorInternal error in libpqxx library
|oCusage_errorError in usage of libpqxx library, similar to std::logic_error
|oCargument_errorInvalid argument passed to libpqxx, similar to std::invalid_argument
|oCconversion_error
|oCrange_errorSomething is out of range, similar to std::out_of_range
|oCfeature_not_supportedDatabase feature not supported in current setup
|oCdata_exceptionError in data provided to SQL statement
|oCintegrity_constraint_violation
|oCrestrict_violation
|oCnot_null_violation
|oCforeign_key_violation
|oCunique_violation
|oCcheck_violation
|oCinvalid_cursor_state
|oCinvalid_sql_statement_name
|oCinvalid_cursor_name
|oCsyntax_error
|oCundefined_column
|oCundefined_function
|oCundefined_table
|oCinsufficient_privilege
|oCinsufficient_resourcesResource shortage on the server
|oCdisk_full
|oCout_of_memory
|oCtoo_many_connections
|oCplpgsql_errorPL/pgSQL error
|oCplpgsql_raiseException raised in PL/pgSQL procedure
|oCplpgsql_no_data_found
|oCplpgsql_too_many_rows
|oCisolation_traitsTraits class to describe an isolation level; primarly for libpqxx's own use
|oClargeobjectIdentity of a large object
|oClargeobjectaccessAccessor for large object's contents
|oClargeobject_streambufStreambuf to use large objects in standard I/O streams
|oCbasic_ilostreamInput stream that gets its data from a large object
|oCbasic_olostreamOutput stream that writes data back to a large object
|oCbasic_lostreamStream that reads and writes a large object
|oCnontransaction
|oCnotify_listener
|oCpipelineProcesses several queries in FIFO manner, optimized for high throughput
|oCresultQuery or command result set
|oCfield_streambuf
|oCbasic_fieldstreamInput stream that gets its data from a result field
|oCbasic_robusttransaction
|oCrobusttransactionSlightly slower, better-fortified version of transaction
|oCstring_traitsTraits class for use in string conversions
|oCstring_traits< const char * >String traits for C-style string ("pointer to const char")
|oCstring_traits< char * >String traits for non-const C-style string ("pointer to char")
|oCstring_traits< char[N]>String traits for C-style string constant ("array of char")
|oCstring_traits< std::string >
|oCstring_traits< const std::string >
|oCstring_traits< std::stringstream >
|oCsubtransaction"Transaction" nested within another transaction
|oCtablereaderEfficiently pull data directly out of a table
|oCtablestreamBase class for streaming data to/from database tables
|oCtablewriterEfficiently write data directly to a database table
|oCbasic_transaction
|oCtransactionStandard back-end transaction, templatized on isolation level
|oCtransaction_base
|oCtransactor
|oCthread_safety_modelDescriptor of library's thread-safety model
|\CitemsContainer of items with easy contents initialization and string rendering
\NstdSTL namespace
 oCnumeric_limitsWork around lacking "limits" header
 oCchar_traitsWork around missing std::char_traits
 oCchar_traits< char >Work around missing std::char_traits<char>
 oCchar_traits< unsigned char >Work around missing std::char_traits<unsigned char>
 \Cback_insert_iterator< pqxx::tablewriter >Specialized back_insert_iterator for tablewriter
libpqxx-3.1.1/doc/html/Reference/a00193.html0000664000175000017500000001004212076703502015237 00000000000000 libpqxx: pqxx::prepare::internal Namespace Reference
pqxx::prepare::internal Namespace Reference

Classes

struct  prepared_def
 Internal representation of a prepared statement definition. More...
struct  get_sqltype
 Utility functor: get prepared-statement parameter's SQL type string. More...
libpqxx-3.1.1/doc/html/Reference/nav_h.png0000664000175000017500000000014212076703500015333 00000000000000‰PNG  IHDR ,é@)IDATxíÝA @BQ­³šÛ›Ð¢Žáà) )ëý éaÅèÜ¿Æo‡RlÐßIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00107.html0000664000175000017500000014214312076703501015241 00000000000000 libpqxx: pqxx::transaction_base Class Reference

#include <transaction_base.hxx>

Inheritance diagram for pqxx::transaction_base:
pqxx::internal::namedclass pqxx::dbtransaction pqxx::nontransaction pqxx::basic_robusttransaction pqxx::basic_transaction pqxx::subtransaction pqxx::robusttransaction< ISOLATIONLEVEL > pqxx::transaction< ISOLATIONLEVEL, READWRITE >

Public Types

typedef isolation_traits
< read_committed
isolation_tag
 If nothing else is known, our isolation level is at least read_committed.

Public Member Functions

virtual ~transaction_base ()=0
void commit ()
 Commit the transaction.
void abort ()
 Abort the transaction.
std::string esc (const char str[]) const
 Escape string for use as SQL string literal in this transaction.
std::string esc (const char str[], size_t maxlen) const
 Escape string for use as SQL string literal in this transaction.
std::string esc (const std::string &str) const
 Escape string for use as SQL string literal in this transaction.
std::string esc_raw (const unsigned char str[], size_t len) const
 Escape binary data for use as SQL string literal in this transaction.
std::string esc_raw (const std::string &) const
 Escape binary data for use as SQL string literal in this transaction.
template<typename T >
std::string quote (const T &t) const
 Represent object as SQL string, including quoting & escaping.
result exec (const std::string &Query, const std::string &Desc=std::string())
 Execute query.
result exec (const std::stringstream &Query, const std::string &Desc=std::string())
internal::parameterized_invocation parameterized (const std::string &query)
 Parameterize a statement.
connection_baseconn () const
 Connection this transaction is running in.
void set_variable (const std::string &Var, const std::string &Val)
 Set session variable in this connection.
std::string get_variable (const std::string &)
 Get currently applicable value of variable.
Prepared statements
prepare::invocation prepared (const std::string &statement=std::string())
 Execute prepared statement.
Error/warning output
void process_notice (const char Msg[]) const
 Have connection process warning message.
void process_notice (const std::string &Msg) const
 Have connection process warning message.
- Public Member Functions inherited from pqxx::internal::namedclass
 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Protected Member Functions

 transaction_base (connection_base &c, bool direct=true)
 Create a transaction (to be called by implementation classes only)
void Begin ()
 Begin transaction (to be called by implementing class)
void End () throw ()
 End transaction. To be called by implementing class' destructor.
virtual void do_begin ()=0
 To be implemented by derived implementation class: start transaction.
virtual result do_exec (const char Query[])=0
 To be implemented by derived implementation class: perform query.
virtual void do_commit ()=0
 To be implemented by derived implementation class: commit transaction.
virtual void do_abort ()=0
 To be implemented by derived implementation class: abort transaction.
result DirectExec (const char C[], int Retries=0)
 Execute query on connection directly.
void reactivation_avoidance_clear () throw ()
 Forget about any reactivation-blocking resources we tried to allocate.

Protected Attributes

internal::reactivation_avoidance_counter m_reactivation_avoidance
 Resources allocated in this transaction that make reactivation impossible.

Friends

class pqxx::internal::gate::transaction_transactionfocus
class pqxx::internal::gate::transaction_tablereader
class pqxx::internal::gate::transaction_tablewriter
class pqxx::internal::gate::transaction_subtransaction

Member Typedef Documentation

If nothing else is known, our isolation level is at least read_committed.

Constructor & Destructor Documentation

pqxx::transaction_base::~transaction_base ( )
pure virtual
pqxx::transaction_base::transaction_base ( connection_base c,
bool  direct = true 
)
explicitprotected

Create a transaction (to be called by implementation classes only)

The optional name, if nonempty, must begin with a letter and may contain letters and digits only.

Parameters
cThe connection that this transaction is to act on.
directRunning directly in connection context (i.e. not nested)?

References conn(), and transaction_base().

Referenced by transaction_base().

Member Function Documentation

void pqxx::transaction_base::abort ( )

Abort the transaction.

No special effort is required to call this function; it will be called implicitly when the transaction is destructed.

void pqxx::transaction_base::Begin ( )
protected

Begin transaction (to be called by implementing class)

Will typically be called from implementing class' constructor.

Referenced by pqxx::transaction< ISOLATIONLEVEL, READWRITE >::transaction().

void pqxx::transaction_base::commit ( )

Commit the transaction.

Unless this function is called explicitly, the transaction will not be committed (actually the nontransaction implementation breaks this rule, hence the name).

Once this function returns, the whole transaction will typically be irrevocably completed in the database. There is also, however, a minute risk that the connection to the database may be lost at just the wrong moment. In that case, libpqxx may be unable to determine whether the transaction was completed or aborted and an in_doubt_error will be thrown to make this fact known to the caller. The robusttransaction implementation takes some special precautions to reduce this risk.

pqxx::result pqxx::transaction_base::DirectExec ( const char  C[],
int  Retries = 0 
)
protected

Execute query on connection directly.

Parameters
CQuery or command to execute
RetriesNumber of times to retry the query if it fails. Be extremely careful with this option; if you retry in the middle of a transaction, you may be setting up a new connection transparently and executing the latter part of the transaction without a backend transaction being active (and with the former part aborted).
virtual void pqxx::transaction_base::do_abort ( )
protectedpure virtual

To be implemented by derived implementation class: abort transaction.

Implemented in pqxx::dbtransaction.

virtual void pqxx::transaction_base::do_begin ( )
protectedpure virtual

To be implemented by derived implementation class: start transaction.

Implemented in pqxx::dbtransaction.

virtual void pqxx::transaction_base::do_commit ( )
protectedpure virtual

To be implemented by derived implementation class: commit transaction.

Implemented in pqxx::dbtransaction.

virtual result pqxx::transaction_base::do_exec ( const char  Query[])
protectedpure virtual

To be implemented by derived implementation class: perform query.

Implemented in pqxx::dbtransaction.

void pqxx::transaction_base::End ( ) throw ()
protected

End transaction. To be called by implementing class' destructor.

Referenced by pqxx::transaction< ISOLATIONLEVEL, READWRITE >::~transaction().

pqxx::result pqxx::transaction_base::exec ( const std::string &  Query,
const std::string &  Desc = std::string() 
)

Execute query.

Perform a query in this transaction.

This is one of the most important functions in libpqxx.

Most libpqxx exceptions can be thrown from here, including sql_error, broken_connection, and many sql_error subtypes such as feature_not_supported or insufficient_privilege. But any exception thrown by the C++ standard library may also occur here. All exceptions will be derived from std::exception, however, and all libpqxx-specific exception types are derived from pqxx::pqxx_exception.

Parameters
QueryQuery or command to execute
DescOptional identifier for query, to help pinpoint SQL errors
Returns
A result set describing the query's or command's result

Referenced by pqxx::internal::sql_cursor::sql_cursor().

result pqxx::transaction_base::exec ( const std::stringstream &  Query,
const std::string &  Desc = std::string() 
)

References exec().

Referenced by exec().

string pqxx::transaction_base::get_variable ( const std::string &  Var)

Get currently applicable value of variable.

First consults an internal cache of variables that have been set (whether in the ongoing transaction or in the connection) using the set_variable functions. If it is not found there, the database is queried.

Warning
Do not mix the set_variable with raw "SET" queries, and do not try to set or get variables while a pipeline or table stream is active.
This function used to be declared as const but isn't anymore.
internal::parameterized_invocation pqxx::transaction_base::parameterized ( const std::string &  query)

Parameterize a statement.

pqxx::prepare::invocation pqxx::transaction_base::prepared ( const std::string &  statement = std::string())

Execute prepared statement.

Prepared statements are defined using the connection classes' prepare() function, and continue to live on in the ongoing session regardless of the context they were defined in (unless explicitly dropped using the connection's unprepare() function). Their execution however, like other forms of query execution, requires a transaction object.

Just like param_declaration is a helper class that lets you tag parameter declarations onto the statement declaration, the invocation class returned here lets you tag parameter values onto the call:

result run_mystatement(transaction_base &T)
{
return T.prepared("mystatement")("param1")(2)()(4).exec();
}

Here, parameter 1 (written as "<tt>$1</tt>" in the statement's body) is a string that receives the value "param1"; the second parameter is an integer with the value 2; the third receives a null, making its type irrelevant; and number 4 again is an integer. The ultimate invocation of exec() is essential; if you forget this, nothing happens.

To see whether any prepared statement has been defined under a given name, use:

T.prepared("mystatement").exists()
Warning
Do not try to execute a prepared statement manually through direct SQL statements. This is likely not to work, and even if it does, is likely to be slower than using the proper libpqxx functions. Also, libpqxx knows how to emulate prepared statements if some part of the infrastructure does not support them.
Actual definition of the prepared statement on the backend may be deferred until its first use, which means that any errors in the prepared statement may not show up until it is executed–and perhaps abort the ongoing transaction in the process.

If you leave out the statement name, the call refers to the nameless statement instead.

void pqxx::transaction_base::process_notice ( const char  Msg[]) const

Have connection process warning message.

void pqxx::transaction_base::process_notice ( const std::string &  Msg) const

Have connection process warning message.

void pqxx::transaction_base::reactivation_avoidance_clear ( ) throw ()
protected

Forget about any reactivation-blocking resources we tried to allocate.

References pqxx::result::clear().

void pqxx::transaction_base::set_variable ( const std::string &  Var,
const std::string &  Val 
)

Set session variable in this connection.

The new value is typically forgotten if the transaction aborts. Known exceptions to this rule are nontransaction, and PostgreSQL versions prior to 7.3. In the case of nontransaction, the set value will be kept regardless; but in that case, if the connection ever needs to be recovered, the set value will not be restored.

Parameters
VarThe variable to set
ValThe new value to store in the variable

Friends And Related Function Documentation

friend class pqxx::internal::gate::transaction_subtransaction
friend
friend class pqxx::internal::gate::transaction_tablereader
friend
friend class pqxx::internal::gate::transaction_tablewriter
friend
friend class pqxx::internal::gate::transaction_transactionfocus
friend

Member Data Documentation

internal::reactivation_avoidance_counter pqxx::transaction_base::m_reactivation_avoidance
protected

Resources allocated in this transaction that make reactivation impossible.

This number may be negative!


The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00116.html0000664000175000017500000001537512076703501015247 00000000000000 libpqxx: pqxx::usage_error Class Reference

Error in usage of libpqxx library, similar to std::logic_error. More...

#include <except.hxx>

Inheritance diagram for pqxx::usage_error:
pqxx::pqxx_exception

Public Member Functions

 usage_error (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

Error in usage of libpqxx library, similar to std::logic_error.

Constructor & Destructor Documentation

pqxx::usage_error::usage_error ( const std::string &  whatarg)
explicit

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/functions_rela.html0000664000175000017500000001545612076703502017453 00000000000000 libpqxx: Class Members - Related Functions
 
libpqxx-3.1.1/doc/html/Reference/a00130_source.html0000664000175000017500000004261012076703500016612 00000000000000 libpqxx: connection.hxx Source File
connection.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/connection.hxx
5  *
6  * DESCRIPTION
7  * definition of the pqxx::connection and pqxx::lazyconnection classes.
8  * Different ways of setting up a backend connection.
9  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/connection instead.
10  *
11  * Copyright (c) 2001-2008, Jeroen T. Vermeulen <jtv@xs4all.nl>
12  *
13  * See COPYING for copyright license. If you did not receive a file called
14  * COPYING with this source code, please notify the distributor of this mistake,
15  * or contact the author.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PQXX_H_CONNECTION
20 #define PQXX_H_CONNECTION
21 
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
24 
25 #include "pqxx/connectionpolicy"
26 #include "pqxx/basic_connection"
27 
28 namespace pqxx
29 {
30 
73 
74 
84 class PQXX_LIBEXPORT connect_direct : public connectionpolicy
85 {
86 public:
87  explicit connect_direct(const PGSTD::string &opts) : connectionpolicy(opts) {}
88  virtual handle do_startconnect(handle);
89 };
90 
93 
94 
96 
100 class PQXX_LIBEXPORT connect_lazy : public connectionpolicy
101 {
102 public:
103  explicit connect_lazy(const PGSTD::string &opts) : connectionpolicy(opts) {}
104  virtual handle do_completeconnect(handle);
105 };
106 
107 
110 
111 
113 
119 class PQXX_LIBEXPORT connect_async : public connectionpolicy
120 {
121 public:
122  explicit connect_async(const PGSTD::string &opts);
123  virtual handle do_startconnect(handle);
124  virtual handle do_completeconnect(handle);
125  virtual handle do_dropconnect(handle) throw ();
126  virtual bool is_ready(handle) const throw ();
127 
128 private:
130  bool m_connecting;
131 };
132 
133 
136 
137 
139 
143 class PQXX_LIBEXPORT connect_null : public connectionpolicy
144 {
145 public:
146  explicit connect_null(const PGSTD::string &opts) : connectionpolicy(opts) {}
147 };
148 
149 
152 
157 }
158 
159 #include "pqxx/compiler-internal-post.hxx"
160 
161 #endif
162 
libpqxx-3.1.1/doc/html/Reference/a00203.js0000664000175000017500000000324212076703502014703 00000000000000var a00203 = [ [ "pqxx_exception", "a00077.html", null ], [ "failure", "a00039.html", null ], [ "broken_connection", "a00014.html", null ], [ "sql_error", "a00090.html", null ], [ "in_doubt_error", "a00047.html", null ], [ "internal_error", "a00051.html", null ], [ "usage_error", "a00116.html", null ], [ "argument_error", "a00004.html", null ], [ "conversion_error", "a00029.html", null ], [ "range_error", "a00079.html", null ], [ "feature_not_supported", "a00040.html", null ], [ "data_exception", "a00031.html", null ], [ "integrity_constraint_violation", "a00050.html", null ], [ "restrict_violation", "a00083.html", null ], [ "not_null_violation", "a00064.html", null ], [ "foreign_key_violation", "a00043.html", null ], [ "unique_violation", "a00115.html", null ], [ "check_violation", "a00018.html", null ], [ "invalid_cursor_state", "a00053.html", null ], [ "invalid_sql_statement_name", "a00054.html", null ], [ "invalid_cursor_name", "a00052.html", null ], [ "syntax_error", "a00100.html", null ], [ "undefined_column", "a00111.html", null ], [ "undefined_function", "a00112.html", null ], [ "undefined_table", "a00113.html", null ], [ "insufficient_privilege", "a00048.html", null ], [ "insufficient_resources", "a00049.html", null ], [ "disk_full", "a00037.html", null ], [ "out_of_memory", "a00068.html", null ], [ "too_many_connections", "a00105.html", null ], [ "plpgsql_error", "a00072.html", null ], [ "plpgsql_raise", "a00074.html", null ], [ "plpgsql_no_data_found", "a00073.html", null ], [ "plpgsql_too_many_rows", "a00075.html", null ] ];libpqxx-3.1.1/doc/html/Reference/a00108.html0000664000175000017500000003042412076703501015240 00000000000000 libpqxx: pqxx::internal::transactionfocus Class Reference
pqxx::internal::transactionfocus Class Reference

#include <transaction_base.hxx>

Inheritance diagram for pqxx::internal::transactionfocus:
pqxx::internal::namedclass pqxx::pipeline pqxx::subtransaction pqxx::tablestream pqxx::tablereader pqxx::tablewriter

Public Member Functions

 transactionfocus (transaction_base &t)
- Public Member Functions inherited from pqxx::internal::namedclass
 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Protected Member Functions

void register_me ()
void unregister_me () throw ()
void reg_pending_error (const std::string &) throw ()
bool registered () const throw ()

Protected Attributes

transaction_basem_Trans

Constructor & Destructor Documentation

pqxx::internal::transactionfocus::transactionfocus ( transaction_base t)
explicit

Member Function Documentation

void pqxx::internal::transactionfocus::reg_pending_error ( const std::string &  err) throw ()
protected
void pqxx::internal::transactionfocus::register_me ( )
protected
bool pqxx::internal::transactionfocus::registered ( ) const throw ()
protected
void pqxx::internal::transactionfocus::unregister_me ( ) throw ()
protected

Member Data Documentation

transaction_base& pqxx::internal::transactionfocus::m_Trans
protected

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00014.js0000664000175000017500000000027012076703502014701 00000000000000var a00014 = [ [ "broken_connection", "a00014.html#abead818453c7c47646f924c0b6cbff7d", null ], [ "broken_connection", "a00014.html#a003c1c85d2c6c40f6d5b985394aa34b2", null ] ];libpqxx-3.1.1/doc/html/Reference/a00030.js0000664000175000017500000000307412076703502014704 00000000000000var a00030 = [ [ "difference_type", "a00030.html#a746c725327e1dfd598708bfeb8834992", null ], [ "size_type", "a00030.html#a732bb16c01dc3266d424267252d4f1b0", null ], [ "accesspolicy", "a00030.html#a591ac7d2302288890c04e6159eb6d30e", [ [ "forward_only", "a00030.html#a591ac7d2302288890c04e6159eb6d30eaf440221f717464c87f043899cc117cbf", null ], [ "random_access", "a00030.html#a591ac7d2302288890c04e6159eb6d30ea7f6c1ed7719885433353a78946b2c5f3", null ] ] ], [ "ownershippolicy", "a00030.html#a8d5f8214ede2ab27dd588defc2847330", [ [ "owned", "a00030.html#a8d5f8214ede2ab27dd588defc2847330a3ace6a7a5ca4ec3b486f2f35fd2420b0", null ], [ "loose", "a00030.html#a8d5f8214ede2ab27dd588defc2847330a4c37408c49492bfe9f012812226dd1fd", null ] ] ], [ "updatepolicy", "a00030.html#aba6fa56f1ef2d25c3c73240de6b9c212", [ [ "read_only", "a00030.html#aba6fa56f1ef2d25c3c73240de6b9c212a8122c0c4a5eb9c9dbf27ab40a2686eb0", null ], [ "update", "a00030.html#aba6fa56f1ef2d25c3c73240de6b9c212a12fa229ee3e760f1ca86d66304554b63", null ] ] ], [ "cursor_base", "a00030.html#a92ebe0bfff015fc1d85ab30d1ac97ef4", null ], [ "all", "a00030.html#a56b530ba6b18f3fcdb5b93a0087922c9", null ], [ "backward_all", "a00030.html#ae1e1a28e596a78fa8ed8c4eeccbe6369", null ], [ "name", "a00030.html#ab46d430e0ecfa545ff3764f867654caf", null ], [ "next", "a00030.html#a2a10af042c1ece1f5faf55479ada0319", null ], [ "prior", "a00030.html#aed642c9d80cddf181853d36c6e8ccb93", null ], [ "m_name", "a00030.html#a947b286d508fad4a1823f8b13a5ccef3", null ] ];libpqxx-3.1.1/doc/html/Reference/a00113.html0000664000175000017500000002644112076703501015240 00000000000000 libpqxx: pqxx::undefined_table Class Reference
pqxx::undefined_table Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::undefined_table:
pqxx::syntax_error pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 undefined_table (const std::string &err)
 undefined_table (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::syntax_error
 syntax_error (const std::string &err)
 syntax_error (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::undefined_table::undefined_table ( const std::string &  err)
explicit
pqxx::undefined_table::undefined_table ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00071.html0000664000175000017500000006256112076703501015246 00000000000000 libpqxx: pqxx::pipeline Class Reference
pqxx::pipeline Class Reference

Processes several queries in FIFO manner, optimized for high throughput. More...

#include <pipeline.hxx>

Inheritance diagram for pqxx::pipeline:
pqxx::internal::transactionfocus pqxx::internal::namedclass

Classes

struct  getquery
class  Query

Public Types

typedef long query_id

Public Member Functions

 pipeline (transaction_base &, const std::string &Name=std::string())
 ~pipeline () throw ()
query_id insert (const std::string &)
 Add query to the pipeline.
void complete ()
 Wait for all ongoing or pending operations to complete.
void flush ()
 Forget all ongoing or pending operations and retrieved results.
void cancel ()
 Cancel ongoing query, if any.
bool is_finished (query_id) const
 Is result for given query available?
result retrieve (query_id qid)
 Retrieve result for given query.
std::pair< query_id, resultretrieve ()
 Retrieve oldest unretrieved result (possibly wait for one)
bool empty () const throw ()
int retain (int retain_max=2)
 Set maximum number of queries to retain before issuing them to the backend.
void resume ()
 Resume retained query emission (harmless when not needed)
- Public Member Functions inherited from pqxx::internal::transactionfocus
 transactionfocus (transaction_base &t)
- Public Member Functions inherited from pqxx::internal::namedclass
 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Additional Inherited Members

- Protected Member Functions inherited from pqxx::internal::transactionfocus
void register_me ()
void unregister_me () throw ()
void reg_pending_error (const std::string &) throw ()
bool registered () const throw ()
- Protected Attributes inherited from pqxx::internal::transactionfocus
transaction_basem_Trans

Detailed Description

Processes several queries in FIFO manner, optimized for high throughput.

Use a pipeline if you want to execute queries without always sitting still while they execute. Result retrieval is decoupled from execution request; queries "go in at the front" and results "come out the back." Actually results may be retrieved in any order, if you want.

Feel free to pump as many queries into the pipeline as possible, even if they were generated after looking at a result from the same pipeline. To get the best possible throughput, try to make insertion of queries run as far ahead of results retrieval as possible; issue each query as early as possible and retrieve their results as late as possible, so the pipeline has as many ongoing queries as possible at any given time. In other words, keep it busy!

One warning: if any of the queries you insert leads to a syntactic error, the error may be returned as if it were generated by an older query. Future versions may try to work around this if working in a nontransaction.

Member Typedef Documentation

Constructor & Destructor Documentation

pqxx::pipeline::pipeline ( transaction_base t,
const std::string &  Name = std::string() 
)
explicit
pqxx::pipeline::~pipeline ( ) throw ()

Member Function Documentation

void pqxx::pipeline::cancel ( )

Cancel ongoing query, if any.

May cancel any or all of the queries that have been inserted at this point whose results have not yet been retrieved. If the pipeline lives in a backend transaction, that transaction may be left in a nonfunctional state in which it can only be aborted.

Therefore, either use this function in a nontransaction, or abort the transaction after calling it.

void pqxx::pipeline::complete ( )

Wait for all ongoing or pending operations to complete.

Detaches from the transaction when done.

bool pqxx::pipeline::empty ( ) const throw ()
void pqxx::pipeline::flush ( )

Forget all ongoing or pending operations and retrieved results.

Queries already sent to the backend may still be completed, depending on implementation and timing.

Any error state (unless caused by an internal error) will also be cleared. This is mostly useful in a nontransaction, since a backend transaction is aborted automatically when an error occurs.

Detaches from the transaction when done.

pipeline::query_id pqxx::pipeline::insert ( const std::string &  q)

Add query to the pipeline.

Queries are accumulated in the pipeline and sent to the backend in a concatenated format, separated by semicolons. The queries you insert must not use this construct themselves, or the pipeline will get hopelessly confused!

Returns
Identifier for this query, unique only within this pipeline
bool pqxx::pipeline::is_finished ( pipeline::query_id  q) const

Is result for given query available?

References pqxx::to_string().

void pqxx::pipeline::resume ( )

Resume retained query emission (harmless when not needed)

int pqxx::pipeline::retain ( int  retain_max = 2)

Set maximum number of queries to retain before issuing them to the backend.

The pipeline will perform better if multiple queries are issued at once, but retaining queries until the results are needed (as opposed to issuing them to the backend immediately) may negate any performance benefits the pipeline can offer.

Recommended practice is to set this value no higher than the number of queries you intend to insert at a time.

Parameters
retain_maxA nonnegative "retention capacity;" passing zero will cause queries to be issued immediately
Returns
Old retention capacity

References pqxx::to_string().

result pqxx::pipeline::retrieve ( query_id  qid)

Retrieve result for given query.

If the query failed for whatever reason, this will throw an exception. The function will block if the query has not finished yet.

Warning
If results are retrieved out-of-order, i.e. in a different order than the one in which their queries were inserted, errors may "propagate" to subsequent queries.

References retrieve().

Referenced by retrieve().

pair< pipeline::query_id, result > pqxx::pipeline::retrieve ( )

Retrieve oldest unretrieved result (possibly wait for one)

Returns
The query's identifier and its result set

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00049.js0000664000175000017500000000030212076703502014705 00000000000000var a00049 = [ [ "insufficient_resources", "a00049.html#ab9c012d8591a9699677c8e3d2bfdf02a", null ], [ "insufficient_resources", "a00049.html#af88552eb661d1bc459308d2ff8576840", null ] ];libpqxx-3.1.1/doc/html/Reference/a00225.html0000664000175000017500000000724712076703501015247 00000000000000 libpqxx: Member List
pqxx::pqxx_exception Member List

This is the complete list of members for pqxx::pqxx_exception, including all inherited members.

base() const =0pqxx::pqxx_exceptionpure virtual
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
libpqxx-3.1.1/doc/html/Reference/a00212.html0000664000175000017500000001405012076703501015231 00000000000000 libpqxx: Member List
pqxx::connect_async Member List

This is the complete list of members for pqxx::connect_async, including all inherited members.

connect_async(const std::string &opts)pqxx::connect_asyncexplicit
connectionpolicy(const std::string &opts)pqxx::connectionpolicyexplicit
do_completeconnect(handle)pqxx::connect_asyncvirtual
do_disconnect(handle orig)pqxx::connectionpolicyvirtual
do_dropconnect(handle)pqxx::connect_asyncvirtual
do_startconnect(handle)pqxx::connect_asyncvirtual
handle typedefpqxx::connectionpolicy
is_ready(handle) const pqxx::connect_asyncvirtual
normalconnect(handle)pqxx::connectionpolicyprotected
options() const pqxx::connectionpolicy
~connectionpolicy()pqxx::connectionpolicyvirtual
libpqxx-3.1.1/doc/html/Reference/a00051.html0000664000175000017500000001534112076703501015236 00000000000000 libpqxx: pqxx::internal_error Class Reference
pqxx::internal_error Class Reference

Internal error in libpqxx library. More...

#include <except.hxx>

Inheritance diagram for pqxx::internal_error:
pqxx::pqxx_exception

Public Member Functions

 internal_error (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

Internal error in libpqxx library.

Constructor & Destructor Documentation

pqxx::internal_error::internal_error ( const std::string &  whatarg)
explicit

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00135_source.html0000664000175000017500000017664112076703501016634 00000000000000 libpqxx: cursor.hxx Source File
cursor.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/cursor.hxx
5  *
6  * DESCRIPTION
7  * definition of the iterator/container-style cursor classes
8  * C++-style wrappers for SQL cursors
9  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/pipeline instead.
10  *
11  * Copyright (c) 2004-2013, Jeroen T. Vermeulen <jtv@xs4all.nl>
12  *
13  * See COPYING for copyright license. If you did not receive a file called
14  * COPYING with this source code, please notify the distributor of this mistake,
15  * or contact the author.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PQXX_H_CURSOR
20 #define PQXX_H_CURSOR
21 
22 #include "pqxx/compiler-public.hxx"
23 #include "pqxx/compiler-internal-pre.hxx"
24 
25 #include <stdexcept>
26 
27 #ifdef PQXX_HAVE_LIMITS
28 #include <limits>
29 #endif
30 
31 #include "pqxx/result"
32 #include "pqxx/transaction_base"
33 
34 
35 namespace pqxx
36 {
37 class dbtransaction;
38 
39 
41 
52 class PQXX_LIBEXPORT cursor_base
53 {
54 public:
57 
59 
63  {
67  random_access
68  };
69 
71 
75  {
79  update
80  };
81 
83 
102  {
106  loose
107  };
108 
113 
114 
117  static difference_type all() throw (); //[t81]
119 
121  static difference_type next() throw () { return 1; } //[t81]
123 
125  static difference_type prior() throw () { return -1; } //[t0]
127 
129  static difference_type backward_all() throw (); //[t0]
130 
132 
134 
139  const PGSTD::string &name() const throw () { return m_name; } //[t81]
140 
141 protected:
143  const PGSTD::string &Name,
144  bool embellish_name=true);
145 
146  const PGSTD::string m_name;
147 
148 private:
150  cursor_base();
152  cursor_base(const cursor_base &);
154  cursor_base &operator=(const cursor_base &);
155 };
156 
157 
159 {
160 #ifdef PQXX_HAVE_LIMITS
161  return PGSTD::numeric_limits<int>::max()-1;
162 #else
163  return INT_MAX-1;
164 #endif
165 }
166 
168 {
169 #ifdef PQXX_HAVE_LIMITS
170  return PGSTD::numeric_limits<int>::min()+1;
171 #else
172  return INT_MIN+1;
173 #endif
174 }
175 
176 
177 namespace internal
178 {
180 
194 class PQXX_LIBEXPORT sql_cursor : public cursor_base
195 {
196 public:
198  const PGSTD::string &query,
199  const PGSTD::string &cname,
203  bool hold);
204 
206  const PGSTD::string &cname,
208 
209  ~sql_cursor() throw () { close(); }
210 
211  result fetch(difference_type rows, difference_type &displacement);
213  { difference_type d=0; return fetch(rows, d); }
214  difference_type move(difference_type rows, difference_type &displacement);
216  { difference_type d=0; return move(rows, d); }
217 
219 
225  difference_type pos() const throw () { return m_pos; }
226 
228 
234  difference_type endpos() const throw () { return m_endpos; }
235 
237  const result &empty_result() const throw () { return m_empty_result; }
238 
239  void close() throw ();
240 
241 private:
242  difference_type adjust(difference_type hoped, difference_type actual);
243  static PGSTD::string stridestring(difference_type);
245  void init_empty_result(transaction_base &);
246 
248  connection_base &m_home;
249 
251  result m_empty_result;
252 
253  result m_cached_current_row;
254 
256  bool m_adopted;
257 
259  cursor_base::ownershippolicy m_ownership;
260 
262  int m_at_end;
263 
265  difference_type m_pos;
266 
268  difference_type m_endpos;
269 };
270 
271 
274  sql_cursor &,
275  result::difference_type size,
276  result::difference_type begin_pos,
277  result::difference_type end_pos);
278 
279 } // namespace internal
280 
281 
283 
289 template<cursor_base::updatepolicy up, cursor_base::ownershippolicy op>
291 {
292 public:
295 
297  stateless_cursor(
298  transaction_base &trans,
299  const PGSTD::string &query,
300  const PGSTD::string &cname,
301  bool hold) :
302  m_cur(trans, query, cname, cursor_base::random_access, up, op, hold)
303  {
304  }
305 
307  stateless_cursor(
308  transaction_base &trans,
309  const PGSTD::string adopted_cursor) :
310  m_cur(trans, adopted_cursor, op)
311  {
312  // Put cursor in known position
313  m_cur.move(cursor_base::backward_all());
314  }
315 
316  void close() throw () { m_cur.close(); }
317 
319 
322  size_type size() { return internal::obtain_stateless_cursor_size(m_cur); }
323 
325 
336  result retrieve(difference_type begin_pos, difference_type end_pos)
337  {
339  m_cur,
340  result::difference_type(size()),
341  begin_pos,
342  end_pos);
343  }
344 
345  const PGSTD::string &name() const throw () { return m_cur.name(); }
346 
347 private:
348  internal::sql_cursor m_cur;
349 };
350 
351 
352 class icursor_iterator;
353 
354 
355 namespace internal
356 {
357 namespace gate
358 {
359 class icursor_iterator_icursorstream;
360 class icursorstream_icursor_iterator;
361 } // namespace internal::gate
362 } // namespace internal
363 
364 
366 
381 class PQXX_LIBEXPORT icursorstream
382 {
383 public:
386 
388 
400  const PGSTD::string &query,
401  const PGSTD::string &basename,
402  difference_type sstride=1); //[t81]
403 
405 
430  const result::field &cname,
431  difference_type sstride=1,
433 
434  operator bool() const throw () { return !m_done; }
435 
437 
443  icursorstream &get(result &res) { res = fetchblock(); return *this; } //[t81]
445 
451  icursorstream &operator>>(result &res) { return get(res); } //[t81]
452 
454 
458  icursorstream &ignore(PGSTD::streamsize n=1); //[t81]
459 
461 
464  void set_stride(difference_type stride); //[t81]
465  difference_type stride() const throw () { return m_stride; } //[t81]
466 
467 private:
468  result fetchblock();
469 
470  friend class internal::gate::icursorstream_icursor_iterator;
471  size_type forward(size_type n=1);
472  void insert_iterator(icursor_iterator *) throw ();
473  void remove_iterator(icursor_iterator *) const throw ();
474 
475  void service_iterators(difference_type);
476 
477  internal::sql_cursor m_cur;
478 
479  difference_type m_stride;
480  difference_type m_realpos, m_reqpos;
481 
482  mutable icursor_iterator *m_iterators;
483 
484  bool m_done;
485 };
486 
487 
489 
515 class PQXX_LIBEXPORT icursor_iterator :
516  public PGSTD::iterator<PGSTD::input_iterator_tag,
517  result,
519  const result *,
520  const result &>
521 {
522 public:
526 
527  icursor_iterator() throw (); //[t84]
528  explicit icursor_iterator(istream_type &) throw (); //[t84]
529  icursor_iterator(const icursor_iterator &) throw (); //[t84]
530  ~icursor_iterator() throw ();
531 
532  const result &operator*() const { refresh(); return m_here; } //[t84]
533  const result *operator->() const { refresh(); return &m_here; } //[t84]
534  icursor_iterator &operator++(); //[t84]
535  icursor_iterator operator++(int); //[t84]
536  icursor_iterator &operator+=(difference_type); //[t84]
537  icursor_iterator &operator=(const icursor_iterator &) throw (); //[t84]
538 
539  bool operator==(const icursor_iterator &rhs) const; //[t84]
540  bool operator!=(const icursor_iterator &rhs) const throw () //[t84]
541  { return !operator==(rhs); }
542  bool operator<(const icursor_iterator &rhs) const; //[t84]
543  bool operator>(const icursor_iterator &rhs) const //[t84]
544  { return rhs < *this; }
545  bool operator<=(const icursor_iterator &rhs) const //[t84]
546  { return !(*this > rhs); }
547  bool operator>=(const icursor_iterator &rhs) const //[t84]
548  { return !(*this < rhs); }
549 
550 private:
551  void refresh() const;
552 
553  friend class internal::gate::icursor_iterator_icursorstream;
554  difference_type pos() const throw () { return m_pos; }
555  void fill(const result &);
556 
557  icursorstream *m_stream;
558  result m_here;
559  difference_type m_pos;
560  icursor_iterator *m_prev, *m_next;
561 };
562 
563 
564 } // namespace pqxx
565 
566 #include "pqxx/compiler-internal-post.hxx"
567 
568 #endif
569 
libpqxx-3.1.1/doc/html/Reference/a00245.html0000664000175000017500000001277112076703501015247 00000000000000 libpqxx: Member List
pqxx::invalid_cursor_name Member List

This is the complete list of members for pqxx::invalid_cursor_name, including all inherited members.

failure(const std::string &)pqxx::failureexplicit
invalid_cursor_name(const std::string &err)pqxx::invalid_cursor_nameexplicit
invalid_cursor_name(const std::string &err, const std::string &Q)pqxx::invalid_cursor_name
query() const pqxx::sql_error
sql_error()pqxx::sql_error
sql_error(const std::string &)pqxx::sql_errorexplicit
sql_error(const std::string &, const std::string &Q)pqxx::sql_error
~pqxx_exception()=0pqxx::pqxx_exceptionpure virtual
~sql_error()pqxx::sql_errorvirtual
libpqxx-3.1.1/doc/html/Reference/a00076.html0000664000175000017500000004631712076703501015254 00000000000000 libpqxx: pqxx::internal::PQAlloc< T, DELETER > Class Template Reference
pqxx::internal::PQAlloc< T, DELETER > Class Template Reference

Reference-counted smart pointer to libpq-allocated object. More...

#include <util.hxx>

Public Types

typedef T content_type

Public Member Functions

 PQAlloc () throw ()
 PQAlloc (const PQAlloc &rhs) throw ()
 ~PQAlloc () throw ()
PQAllocoperator= (const PQAlloc &rhs) throw ()
 PQAlloc (T *obj) throw ()
 Assume ownership of a pointer.
void swap (PQAlloc &rhs) throw ()
 operator bool () const throw ()
 Is this pointer non-null?
bool operator! () const throw ()
 Is this pointer null?
T * operator-> () const throw (std::logic_error)
 Dereference pointer.
T & operator* () const throw (std::logic_error)
 Dereference pointer.
T * get () const throw ()
 Obtain underlying pointer.
void reset () throw ()

Detailed Description

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
class pqxx::internal::PQAlloc< T, DELETER >

Reference-counted smart pointer to libpq-allocated object.

Keep track of a libpq-allocated object, and free it once all references to it have died.

If the available PostgreSQL development files supply PQfreemem() or PQfreeNotify(), this is used to free the memory. If not, free() is used instead. This matters on Windows, where memory allocated by a DLL must be freed by the same DLL.

Warning
Copying, swapping, and destroying PQAlloc objects that refer to the same underlying libpq-allocated block is not thread-safe. If you wish to pass reference-counted objects around between threads, make sure that each of these operations is protected against concurrency with similar operations on the same object–or other copies of the same object.

Member Typedef Documentation

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
typedef T pqxx::internal::PQAlloc< T, DELETER >::content_type

Constructor & Destructor Documentation

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
pqxx::internal::PQAlloc< T, DELETER >::PQAlloc ( ) throw ()
template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
pqxx::internal::PQAlloc< T, DELETER >::PQAlloc ( const PQAlloc< T, DELETER > &  rhs) throw ()
template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
pqxx::internal::PQAlloc< T, DELETER >::~PQAlloc ( ) throw ()
template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
pqxx::internal::PQAlloc< T, DELETER >::PQAlloc ( T *  obj) throw ()
explicit

Assume ownership of a pointer.

Warning
Don't to this more than once for a given object!

Member Function Documentation

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
T* pqxx::internal::PQAlloc< T, DELETER >::get ( ) const throw ()

Obtain underlying pointer.

Ownership of the pointer's memory remains with the PQAlloc object

Referenced by pqxx::connection_base::esc_raw(), and pqxx::escape_binary().

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
pqxx::internal::PQAlloc< T, DELETER >::operator bool ( ) const throw ()

Is this pointer non-null?

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
bool pqxx::internal::PQAlloc< T, DELETER >::operator! ( ) const throw ()

Is this pointer null?

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
T& pqxx::internal::PQAlloc< T, DELETER >::operator* ( ) const throw (std::logic_error)

Dereference pointer.

Throws a logic_error if the pointer is null.

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
T* pqxx::internal::PQAlloc< T, DELETER >::operator-> ( ) const throw (std::logic_error)

Dereference pointer.

Throws a logic_error if the pointer is null.

Referenced by pqxx::internal::PQAlloc< const unsigned char >::operator*().

template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
PQAlloc& pqxx::internal::PQAlloc< T, DELETER >::operator= ( const PQAlloc< T, DELETER > &  rhs) throw ()
template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
void pqxx::internal::PQAlloc< T, DELETER >::reset ( ) throw ()
template<typename T, void(*)(T *) DELETER = freepqmem_templated<T>>
void pqxx::internal::PQAlloc< T, DELETER >::swap ( PQAlloc< T, DELETER > &  rhs) throw ()

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00086.js0000664000175000017500000000041112076703502014707 00000000000000var a00086 = [ [ "isolation_tag", "a00086.html#a8fb228809bd42b2936ada9f9573d30d6", null ], [ "robusttransaction", "a00086.html#ae28452f4e178b6c548f6294fee803632", null ], [ "~robusttransaction", "a00086.html#af1b175fd37479937c936f172803f40bb", null ] ];libpqxx-3.1.1/doc/html/Reference/a00020.png0000664000175000017500000000110412076703501015042 00000000000000‰PNG  IHDR‹P>v!PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÓIDATxíÑnà ‡EÊÿrcllðN”¸EÕE^féqÐWbŒq%i 9‹$Y9‹$Y}Ÿ%¤G’zê9na‘¤zŽ%($Ïó½WÊq!]ŠÍsXby¥¾¾q‹ËÞÈ‹,«#ͦ ÆS»³Ñ÷ŠÑŒ:Åå`É«´YήãRYÞaYWëçK#w¯6gœ ƒ|i²ôÎQ•õuòïÕª¯>G›±{ŽŠØW{ôò !Iïh8ãD,Gߟ³]þZ’¬œE’¬&c‰1Æ9ð¹“h"–Çc˜‰Xž(ÓÀÌÄâç %g°r+g°r+g°r+g°r+g°r+g°ú‡,!„0‰SÈY¬œÀê.–zÖg«½Lõõ×X¬F,Ïfj/g=WÊ!Ë%°›ç°ÅV߯䏬•ŽÍ²¬£’@ã)‹ÝÙè«ö'ØZq9/–ßeHí|fözÌÑݵ}—%Ýâ×,ÛKµ5/Å¥¶tãҲ󥑻W›s•/Í)Þ>G{öUçèý¢¯}޶æ]Ý ·è>–”¤Õß 0ÒÄqø39 €•³X-wZ!L¡ÖyFáœIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00281.html0000664000175000017500000001102512076703501015236 00000000000000 libpqxx: Member List
pqxx::string_traits< char * > Member List

This is the complete list of members for pqxx::string_traits< char * >, including all inherited members.

has_null()pqxx::string_traits< char * >static
is_null(const char *t)pqxx::string_traits< char * >static
name()pqxx::string_traits< char * >static
null()pqxx::string_traits< char * >static
to_string(char *Obj)pqxx::string_traits< char * >static
libpqxx-3.1.1/doc/html/Reference/navtreeindex2.js0000664000175000017500000003420312076703502016655 00000000000000var NAVTREEINDEX2 = { "a00060.html":[6,0,0,55], "a00060.html#a0e047fa337f4df3838e983ca922fa7a5":[6,0,0,55,13], "a00060.html#a2552356fe475dc48fb5f3badb39cccc6":[6,0,0,55,10], "a00060.html#a4adb675b5aed487e66d986fde3d54b4c":[6,0,0,55,18], "a00060.html#a546f724f294272c84c85ab4b4b415419":[6,0,0,55,4], "a00060.html#a56b79eb0d4019b7bfd63a914a530f2ca":[6,0,0,55,1], "a00060.html#a6a83ff716d73bdf627d8ad29405b297d":[6,0,0,55,5], "a00060.html#aa93b5a0de67a09ab92514670ebcca638":[6,0,0,55,8], "a00060.html#aaaad87ca613bccb90e5a8c61a45d83ef":[6,0,0,55,20], "a00060.html#aac375f66e0a9fb817e4e59a1e73f6ba7":[6,0,0,55,15], "a00060.html#abe93b38428b31cc1a533381f055fb3b8":[6,0,0,55,7], "a00060.html#ac984b12f6980c477bfd3d895576635a6":[6,0,0,55,9], "a00060.html#acb1cfe19cef8d7b46ecddaa5f2231e9a":[6,0,0,55,0], "a00060.html#ad04b47cf5b016f02e855f5e9c0bbccae":[6,0,0,55,19], "a00060.html#adaa7a89a1902ba3f13be9c7ed6c1fa0b":[6,0,0,55,3], "a00060.html#ae74922e23584d6410cf37f89f10c1a53":[6,0,0,55,16], "a00060.html#aea8ca1d1275b9a68f8b991ef253e9067":[6,0,0,55,2], "a00060.html#aef7bc42d2a46bbb09c19c802616fa559":[6,0,0,55,12], "a00060.html#af58cb0a2bfe6da7b3d17a572fd4ae573":[6,0,0,55,6], "a00060.html#af81ac99156f3a319e8c021ac2e12da42":[6,0,0,55,17], "a00060.html#afa13d389b11eac8063ade1febb7a4e2c":[6,0,0,55,11], "a00060.html#afb99c68925c9dad182c41036ead832ae":[6,0,0,55,14], "a00061.html":[6,0,0,0,14], "a00061.html#a79dcce75176eef9d2d80fdc2ec2827a7":[6,0,0,0,14,3], "a00061.html#a9c216366ea21f1c9cd03b39410185cbb":[6,0,0,0,14,1], "a00061.html#ab63de628429e771251ab8a2688ad407d":[6,0,0,0,14,2], "a00061.html#ad703d52d9d96025bf08d9da26f6829be":[6,0,0,0,14,0], "a00062.html":[6,0,0,9], "a00062.html#a59edacf42c1a404404f8850ec45c78ac":[6,0,0,9,0], "a00062.html#abf821c1422588859a72a0c7213cf0e8e":[6,0,0,9,1], "a00063.html":[6,0,0,60], "a00063.html#a0069617cbc84ba559bdcdfdf3cd97f3b":[6,0,0,60,1], "a00063.html#a8ed8b2f6aa96cef8508c84ee5369b390":[6,0,0,60,0], "a00064.html":[6,0,0,33], "a00064.html#a43eceacf51e6bb47d6bb90517a574c2a":[6,0,0,33,0], "a00064.html#a5372bb4e822109abf338516fa6b0733e":[6,0,0,33,1], "a00065.html":[6,0,0,8], "a00065.html#a01162c0ad06017f49f8f34c401cfcb15":[6,0,0,8,2], "a00065.html#a38dbbfaebde807dc9801252469320281":[6,0,0,8,1], "a00065.html#afe85ed5eb8cbd2f7399a37be557af36f":[6,0,0,8,0], "a00066.html":[6,0,0,61], "a00066.html#a0f8b3a6f5183bc9466fba30bd760af85":[6,0,0,61,5], "a00066.html#a183d105d5bd011d45843526004bc0f40":[6,0,0,61,2], "a00066.html#a61fecb70ec917b3403dff4228b69a61a":[6,0,0,61,4], "a00066.html#a9b6ca1f8939f82c391fecb7082364ec7":[6,0,0,61,3], "a00066.html#aa017125bb75b03bef2da0159fa182699":[6,0,0,61,0], "a00066.html#ac4593cefb4b75ef4373b2aa44d4bd061":[6,0,0,61,1], "a00067.html":[6,0,1,0], "a00067.html#a672ff8f843f277b741fef22594a1d78f":[6,0,1,0,2], "a00067.html#a9387cf870c1b7d0f6ced0db05614e494":[6,0,1,0,3], "a00067.html#ae5fc707d9d6ebbac808a5fb6e26690f8":[6,0,1,0,0], "a00067.html#af71385909ae48a64f6e88d19f940bcd1":[6,0,1,0,1], "a00068.html":[6,0,0,47], "a00068.html#a8e8d47b4cc8de8c9ebf4abcd39bee40b":[6,0,0,47,1], "a00068.html#ad9880e47615592429d5cb9e3fda467f3":[6,0,0,47,0], "a00069.html":[6,0,0,1,0,0,0], "a00069.html#a1b747a6f501eb642f86697ba9a59f5f6":[6,0,0,1,0,0,0,0], "a00069.html#a2848e4f145eee99ab06cb4608e19b0a9":[6,0,0,1,0,0,0,1], "a00069.html#a4c84b43298291ae805af849cf07604ce":[6,0,0,1,0,0,0,2], "a00070.html":[6,0,0,0,8], "a00070.html#a5fa125c4885b76bd9c250e1d0692ad13":[6,0,0,0,8,0], "a00070.html#a6fd084905f68c744bd791c601168103d":[6,0,0,0,8,4], "a00070.html#a96dd05cc41a36dcca337bd3971d354ab":[6,0,0,0,8,2], "a00070.html#abc61b203c68554dc43ccead818683b4a":[6,0,0,0,8,1], "a00070.html#ae8ef9f87245ddad0e4319357e82db670":[6,0,0,0,8,3], "a00071.html":[6,0,0,62], "a00071.html#a153e247a4f449ce8069379c4567738e9":[6,0,0,62,9], "a00071.html#a19c508710d0025993e41512f23de56be":[6,0,0,62,11], "a00071.html#a33a890c64efc37d76f3c649f145ff950":[6,0,0,62,6], "a00071.html#a3d89c57d7619430a3847595d8fb902bc":[6,0,0,62,8], "a00071.html#a41ad44c7f13ad198db938c84e25473a9":[6,0,0,62,1], "a00071.html#a5f5fe658349dcd9aed9c19faccf23ea4":[6,0,0,62,5], "a00071.html#a7808218284e98bb5dffaf110defd1b33":[6,0,0,62,4], "a00071.html#a839abbb0e60ac35e941a632027b4f917":[6,0,0,62,7], "a00071.html#a9edc9c6e50f25790c3707495ab9779dd":[6,0,0,62,12], "a00071.html#ab265dd1ed168022f92a207dd62bad5d1":[6,0,0,62,2], "a00071.html#ab375b0b4e02c7f1a48602c4186fbbbd7":[6,0,0,62,3], "a00071.html#ab53d0c0294ef3c3c7147be2ab55bab0e":[6,0,0,62,0], "a00071.html#af94a53d0eecb7485cb135155f912ce8e":[6,0,0,62,10], "a00072.html":[6,0,0,49], "a00072.html#a346ab5182768a7a9b25c03e45890c601":[6,0,0,49,1], "a00072.html#abb0f0e6d4eaebe63d7409c244ffa9b06":[6,0,0,49,0], "a00073.html":[6,0,0,51], "a00073.html#a97cfb947332b3e275e3437b5284de8ff":[6,0,0,51,1], "a00073.html#ab6013cc52171417e60008c1efebd4257":[6,0,0,51,0], "a00074.html":[6,0,0,50], "a00074.html#a7a51d15b2778ae1ec61f480482050690":[6,0,0,50,1], "a00074.html#acb8177c2b8060623f46fadfb82c621f8":[6,0,0,50,0], "a00075.html":[6,0,0,52], "a00075.html#a77fc4dece10e4aa3efffc7f4dcbeb81e":[6,0,0,52,1], "a00075.html#a8b2c0fa01d76add8d15f1024562521fe":[6,0,0,52,0], "a00076.html":[6,0,0,0,12], "a00076.html#a362f5103b150fb3913adb8923c7b1dbe":[6,0,0,0,12,9], "a00076.html#a402105c20c0fba99659dbea44fbd36b2":[6,0,0,0,12,2], "a00076.html#a43caacd4030a3dd949e9e44352c859dd":[6,0,0,0,12,4], "a00076.html#a4550cd53958a269ac8c2e4e7a02d2f02":[6,0,0,0,12,6], "a00076.html#a681827ee20603fab0019324494e78455":[6,0,0,0,12,12], "a00076.html#a7bb9fd9d80b38ddbed8128b33806900d":[6,0,0,0,12,11], "a00076.html#a7fe52ebd1d2533f298caa5ffc975be66":[6,0,0,0,12,0], "a00076.html#a8aded9ce9cf12f720f193ed303367bd1":[6,0,0,0,12,3], "a00076.html#a93b56fd3623e58c1aa6ceaaff54bbe11":[6,0,0,0,12,10], "a00076.html#ac8d570bb46f0831c42a5b3fc0f803040":[6,0,0,0,12,5], "a00076.html#adf8536b0ab651d81247809a673f3bf42":[6,0,0,0,12,1], "a00076.html#af32cad9f63309273527e4007a7d892ef":[6,0,0,0,12,7], "a00076.html#afaa858977fa3c7df8f6497afdf4f2803":[6,0,0,0,12,8], "a00077.html":[6,0,0,19], "a00077.html#a9386d73e8176de81de9b1fe38afa6952":[6,0,0,19,0], "a00077.html#ae74a691b4648e099e1e947f07d4a6284":[6,0,0,19,1], "a00078.html":[6,0,0,1,0,0], "a00078.html#a0b3b0937ad3ed8611ad82a002b99623c":[6,0,0,1,0,0,3], "a00078.html#a1093d2bc0481226a7903deef02519bbe":[6,0,0,1,0,0,6], "a00078.html#a11ef3d1042c1711d30b6e376f4b77dc5":[6,0,0,1,0,0,7], "a00078.html#a2c16c7e47fd8cb084fc159dbb57d5b35":[6,0,0,1,0,0,8], "a00078.html#a3a8a05c0e9db9aa9423b99a62fc2b442":[6,0,0,1,0,0,1], "a00078.html#a50b426f1be8afc41b445286c470f153d":[6,0,0,1,0,0,4], "a00078.html#a52a320e063625faf69d1104d7dbfc13a":[6,0,0,1,0,0,2], "a00078.html#a7b418648fe35168c261073cae42da08e":[6,0,0,1,0,0,5], "a00078.html#a7e5954889d74c7d595c95eef1d8bff6e":[6,0,0,1,0,0,9], "a00079.html":[6,0,0,28], "a00079.html#afe1f00814531af326e7fb11757f978e9":[6,0,0,28,0], "a00080.html":[6,0,0,0,2], "a00080.html#a1560ca3d205af226866a1e388dc505f2":[6,0,0,0,2,2], "a00080.html#a1cc2be7fd873ff9c6fa91e3efb3293dd":[6,0,0,0,2,3], "a00080.html#a4f2bdaaec1119d4a66efe42faa17a0dd":[6,0,0,0,2,1], "a00080.html#a87bd978d6269ea43fdcdf2f2eb278ef5":[6,0,0,0,2,0], "a00081.html":[6,0,0,0,3], "a00081.html#a3669e53c578ba7935d5b7bdaad0d5e0b":[6,0,0,0,3,1], "a00081.html#a8397728c755c1a8b4ade039406a4155c":[6,0,0,0,3,2], "a00081.html#ae0b6ca7a0a7d33b88a0e0a3fb61ac240":[6,0,0,0,3,0], "a00082.html":[6,0,0,0,11], "a00082.html#a02b194d1c4db0d3dd7d97351443bb7bd":[6,0,0,0,11,0], "a00082.html#a603b442ad845f46a19fa92970990a03e":[6,0,0,0,11,1], "a00082.html#a7cf6cdeea44ec32c1c8b9d02f4c2f83c":[6,0,0,0,11,3], "a00082.html#ad096a060aac9424435026f17b04d3772":[6,0,0,0,11,2], "a00083.html":[6,0,0,32], "a00083.html#a3c6a6fa4c970502389cded0863f83122":[6,0,0,32,1], "a00083.html#a595aad1240047206570109fb06936695":[6,0,0,32,0], "a00084.html":[6,0,0,63], "a00084.html#a0071af142f658bffd98b8325c1674119":[6,0,0,63,41], "a00084.html#a0bc04ac2094a4a2b92f2f54b37ab5369":[6,0,0,63,42], "a00084.html#a137c5ab03f8e5975fe822571cfa796e4":[6,0,0,63,49], "a00084.html#a164e5a080d9969d55b3fed9f2c137ce8":[6,0,0,63,10], "a00084.html#a16732cbff5bf11cefd68471577344551":[6,0,0,63,9], "a00084.html#a1741df34f160c410d8d28dddc44e6015":[6,0,0,63,40], "a00084.html#a1bb5a3f08176752a21e5902f634ef7be":[6,0,0,63,33], "a00084.html#a1d7279ca68e1d4da8da2829bb34e3b80":[6,0,0,63,14], "a00084.html#a20487e0b75717f8a10d7221f1f1d3fd8":[6,0,0,63,45], "a00084.html#a21afe937e085a4b3346080c389a12fb7":[6,0,0,63,21], "a00084.html#a2f3a766be0d57b86db847585ed1f2fc4":[6,0,0,63,44], "a00084.html#a33ab612efd39b727d6e1e151a6c354f6":[6,0,0,63,30], "a00084.html#a3aac4e676b132a3499e70bb83bcc4bec":[6,0,0,63,39], "a00084.html#a4d4688bc1e1752a5bdb6b3737f3aa2db":[6,0,0,63,24], "a00084.html#a4da8b68228a85639c4bcc0499cff338a":[6,0,0,63,18], "a00084.html#a4dccf162cd4081bbe2824ba29d546e90":[6,0,0,63,43], "a00084.html#a51879f289b45e502f320b34dbbe023ca":[6,0,0,63,19], "a00084.html#a5b614d6a33d0ce60282f6bf3cdf97409":[6,0,0,63,15], "a00084.html#a68dd2275bab0b4e254573ee664738904":[6,0,0,63,34], "a00084.html#a6bfc6726088b9b429e2cebb4497be55d":[6,0,0,63,51], "a00084.html#a6e2e28a20a517c6c3f4e4c9407fbe288":[6,0,0,63,37], "a00084.html#a77542a235a4ca711267e30d84492ce3b":[6,0,0,63,20], "a00084.html#a7ee3d9e31a9f81b366cf04f1f73b5df2":[6,0,0,63,32], "a00084.html#a887f5867a4c241990ffb697097ddc2c9":[6,0,0,63,27], "a00084.html#a8f7e6221f552199a88b3cfb787bd03c2":[6,0,0,63,28], "a00084.html#a91a2dd4512530363cdf1240a0aeba46c":[6,0,0,63,26], "a00084.html#a939ae251d3e8435a113157ec1443b90e":[6,0,0,63,35], "a00084.html#a95891ed8c127338b022f98365cce1e91":[6,0,0,63,11], "a00084.html#a9e02bbf1126802fd7fd64df989e03940":[6,0,0,63,12], "a00084.html#a9fe15fed7d74b4ae0718cf9ae64427bf":[6,0,0,63,48], "a00084.html#aad8b1fd5e42dbfc4a4d75c0a1b0c6ddb":[6,0,0,63,13], "a00084.html#ab60d18b1e9d4666c28551da2ad0e37d5":[6,0,0,63,17], "a00084.html#abec7f7f4d7ed030f38b2a123b632b818":[6,0,0,63,7], "a00084.html#ac5027b980639d8d0304ab32fb3052d73":[6,0,0,63,25], "a00084.html#acb946d7d458528ce4a6b4cd0fce95e7e":[6,0,0,63,31], "a00084.html#acddfe7ea1003815ef4e738bb6c84d221":[6,0,0,63,38], "a00084.html#aced900b0f7d44652107e4df89df9023f":[6,0,0,63,36], "a00084.html#ad7ebaaac4647f20a915fd6aa735cd1e5":[6,0,0,63,50], "a00084.html#ad8ecab8bcc022fe5a489e2d2fded14bd":[6,0,0,63,47], "a00084.html#adadfb3831c89409ff3ff74a49b5b5bdd":[6,0,0,63,46], "a00084.html#ae65f1edabcfc8528eebc4b53861fed2f":[6,0,0,63,16], "a00084.html#aed461aece290e5e28b7eca971e71198d":[6,0,0,63,22], "a00084.html#af56d00ec20a26b2dfeb3a83b481cf243":[6,0,0,63,29], "a00084.html#af58348511860d19ddbfb5f621ce99e7b":[6,0,0,63,6], "a00084.html#afa18f18140865290a1e7a3461cc604f4":[6,0,0,63,8], "a00084.html#afd40988f258ee059b0e76dac6480d8b3":[6,0,0,63,23], "a00085.html":[6,0,0,0,5], "a00085.html#a0bbee9d3a58999269eee962760410d84":[6,0,0,0,5,3], "a00085.html#a3bdb1a6958a07cacd033ab39abc89295":[6,0,0,0,5,5], "a00085.html#a7da78cfb86f1377a92eb1bd4239476f1":[6,0,0,0,5,1], "a00085.html#ac7f36cd7d3afbe419ad40276faf2db8f":[6,0,0,0,5,4], "a00085.html#ad3eb8879b449cb170d8cbc1f5ffcf684":[6,0,0,0,5,0], "a00085.html#ae52d3d02d53af5b5600c3c645c136f72":[6,0,0,0,5,2], "a00085.html#aeab2796c6969955a896b67d88d13afdd":[6,0,0,0,5,6], "a00086.html":[6,0,0,67], "a00086.html#a8fb228809bd42b2936ada9f9573d30d6":[6,0,0,67,0], "a00086.html#ae28452f4e178b6c548f6294fee803632":[6,0,0,67,1], "a00086.html#af1b175fd37479937c936f172803f40bb":[6,0,0,67,2], "a00087.html":[6,0,0,0,13], "a00087.html#a2a9085342769fddc1cc5a8c6287b0892":[6,0,0,0,13,0], "a00087.html#a38e241073d5b8b235f1d9d35980a8639":[6,0,0,0,13,2], "a00087.html#a92873171917fe692165825e4cc5d0b50":[6,0,0,0,13,5], "a00087.html#aada7488a2fb51e6d81cdd86469f43ada":[6,0,0,0,13,9], "a00087.html#ab139e833e327beb370470269e09e85a6":[6,0,0,0,13,4], "a00087.html#ac3891140f89ff6e3e43a818767431c23":[6,0,0,0,13,7], "a00087.html#ac5ba5559e184842746b13c9545c0ac73":[6,0,0,0,13,1], "a00087.html#af0349dcca1c6261e641eebf127324a41":[6,0,0,0,13,3], "a00087.html#af0ac2a40f4e23eb28cde185d629a2678":[6,0,0,0,13,8], "a00087.html#af8afa32de4971796d6d15d73b7590b0a":[6,0,0,0,13,6], "a00088.html":[6,0,0,11], "a00088.html#a296496bb9919c4673236347dcc461dab":[6,0,0,11,0], "a00088.html#ab2942e4ae61aa62357e193314e1945a8":[6,0,0,11,2], "a00088.html#ac4392882401ac69ab46ee9a51e500de4":[6,0,0,11,1], "a00089.html":[6,0,0,0,4], "a00089.html#a2aefb76b1cea234cc687735a3f8bc51a":[6,0,0,0,4,8], "a00089.html#a31a9e2e6f5276c06120111df47f9ac5f":[6,0,0,0,4,9], "a00089.html#a3ae9feae24d5eab6cf30867351cee54e":[6,0,0,0,4,5], "a00089.html#a4e8540e040830b7834749c51d1eb39c0":[6,0,0,0,4,1], "a00089.html#a5957a76f8d79ad8eae5feee9722eff40":[6,0,0,0,4,2], "a00089.html#a5a8ff4f51d2a249f1e772e0953452684":[6,0,0,0,4,10], "a00089.html#a78ee80852828a1221357352ce77b9597":[6,0,0,0,4,0], "a00089.html#a7c17e5396e312c2f3e0f66db3d0e4a90":[6,0,0,0,4,7], "a00089.html#a866cc9ec5bc766135e80a38901833e37":[6,0,0,0,4,3], "a00089.html#ac356fb51140719a5703d8c5c6784ebb5":[6,0,0,0,4,6], "a00089.html#af02410eca37436cb84547357d0b5a38e":[6,0,0,0,4,4], "a00090.html":[6,0,0,22], "a00090.html#a477598fd2f749aa2e0c66295a818a0f5":[6,0,0,22,4], "a00090.html#a7db2ae4924fda2aec297cfa1c8363ec7":[6,0,0,22,3], "a00090.html#ad2f7fa865d0410824b39ac27dab99d92":[6,0,0,22,0], "a00090.html#af3e94ddc4c6428d5a1d7763936a5b781":[6,0,0,22,2], "a00090.html#affcbefe5ad9a1cae7073d170f85352d0":[6,0,0,22,1], "a00091.html":[6,0,0,15], "a00091.html#a20a0b658655a3b10543abd35717dd633":[6,0,0,15,4], "a00091.html#a8231490bf29aa7686c4daa3b1fc97ed1":[6,0,0,15,3], "a00091.html#a85ee6b4652b659565fede97bb00b4232":[6,0,0,15,1], "a00091.html#a97046479f709ae621473c48ed7a0932d":[6,0,0,15,6], "a00091.html#a9b99a8f9ef260f11a32b29e917bdacda":[6,0,0,15,5], "a00091.html#aa042b1c72b16911a4f2e1c73be3d8942":[6,0,0,15,2], "a00091.html#ae278f24bab98d3946061934a48992067":[6,0,0,15,7], "a00091.html#af9cfc40abd39a68880b0df6d618e41fb":[6,0,0,15,0], "a00092.html":[6,0,0,68], "a00093.html":[6,0,0,70], "a00093.html#a51d90ce760af54b3fb1fa08e3205f386":[6,0,0,70,3], "a00093.html#a552d464626e8e33a6f58089a2ad78cb0":[6,0,0,70,0], "a00093.html#a5e81eb017d2ae5e0dc0aabf7e8c0d07d":[6,0,0,70,1], "a00093.html#a68b55550446061fd956d8777c97ffffb":[6,0,0,70,4], "a00093.html#a7f786743db515467f7c88cb4eb4c3655":[6,0,0,70,2], "a00094.html":[6,0,0,71], "a00094.html#a3eb1069f8c250f8d19f20ce53cb200a9":[6,0,0,71,1], "a00094.html#a492de5b973073ced2b6df88ef2e2deb1":[6,0,0,71,3], "a00094.html#a5cbb125963a89a699067083b427af668":[6,0,0,71,0], "a00094.html#a758dc122ae4ab3926b0110baa7146cc5":[6,0,0,71,4] }; libpqxx-3.1.1/doc/html/Reference/a00044.html0000664000175000017500000001213712076703502015241 00000000000000 libpqxx: pqxx::prepare::internal::get_sqltype Struct Reference
pqxx::prepare::internal::get_sqltype Struct Reference

Utility functor: get prepared-statement parameter's SQL type string. More...

#include <prepared_statement.hxx>

Public Member Functions

template<typename IT >
const std::string & operator() (IT i)

Detailed Description

Utility functor: get prepared-statement parameter's SQL type string.

Member Function Documentation

template<typename IT >
const std::string& pqxx::prepare::internal::get_sqltype::operator() ( IT  i)

The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/ftv2node.png0000664000175000017500000000012612076703502015773 00000000000000‰PNG  IHDRɪ|IDATxíݱðøScOx@ –¨y}IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00099.png0000664000175000017500000000446412076703501015076 00000000000000‰PNG  IHDRzÀ=XXPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÃIDATxíí¶«* E§Ë1úþ|‘¥[ë>ç¦xÒá¡ÉL ž¡9ý†é1sdÖá’ë[¿Êíbw|ï¾Ysdz’Ó¡NW¹š#³¡/¹–y}ÉÝzÛpuŽlß@Ù§ùi8ÎÏý°Rë„ùe<¬ÛàÕc6z+…Öê@Ìèuo­QÕ„[Úee·Çq²$õ•’gçY|WÌÅðÂj‰@zØÆK?‘«çµöyþêd iéçyå=Ûxîrÿ2úµPÄ÷jRçÚL’&•«mv‡whR¹N¾†ýÞ³”³[SåàV÷"P¡¯Ú4¯®ß)wwlIWU*Wµ®gýÙv¯ÿ®«yKµ| pÉöÑ<‹_}‹~¹×‘©r4üR5Êm,ùÄÌ‘Y‡K®oý*·‹Ýñ½ûöO¢_½Øº¹f|„~µ_'',’ôFË1Ûñ¬ät¨ÓU®æÈlèKn'‚e^c_Gr·Þ6\#Û7Ï™þÉ{õ˜mX5å ¥¶GzøÎÑ&KÒ{-è;9•rvÍéêÄ+‘iêñ¾èT8F²:/J¿ Lßîó—ÑWµþx̾A^ë[ô7k}ØøÞ³x®Äë¯~éíëtWF?¥L[îù¡Z8n* MùGªy¡ÉæÑ*ÎJãÍ¢UnÑ¢²KÏû…×ÁÛèO<Œã­—w÷/Iç*è׈ÇÅ4©wÕÌ¡ŒjRsmæ[M*Wkw´ª,ï¡¿æáŸØ¿$ªÊúýMÅ=x¿×®ê5Ÿ@³zçÓî¹³›rXàNÖŸyØÙÁ½ýKÒ©î¡¿=þôîÑ—ñR/ÛÐÿ®àÜAkÿ’tª>úæ;êg}Ã㘻Ȕ-l?Cÿ›‚sêa7ö/I§êÖúwÇìçúóZÙE¿?k~_ëßxØ=mnì_’NUe}ÞO»±îIRv]œÆxƒ”ÇÛ¶XŸ·NÁ (ïë·çGóá»íêû—¤S5§ÊXIújÝ+8ßä¡£—$9zI2QF/I#ésô’ôMrô’d"G/I&rô’d"G/I&ZÐÏó<¨ ý<Ïó€økz ­a=pôz½Fg?¬ŽÀB˾g?¬ŽÀH~̘ÈјÈјÈјÈјÈјÈјÈјÈјÈјèõz½€ `''`"G`"G`"G`"G`"G`"G`"G`"G`"G`"G`"G`"G`"G`"GðVÓ4M# `p ꃣ0‘£0‘£0‘£0‘£h•Ö»¾ìbycŽ Õôê_A?1E³åžꩱ›´šLñûéÏfbÕ„[´hì~Ô?ƒ~- o¯d‘{½Ñj,7;€ŸõïdýÏv¯–8ÍK·£û ß ÀÏrô½‚Ó2\ IÕÍ•ÆÑß@ßÔˆ]>GðNu­ï³õIÐÔúÞ·pRë=P]KªoÄ[ôÕyZŽàµüli‚ÿh N‰ãú¼u=P]uYø9z9zý+è¾LŽÀDŽÀDŽÀDŽÀD@?MÓ4 þªþø˜¯Â$5bIEND®B`‚libpqxx-3.1.1/doc/html/Reference/functions_0x71.html0000664000175000017500000001353512076703502017223 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- q -

libpqxx-3.1.1/doc/html/Reference/a00075.png0000664000175000017500000000260212076703501015060 00000000000000‰PNG  IHDR±ø” ÷SPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2IDATxíí²£*Û¦*ïÿÈרh419™ÝÃÝIÙŠ€ÒŒ0ùK)¥4Eµ!ÒX5–4Våïwã¡z_a¬z™—ÆÝøÎþ¼ªq^4÷s‡ëÜg¸LO åñ®ªS=åµñ4àøn;޳æ*‚›êêÒi}Tuªg\ˆñþóùJóÜ0ÕÝëwÏLFõŒpãá·7žêþˆñãgÑ\…u­~õ—«…z´óž7¯S™//ÖñWb|’ æ‘~˜+î;v©ûΪx’9_4«žñnÿ`ãqw=Ï­¿ÌXõQƪ¿Š4V%UcéK)¥%B¸4EsÆ·[kÊÍ÷Â)·gœ¹ š4ˆ%bIc€XÒ –4ˆ%bIc€XÒ –4ˆ%bIc€XÒxý•RJSPT"UcIcÕX⌻n)‡ê73Þ:þ ãîÅþ¼V·n¼»Ÿ—0O 7ëP}‡/"ƒ³vÇÌ®¢*«¾ËOb\‹ÔaÞ¬ƒ£)übãþãO ªoó%ãWÝlçzü8¾ß[Ç;ïÐxÞ‡mUœäŠ*ØÃ\æŠû]T?àg«âûÙVõ9i¬KØ¿´ji¬K«ÆÒ—RJK„phŠæŒo·Ö”›3î…SnÏ8s@4i KĒƱ¤1@,i KĒƱ¤1@,i KĒƱ¤ñú+¥”¦ ¨6D«Æ’ƪ±„wªßæ_0îìF“þ¼j»µµ6îæ^ýe:Uª—ùÀxsÔÎó£–J#óiS¡z™Ob<;ݽ¶ãN¥©õÀxóþÂùºñ=Œ{ãá÷+ŒëeP÷8ŠñrýãÆÕJ=Øy/Öñ߉ñI®˜CûãjŒç±g™Íû׿]ǪõÀxsmá„/‹ek<üþ¨qý¹_oŸÚíÁXãjEí¼ÏÖqlŒOrÅìôY®XNÛ¨žs}U<É«_|ßñkÙ8ÊøáOŸ÷œêÇÅxoöÇc¬ú[HcÕXÒX5–Þ¸”RZ „@S4g|»µ¦Üœq/ܘr{Æ™+¢Ic€XÒ –4ˆ%bIc€XÒ –4ˆ%bIc€XÒ –4ˆ%×_×u]SÐ4DĒƱ¼iü´óÚ…†ûÂXòÝ\¨Æ¾×öÔ×nÃÍâ9$Íé´\ªÑªêõ­õ$§^ã;ÖÆå5«ñÔajë`Žð o<ü±ñn¯ûiÔ5AÖï£ú´Óc¼ùbüæßnä?*À·Ic€XÒ –áÿ ëº®!þ2$Ž«íg­|IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00224.html0000664000175000017500000003264212076703501015243 00000000000000 libpqxx: Member List
pqxx::dbtransaction Member List

This is the complete list of members for pqxx::dbtransaction, including all inherited members.

abort()pqxx::transaction_base
Begin()pqxx::transaction_baseprotected
classname() const pqxx::internal::namedclass
commit()pqxx::transaction_base
conn() const pqxx::transaction_base
dbtransaction(connection_base &, const std::string &IsolationString, readwrite_policy rw=read_write)pqxx::dbtransactionprotected
dbtransaction(connection_base &, bool direct=true, readwrite_policy rw=read_write)pqxx::dbtransactionexplicitprotected
description() const pqxx::internal::namedclass
DirectExec(const char C[], int Retries=0)pqxx::transaction_baseprotected
do_abort()pqxx::dbtransactionprotectedvirtual
do_begin()pqxx::dbtransactionprotectedvirtual
do_commit()=0pqxx::dbtransactionprotectedpure virtual
do_exec(const char Query[])pqxx::dbtransactionprotectedvirtual
End()pqxx::transaction_baseprotected
esc(const char str[]) const pqxx::transaction_base
esc(const char str[], size_t maxlen) const pqxx::transaction_base
esc(const std::string &str) const pqxx::transaction_base
esc_raw(const unsigned char str[], size_t len) const pqxx::transaction_base
esc_raw(const std::string &) const pqxx::transaction_base
exec(const std::string &Query, const std::string &Desc=std::string())pqxx::transaction_base
exec(const std::stringstream &Query, const std::string &Desc=std::string())pqxx::transaction_base
fullname(const std::string &ttype, const std::string &isolation)pqxx::dbtransactionprotectedstatic
get_variable(const std::string &)pqxx::transaction_base
isolation_tag typedefpqxx::transaction_base
m_reactivation_avoidancepqxx::transaction_baseprotected
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
parameterized(const std::string &query)pqxx::transaction_base
prepared(const std::string &statement=std::string())pqxx::transaction_base
process_notice(const char Msg[]) const pqxx::transaction_base
process_notice(const std::string &Msg) const pqxx::transaction_base
quote(const T &t) const pqxx::transaction_base
reactivation_avoidance_clear()pqxx::transaction_baseprotected
set_variable(const std::string &Var, const std::string &Val)pqxx::transaction_base
start_backend_transaction()pqxx::dbtransactionprotected
transaction_base(connection_base &c, bool direct=true)pqxx::transaction_baseexplicitprotected
~dbtransaction()pqxx::dbtransactionvirtual
~transaction_base()=0pqxx::transaction_basepure virtual
libpqxx-3.1.1/doc/html/Reference/a00030.html0000664000175000017500000005626112076703501015241 00000000000000 libpqxx: pqxx::cursor_base Class Reference

Common definitions for cursor types. More...

#include <cursor.hxx>

Inheritance diagram for pqxx::cursor_base:
pqxx::internal::sql_cursor

Public Types

enum  accesspolicy { forward_only, random_access }
 Cursor access-pattern policy. More...
enum  updatepolicy { read_only, update }
 Cursor update policy. More...
enum  ownershippolicy { owned, loose }
 Cursor destruction policy. More...
typedef result::size_type size_type
typedef result::difference_type difference_type

Public Member Functions

const std::string & name () const throw ()
 Name of underlying SQL cursor.

Static Public Member Functions

Special movement distances
static difference_type all () throw ()
 Special value: read until end.
static difference_type next () throw ()
 Special value: read one row only.
static difference_type prior () throw ()
 Special value: read backwards, one row only.
static difference_type backward_all () throw ()
 Special value: read backwards from current position back to origin.

Protected Member Functions

 cursor_base (connection_base &, const std::string &Name, bool embellish_name=true)

Protected Attributes

const std::string m_name

Detailed Description

Common definitions for cursor types.

In C++ terms, fetches are always done in pre-increment or pre-decrement fashion–i.e. the result does not include the row the cursor is on at the beginning of the fetch, and the cursor ends up being positioned on the last row in the result.

There are singular positions akin to end() at both the beginning and the end of the cursor's range of movement, although these fit in so naturally with the semantics that one rarely notices them. The cursor begins at the first of these, but any fetch in the forward direction will move the cursor off this position and onto the first row before returning anything.

Member Typedef Documentation

Member Enumeration Documentation

Cursor access-pattern policy.

Allowing a cursor to move forward only can result in better performance, so use this access policy whenever possible.

Enumerator:
forward_only 

Cursor can move forward only.

random_access 

Cursor can move back and forth.

Cursor destruction policy.

The normal thing to do is to make a cursor object the owner of the SQL cursor it represents. There may be cases, however, where a cursor needs to persist beyond the end of the current transaction (and thus also beyond the lifetime of the cursor object that created it!), where it can be "adopted" into a new cursor object. See the basic_cursor documentation for an explanation of cursor adoption.

If a cursor is created with "loose" ownership policy, the object representing the underlying SQL cursor will not take the latter with it when its own lifetime ends, nor will its originating transaction.

Warning
Use this feature with care and moderation. Only one cursor object should be responsible for any one underlying SQL cursor at any given time.
Don't "leak" cursors! As long as any "loose" cursor exists, any attempts to deactivate or reactivate the connection, implicitly or explicitly, are quietly ignored.
Enumerator:
owned 

Destroy SQL cursor when cursor object is closed at end of transaction.

loose 

Leave SQL cursor in existence after close of object and transaction.

Cursor update policy.

Warning
Not all PostgreSQL versions support updatable cursors.
Enumerator:
read_only 

Cursor can be used to read data but not to write.

update 

Cursor can be used to update data as well as read it.

Constructor & Destructor Documentation

pqxx::cursor_base::cursor_base ( connection_base context,
const std::string &  Name,
bool  embellish_name = true 
)
protected

References cursor_base().

Referenced by cursor_base().

Member Function Documentation

cursor_base::difference_type pqxx::cursor_base::all ( ) throw ()
static

Special value: read until end.

Returns
Maximum value for result::difference_type, so the cursor will attempt to read the largest possible result set.

Referenced by pqxx::internal::obtain_stateless_cursor_size().

cursor_base::difference_type pqxx::cursor_base::backward_all ( ) throw ()
static

Special value: read backwards from current position back to origin.

Returns
Minimum value for result::difference_type

Referenced by pqxx::stateless_cursor< up, op >::stateless_cursor().

const std::string& pqxx::cursor_base::name ( ) const throw ()

Name of underlying SQL cursor.

Returns
Name of SQL cursor, which may differ from original given name.
Warning
Don't use this to access the SQL cursor directly without going through the provided wrapper classes!

Referenced by pqxx::internal::sql_cursor::sql_cursor().

static difference_type pqxx::cursor_base::next ( ) throw ()
static

Special value: read one row only.

Returns
Unsurprisingly, 1
static difference_type pqxx::cursor_base::prior ( ) throw ()
static

Special value: read backwards, one row only.

Returns
Unsurprisingly, -1

Member Data Documentation

const std::string pqxx::cursor_base::m_name
protected

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00043.js0000664000175000017500000000030012076703502014675 00000000000000var a00043 = [ [ "foreign_key_violation", "a00043.html#a6e1d093886e976b8e028d94daba4c16e", null ], [ "foreign_key_violation", "a00043.html#a63de30ac68704846bbe21c078d23be53", null ] ];libpqxx-3.1.1/doc/html/Reference/functions_0x74.html0000664000175000017500000002233212076703502017221 00000000000000 libpqxx: Class Members
libpqxx-3.1.1/doc/html/Reference/a00277.html0000664000175000017500000001133412076703501015246 00000000000000 libpqxx: Member List
libpqxx-3.1.1/doc/html/Reference/hierarchy.js0000664000175000017500000001634512076703502016064 00000000000000var hierarchy = [ [ "std::back_insert_iterator< pqxx::tablewriter >", "a00005.html", null ], [ "pqxx::basic_fieldstream< CHAR, TRAITS >", "a00007.html", null ], [ "pqxx::basic_ilostream< CHAR, TRAITS >", "a00008.html", null ], [ "pqxx::basic_lostream< CHAR, TRAITS >", "a00009.html", null ], [ "pqxx::basic_olostream< CHAR, TRAITS >", "a00010.html", null ], [ "std::char_traits< CHAR >", "a00015.html", null ], [ "std::char_traits< char >", "a00016.html", null ], [ "std::char_traits< unsigned char >", "a00017.html", null ], [ "pqxx::connection_base", "a00023.html", [ [ "pqxx::basic_connection< CONNECTPOLICY >", "a00006.html", null ] ] ], [ "pqxx::connectionpolicy", "a00024.html", [ [ "pqxx::connect_async", "a00019.html", null ], [ "pqxx::connect_direct", "a00020.html", null ], [ "pqxx::connect_lazy", "a00021.html", null ], [ "pqxx::connect_null", "a00022.html", null ] ] ], [ "pqxx::cursor_base", "a00030.html", [ [ "pqxx::internal::sql_cursor", "a00089.html", null ] ] ], [ "pqxx::prepare::declaration", "a00033.html", null ], [ "pqxx::internal::deref_ptr< T >", "a00034.html", null ], [ "pqxx::internal::dereference< ITER >", "a00035.html", null ], [ "pqxx::internal::Escaper< IT >", "a00038.html", null ], [ "pqxx::result::field", "a00041.html", [ [ "pqxx::result::const_fielditerator", "a00025.html", [ [ "pqxx::result::const_reverse_fielditerator", "a00027.html", null ] ] ] ] ], [ "pqxx::field_streambuf< CHAR, TRAITS >", "a00042.html", null ], [ "pqxx::prepare::internal::get_sqltype", "a00044.html", null ], [ "pqxx::icursor_iterator", "a00045.html", null ], [ "pqxx::icursorstream", "a00046.html", null ], [ "pqxx::prepare::invocation", "a00055.html", null ], [ "pqxx::isolation_traits< LEVEL >", "a00056.html", null ], [ "pqxx::items< T, CONT >", "a00057.html", null ], [ "pqxx::largeobject", "a00058.html", [ [ "pqxx::largeobjectaccess", "a00060.html", null ] ] ], [ "pqxx::largeobject_streambuf< CHAR, TRAITS >", "a00059.html", null ], [ "pqxx::internal::namedclass", "a00061.html", [ [ "pqxx::internal::transactionfocus", "a00108.html", [ [ "pqxx::pipeline", "a00071.html", null ], [ "pqxx::subtransaction", "a00099.html", null ], [ "pqxx::tablestream", "a00102.html", [ [ "pqxx::tablereader", "a00101.html", null ], [ "pqxx::tablewriter", "a00103.html", null ] ] ] ] ], [ "pqxx::transaction_base", "a00107.html", [ [ "pqxx::dbtransaction", "a00032.html", [ [ "pqxx::basic_robusttransaction", "a00011.html", [ [ "pqxx::robusttransaction< ISOLATIONLEVEL >", "a00086.html", null ] ] ], [ "pqxx::basic_transaction", "a00012.html", [ [ "pqxx::transaction< ISOLATIONLEVEL, READWRITE >", "a00106.html", null ] ] ], [ "pqxx::subtransaction", "a00099.html", null ] ] ], [ "pqxx::nontransaction", "a00063.html", null ] ] ] ] ], [ "pqxx::noticer", "a00065.html", [ [ "pqxx::nonnoticer", "a00062.html", null ] ] ], [ "pqxx::notify_listener", "a00066.html", null ], [ "std::numeric_limits< T >", "a00067.html", null ], [ "pqxx::prepare::internal::prepared_def::param", "a00069.html", null ], [ "pqxx::internal::parameterized_invocation", "a00070.html", null ], [ "pqxx::internal::PQAlloc< T, DELETER >", "a00076.html", null ], [ "pqxx::internal::PQAlloc< const internal::result_data, internal::freemem_result_data >", "a00076.html", [ [ "pqxx::result", "a00084.html", null ] ] ], [ "pqxx::internal::PQAlloc< const unsigned char >", "a00076.html", [ [ "pqxx::binarystring", "a00013.html", null ] ] ], [ "pqxx::pqxx_exception", "a00077.html", [ [ "pqxx::argument_error", "a00004.html", null ], [ "pqxx::conversion_error", "a00029.html", null ], [ "pqxx::failure", "a00039.html", [ [ "pqxx::broken_connection", "a00014.html", [ [ "pqxx::too_many_connections", "a00105.html", null ] ] ], [ "pqxx::in_doubt_error", "a00047.html", null ], [ "pqxx::sql_error", "a00090.html", [ [ "pqxx::data_exception", "a00031.html", null ], [ "pqxx::feature_not_supported", "a00040.html", null ], [ "pqxx::insufficient_privilege", "a00048.html", null ], [ "pqxx::insufficient_resources", "a00049.html", [ [ "pqxx::disk_full", "a00037.html", null ], [ "pqxx::out_of_memory", "a00068.html", null ] ] ], [ "pqxx::integrity_constraint_violation", "a00050.html", [ [ "pqxx::check_violation", "a00018.html", null ], [ "pqxx::foreign_key_violation", "a00043.html", null ], [ "pqxx::not_null_violation", "a00064.html", null ], [ "pqxx::restrict_violation", "a00083.html", null ], [ "pqxx::unique_violation", "a00115.html", null ] ] ], [ "pqxx::invalid_cursor_name", "a00052.html", null ], [ "pqxx::invalid_cursor_state", "a00053.html", null ], [ "pqxx::invalid_sql_statement_name", "a00054.html", null ], [ "pqxx::plpgsql_error", "a00072.html", [ [ "pqxx::plpgsql_no_data_found", "a00073.html", null ], [ "pqxx::plpgsql_raise", "a00074.html", null ], [ "pqxx::plpgsql_too_many_rows", "a00075.html", null ] ] ], [ "pqxx::syntax_error", "a00100.html", [ [ "pqxx::undefined_column", "a00111.html", null ], [ "pqxx::undefined_function", "a00112.html", null ], [ "pqxx::undefined_table", "a00113.html", null ] ] ] ] ] ] ], [ "pqxx::internal_error", "a00051.html", null ], [ "pqxx::range_error", "a00079.html", null ], [ "pqxx::usage_error", "a00116.html", null ] ] ], [ "pqxx::prepare::internal::prepared_def", "a00078.html", null ], [ "pqxx::internal::reactivation_avoidance_counter", "a00080.html", null ], [ "pqxx::internal::reactivation_avoidance_exemption", "a00081.html", null ], [ "pqxx::internal::refcount", "a00082.html", null ], [ "pqxx::internal::result_data", "a00085.html", null ], [ "pqxx::internal::scoped_array< T >", "a00087.html", null ], [ "pqxx::scoped_noticer", "a00088.html", [ [ "pqxx::disable_noticer", "a00036.html", null ] ] ], [ "pqxx::stateless_cursor< up, op >", "a00091.html", null ], [ "pqxx::string_traits< T >", "a00092.html", null ], [ "pqxx::string_traits< char * >", "a00093.html", null ], [ "pqxx::string_traits< char[N]>", "a00094.html", null ], [ "pqxx::string_traits< const char * >", "a00095.html", null ], [ "pqxx::string_traits< const std::string >", "a00096.html", null ], [ "pqxx::string_traits< std::string >", "a00097.html", null ], [ "pqxx::string_traits< std::stringstream >", "a00098.html", null ], [ "pqxx::thread_safety_model", "a00104.html", null ], [ "pqxx::transactor< TRANSACTION >", "a00109.html", null ], [ "pqxx::result::tuple", "a00110.html", [ [ "pqxx::result::const_iterator", "a00026.html", [ [ "pqxx::result::const_reverse_iterator", "a00028.html", null ] ] ] ] ], [ "pqxx::internal::unique< GUEST >", "a00114.html", null ] ];libpqxx-3.1.1/doc/html/Reference/ftv2ns.png0000664000175000017500000000060412076703502015467 00000000000000‰PNG  IHDRÚ}\ˆKIDATxíÝ1K1Àñ­ž ØG•â‚n‚Šà ‚âælÁE¿€‹“ (nºêââêäࢋƒÐMAá@°‹ µât¾ÄK¡à%Ü•Û ý]BIïå%áuÍ…a™€,e × v¯ç¥«ˆi‹º¨Õö–î\tòòuénÄ0ã æÜÉoV\Ì$G.&@Y=ÆË%$um·¢ûÛ6–'Úß«9Qó\bÙ)²º0Ðë-Zœ¥TèHÍ`pÀcsm µö5:>Áë‡Þ¦I µØ ‚F‹Çà]» ›jg—ìoÏáõ©[ œõ š­onë €Ô¬¨vqõ„?\Ðç”  6»øüÒTe ÃÉéŸeç ÀÅlQ ¡c”€ª¬ü3*d€ÅWTMÏ\rÿÿh6™ø1±F ‹°fžIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00065.png0000664000175000017500000000073112076703501015060 00000000000000‰PNG  IHDRgP3à›ÞPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2hIDATxíÝŽƒ FÏ|$¾ÿ#¯R—ŵc”¤] §À‘±×˜™uxœáðó)žyö[ Üà8¥á™C1¶äüo£X1G—½¬Fì䪹(P•8ÿUâ]ƒª¤F.Eµ>KS]Í-¶Ôº]QòÔÜë‰0—<Û¥N÷s'çÓ̃óó¨ñä[µæúùPqðÞœ_ÀßüÀí €ŸŽ3³çð2t “gšúˆ:yfMQ/Ï×åÛð\`xü €Ÿáð3<~†ÀÏðøžù !'S!8!HÒã $ùù@Å"I îõHR›ä1Y8ÿ¦F19G—jíUÁå'ËËçµí8A¦]I­²W7ÕºÛÏv¡ libpqxx: Class Members - Variables
libpqxx-3.1.1/doc/html/Reference/a00259.html0000664000175000017500000001063412076703501015250 00000000000000 libpqxx: Member List
pqxx::isolation_traits< LEVEL > Member List
libpqxx-3.1.1/doc/html/Reference/a00084.html0000664000175000017500000017057112076703501015253 00000000000000 libpqxx: pqxx::result Class Reference

Query or command result set. More...

#include <result.hxx>

Inheritance diagram for pqxx::result:
pqxx::internal::PQAlloc< const internal::result_data, internal::freemem_result_data >

Classes

class  const_fielditerator
class  const_iterator
 Iterator for rows (tuples) in a query result set. More...
class  const_reverse_fielditerator
class  const_reverse_iterator
class  field
 Reference to a field in a result set. More...
class  tuple
 Reference to one row in a result. More...

Public Types

typedef unsigned long size_type
typedef signed long difference_type
typedef tuple reference
typedef const_iterator pointer
typedef std::iterator
< std::random_access_iterator_tag,
const tuple,
result::difference_type,
const_iterator, tuple
const_iterator_base
typedef const_iterator iterator
typedef const_reverse_iterator reverse_iterator

Public Member Functions

 result () throw ()
 result (const result &rhs) throw ()
resultoperator= (const result &rhs) throw ()
const_reverse_iterator rbegin () const
const_reverse_iterator rend () const
const_iterator begin () const throw ()
const_iterator end () const throw ()
reference front () const throw ()
reference back () const throw ()
size_type size () const throw ()
bool empty () const throw ()
size_type capacity () const throw ()
void swap (result &) throw ()
const tuple operator[] (size_type i) const throw ()
const tuple at (size_type) const throw (range_error)
void clear () throw ()
const std::string & query () const throw ()
 Query that produced this result, if available (empty string otherwise)
oid inserted_oid () const
 If command was INSERT of 1 row, return oid of inserted row.
size_type affected_rows () const
 If command was INSERT, UPDATE, or DELETE: number of affected rows.
Comparisons
bool operator== (const result &) const throw ()
bool operator!= (const result &rhs) const throw ()
Column information
tuple::size_type columns () const throw ()
 Number of columns in result.
tuple::size_type column_number (const char ColName[]) const
 Number of given column (throws exception if it doesn't exist)
tuple::size_type column_number (const std::string &Name) const
 Number of given column (throws exception if it doesn't exist)
const char * column_name (tuple::size_type Number) const
 Name of column with this number (throws exception if it doesn't exist)
oid column_type (tuple::size_type ColNum) const
 Type of given column.
oid column_type (int ColNum) const
 Type of given column.
oid column_type (const std::string &ColName) const
 Type of given column.
oid column_type (const char ColName[]) const
 Type of given column.
oid column_table (tuple::size_type ColNum) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
oid column_table (int ColNum) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
oid column_table (const std::string &ColName) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
tuple::size_type table_column (tuple::size_type ColNum) const
 What column in its table did this column come from?
tuple::size_type table_column (int ColNum) const
 What column in its table did this column come from?
tuple::size_type table_column (const std::string &ColName) const
 What column in its table did this column come from?

Friends

class pqxx::result::field
class pqxx::internal::gate::result_creation
class pqxx::internal::gate::result_connection
class pqxx::internal::gate::result_sql_cursor

Additional Inherited Members

- Private Types inherited from pqxx::internal::PQAlloc< const internal::result_data, internal::freemem_result_data >
typedef const internal::result_data content_type
- Private Member Functions inherited from pqxx::internal::PQAlloc< const internal::result_data, internal::freemem_result_data >
 PQAlloc () throw ()
 PQAlloc (const PQAlloc &rhs) throw ()
 PQAlloc (const internal::result_data *obj) throw ()
 Assume ownership of a pointer.
 ~PQAlloc () throw ()
PQAllocoperator= (const PQAlloc &rhs) throw ()
void swap (PQAlloc &rhs) throw ()
 operator bool () const throw ()
 Is this pointer non-null?
bool operator! () const throw ()
 Is this pointer null?
const internal::result_dataoperator-> () const throw (std::logic_error)
 Dereference pointer.
const internal::result_dataoperator* () const throw (std::logic_error)
 Dereference pointer.
const internal::result_dataget () const throw ()
 Obtain underlying pointer.
void reset () throw ()

Detailed Description

Query or command result set.

This behaves as a container (as defined by the C++ standard library) and provides random access const iterators to iterate over its tuples. A tuple can also be accessed by indexing a result R by the tuple's zero-based number:

for (result::size_type i=0; i < R.size(); ++i) Process(R[i]);

Result sets in libpqxx are lightweight, reference-counted wrapper objects (following the Proxy design pattern) that are small and cheap to copy. Think of a result object as a "smart pointer" to an underlying result set.

Warning
The result set that a result object points to is not thread-safe. If you copy a result object, it still refers to the same underlying result set. So never copy, destroy, query, or otherwise access a result while another thread may be copying, destroying, querying, or otherwise accessing the same result set–even if it is doing so through a different result object!

Member Typedef Documentation

typedef std::iterator<std::random_access_iterator_tag, const tuple, result::difference_type, const_iterator, tuple> pqxx::result::const_iterator_base
typedef signed long pqxx::result::difference_type
typedef unsigned long pqxx::result::size_type

Constructor & Destructor Documentation

pqxx::result::result ( ) throw ()
pqxx::result::result ( const result rhs) throw ()

Member Function Documentation

pqxx::result::size_type pqxx::result::affected_rows ( ) const

If command was INSERT, UPDATE, or DELETE: number of affected rows.

Returns
Number of affected rows if last command was INSERT, UPDATE, or DELETE; zero for all other commands.

Referenced by pqxx::internal::sql_cursor::move().

const pqxx::result::tuple pqxx::result::at ( size_type  i) const throw (range_error)
reference pqxx::result::back ( ) const throw ()
const_iterator pqxx::result::begin ( ) const throw ()
size_type pqxx::result::capacity ( ) const throw ()
void pqxx::result::clear ( ) throw ()
const char * pqxx::result::column_name ( tuple::size_type  Number) const

Name of column with this number (throws exception if it doesn't exist)

References pqxx::to_string().

pqxx::result::tuple::size_type pqxx::result::column_number ( const char  ColName[]) const

Number of given column (throws exception if it doesn't exist)

Referenced by pqxx::result::tuple::column_number().

tuple::size_type pqxx::result::column_number ( const std::string &  Name) const

Number of given column (throws exception if it doesn't exist)

References column_number().

Referenced by column_number().

oid pqxx::result::column_table ( tuple::size_type  ColNum) const

What table did this column come from? Requires PostgreSQL 7.4 C API.

Only defined if the libpqxx library was compiled against a libpq version that supports the PQftable function.

If you get a link error saying this function is undefined, that must be because libpqxx was compiled against an older version of libpq. The PQftable function first became available in PostgreSQL 7.4.

oid pqxx::result::column_table ( int  ColNum) const

What table did this column come from? Requires PostgreSQL 7.4 C API.

Only defined if the libpqxx library was compiled against a libpq version that supports the PQftable function.

If you get a link error saying this function is undefined, that must be because libpqxx was compiled against an older version of libpq. The PQftable function first became available in PostgreSQL 7.4.

References column_table().

Referenced by column_table().

oid pqxx::result::column_table ( const std::string &  ColName) const

What table did this column come from? Requires PostgreSQL 7.4 C API.

Only defined if the libpqxx library was compiled against a libpq version that supports the PQftable function.

If you get a link error saying this function is undefined, that must be because libpqxx was compiled against an older version of libpq. The PQftable function first became available in PostgreSQL 7.4.

References column_table().

Referenced by column_table().

pqxx::oid pqxx::result::column_type ( tuple::size_type  ColNum) const

Type of given column.

References pqxx::oid_none, and pqxx::to_string().

oid pqxx::result::column_type ( int  ColNum) const

Type of given column.

References column_type().

Referenced by column_type().

oid pqxx::result::column_type ( const std::string &  ColName) const

Type of given column.

References column_type().

Referenced by column_type().

oid pqxx::result::column_type ( const char  ColName[]) const

Type of given column.

References column_type().

Referenced by column_type().

pqxx::result::tuple::size_type pqxx::result::columns ( ) const throw ()

Number of columns in result.

bool pqxx::result::empty ( ) const throw ()
result::const_iterator pqxx::result::end ( ) const throw ()
reference pqxx::result::front ( ) const throw ()
pqxx::oid pqxx::result::inserted_oid ( ) const

If command was INSERT of 1 row, return oid of inserted row.

Returns
Identifier of inserted row if exactly one row was inserted, or oid_none otherwise.
bool pqxx::result::operator!= ( const result rhs) const throw ()
result& pqxx::result::operator= ( const result rhs) throw ()
bool pqxx::result::operator== ( const result rhs) const throw ()
const tuple pqxx::result::operator[] ( size_type  i) const throw ()
const string & pqxx::result::query ( ) const throw ()

Query that produced this result, if available (empty string otherwise)

const_reverse_iterator pqxx::result::rbegin ( ) const
const_reverse_iterator pqxx::result::rend ( ) const
pqxx::result::size_type pqxx::result::size ( ) const throw ()
void pqxx::result::swap ( result rhs) throw ()
tuple::size_type pqxx::result::table_column ( tuple::size_type  ColNum) const

What column in its table did this column come from?

tuple::size_type pqxx::result::table_column ( int  ColNum) const

What column in its table did this column come from?

References table_column().

Referenced by table_column().

tuple::size_type pqxx::result::table_column ( const std::string &  ColName) const

What column in its table did this column come from?

References table_column().

Referenced by table_column().

Friends And Related Function Documentation

friend class pqxx::internal::gate::result_connection
friend
friend class pqxx::internal::gate::result_creation
friend
friend class pqxx::internal::gate::result_sql_cursor
friend
friend class pqxx::result::field
friend

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00171_source.html0000664000175000017500000013440412076703501016623 00000000000000 libpqxx: transaction_base.hxx Source File
transaction_base.hxx
1 /*-------------------------------------------------------------------------
2  *
3  * FILE
4  * pqxx/transaction_base.hxx
5  *
6  * DESCRIPTION
7  * common code and definitions for the transaction classes.
8  * pqxx::transaction_base defines the interface for any abstract class that
9  * represents a database transaction
10  * DO NOT INCLUDE THIS FILE DIRECTLY; include pqxx/transaction_base instead.
11  *
12  * Copyright (c) 2001-2009, Jeroen T. Vermeulen <jtv@xs4all.nl>
13  *
14  * See COPYING for copyright license. If you did not receive a file called
15  * COPYING with this source code, please notify the distributor of this mistake,
16  * or contact the author.
17  *
18  *-------------------------------------------------------------------------
19  */
20 #ifndef PQXX_H_TRANSACTION_BASE
21 #define PQXX_H_TRANSACTION_BASE
22 
23 #include "pqxx/compiler-public.hxx"
24 #include "pqxx/compiler-internal-pre.hxx"
25 
26 /* End-user programs need not include this file, unless they define their own
27  * transaction classes. This is not something the typical program should want
28  * to do.
29  *
30  * However, reading this file is worthwhile because it defines the public
31  * interface for the available transaction classes such as transaction and
32  * nontransaction.
33  */
34 
35 #include "pqxx/connection_base"
36 #include "pqxx/isolation"
37 #include "pqxx/result"
38 
39 /* Methods tested in eg. self-test program test001 are marked with "//[t1]"
40  */
41 
42 namespace pqxx
43 {
44 class connection_base;
45 class transaction_base;
46 
47 
48 namespace internal
49 {
50 class sql_cursor;
51 
52 class PQXX_LIBEXPORT transactionfocus : public virtual namedclass
53 {
54 public:
56  namedclass("transactionfocus"),
57  m_Trans(t),
58  m_registered(false)
59  {
60  }
61 
62 protected:
63  void register_me();
64  void unregister_me() throw ();
65  void reg_pending_error(const PGSTD::string &) throw ();
66  bool registered() const throw () { return m_registered; }
67 
69 
70 private:
71  bool m_registered;
72 
78  transactionfocus &operator=(const transactionfocus &);
79 };
80 
81 
82 class PQXX_LIBEXPORT parameterized_invocation : statement_parameters
83 {
84 public:
85  parameterized_invocation(connection_base &, const PGSTD::string &query);
86 
87  parameterized_invocation &operator()() { add_param(); return *this; }
88  template<typename T> parameterized_invocation &operator()(const T &v)
89  { add_param(v); return *this; }
90  template<typename T>
91  parameterized_invocation &operator()(const T &v, bool nonnull)
92  { add_param(v, nonnull); return *this; }
93 
94  result exec();
95 
96 private:
99 
100  connection_base &m_home;
101  const PGSTD::string m_query;
102 };
103 } // namespace internal
104 
105 
106 namespace internal
107 {
108 namespace gate
109 {
110 class transaction_subtransaction;
111 class transaction_tablereader;
112 class transaction_tablewriter;
113 class transaction_transactionfocus;
114 } // namespace internal::gate
115 } // namespace internal
116 
117 
119 
129 class PQXX_LIBEXPORT PQXX_NOVTABLE transaction_base :
130  public virtual internal::namedclass
131 {
132 public:
135 
136  virtual ~transaction_base() =0; //[t1]
137 
139 
151  void commit(); //[t1]
152 
154 
157  void abort(); //[t10]
158 
163 
164  PGSTD::string esc(const char str[]) const //[t90]
165  { return m_Conn.esc(str); }
167  PGSTD::string esc(const char str[], size_t maxlen) const //[t90]
168  { return m_Conn.esc(str, maxlen); }
170  PGSTD::string esc(const PGSTD::string &str) const //[t90]
171  { return m_Conn.esc(str); }
172 
174 
185  PGSTD::string esc_raw(const unsigned char str[], size_t len) const //[t62]
186  { return m_Conn.esc_raw(str, len); }
188  PGSTD::string esc_raw(const PGSTD::string &) const; //[t62]
189 
191 
192  template<typename T> PGSTD::string quote(const T &t) const
193  { return m_Conn.quote(t); }
195 
197 
212  result exec(const PGSTD::string &Query,
213  const PGSTD::string &Desc=PGSTD::string()); //[t1]
214 
215  result exec(const PGSTD::stringstream &Query,
216  const PGSTD::string &Desc=PGSTD::string()) //[t9]
217  { return exec(Query.str(), Desc); }
218 
220  /* Use this to build up a parameterized statement invocation, then invoke it
221  * using @c exec()
222  *
223  * Example: @c trans.parameterized("SELECT $1 + 1")(1).exec();
224  */
225  internal::parameterized_invocation parameterized(const PGSTD::string &query);
226 
231 
232 
276  prepare::invocation prepared(const PGSTD::string &statement=PGSTD::string());
277 
279 
284 
285  void process_notice(const char Msg[]) const //[t14]
286  { m_Conn.process_notice(Msg); }
288  void process_notice(const PGSTD::string &Msg) const //[t14]
289  { m_Conn.process_notice(Msg); }
291 
293  connection_base &conn() const { return m_Conn; } //[t4]
294 
296 
304  void set_variable(const PGSTD::string &Var, const PGSTD::string &Val);//[t61]
305 
307 
316  PGSTD::string get_variable(const PGSTD::string &); //[t61]
317 
318 
319 protected:
321 
327  explicit transaction_base(connection_base &c, bool direct=true);
328 
330 
332  void Begin();
333 
335  void End() throw ();
336 
338  virtual void do_begin() =0;
340  virtual result do_exec(const char Query[]) =0;
342  virtual void do_commit() =0;
344  virtual void do_abort() =0;
345 
346  // For use by implementing class:
347 
349 
357  result DirectExec(const char C[], int Retries=0);
358 
360  void reactivation_avoidance_clear() throw ()
361  {m_reactivation_avoidance.clear();}
362 
363 protected:
365 
368 
369 private:
370  /* A transaction goes through the following stages in its lifecycle:
371  * <ul>
372  * <li> nascent: the transaction hasn't actually begun yet. If our connection
373  * fails at this stage, it may recover and the transaction can attempt to
374  * establish itself again.
375  * <li> active: the transaction has begun. Since no commit command has been
376  * issued, abortion is implicit if the connection fails now.
377  * <li> aborted: an abort has been issued; the transaction is terminated and
378  * its changes to the database rolled back. It will accept no further
379  * commands.
380  * <li> committed: the transaction has completed successfully, meaning that a
381  * commit has been issued. No further commands are accepted.
382  * <li> in_doubt: the connection was lost at the exact wrong time, and there
383  * is no way of telling whether the transaction was committed or aborted.
384  * </ul>
385  *
386  * Checking and maintaining state machine logic is the responsibility of the
387  * base class (ie., this one).
388  */
389  enum Status
390  {
391  st_nascent,
392  st_active,
393  st_aborted,
394  st_committed,
395  st_in_doubt
396  };
397 
399  void PQXX_PRIVATE activate();
400 
401  void PQXX_PRIVATE CheckPendingError();
402 
403  template<typename T> bool parm_is_null(T *p) const throw () { return !p; }
404  template<typename T> bool parm_is_null(T) const throw () { return false; }
405 
406  friend class pqxx::internal::gate::transaction_transactionfocus;
407  void PQXX_PRIVATE RegisterFocus(internal::transactionfocus *);
408  void PQXX_PRIVATE UnregisterFocus(internal::transactionfocus *) throw ();
409  void PQXX_PRIVATE RegisterPendingError(const PGSTD::string &) throw ();
410 
411  friend class pqxx::internal::gate::transaction_tablereader;
412  void PQXX_PRIVATE BeginCopyRead(const PGSTD::string &, const PGSTD::string &);
413  bool ReadCopyLine(PGSTD::string &);
414 
415  friend class pqxx::internal::gate::transaction_tablewriter;
416  void PQXX_PRIVATE BeginCopyWrite(
417  const PGSTD::string &Table,
418  const PGSTD::string &Columns);
419  void WriteCopyLine(const PGSTD::string &);
420  void EndCopyWrite();
421 
422  friend class pqxx::internal::gate::transaction_subtransaction;
423 
424  connection_base &m_Conn;
425 
426  internal::unique<internal::transactionfocus> m_Focus;
427  Status m_Status;
428  bool m_Registered;
429  PGSTD::map<PGSTD::string, PGSTD::string> m_Vars;
430  PGSTD::string m_PendingError;
431 
437  transaction_base &operator=(const transaction_base &);
438 };
439 
440 } // namespace pqxx
441 
442 
443 #include "pqxx/compiler-internal-post.hxx"
444 
445 #endif
446 
libpqxx-3.1.1/doc/html/Reference/a00029.png0000664000175000017500000000113012076703501015052 00000000000000‰PNG  IHDRŽPø½ePLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2çIDATxíír„ E—™}ÿG®¢hD£ÛºL'¯`ÒCøØ¿äœs?"KR/ Iò8’äéÓ8©<’t¨/àH’§')•Ã{é˜$îñ»NlkÌØL#Æ~ù2¶3œ)[¨¤Ýã¹ÍÜ7fÓ$É>ÆvV6¼¾ŸqWÇd›í͘Ò÷áŒ-Îd»³_ ·)ÈjÞé78fsmås÷ÊY›‹½s]çèÔ47OÖ|Û‹urC\¸%ÉÓsñ¯Á)Ûµ½C$™ç“8’t¡?áHÒ78’ä)p$ÉÓ€“sÎÝàzô£¾p®xúÂhzâé 'N€¯Àð8žÀSàx Oà)p<€§Àð8žÀÓ?ÅI)¥~DèEà)p<½çÏ9{­ÎÐ)½ñè׎çx',ͳ¨ÆÍê°‘m–9…¯† N ˜&Ø?¶92Úm¤YŸö:m–5h­RÕà,q{_ƒÓ~Ô[8óèév¯ÿäÕü ýgSòkœ]ÌYu–öÇ샭ìÌù(ïγÕqNV͹=Yg=f±ÚÈæd­áͬÍ2ܽÄîé38e o. €õZ€ï+p<€§ñÒK)¥^ôµØ0Ø^…ŒIEND®B`‚libpqxx-3.1.1/doc/html/Reference/functions_0x6e.html0000664000175000017500000002143612076703502017305 00000000000000 libpqxx: Class Members
libpqxx-3.1.1/doc/html/Reference/navtreeindex0.js0000664000175000017500000003535612076703502016665 00000000000000var NAVTREEINDEX0 = { ".html":[6,0,1], "a00001.html":[0], "a00002.html":[1], "a00003.html":[2], "a00004.html":[6,0,0,26], "a00004.html#a1b68c0e492e7cb4f9458ca0de1b85862":[6,0,0,26,0], "a00005.html":[6,0,1,4], "a00005.html#a0b513557015fe5eda72c189dd488d5dd":[6,0,1,4,1], "a00005.html#a0b7adddc8406229b9c5a161302dffba5":[6,0,1,4,2], "a00005.html#a25f4372dfc9c449cae4572f01de65323":[6,0,1,4,0], "a00005.html#a2aaa8274759d9d84964e8235ec59bac0":[6,0,1,4,4], "a00005.html#a673f58eda786a37dd76ebcfd7bd5cd96":[6,0,1,4,5], "a00005.html#ad4658fc955fd5a74ece771106a7edee0":[6,0,1,4,3], "a00006.html":[6,0,0,2], "a00006.html#a0436a1271586987e97bdf5b59b96f607":[6,0,0,2,1], "a00006.html#a3abaa953e318c2dda1b61b3f5861140e":[6,0,0,2,3], "a00006.html#aa02e7329e13fdc9809c1215f224ab5fe":[6,0,0,2,0], "a00006.html#aa6c74a9abcfa2b13c2334d0c38f66305":[6,0,0,2,2], "a00006.html#af041bd491664d3d3c81e7ad9e701d593":[6,0,0,2,4], "a00007.html":[6,0,0,65], "a00007.html#a5f11dbcdcaf2c705935e099debb68cd8":[6,0,0,65,2], "a00007.html#a60c8c26735eb6e96fc915968ea13c7bc":[6,0,0,65,4], "a00007.html#a8f1cd9fcb08f673ef02776beb52ceefd":[6,0,0,65,1], "a00007.html#ab2bc41979cc1d0d8a349a6b82dd5077f":[6,0,0,65,3], "a00007.html#ab5ec9c60396c03e9b95f9ce61ff8644f":[6,0,0,65,5], "a00007.html#acb9db31f275560a165bb466555f30986":[6,0,0,65,0], "a00008.html":[6,0,0,57], "a00008.html#a1cffaceb7db5daf482bcb7f73aeaa0b0":[6,0,0,57,1], "a00008.html#a53f0bc4d9eed45617ae14bf553efa429":[6,0,0,57,5], "a00008.html#a8ef4183e4700b8859a1f0950e6dff8ee":[6,0,0,57,2], "a00008.html#a9b47ff8b4b3863983169e64b69cee6fa":[6,0,0,57,3], "a00008.html#ad94ea6936b6a5ee2983bdcbacdf364a9":[6,0,0,57,0], "a00008.html#af46e0f2cfe62a5c75b431e56065ad883":[6,0,0,57,6], "a00008.html#af70c033d70d77ee3e4942112ad9e54c2":[6,0,0,57,4], "a00009.html":[6,0,0,59], "a00009.html#a411cd2fbec4a9f5bfa07030d8a77b482":[6,0,0,59,3], "a00009.html#a57d98a1321d8f5d00027810bb811025c":[6,0,0,59,7], "a00009.html#a60e982e6fba23c8067404af0a4f5d05a":[6,0,0,59,6], "a00009.html#a6defd7dc017956dcda572ff9d54b394d":[6,0,0,59,0], "a00009.html#a7d45a1d6dc270b8a793a5e3cde0fb2c3":[6,0,0,59,1], "a00009.html#a82775c94f45b87a6b9e082900d2d9d2b":[6,0,0,59,5], "a00009.html#a94b75418ccf0801a3f7fd62d3f0897d7":[6,0,0,59,2], "a00009.html#ac41b5c92c32c7d99a86e887d8fc9f33e":[6,0,0,59,4], "a00010.html":[6,0,0,58], "a00010.html#a0e9bac94644a39ea5465d9b7aeba62dd":[6,0,0,58,1], "a00010.html#a472b319febd6757f32a06541ecb5fd99":[6,0,0,58,3], "a00010.html#a514945ec9aeaa6bdd455f21ccd9d3876":[6,0,0,58,7], "a00010.html#a5c09652a33d59854940ef5ad36522bef":[6,0,0,58,0], "a00010.html#a627ef8d2f00596a80104f81bac097f61":[6,0,0,58,5], "a00010.html#acd6a237e073930d1c9b52de0c4cc9ba7":[6,0,0,58,2], "a00010.html#af5a32597bd7cf509cb8593daf9e5f0f1":[6,0,0,58,6], "a00010.html#afa10568556220285b8f77e6bc6a65c63":[6,0,0,58,4], "a00011.html":[6,0,0,66], "a00011.html#a0761b12be4f64a7bccba1d2e7bf3d4a2":[6,0,0,66,2], "a00011.html#a4fa796f8dff9f236c36f292898eaeaad":[6,0,0,66,1], "a00011.html#aad0757a015b2ddfe476e3d83f812bbff":[6,0,0,66,0], "a00012.html":[6,0,0,79], "a00012.html#ac37eaf1787575f972034ddb87c496eb7":[6,0,0,79,0], "a00013.html":[6,0,0,3], "a00013.html#a065a1d5f2e87f640b57ce35580b11659":[6,0,0,3,16], "a00013.html#a121db85dcf088809bd4b95e617324971":[6,0,0,3,4], "a00013.html#a18e4f5fe0683c746f949db5d3c1c914c":[6,0,0,3,6], "a00013.html#a37efe53d810e83dc4894cb405ba31dfa":[6,0,0,3,15], "a00013.html#a3fa7ac041cdab7f6d207d429d4620132":[6,0,0,3,7], "a00013.html#a47aa4553c316eeab7461c368e0ce2bac":[6,0,0,3,19], "a00013.html#a48d3b98f62d903bc99555d6c786d334a":[6,0,0,3,8], "a00013.html#a565339d41daf2278ac02ce543e715cd2":[6,0,0,3,14], "a00013.html#a56acf785f1c0a44c93d40f8b1bdc2921":[6,0,0,3,17], "a00013.html#a5a3869fa04853d5ab14b6676953143be":[6,0,0,3,3], "a00013.html#a7ed7a9968baffb67dc5d2fde25cfa4c8":[6,0,0,3,18], "a00013.html#a8cee54a0d93f38368fd885d6ef3733a7":[6,0,0,3,10], "a00013.html#ab6642dd3f5147bc104c3cdf0c8d2cc9e":[6,0,0,3,21], "a00013.html#abadf5cc14e19fc0c1f8838d1518baefa":[6,0,0,3,0], "a00013.html#abcf73d6a9164ac4f0ffaf4012e774016":[6,0,0,3,2], "a00013.html#abf2511857a61d4835cf6d326bb539a19":[6,0,0,3,13], "a00013.html#acb7da4766d133d40e1f4b294c2dd14d9":[6,0,0,3,1], "a00013.html#ad6e5000885dd6f0b7bdf1f5d7f365dd9":[6,0,0,3,22], "a00013.html#ad9042fbae551a4404e175a431139ca8c":[6,0,0,3,11], "a00013.html#adfb2644b600416cb5eaf43cea64e99ab":[6,0,0,3,12], "a00013.html#af10f41451b711337a25cec42598229fb":[6,0,0,3,20], "a00013.html#af4269ef0ff7802a8bc5c5a0d54cca60d":[6,0,0,3,5], "a00013.html#af837e6e843633027fdfcfa5e68975edb":[6,0,0,3,9], "a00014.html":[6,0,0,21], "a00014.html#a003c1c85d2c6c40f6d5b985394aa34b2":[6,0,0,21,1], "a00014.html#abead818453c7c47646f924c0b6cbff7d":[6,0,0,21,0], "a00015.html":[6,0,1,1], "a00016.html":[6,0,1,2], "a00016.html#a1a64cbf69fea84c3ac667ff3b82f0f5b":[6,0,1,2,0], "a00016.html#a85661c90be7df5a4f32cb40fa63c4311":[6,0,1,2,2], "a00016.html#a905e17859fef67e93d7baeef86dee98b":[6,0,1,2,1], "a00016.html#ab17e48ba1fdbf06183149442e78cb1d0":[6,0,1,2,3], "a00016.html#af4835e096d911543121767d0402e212a":[6,0,1,2,4], "a00017.html":[6,0,1,3], "a00017.html#a36f5165a10ea513315f12ed9f31c573b":[6,0,1,3,0], "a00017.html#a4878de00d941c62fc466ef18b8327e95":[6,0,1,3,3], "a00017.html#a8f7c4801c946a458c3b909375e934e76":[6,0,1,3,2], "a00017.html#ae800195a00697cc19af347efb85911ae":[6,0,1,3,1], "a00017.html#aef731d39bc5048c2a417b6822fd125f6":[6,0,1,3,4], "a00018.html":[6,0,0,36], "a00018.html#a2d18d99434781303ae1099876049d623":[6,0,0,36,0], "a00018.html#a33fa66dcc36972c8afa2d17987fb391d":[6,0,0,36,1], "a00019.html":[6,0,0,6], "a00019.html#a36ed18e0528808b19df70dcf721da973":[6,0,0,6,2], "a00019.html#a48a470b67ec1adb0459b0e009b0a60d0":[6,0,0,6,4], "a00019.html#aa2b7f15be38163b46695c2739b59fb8b":[6,0,0,6,1], "a00019.html#adc14fc627579522b2284af143b8ac9ea":[6,0,0,6,3], "a00019.html#adcace783d423c5306fb72087d5171c31":[6,0,0,6,0], "a00020.html":[6,0,0,4], "a00020.html#a2b3538872ddbadb1e1a4aadc7724afb6":[6,0,0,4,1], "a00020.html#a3ae8ab240a1f152c64cd40493d92f846":[6,0,0,4,0], "a00021.html":[6,0,0,5], "a00021.html#a9d93b15b0681f3b4e25e9fab79adb8cd":[6,0,0,5,0], "a00021.html#ad5c2b3b6043ff998ad67cddc89e2669b":[6,0,0,5,1], "a00022.html":[6,0,0,7], "a00022.html#a0f3aae5285574af29d06abdcb7f2560c":[6,0,0,7,0], "a00023.html":[6,0,0,10], "a00023.html#a043e536c1923594c246f2ca8db31dffa":[6,0,0,10,9], "a00023.html#a04895c06c5ae1d8b0863a32a28beff51":[6,0,0,10,34], "a00023.html#a0e64dc314f291c6f81a948c59d94aa8a":[6,0,0,10,49], "a00023.html#a10b275082e18dbcb177a8871f92c7523":[6,0,0,10,10], "a00023.html#a120b9e03dcaa9b0c3ef7026afa64d954":[6,0,0,10,36], "a00023.html#a140578ed1e1c65c61deb0407ff25959f":[6,0,0,10,29], "a00023.html#a1407974cc9c548bee6d31834625c3d45":[6,0,0,10,51], "a00023.html#a1aa330287775aa1ff83f94714f772673":[6,0,0,10,2], "a00023.html#a1d1c129c2c5797a82f251ee9dabec77e":[6,0,0,10,21], "a00023.html#a2247d8690958f634898bbf014a7d418c":[6,0,0,10,53], "a00023.html#a306a884246abc1051bab4fb06393ee71":[6,0,0,10,0], "a00023.html#a306a884246abc1051bab4fb06393ee71a01e68a67b6a3c92ce9b0c92fa73e90b2":[6,0,0,10,0,8], "a00023.html#a306a884246abc1051bab4fb06393ee71a1f2b785abe834490c33dc4cf19c932d2":[6,0,0,10,0,7], "a00023.html#a306a884246abc1051bab4fb06393ee71a366c98bc3385ecfb39496bf7240e5973":[6,0,0,10,0,11], "a00023.html#a306a884246abc1051bab4fb06393ee71a4a873c5d7e7fb0a9022cdd110181a7de":[6,0,0,10,0,12], "a00023.html#a306a884246abc1051bab4fb06393ee71a6b019128f2fdcfa9d316042342846e2f":[6,0,0,10,0,10], "a00023.html#a306a884246abc1051bab4fb06393ee71a8034abdbcd193f25d9d93cf79156e1fc":[6,0,0,10,0,3], "a00023.html#a306a884246abc1051bab4fb06393ee71a86380c8c083847ba3d16764784f5914f":[6,0,0,10,0,6], "a00023.html#a306a884246abc1051bab4fb06393ee71a8ab47c10b60d6bd6664f6e88f300edcb":[6,0,0,10,0,5], "a00023.html#a306a884246abc1051bab4fb06393ee71a973dc9e4f56818f82b86fb13a5bbc405":[6,0,0,10,0,2], "a00023.html#a306a884246abc1051bab4fb06393ee71aba8a02f6bb5d2304bfbf2110c6cd791a":[6,0,0,10,0,1], "a00023.html#a306a884246abc1051bab4fb06393ee71abefe533e379346c7b9644406c613eb02":[6,0,0,10,0,9], "a00023.html#a306a884246abc1051bab4fb06393ee71ad97556afc36aff4a62c61b67437c20c4":[6,0,0,10,0,4], "a00023.html#a306a884246abc1051bab4fb06393ee71af5a4754aea608aaf5fca6caa51c44ce0":[6,0,0,10,0,0], "a00023.html#a30ec51634479614b45106532e87e5dc7":[6,0,0,10,41], "a00023.html#a32efdc645566975851bfc7d6b82d214c":[6,0,0,10,28], "a00023.html#a335ca1d83e65a9e57b907c431c3afbe1":[6,0,0,10,37], "a00023.html#a33700cc6d830d28c3dbd48eb9b7276ab":[6,0,0,10,1], "a00023.html#a36a26cf7e13f612749d49faf4f1654f8":[6,0,0,10,22], "a00023.html#a38dde9befa350a07a5ac093d13ee64e2":[6,0,0,10,19], "a00023.html#a3b9c5dc16f04600aa5415e06f6ff8fa6":[6,0,0,10,50], "a00023.html#a3c60c76e32687adce1e8c0dba0919773":[6,0,0,10,55], "a00023.html#a4963aaba6da521d480c21c7ec01835cf":[6,0,0,10,3], "a00023.html#a518f718405d80def662f248b427f0e60":[6,0,0,10,48], "a00023.html#a5eac9840b79e7f1893d88b63f6d97b1d":[6,0,0,10,24], "a00023.html#a7179e32df28bd4bc81b85d99b36ad791":[6,0,0,10,6], "a00023.html#a826750f0f13ede4ac4e6ca8a84711b53":[6,0,0,10,25], "a00023.html#a84c1a28176815ab9103c7febec450755":[6,0,0,10,54], "a00023.html#a8ac078b1077fbe19ee1d713bb6b71e8f":[6,0,0,10,38], "a00023.html#a908a2ffdf56d8259492e9f3894e24f65":[6,0,0,10,18], "a00023.html#a9709e4738b1bfb1dba547381749908cb":[6,0,0,10,7], "a00023.html#a9bd21013745b4454e248e637cdae1287":[6,0,0,10,11], "a00023.html#a9d64420154827b3572dcdb955a93bfff":[6,0,0,10,30], "a00023.html#aa839a066c0289a12f664e29c9dbafd38":[6,0,0,10,17], "a00023.html#aa9e66faad88a94857c0749b9bbc5d352":[6,0,0,10,5], "a00023.html#ab15ff67d81467d271dc713b2584f1328":[6,0,0,10,47], "a00023.html#ab5c24029bda3198d826d24757e49c746":[6,0,0,10,4], "a00023.html#ab63e45ad783d8adb8d4a9f03e03ef6ef":[6,0,0,10,31], "a00023.html#ab8c7dd5e54493e18d5900dd70012d062":[6,0,0,10,44], "a00023.html#abf3b71372850f86e4f5e67eb4b7d56bd":[6,0,0,10,23], "a00023.html#ac2eff365ba0aa25ebbf5f903ac3c7a54":[6,0,0,10,52], "a00023.html#ac6b5f32ac91993b37531e96c2d14b18e":[6,0,0,10,35], "a00023.html#acdd295f691812773133147530aa6ff21":[6,0,0,10,33], "a00023.html#acfb8d53e6f105db280cd5d977c005bea":[6,0,0,10,45], "a00023.html#ad2b9e50c9ebfab7c86a091cd939e1e6c":[6,0,0,10,26], "a00023.html#ae02522000400fc2782e892ac0387d85b":[6,0,0,10,42], "a00023.html#aedf4e61e94ea58058e4bc592d98f8dc2":[6,0,0,10,16], "a00023.html#aedf7ac72658efa92e702a06b1964747a":[6,0,0,10,20], "a00023.html#aefdde864e05f88e84d748236b93659e7":[6,0,0,10,39], "a00023.html#af02016af0233bed748eb1ddab9685131":[6,0,0,10,8], "a00023.html#af2dcc39b88897fe2bc3c5742edd43645":[6,0,0,10,27], "a00023.html#af3dfec559fe2305e57aba653abe4c8ad":[6,0,0,10,46], "a00023.html#af53d2c135aa27cdb1a66ff550a26e555":[6,0,0,10,40], "a00023.html#af860fe4c418cfa4f573f34d73327d111":[6,0,0,10,43], "a00024.html":[6,0,0,13], "a00024.html#a0bbbedd08b7f579e5a2577e97b7e09b7":[6,0,0,13,3], "a00024.html#a15bb552a890c0fb28fab2413200dee18":[6,0,0,13,0], "a00024.html#a3358c5c2ab741a6fd798db538516a349":[6,0,0,13,5], "a00024.html#a5b4be97db7a8739e9f4fc7e1b7ab587c":[6,0,0,13,8], "a00024.html#a69870c553a2ea10b2f1fbd6073c2fb25":[6,0,0,13,2], "a00024.html#ab46be4bfe19a8a022f441d120b6b2f09":[6,0,0,13,1], "a00024.html#ab7c76ae54326197bcbe6d35b5bbb246f":[6,0,0,13,6], "a00024.html#ae3164a06f63e76709e17065bea2bf938":[6,0,0,13,9], "a00024.html#ae6c506b9822a94dffd7e58a917d5509e":[6,0,0,13,7], "a00024.html#ae74d43f05d575eb142e18ed0939de151":[6,0,0,13,4], "a00025.html":[6,0,0,63,0], "a00025.html#a15cc57f0a024f75b589c691bc365c718":[6,0,0,63,0,21], "a00025.html#a17ba5e3a754d359042dfa48e5264ddf1":[6,0,0,63,0,0], "a00025.html#a3ea200dc9d6c842992fac6051894c0d8":[6,0,0,63,0,19], "a00025.html#a497b63192e5a9a4710ca4293e9c320d8":[6,0,0,63,0,7], "a00025.html#a50dbe2edddd9e19c30c0f759f99fd96c":[6,0,0,63,0,18], "a00025.html#a5e304e228897af96ffdc3029eb0e5170":[6,0,0,63,0,12], "a00025.html#a790cbb59aead02667d6b9d0ceb1a9403":[6,0,0,63,0,20], "a00025.html#a8de1143b9efd7d43a058320137ea82ce":[6,0,0,63,0,22], "a00025.html#a8f1bc52746ef28585dec38b5c2aa3c38":[6,0,0,63,0,13], "a00025.html#a906281ba2490a25fb8f6aa07d628d864":[6,0,0,63,0,4], "a00025.html#a97aff58264d121f88dad67b0af297934":[6,0,0,63,0,15], "a00025.html#aba4cd98f3fa431fd209e2472d2451e70":[6,0,0,63,0,1], "a00025.html#abc1be98d7b3677258fe94371dafffb51":[6,0,0,63,0,16], "a00025.html#abda1ecb40831ed4143b14a71f375ab03":[6,0,0,63,0,11], "a00025.html#ac16edeb1eb2cf093da17f50bbfca1d28":[6,0,0,63,0,8], "a00025.html#ac9fb1887ce58a5a7e54f4f07f03e7cb8":[6,0,0,63,0,9], "a00025.html#accdf860872a8f8afc2f09962584a18da":[6,0,0,63,0,5], "a00025.html#ad0bd9ced4070befef193fd8d5833b108":[6,0,0,63,0,3], "a00025.html#ad55b1f8087acb90293ac5b755fa7559a":[6,0,0,63,0,17], "a00025.html#ad6ec720a271e8c8ef55d788a4ef4310e":[6,0,0,63,0,6], "a00025.html#ae36e7966b97f179cc4c7aefdb380b871":[6,0,0,63,0,2], "a00025.html#af35b104d96b2539298f555f8d203c274":[6,0,0,63,0,14], "a00025.html#afff9ad42b2ee875271986e286eafb3e5":[6,0,0,63,0,10], "a00026.html":[6,0,0,63,1], "a00026.html#a26d3352521f982371892fcd3f7887385":[6,0,0,63,1,0], "a00026.html#a3c180ae98bdbb8c91c99ec240699214e":[6,0,0,63,1,8], "a00026.html#a4b73b10bbd225e66fecb0f973bc7f646":[6,0,0,63,1,15], "a00026.html#a502b4f48c95468df45e1171105e7c7ca":[6,0,0,63,1,10], "a00026.html#a5ff9feab497260cb8c0149a617d67d87":[6,0,0,63,1,1], "a00026.html#a6258eae13dd108996bd5aa271364d083":[6,0,0,63,1,23], "a00026.html#a6dc388d260689833950a5e58965835e6":[6,0,0,63,1,14], "a00026.html#a997e5c6c5280b00c6e0044b5802add69":[6,0,0,63,1,3], "a00026.html#a9fa2c69ffd5abdcbe2ffe06e958bf0b0":[6,0,0,63,1,6], "a00026.html#aaa20e76817214772829e678fb69f1867":[6,0,0,63,1,5], "a00026.html#aaab7d3d96fecdb956ac2a99de48cc6ad":[6,0,0,63,1,7], "a00026.html#aac3ac92ff097a00fc3e4db4c492df39d":[6,0,0,63,1,22], "a00026.html#aae4cfef8b752a742ea9309211a3e2cbb":[6,0,0,63,1,11], "a00026.html#abcd73f13916b63ca0f58226743f08ad2":[6,0,0,63,1,21], "a00026.html#abf44ad8f6cbe4151aa4f604346c3a798":[6,0,0,63,1,19], "a00026.html#ac4d7e6a31016fa6ef151ed733f3981bf":[6,0,0,63,1,13], "a00026.html#ac9149722b80a911706d9ad204417a69a":[6,0,0,63,1,24], "a00026.html#ad7d0e545c07afd1494ba108013017db4":[6,0,0,63,1,18], "a00026.html#ad8f4dfb14796dbca4a2ea11cd3b94abf":[6,0,0,63,1,2], "a00026.html#adb70d4f1b65017f0636f0f0d071c59d8":[6,0,0,63,1,4], "a00026.html#ae3c7c25edc9892ee1dabf477aab9e395":[6,0,0,63,1,17], "a00026.html#ae6c405d28fce372695d7fb2417542dae":[6,0,0,63,1,12], "a00026.html#aec42218111ecb316b02ff92360ef9850":[6,0,0,63,1,9], "a00026.html#aee74d24ee0519333b2670832bc982ade":[6,0,0,63,1,20], "a00026.html#af90bb146374a2379b945408a11512826":[6,0,0,63,1,16], "a00027.html":[6,0,0,63,2], "a00027.html#a12f99190037d4b490500936a83092a74":[6,0,0,63,2,13], "a00027.html#a17ba5e3a754d359042dfa48e5264ddf1":[6,0,0,63,2,0], "a00027.html#a2dc27dbf36c0b966ebc25a87450d5c0b":[6,0,0,63,2,12], "a00027.html#a346cdf18a3340f2503555f19f71f21a0":[6,0,0,63,2,14], "a00027.html#a376a59da3f6fffd6627a1873ea3b5228":[6,0,0,63,2,4], "a00027.html#a4ba542847467824cde9db977878646a2":[6,0,0,63,2,20], "a00027.html#a51c35bad2747cbd6c90a267d59aa31ef":[6,0,0,63,2,10], "a00027.html#a5743ed64cc92b0fc704e0ba44441000b":[6,0,0,63,2,22] }; libpqxx-3.1.1/doc/html/Reference/ftv2mlastnode.png0000664000175000017500000000036612076703502017042 00000000000000‰PNG  IHDRɪ|½IDATxíÝ!NAÅñ¤‡à\ ÷à Um@`Ô5iÒ`ëh ‚ÅW7] b§ÝˆŠ&oföÍd¾YÔ4 üšcø ‡€´‹Åòù3v=¼]†§µ\B… I¿‹=B·™B¡®;¸k´µ W°ÍN@vyÍÑÖ4ãß÷]ÈâYìã§|M}]ÔÚx6a }ôdׇØYüú¨>¤||5?Ó>|žB"¡î'¡IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00303.html0000664000175000017500000000667412076703501015247 00000000000000 libpqxx: Member List
pqxx::internal::dereference< ITER > Member List

This is the complete list of members for pqxx::internal::dereference< ITER >, including all inherited members.

operator()(ITER i) const pqxx::internal::dereference< ITER >
libpqxx-3.1.1/doc/html/Reference/a00086.png0000664000175000017500000000373612076703501015073 00000000000000‰PNG  IHDR øÁäC$PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2mIDATxíí’« DmUÞÿ‘/åC'›d“ì&wÛ²q@8 3¡^Ëz­¯ô½Ö•/—ëe†q,ó1„V.,†ÐÊJãu?Ií=}e—n·“ž>ßBãGÈçUÜíŽq2Â'Ï3gØG™Î³ÊÏRÉs,“Üv0—‰Ü”›s{~TOÈÆ­ß¹87¯ökÿly†Tú·÷\¨ã”Ž­ý<îP_“UÊ"ËŽåÚùYܾ.¢µ÷÷u1c¿Ù¾õ/ ÎðÞúõÿlííý7S캳u'Ëb¶ÚÎöÙcÖÕvûV®ýÆX°îðê¼øáx5¿îÆZ¬n=Âvò|íhœ›†€86kÏÊdwüï÷Jräxˆhßù úŽ6XÛ†vXÕûMö#ÜÝx›1i󔚕 ¬5Ã>’Bû¤§€ÖaMg»ÇŽý1 à±§¿Ç2¶{`=•ÆDÏqn‹öƒ»nÙ`pïêðÓqX“Â(§@[ÒN‡Ø²Æz>&»5›Ô,õÀz GÜkˆâºé”K‰ 2®GwæÊ³JË=Vü]ÿWicIކ±•5ÃF-+ èe¦QcDz^[,ù›ïo €e³N'ã0 €ƒ2 ã0 €@fa‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘LÃ4"™†iD2 ÓˆdïHcY–ÅZ/I²Êe¦!I‘LÃ4$)ÒÑH’t“²å%ãÛ‘¤ûõž4$)ÒçÐHJe²ùÙ*}éü–¿¬µÑzûºhm›ÝþÇÎ’ô¨žH£zxY’‚{3Ym”Ôï¹8Øþ¡¤~?ÍgžéûUlÏñóæ…v7 iöŸM#;ö°ÊæìwѨöµó¹þæ4&?ž²_åÁQ®Ó8t–¤gè5qãE/и7f7.ä”ZÛI©óIÒÍœSfßØÙ¿oN «’ô9ú %R>Ï$)”}ã54$éÓe¦!I‘LÃ4$)R¦±,ËbÕ à t°L`Öéd¦pP†a¦È,L ’i˜@$Ó0 €H¦a‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘Lãi,˲XëÅ"IV¹LÃ4$)’i˜†$Eú%©ÜkM’nPï#I/ÑgѤWê4’R™y~¶Ê¸šsûf•Ê£¼«]—¡8?ŠÅd'IÏÓKhÔ/+PRtoªŒÖjû2Üsq°“¤'ê5¾±Ÿ÷öŒ>^3·g*î&IÏÑûÐÈ'`xmGäÿ¢1¹ø4«<8ʧÒâCEƒ¸1º7>È7.ä”4[Néá°æŒÃIÒÍœS>餫’ôî2 Ó¤H¯ !IŸ)Ó0 IŠd¦!I‘2eY«^o €e³N'ã0 €ƒ2 ã0 €@fa‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘LÃ4"™†iD2 ÓˆdïHcY–ÅZ/I²Êe¦!I‘LÃ4$)Òkh$IÚ)j»ÖáË>’ú}—±$…ú9’tQÏ !Iê›4’Rù~¶Ê0§ÞÚ?Õ÷nµ5­º]ùP¾­öƒ¯ßû6;IºKߥQ7®ÌCI‡»Õ”4Ýã&®V×:DV“­’ú=ØIÒ}ú¶oìÿ¾=ÇÏ“¿g8xñ8à۞njIÒ}z-êëíÜJcê°‡ýç¡í­hLŽÀš&{ýѺðùm|cQ½-n ë BÎE×ãÆûÆ…œ²ÍªÇûí$E9åZjècNÊnæœòó'å©™^’~_¿@ãýf'‘¤·}ã 4$é?”i˜†$E2 Ó¤H™Æ²,‹U/€7Ð À2 €Y§“q˜ÀA†q˜@ ³0 €H¦a‘LÃ4"™†iD2 Óˆd¦É4L ’i˜@$Ó0 €H¦a‘LÃ4"™†iD2w¤‘RJÖz‘¬ê¦aLÃ4"}‡FÔ#·Ý>Ð5ãóÇá·œ7ÿµ¾ŽI`¶éï6CûÔ0é·h\Ô6X¡2U¦)6[m´(]¥‘++æ^9Ì¡nÁjÑ41ß[µg/¶-íb´}Y—iŒ6ë¤v4ú\o¥QÇ(“%±¿·ï«Ak…4ܱÕdK¢ßƒ]ã6ms@£/êI4†Í˜@ÏSœìÆñŽÅø¾{Žû´¶y˜yRíï÷ÒÆâÆð“(n Ûð(6ë~‚Û‡³ßçñJnño q#Ž¢QDH0Þ1³+qc>×rJ@c_‰hŒýnŠrÊî ìLÛI©ÍªÅ³!§ôt3甃ãn'¼Œá„D4ºMƒ¹ïŽU­è÷œ®¾L?ÿ¹LÃ4"5^¦a‘LÃ4"e)¥dÕëµ'½KúRÐçIEND®B`‚libpqxx-3.1.1/doc/html/Reference/functions_func_0x7e.html0000664000175000017500000002157512076703502020325 00000000000000 libpqxx: Class Members - Functions
 

- ~ -

libpqxx-3.1.1/doc/html/Reference/a00305.html0000664000175000017500000001006112076703501015232 00000000000000 libpqxx: Member List
pqxx::internal::refcount Member List
libpqxx-3.1.1/doc/html/Reference/a00073.png0000664000175000017500000000256012076703501015061 00000000000000‰PNG  IHDR­ø©2–5PLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2ÿIDATxíÛ’« Û¦*ÿÿÉÇKT4&1—Ù]Ne+Bg„É+¥”Ò ÕFH[ÕÒV5†ß¶íÆSõ ÀVõ$Ol;»q¼þºª9ž4Ïsð†ûÜg¸Mo åñ©ªS½Ã3Ûi²q\;oÎ{ÍUä6ÕÕ­Óú¬êTyÛýhóõLóÜ0Õ]ëwïüÕc‚m‡co;Õ…ÛÞ~ê'ÍU8×ê›ѶZ˜G»ìqóú3æÛ“uûqlïlúy–sÂuw.uŸ¯„™ñI³ê=^íh;î¤Ç¹óÙª>!ÂVõ‘¶ª1¤­j ½m)¥´@€fhÊöriI·)Û^¶!ݶl3'D‘¶1¤-@ i CÚĶ1¤-@ i CÚĶ1¤-@ i CÚG)¥4EµÒV5†´U!ʶë–Òxª~NíÖï×m»kôúëRX½ºñéz]Â;1<¬‘W=ÏÛ¶‹Äà«ÝÍ9³«¨Êª¯ñ~lk‰:¼›o¤ÿGmû~l;5¨¾ÈWl7Nu³ëùa\¿µnowÙ¡í¼ç~e%ÜÉ U‡ß1W\7ãÚ ú2Ÿ¬„ogSÕǤ­j Aÿ¼ª¤­j i«Co[J)­À š²½\ZÒmʶ—mH·-ÛÌ Q¤-@ i CÚĶ1¤-@ i CÚĶ1¤-@ i CÚĶÃQJ)Í@Qm„´U!mUc´íT¿ËÿmÛÙýu)ÔfkkmÛͽúÛt©*TOò²í8ß4¡÷ÏZd(Ì—M…êI^íìsuÚÎ9•¦ÖÛýë‹å˶×ðím‡ã×mëO_÷8ŠírÿQÛjeì²'ëöçc{''Ì!}œ–Ë.•¨žà•p*ŸdÛ`Ûqw½š¥TïñÇVõ÷H[ÕÒV5†Þ¶”RZ € @34e{¹´¤Û”m/Ûn[¶™¢H[€Ò †´ˆ!mbH[€Ò †´ˆ!mbH[€Ò †´ˆ!m‡£”Rš¢Úi«CÚªÆð=ÛNõUÏñÿÙvvãlýu)T×ÚžºãÚmx¨l»ùíé…m…êNÙŽãNÛys>.-òk”—ŸríVý6Õûœ‹í<ï,²{mÞu¬Zl÷gK í²@¶¶Ãñc¶õ'~b»}k·ßâl«x´ËÞ[·q±½“fŸ÷rÂrÙþxÕ{œ] òæíWÞwüR¶±½ù®S çý¥ú&!±Ý[ýhlUÿi«CÚªÆÐÛ–RJ+ph†¦l/—–t›²íeÒmË6s@i CÚĶ1¤-@ i CÚĶ1¤-@ i CÚĶ1¤ípt]×5@#¤-@ i ˶;ŸiírÛ¹ßñ‡\›þŽí™¡Û¾0–†œ6ª1®µ=uǵÛðP«ÌÕµÃòÆ0ÊrYÓþz=œic;6çX×Áæ|\ª‡Ü ¶æµ~}kìµív¦]l÷7+éfŽê6?õ>Щ_|l{3ʧ¶Ë9o;þƒV¥mëOüÄvûÖ ÛVÂÛj‘í²×ÖíÛóëv×ótN˜G~-',Ÿú8'LƒL¥:I­‘Ú.¶£•ð ó&ÊMÇŸøO|Ûvû« ´ç½ÊÓÍÀz¾Ûý ?[€?OÚĶ1 iºëº®þÈû‹‰;3¼:IEND®B`‚libpqxx-3.1.1/doc/html/Reference/functions_0x65.html0000664000175000017500000001775312076703502017234 00000000000000 libpqxx: Class Members
libpqxx-3.1.1/doc/html/Reference/a00104.html0000664000175000017500000002645112076703501015241 00000000000000 libpqxx: pqxx::thread_safety_model Struct Reference
pqxx::thread_safety_model Struct Reference

Descriptor of library's thread-safety model. More...

#include <util.hxx>

Public Attributes

bool have_strerror_r
 Does standard C library offer strerror_r?
bool safe_libpq
 Is the underlying libpq build thread-safe?
bool safe_query_cancel
 Is canceling queries thread-safe?
bool safe_result_copy
 Are copies of pqxx::result and pqxx::binarystring objects thread-safe?
bool safe_kerberos
 Is Kerberos thread-safe?
std::string description
 A human-readable description of any thread-safety issues.

Detailed Description

Descriptor of library's thread-safety model.

This describes what the library knows about various risks to thread-safety.

Member Data Documentation

std::string pqxx::thread_safety_model::description

A human-readable description of any thread-safety issues.

Referenced by pqxx::describe_thread_safety().

bool pqxx::thread_safety_model::have_strerror_r

Does standard C library offer strerror_r?

If not, its strerror implementation may still be thread-safe. Check your compiler's manual.

Without strerror_r or a thread-safe strerror, the library can't safely obtain descriptions of certain run-time errors. In that case, your application must serialize all use of libpqxx.

Referenced by pqxx::describe_thread_safety().

bool pqxx::thread_safety_model::safe_kerberos

Is Kerberos thread-safe?

Warning
Is currently always false.

If your application uses Kerberos, all accesses to libpqxx or Kerberos must be serialized. Confine their use to a single thread, or protect it with a global lock.

Referenced by pqxx::describe_thread_safety().

bool pqxx::thread_safety_model::safe_libpq

Is the underlying libpq build thread-safe?

A "false" here may mean one of two things: either the libpq build is not thread-safe, or it is a thread-safe build of an older version that did not offer thread-safety information.

In that case, the best fix is to rebuild libpqxx against (a thread-safe build of) a newer libpq version.

Referenced by pqxx::describe_thread_safety().

bool pqxx::thread_safety_model::safe_query_cancel

Is canceling queries thread-safe?

If not, avoid use of the pqxx::pipeline class in threaded programs. Or better, rebuild libpqxx against a newer libpq version.

Referenced by pqxx::describe_thread_safety().

bool pqxx::thread_safety_model::safe_result_copy

Are copies of pqxx::result and pqxx::binarystring objects thread-safe?

If true, it's safe to copy an object of either of these types (copying these is done very efficiently, so don't worry about data size) and hand the copy off to another thread. The other thread may access the copy freely without any concurrency concerns.

Referenced by pqxx::describe_thread_safety().


The documentation for this struct was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/functions_0x63.html0000664000175000017500000003526312076703502017226 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- c -

libpqxx-3.1.1/doc/html/Reference/functions.html0000664000175000017500000001561112076703502016441 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- a -

libpqxx-3.1.1/doc/html/Reference/tabs.css0000664000175000017500000000221312076703500015176 00000000000000.tabs, .tabs2, .tabs3 { background-image: url('tab_b.png'); width: 100%; z-index: 101; font-size: 13px; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } .tabs2 { font-size: 10px; } .tabs3 { font-size: 9px; } .tablist { margin: 0; padding: 0; display: table; } .tablist li { float: left; display: table-cell; background-image: url('tab_b.png'); line-height: 36px; list-style: none; } .tablist a { display: block; padding: 0 20px; font-weight: bold; background-image:url('tab_s.png'); background-repeat:no-repeat; background-position:right; color: #283A5D; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; outline: none; } .tabs3 .tablist a { padding: 0 10px; } .tablist a:hover { background-image: url('tab_h.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); text-decoration: none; } .tablist li.current a { background-image: url('tab_a.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } libpqxx-3.1.1/doc/html/Reference/a00106.js0000664000175000017500000000051312076703502014703 00000000000000var a00106 = [ [ "isolation_tag", "a00106.html#a01e7ecea76d7d12c295e6979759eb754", null ], [ "transaction", "a00106.html#a5ad879f746d13f51e469c67665b5d3f9", null ], [ "transaction", "a00106.html#a664bdb9c889f946c162cac14bdbe6b7b", null ], [ "~transaction", "a00106.html#a028f5dc23672e38c82a8fd91cd4e4ee0", null ] ];libpqxx-3.1.1/doc/html/Reference/a00112.html0000664000175000017500000002651012076703501015234 00000000000000 libpqxx: pqxx::undefined_function Class Reference
pqxx::undefined_function Class Reference

#include <except.hxx>

Inheritance diagram for pqxx::undefined_function:
pqxx::syntax_error pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 undefined_function (const std::string &err)
 undefined_function (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::syntax_error
 syntax_error (const std::string &err)
 syntax_error (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Constructor & Destructor Documentation

pqxx::undefined_function::undefined_function ( const std::string &  err)
explicit
pqxx::undefined_function::undefined_function ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00113.js0000664000175000017500000000026412076703502014704 00000000000000var a00113 = [ [ "undefined_table", "a00113.html#a639bf511f48a2eb3715f857fd91f1bce", null ], [ "undefined_table", "a00113.html#af1f3774f9f8b5cf656a9e6f442e2aea8", null ] ];libpqxx-3.1.1/doc/html/Reference/a00110.html0000664000175000017500000016054712076703501015243 00000000000000 libpqxx: pqxx::result::tuple Class Reference

Reference to one row in a result. More...

#include <result.hxx>

Inheritance diagram for pqxx::result::tuple:
pqxx::result::const_iterator pqxx::result::const_reverse_iterator

Public Types

typedef unsigned int size_type
typedef signed int difference_type
typedef const_fielditerator const_iterator
typedef const_iterator iterator
typedef field reference
typedef const_fielditerator pointer
typedef const_reverse_fielditerator const_reverse_iterator
typedef const_reverse_iterator reverse_iterator

Public Member Functions

 tuple (const result *r, result::size_type i) throw ()
 ~tuple () throw ()
const_iterator begin () const throw ()
const_iterator end () const throw ()
size_type size () const throw ()
void swap (tuple &) throw ()
result::size_type rownumber () const throw ()
result::size_type num () const
tuple slice (size_type Begin, size_type End) const
bool empty () const throw ()
Comparison
bool operator== (const tuple &) const throw ()
bool operator!= (const tuple &rhs) const throw ()
Field access
reference front () const throw ()
reference back () const throw ()
const_reverse_fielditerator rbegin () const
const_reverse_fielditerator rend () const
reference operator[] (size_type i) const throw ()
reference operator[] (int i) const throw ()
reference operator[] (const char f[]) const
reference operator[] (const std::string &s) const
reference at (size_type) const throw (range_error)
reference at (int i) const throw (range_error)
reference at (const char[]) const
reference at (const std::string &s) const
Column information
size_type column_number (const std::string &ColName) const
 Number of given column (throws exception if it doesn't exist)
size_type column_number (const char[]) const
 Number of given column (throws exception if it doesn't exist)
oid column_type (size_type ColNum) const
 Type of given column.
oid column_type (int ColNum) const
 Type of given column.
oid column_type (const std::string &ColName) const
 Type of given column.
oid column_type (const char ColName[]) const
 Type of given column.
oid column_table (size_type ColNum) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
oid column_table (int ColNum) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
oid column_table (const std::string &ColName) const
 What table did this column come from? Requires PostgreSQL 7.4 C API.
size_type table_column (size_type ColNum) const
 What column number in its table did this result column come from?
size_type table_column (int ColNum) const
 What column number in its table did this result column come from?
size_type table_column (const std::string &ColName) const
 What column number in its table did this result column come from?

Protected Attributes

const resultm_Home
result::size_type m_Index
size_type m_Begin
size_type m_End

Friends

class field

Detailed Description

Reference to one row in a result.

A tuple represents one row (also called a tuple) in a query result set. It also acts as a container mapping column numbers or names to field values (see below):

cout << tuple["date"].c_str() << ": " << tuple["name"].c_str() << endl;

The tuple itself acts like a (non-modifyable) container, complete with its own const_iterator and const_reverse_iterator.

Member Typedef Documentation

typedef unsigned int pqxx::result::tuple::size_type

Constructor & Destructor Documentation

pqxx::result::tuple::tuple ( const result r,
result::size_type  i 
) throw ()
Deprecated:
Do not use this constructor. It will become private.
pqxx::result::tuple::~tuple ( ) throw ()

Member Function Documentation

pqxx::result::field pqxx::result::tuple::at ( size_type  i) const throw (range_error)
reference pqxx::result::tuple::at ( int  i) const throw (range_error)

References at().

Referenced by at().

pqxx::result::field pqxx::result::tuple::at ( const char  f[]) const
reference pqxx::result::tuple::at ( const std::string &  s) const

References at().

Referenced by at().

reference pqxx::result::tuple::back ( ) const throw ()
const_iterator pqxx::result::tuple::begin ( ) const throw ()
size_type pqxx::result::tuple::column_number ( const std::string &  ColName) const

Number of given column (throws exception if it doesn't exist)

References column_number().

Referenced by column_number().

pqxx::result::tuple::size_type pqxx::result::tuple::column_number ( const char  ColName[]) const

Number of given column (throws exception if it doesn't exist)

References pqxx::result::column_number().

oid pqxx::result::tuple::column_table ( size_type  ColNum) const

What table did this column come from? Requires PostgreSQL 7.4 C API.

Only defined if the libpqxx library was compiled against a libpq version that supports the PQftable function.

If you get a link error saying this function is undefined, that must be because libpqxx was compiled against an older version of libpq. The PQftable function first became available in PostgreSQL 7.4.

oid pqxx::result::tuple::column_table ( int  ColNum) const

What table did this column come from? Requires PostgreSQL 7.4 C API.

Only defined if the libpqxx library was compiled against a libpq version that supports the PQftable function.

If you get a link error saying this function is undefined, that must be because libpqxx was compiled against an older version of libpq. The PQftable function first became available in PostgreSQL 7.4.

References column_table().

Referenced by column_table().

oid pqxx::result::tuple::column_table ( const std::string &  ColName) const

What table did this column come from? Requires PostgreSQL 7.4 C API.

Only defined if the libpqxx library was compiled against a libpq version that supports the PQftable function.

If you get a link error saying this function is undefined, that must be because libpqxx was compiled against an older version of libpq. The PQftable function first became available in PostgreSQL 7.4.

References column_table().

Referenced by column_table().

oid pqxx::result::tuple::column_type ( size_type  ColNum) const

Type of given column.

oid pqxx::result::tuple::column_type ( int  ColNum) const

Type of given column.

References column_type().

Referenced by column_type().

oid pqxx::result::tuple::column_type ( const std::string &  ColName) const

Type of given column.

References column_type().

Referenced by column_type().

oid pqxx::result::tuple::column_type ( const char  ColName[]) const

Type of given column.

References column_type().

Referenced by column_type().

bool pqxx::result::tuple::empty ( ) const throw ()
const_iterator pqxx::result::tuple::end ( ) const throw ()
reference pqxx::result::tuple::front ( ) const throw ()
result::size_type pqxx::result::tuple::num ( ) const
bool pqxx::result::tuple::operator!= ( const tuple rhs) const throw ()
bool pqxx::result::tuple::operator== ( const tuple rhs) const throw ()
reference pqxx::result::tuple::operator[] ( size_type  i) const throw ()
reference pqxx::result::tuple::operator[] ( int  i) const throw ()

References operator[]().

Referenced by operator[]().

reference pqxx::result::tuple::operator[] ( const char  f[]) const
reference pqxx::result::tuple::operator[] ( const std::string &  s) const

References operator[]().

Referenced by operator[]().

result::tuple::const_reverse_iterator pqxx::result::tuple::rbegin ( ) const
result::tuple::const_reverse_iterator pqxx::result::tuple::rend ( ) const
result::size_type pqxx::result::tuple::rownumber ( ) const throw ()
size_type pqxx::result::tuple::size ( ) const throw ()
pqxx::result::tuple pqxx::result::tuple::slice ( size_type  Begin,
size_type  End 
) const

Produce a slice of this tuple, containing the given range of columns.

The slice runs from the range's starting column to the range's end column, exclusive. It looks just like a normal result tuple, except slices can be empty.

Warning
Slicing is a relatively new feature, and not all software may be prepared to deal with empty slices. If there is any chance that your program might be creating empty slices and passing them to code that may not be designed with the possibility of empty tuples in mind, be sure to test for that case.

References m_Begin, and m_End.

void pqxx::result::tuple::swap ( tuple rhs) throw ()
size_type pqxx::result::tuple::table_column ( size_type  ColNum) const

What column number in its table did this result column come from?

A meaningful answer can be given only if the column in question comes directly from a column in a table. If the column is computed in any other way, a logic_error will be thrown.

Parameters
ColNuma zero-based column number in this result set
Returns
a zero-based column number in originating table

Requires libpq from PostgreSQL 7.4 or better, as well as a server version of at least 7.4.

size_type pqxx::result::tuple::table_column ( int  ColNum) const

What column number in its table did this result column come from?

References table_column().

Referenced by table_column().

size_type pqxx::result::tuple::table_column ( const std::string &  ColName) const

What column number in its table did this result column come from?

References table_column().

Referenced by table_column().

Friends And Related Function Documentation

friend class field
friend

Member Data Documentation

size_type pqxx::result::tuple::m_Begin
protected

Referenced by slice().

size_type pqxx::result::tuple::m_End
protected

Referenced by slice().

const result* pqxx::result::tuple::m_Home
protected
result::size_type pqxx::result::tuple::m_Index
protected

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00067.js0000664000175000017500000000045012076703502014711 00000000000000var a00067 = [ [ "max", "a00067.html#ae5fc707d9d6ebbac808a5fb6e26690f8", null ], [ "max", "a00067.html#af71385909ae48a64f6e88d19f940bcd1", null ], [ "min", "a00067.html#a672ff8f843f277b741fef22594a1d78f", null ], [ "min", "a00067.html#a9387cf870c1b7d0f6ced0db05614e494", null ] ];libpqxx-3.1.1/doc/html/Reference/a00031.html0000664000175000017500000002504412076703501015235 00000000000000 libpqxx: pqxx::data_exception Class Reference
pqxx::data_exception Class Reference

Error in data provided to SQL statement. More...

#include <except.hxx>

Inheritance diagram for pqxx::data_exception:
pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 data_exception (const std::string &err)
 data_exception (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

Error in data provided to SQL statement.

Constructor & Destructor Documentation

pqxx::data_exception::data_exception ( const std::string &  err)
explicit
pqxx::data_exception::data_exception ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00201.html0000664000175000017500000000711612076703501015234 00000000000000 libpqxx: Error/warning output
Error/warning output

Classes

struct  pqxx::noticer
 Base class for user-definable error/warning message processor. More...
struct  pqxx::nonnoticer
 No-op message noticer; produces no output. More...

Detailed Description

libpqxx-3.1.1/doc/html/Reference/functions_func_0x6e.html0000664000175000017500000002135412076703502020317 00000000000000 libpqxx: Class Members - Functions
libpqxx-3.1.1/doc/html/Reference/a00100.png0000664000175000017500000000424012076703501015045 00000000000000‰PNG  IHDRÙø—lPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2/IDATxíÝë–¢<FáÇb-ïÿ’?Ï‚§VÐn§¾×ɆLu6þÂw3 Ãð…@€Ù UU_GÌÂ2b:³Ð‘˜…ŽÄ,täÌ®v­ªê.1 Ëø³UUˆYXƵÙU­vk¿9ž:#?Lo¯E¹=c¶§ýÛþîj4VU“³°Œf÷bvjUWíÞô¨"'ãӪjÜFcU5n1 ˸U³—+<>3}œØÆ/î¹!½ªÆ-faï7»ý]šÝÅ,ü?˜½Þn˜•éyøªtc>Ëãïì¨"ËÿÃôYùñôÃw6fáܪٓ±©º£‘;Ó£íøp9¶~ا÷§Ó'¹ªjBÌÂ2nïÆ×Ýg§«ªîñ||ÌÂ2ÞfvS‚Û_UÕ=b~‹Ô,täÚlUÕ_³°Œ˜…ŽÄ,t$f¡#1 †aøB À7°†ÍˆYhÈzµÐ˜…†lÄF-´#f¡'ñ ‰YèHÌBGb:³Ð‘˜…ŽÄ,t$f¡#1 ‰YèHÌBGb:³Ð‘˜…ŽÄ,t$f¡#1 ‰YèHÌBGb:³Ð‘˜…ŽÄ,t$f¡#1 ‰Yø†a¾0›¡ªêëˆYXFÌBGb:³Ð‘˜…޼ÑìjuêíZUÕLb–ñ>³S—1 É fW‡ªÜO³ÃÕîêp<•ížíŹ¢«ª~ fa¯˜= Ûº­Z]µ#£~UÕÄ,,㥚 —ídÿ½¥:fáwy³Ùͦ{Ûì~¢ªêb–1×ìÄßxºVunsê5fa93¿³£‚íÂWfwÙá×y©fOB§fGÅ»u~ØŽ¶éªª'‰YXÆ‹»ñu·ªêíÄ,,#f¡#1 yÁlUÕ/³°Œ˜…ŽÄ,t$f¡#1 †aøB À7°†ÍˆYhÈzµÐ˜…†lÄF-´#f¡'ñ ‰YèHÌBGb:³Ð‘˜…ŽÄ,t$f¡#1 ‰YèHÌBGb:³Ð‘˜…ŽÄ,t$f¡#1 ‰YèHÌBGb:³Ð‘˜…ŽÄ,t$f¡#1 ‰Yø†a¾0›¡ªêëˆYXFÌBGb:³Ð‘˜…޼×쪪ê Ä,,#f¡#O˜]Õjglsy7¶‹:FpEÌÂ2î›ÝÚy°r·".&b“¸"fawên¢bß»Ý9zY™×Ä,,c®ÙÓn<Ù”wí•ÙãXÌÂoñœÙÉn;˜š½·ŸÎ1 ¿ÁSßÙQÁŽ4Ý7;‰Ìn ¿Ïƒš= š=m»W…¸{Îñãíx:€+b–ñp7~b?ã fa Í>”¾ÿÁ«Ä,,c™ÙOˆYXÆw®aÌÂ2b:³Ð‘˜…ŽÄ,tdµZ­¾ð ¬!@3b²^G-ô#f¡!±Q íˆYèI¼BGb:³Ð‘˜…ŽÄ,t$f¡#1 ‰YèHÌBGbf°^¯×a½^¯g_È×—D„dá` 1 3H‚0ƒ,,!faIf…ƒ%Ä,Ì Â ²p°„˜…$A˜A–³0ƒ$3ÈÂÁbfaY8XBÌ þ_ Ã0¼‰õ0 ÛH‚Ã0 K0TU}ã…«ªú:þ³pUU/³UU3ˆÙªª%ÄlUÕ b¶ªj1[Uµ„%fW£îj|u3¤ªÎíÞø;îµô6!UUWl†oμÓìK™^õî$þ³wE}‡Ù'Ò{ù/øŒÙ—2}ÚìæmÙm_›cgtãö¼{ÏQ»ÓvlwÏCNoãhîP û{ŽýqÙ\/ÜGÓ;†\…m§s|`ö2gsN¯ªÎmlöøÔÓVUí0wŽ:gy17 ¹ü{®Ÿwøï&ûÞ ³¿‘Þí°Ë©ŸÌ~:Óë'Ü(ÝIÍ^ÞöXÍ“§ë­ãöÊMÃoÕì§Ó»ž¿‘ì3fi!¯Ö²ªÎm©ÙíïñàŸš})½?5ûZ¦Á‡Àª:·{f' þøU{°&3û‘ô>bö™Þü²UÕ¤ÝùÎÞþð_¾(?n"?|g'ŠÍþJzwÖí5³ŸÎôõïì)iBÇ[ϽÓÕ!÷‹?üüþ»Óàô /Ôì'ÓLÃn=èÇšýh¦‡7f÷ï"ðÁn|Ý­ªúnïÆ_“Þ»ñßgúq³»ûõUUõˆß2;3½?0ûj¦©ÙªªüK5[Uõ5F 7 Ãð}|}‚ÿh|ºq¶ß ¾IEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00006.html0000664000175000017500000011334112076703501015235 00000000000000 libpqxx: pqxx::basic_connection< CONNECTPOLICY > Class Template Reference
pqxx::basic_connection< CONNECTPOLICY > Class Template Reference

The ultimate template that defines a connection type. More...

#include <basic_connection.hxx>

Inheritance diagram for pqxx::basic_connection< CONNECTPOLICY >:
pqxx::connection_base

Public Member Functions

 basic_connection ()
 basic_connection (const std::string &opt)
 basic_connection (const char opt[])
 ~basic_connection () throw ()
const std::string & options () const throw ()
- Public Member Functions inherited from pqxx::connection_base
void disconnect () throw ()
 Explicitly close connection.
bool is_open () const throw ()
 Is this connection open at the moment?
void trace (FILE *) throw ()
 Enable tracing to a given output stream, or NULL to disable.
void set_client_encoding (const std::string &Encoding)
 Set client-side character encoding.
void set_variable (const std::string &Var, const std::string &Value)
 Set session variable.
std::string get_variable (const std::string &)
 Read session variable.
std::string adorn_name (const std::string &)
 Suffix unique number to name to make it unique within session context.
std::string esc (const char str[])
 Escape string for use as SQL string literal on this connection.
std::string esc (const char str[], size_t maxlen)
 Escape string for use as SQL string literal on this connection.
std::string esc (const std::string &str)
 Escape string for use as SQL string literal on this connection.
std::string esc_raw (const unsigned char str[], size_t len)
 Escape binary string for use as SQL string literal on this connection.
template<typename T >
std::string quote (const T &t)
 Represent object as SQL string, including quoting & escaping.
void cancel_query ()
 Attempt to cancel the ongoing query, if any.
void activate ()
 Explicitly activate deferred or deactivated connection.
void deactivate ()
 Explicitly deactivate connection.
void inhibit_reactivation (bool inhibit)
 Disallow (or permit) connection recovery.
void simulate_failure ()
 Make the connection fail.
std::auto_ptr< noticerset_noticer (std::auto_ptr< noticer > N) throw ()
 Set handler for postgresql errors or warning messages.
noticerget_noticer () const throw ()
void process_notice (const char[]) throw ()
 Invoke notice processor function. The message should end in newline.
void process_notice (const std::string &) throw ()
 Invoke notice processor function. Newline at end is recommended.
const char * dbname ()
 Name of database we're connected to, if any.
const char * username ()
 Database user ID we're connected under, if any.
const char * hostname ()
 Address of server, or NULL if none specified (i.e. default or local)
const char * port ()
 Server port number we're connected to.
int backendpid () const throw ()
 Process ID for backend process.
int sock () const throw ()
 Socket currently used for connection, or -1 for none. Use with care!
int get_notifs ()
 Check for pending notifications and take appropriate action.
int await_notification ()
 Wait for a notification to come in.
int await_notification (long seconds, long microseconds)
 Wait for a notification to come in, or for given timeout to pass.
prepare::declaration prepare (const std::string &name, const std::string &definition)
 Define a prepared statement.
prepare::declaration prepare (const std::string &definition)
 Define a nameless prepared statement.
void unprepare (const std::string &name)
 Drop prepared statement.
void prepare_now (const std::string &name)
 Request that prepared statement be registered with the server.
template<typename TRANSACTOR >
void perform (const TRANSACTOR &T, int Attempts)
 Perform the transaction defined by a transactor-based object.
template<typename TRANSACTOR >
void perform (const TRANSACTOR &T)
 Perform the transaction defined by a transactor-based object.
bool supports (capability c) const throw ()
 Does this connection seem to support the given capability?
int protocol_version () const throw ()
 What version of the PostgreSQL protocol is this connection using?
int server_version () const throw ()
 What version of the PostgreSQL server are we connected to?

Additional Inherited Members

- Public Types inherited from pqxx::connection_base
enum  capability {
  cap_prepared_statements, cap_create_table_with_oids, cap_nested_transactions, cap_cursor_scroll,
  cap_cursor_with_hold, cap_cursor_update, cap_cursor_fetch_0, cap_table_column,
  cap_read_only_transactions, cap_statement_varargs, cap_prepare_unnamed_statement, cap_parameterized_statements,
  cap_end
}
 Session capabilities. More...
- Protected Member Functions inherited from pqxx::connection_base
 connection_base (connectionpolicy &)
void init ()
void close () throw ()
void wait_read () const
void wait_read (long seconds, long microseconds) const
void wait_write () const

Detailed Description

template<typename CONNECTPOLICY>
class pqxx::basic_connection< CONNECTPOLICY >

The ultimate template that defines a connection type.

Combines connection_base (the highly complex class implementing essentially all connection-related functionality) with a connection policy (a simpler helper class determining the rules that govern the process of setting up the underlying connection to the backend).

The pattern used to combine these classes is the same as for basic_transaction. Through use of the template mechanism, the policy object is embedded in the basic_connection object so that it does not need to be allocated separately. At the same time this construct avoids the need for any virtual functions in this class, which reduces risks of bugs in construction and destruction; as well as any need to templatize the larger body of code in the connection_base class which might otherwise lead to unacceptable code duplication.

Constructor & Destructor Documentation

template<typename CONNECTPOLICY >
pqxx::basic_connection< CONNECTPOLICY >::basic_connection ( )
template<typename CONNECTPOLICY >
pqxx::basic_connection< CONNECTPOLICY >::basic_connection ( const std::string &  opt)
explicit
template<typename CONNECTPOLICY >
pqxx::basic_connection< CONNECTPOLICY >::basic_connection ( const char  opt[])
explicit
template<typename CONNECTPOLICY >
pqxx::basic_connection< CONNECTPOLICY >::~basic_connection ( ) throw ()

Member Function Documentation

template<typename CONNECTPOLICY >
const std::string& pqxx::basic_connection< CONNECTPOLICY >::options ( ) const throw ()

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00061.html0000664000175000017500000002253212076703501015237 00000000000000 libpqxx: pqxx::internal::namedclass Class Reference
pqxx::internal::namedclass Class Reference

#include <util.hxx>

Inheritance diagram for pqxx::internal::namedclass:
pqxx::internal::transactionfocus pqxx::transaction_base pqxx::pipeline pqxx::subtransaction pqxx::tablestream pqxx::dbtransaction pqxx::nontransaction pqxx::tablereader pqxx::tablewriter pqxx::basic_robusttransaction pqxx::basic_transaction pqxx::subtransaction pqxx::robusttransaction< ISOLATIONLEVEL > pqxx::transaction< ISOLATIONLEVEL, READWRITE >

Public Member Functions

 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Constructor & Destructor Documentation

pqxx::internal::namedclass::namedclass ( const std::string &  Classname,
const std::string &  Name = "" 
)

Member Function Documentation

const std::string& pqxx::internal::namedclass::classname ( ) const throw ()
string pqxx::internal::namedclass::description ( ) const
const std::string& pqxx::internal::namedclass::name ( ) const throw ()

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/a00128_source.html0000664000175000017500000011246512076703500016627 00000000000000 libpqxx: config.h Source File
config.h
1 /* include/pqxx/config.h. Generated from config.h.in by configure. */
2 /* include/pqxx/config.h.in. Generated from configure.ac by autoheader. */
3 
4 /* Define to 1 if you have the <dlfcn.h> header file. */
5 #define HAVE_DLFCN_H 1
6 
7 /* Define to 1 if you have the <inttypes.h> header file. */
8 #define HAVE_INTTYPES_H 1
9 
10 /* Define to 1 if you have the `pq' library (-lpq). */
11 #define HAVE_LIBPQ 1
12 
13 /* Define to 1 if you have the <memory.h> header file. */
14 #define HAVE_MEMORY_H 1
15 
16 /* Define to 1 if you have the <stdint.h> header file. */
17 #define HAVE_STDINT_H 1
18 
19 /* Define to 1 if you have the <stdlib.h> header file. */
20 #define HAVE_STDLIB_H 1
21 
22 /* Define to 1 if you have the <strings.h> header file. */
23 #define HAVE_STRINGS_H 1
24 
25 /* Define to 1 if you have the <string.h> header file. */
26 #define HAVE_STRING_H 1
27 
28 /* Define to 1 if you have the <sys/stat.h> header file. */
29 #define HAVE_SYS_STAT_H 1
30 
31 /* Define to 1 if you have the <sys/types.h> header file. */
32 #define HAVE_SYS_TYPES_H 1
33 
34 /* Define to 1 if you have the <unistd.h> header file. */
35 #define HAVE_UNISTD_H 1
36 
37 /* Define to the sub-directory in which libtool stores uninstalled libraries.
38  */
39 #define LT_OBJDIR ".libs/"
40 
41 /* Name of package */
42 #define PACKAGE "libpqxx"
43 
44 /* Define to the address where bug reports for this package should be sent. */
45 #define PACKAGE_BUGREPORT "Jeroen T. Vermeulen <jtv@xs4all.nl>"
46 
47 /* Define to the full name of this package. */
48 #define PACKAGE_NAME "libpqxx"
49 
50 /* Define to the full name and version of this package. */
51 #define PACKAGE_STRING "libpqxx 3.1.1"
52 
53 /* Define to the one symbol short name of this package. */
54 #define PACKAGE_TARNAME "libpqxx"
55 
56 /* Define to the home page for this package. */
57 #define PACKAGE_URL ""
58 
59 /* Define to the version of this package. */
60 #define PACKAGE_VERSION "3.1.1"
61 
62 /* name of standard library namespace (normally "std") */
63 #define PGSTD std
64 
65 /* namespace of TR1 standard extensions (e.g. "std" or "std::tr1") */
66 #define PQXXTR1 std::tr1
67 
68 /* Define if <iterator> lacks an iterator template definition */
69 /* #undef PQXX_BROKEN_ITERATOR */
70 
71 /* Define if function overloading using "using" breaks */
72 /* #undef PQXX_BROKEN_USING_DECL */
73 
74 /* Define if you have the <boost/smart_ptr.hpp> header */
75 /* #undef PQXX_HAVE_BOOST_SMART_PTR */
76 
77 /* Define if std provides the char_traits template and <char> specialization
78  */
79 #define PQXX_HAVE_CHAR_TRAITS 1
80 
81 /* Define if count_if() works according to the standard */
82 #define PQXX_HAVE_COUNT_IF 1
83 
84 /* Define if preprocessor supports pragma "message" */
85 #define PQXX_HAVE_CPP_PRAGMA_MESSAGE 1
86 
87 /* Define if preprocessor supports nonstandard "warning" directive */
88 /* #undef PQXX_HAVE_CPP_WARNING */
89 
90 /* Define if math.h defines C99 isinf() */
91 /* #undef PQXX_HAVE_C_ISINF */
92 
93 /* Define if math.h defines C99 isnan() */
94 /* #undef PQXX_HAVE_C_ISNAN */
95 
96 /* Define if C math header defines NAN */
97 #define PQXX_HAVE_C_NAN 1
98 
99 /* Define if distance() works according to the standard */
100 #define PQXX_HAVE_DISTANCE 1
101 
102 /* Define if g++ supports deprecated attribute, as in g++ 4.0 */
103 #define PQXX_HAVE_GCC_DEPRECATED 1
104 
105 /* Define if g++ supports visibility attribute, as in g++ 4.0 */
106 #define PQXX_HAVE_GCC_VISIBILITY 1
107 
108 /* Define if stringstream::imbue works */
109 #define PQXX_HAVE_IMBUE 1
110 
111 /* Define if you have the <ios> header */
112 #define PQXX_HAVE_IOS 1
113 
114 /* Define if <limits> exists */
115 #define PQXX_HAVE_LIMITS 1
116 
117 /* Define if you have the <locale> header */
118 #define PQXX_HAVE_LOCALE 1
119 
120 /* Define if the compiler supports the standard "long double" type */
121 #define PQXX_HAVE_LONG_DOUBLE 1
122 
123 /* Define if the compiler supports "long long" types */
124 /* #undef PQXX_HAVE_LONG_LONG */
125 
126 /* Define if libpq has lo_tell() */
127 #define PQXX_HAVE_LO_TELL 1
128 
129 /* Define if C99 fnan()/nan()/lnan() are available */
130 #define PQXX_HAVE_NAN 1
131 
132 /* Define if the system has the poll() function (mainly GNU/Linux) */
133 #define PQXX_HAVE_POLL 1
134 
135 /* Define if libpq has PQcancel() and friends */
136 #define PQXX_HAVE_PQCANCEL 1
137 
138 /* Define if libpq has PQclientEncoding() */
139 #define PQXX_HAVE_PQCLIENTENCODING 1
140 
141 /* Define if libpq has PQdescribePortal() */
142 #define PQXX_HAVE_PQDESCRIBEPORTAL 1
143 
144 /* Define if libpq has PQencryptPassword() */
145 #define PQXX_HAVE_PQENCRYPTPASSWORD 1
146 
147 /* Define if libpq has PQescapeBytea() */
148 #define PQXX_HAVE_PQESCAPEBYTEA 1
149 
150 /* Define if libpq has PQescapeByteaConn() */
151 #define PQXX_HAVE_PQESCAPEBYTEACONN 1
152 
153 /* Define if libpq has PQescapeString() */
154 #define PQXX_HAVE_PQESCAPESTRING 1
155 
156 /* Define if libpq has PQescapeStringConn() */
157 #define PQXX_HAVE_PQESCAPESTRINGCONN 1
158 
159 /* Define if libpq has PQexecParams() */
160 #define PQXX_HAVE_PQEXECPARAMS 1
161 
162 /* Define if libpq has PQexecPrepared() */
163 #define PQXX_HAVE_PQEXECPREPARED 1
164 
165 /* Define if libpq has PQfreemem() */
166 #define PQXX_HAVE_PQFREEMEM 1
167 
168 /* Define if libpq has PQfreeNotify() */
169 #define PQXX_HAVE_PQFREENOTIFY 1
170 
171 /* Define if libpq has PQftable() */
172 #define PQXX_HAVE_PQFTABLE 1
173 
174 /* Define if libpq has PQftablecol() */
175 #define PQXX_HAVE_PQFTABLECOL 1
176 
177 /* Define if libpq has PQisthreadsafe() */
178 #define PQXX_HAVE_PQISTHREADSAFE 1
179 
180 /* Define if libpq has PQmblen() */
181 #define PQXX_HAVE_PQMBLEN 1
182 
183 /* Define if libpq has PQprepare() */
184 #define PQXX_HAVE_PQPREPARE 1
185 
186 /* Define if libpq has PQprotocolVersion() */
187 #define PQXX_HAVE_PQPROTOCOLVERSION 1
188 
189 /* Define if libpq has PQputCopyData() and related functions */
190 #define PQXX_HAVE_PQPUTCOPY 1
191 
192 /* Define if libpq has PQresultErrorField() and PG_DIAG_STATEMENT_POSITION */
193 #define PQXX_HAVE_PQRESULTERRORFIELD 1
194 
195 /* Define if libpq has PQserverVersion() */
196 #define PQXX_HAVE_PQSERVERVERSION 1
197 
198 /* Define if libpq has PQunescapeBytea() */
199 #define PQXX_HAVE_PQUNESCAPEBYTEA 1
200 
201 /* Define if std::numeric_limits has quiet_NaN() */
202 #define PQXX_HAVE_QUIET_NAN 1
203 
204 /* Define if reverse_iterator template works as expected */
205 #define PQXX_HAVE_REVERSE_ITERATOR 1
206 
207 /* Define if compiler has shared_ptr */
208 #define PQXX_HAVE_SHARED_PTR 1
209 
210 /* Define if POSIX sleep() exists */
211 #define PQXX_HAVE_SLEEP 1
212 
213 /* Define if you have the <streambuf> header; if not, <streambuf.h> is used */
214 #define PQXX_HAVE_STREAMBUF 1
215 
216 /* Define if strerror_r exists */
217 #define PQXX_HAVE_STRERROR_R 1
218 
219 /* Define for GNU-style strerror_r */
220 #define PQXX_HAVE_STRERROR_R_GNU 1
221 
222 /* Define if string class has the clear() function */
223 #define PQXX_HAVE_STRING_CLEAR 1
224 
225 /* Define if strlcpy exists */
226 /* #undef PQXX_HAVE_STRLCPY */
227 
228 /* Define if strnlen exists */
229 #define PQXX_HAVE_STRNLEN 1
230 
231 /* Define if the sys/select.h header defines a working select() and friends,
232  as per POSIX 1003.1-2001 */
233 #define PQXX_HAVE_SYS_SELECT_H 1
234 
235 /* Define if select() accepts NULL fd_set arguments */
236 /* #undef PQXX_SELECT_ACCEPTS_NULL */
237 
238 /* Define if headers for TR1 extension to standard live in tr1/ */
239 #define PQXX_TR1_HEADERS 1
240 
241 /* Define to 1 if you have the ANSI C header files. */
242 #define STDC_HEADERS 1
243 
244 /* Version number of package */
245 #define VERSION "3.1.1"
libpqxx-3.1.1/doc/html/Reference/a00198.js0000664000175000017500000000040612076703502014717 00000000000000var a00198 = [ [ "separated_list", "a00198.html#ga5123fc11695c56a283bf5d748c04f4ed", null ], [ "separated_list", "a00198.html#gab10091fa8ffba17cf84c8583838e501e", null ], [ "separated_list", "a00198.html#ga17dcbbfd542677b5b7ccd810dc8dd7f2", null ] ];libpqxx-3.1.1/doc/html/Reference/a00063.png0000664000175000017500000000204312076703501015054 00000000000000‰PNG  IHDRˆÊãÌPLTEÿÿÿèìõuÂÀÀÀ‰ÜtRNSÿÿÿÿÿÿÿÕÊT2²IDATxíërë y&ïÿȇ;—ÆQ“:U&Ÿ1DˆEHä/”ÏV?µ»H¿¼Kü¬Ø:œ¹¼.œllëÂUºçÆ¡÷ÃWváþâÃO¸´Ët/í(z½³‰üÄ-]ØÅ¥‡dŸù%ÎÉ“ÚcˆCq8ŽÇG‰T4îóR“†«}-tžßû±É+~òÄ>žüŽM֪͋æÅ·ôÌÇTœöñѯÎõ¼Ù¾ÏÏVõû¼±Nï}}¥Ô—fçm'-7RDëêþ·užÎ¥Ý&g•ê¹AW›z :7ÔNÓgG—†T‚ëaµ©2SCNvûuû}7"““iì¸Ã· ÕEƼÉ^ovç¯ÊéÉRõÕ®ßwuç5åG‚Ž«bÊ‘{ûc?Ù¬ÊÝÑWitn§ï»”·­šTx[µ©ã(4_-º–øSáä²›êUYÏs²«ÕZn}ß©KöúþùéVÝw}°Ïm»ïLG?·Ìÿï÷Ý’ý¾[2‚ý¾[2‚‘®äÞV?-×è¼Q€eµ4Ýã±2ÞÒtna¼µé¼f¬r:›œÀ&§°Éélr:›œÀ&§°Éélr:›œÀ&§°éoÑmÛ¶-+6‘Eåt""69ˆˆM/Ó‘[Š–WÆw|–NDäLvº !OŽÏþ2†Ô‹¿Ô7mÝ~mFÉAkvû5Ž“ŸÐ•Éþ%ÈÉ·™T 2¾ss°;¬!AÆ÷Ó³Øí½¶§þYgÖ¼ðó ñÑI·/]<µj?œ—èŠ}™œÞ_¤›â>;Þ¯zäsºÃd™¾_çݱ*.èžçÝL÷¼»¨Ù^*ýdËà|²ªœçšc·³¿_³–»MDäúYºœùljˆœê·ÅNDd9ˆˆMN'"bS¤Û¶m[UoÔ`Y-M÷x¬Œ·4]„[om:¯Y«œÀ&§°Éélr:›œÀ&§°Éélr:›œÀ&§°Éélú[t!„°¬‹Êélr:›ÞIwßS´¼eüßèžêŠ.ŽçÒ•Ó^”Û1ššÒËïÙŸí3UÓ.²Ù`§KºüìŠÀáÛßö½³Q5Ö›ƒÀ^×±Û;hϳŸ§FgÖ´ðèœìõºüÔ»ýH?D7ÅsºÃª‡@~›N¥ØiUܦ{žw–Ø]Ôìä¸Wݜޥ&'«Êy®YÓɾ|¼UN`Ó;ÿÉÞ+§°ÉélJ—m!,ªc 1|;_ÀÒIEND®B`‚libpqxx-3.1.1/doc/html/Reference/a00289.html0000664000175000017500000002700212076703501015250 00000000000000 libpqxx: Member List
pqxx::tablewriter Member List

This is the complete list of members for pqxx::tablewriter, including all inherited members.

base_close()pqxx::tablestreamprotected
classname() const pqxx::internal::namedclass
columnlist(ITER colbegin, ITER colend)pqxx::tablestreamprotectedstatic
complete()pqxx::tablewritervirtual
description() const pqxx::internal::namedclass
generate(IT Begin, IT End) const pqxx::tablewriter
generate(const TUPLE &) const pqxx::tablewriter
insert(IT Begin, IT End)pqxx::tablewriter
insert(const TUPLE &)pqxx::tablewriter
is_finished() const pqxx::tablestreamprotected
m_Transpqxx::internal::transactionfocusprotected
name() const pqxx::internal::namedclass
namedclass(const std::string &Classname, const std::string &Name="")pqxx::internal::namedclass
NullStr() const pqxx::tablestreamprotected
operator<<(const TUPLE &)pqxx::tablewriter
operator<<(tablereader &)pqxx::tablewriter
push_back(IT Begin, IT End)pqxx::tablewriter
push_back(const TUPLE &)pqxx::tablewriter
reg_pending_error(const std::string &)pqxx::internal::transactionfocusprotected
register_me()pqxx::internal::transactionfocusprotected
registered() const pqxx::internal::transactionfocusprotected
reserve(size_type)pqxx::tablewriter
size_type typedefpqxx::tablewriter
tablestream(transaction_base &Trans, const std::string &Null=std::string())pqxx::tablestreamexplicit
tablewriter(transaction_base &, const std::string &WName, const std::string &Null=std::string())pqxx::tablewriter
tablewriter(transaction_base &, const std::string &WName, ITER begincolumns, ITER endcolumns)pqxx::tablewriter
tablewriter(transaction_base &T, const std::string &WName, ITER begincolumns, ITER endcolumns, const std::string &Null)pqxx::tablewriter
transactionfocus(transaction_base &t)pqxx::internal::transactionfocusexplicit
unregister_me()pqxx::internal::transactionfocusprotected
write_raw_line(const std::string &)pqxx::tablewriter
~tablestream()=0pqxx::tablestreampure virtual
~tablewriter()pqxx::tablewriter
libpqxx-3.1.1/doc/html/Reference/functions_0x72.html0000664000175000017500000002304512076703502017221 00000000000000 libpqxx: Class Members
Here is a list of all class members with links to the classes they belong to:

- r -

libpqxx-3.1.1/doc/html/Reference/a00074.html0000664000175000017500000002701612076703501015245 00000000000000 libpqxx: pqxx::plpgsql_raise Class Reference
pqxx::plpgsql_raise Class Reference

Exception raised in PL/pgSQL procedure. More...

#include <except.hxx>

Inheritance diagram for pqxx::plpgsql_raise:
pqxx::plpgsql_error pqxx::sql_error pqxx::failure pqxx::pqxx_exception

Public Member Functions

 plpgsql_raise (const std::string &err)
 plpgsql_raise (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::plpgsql_error
 plpgsql_error (const std::string &err)
 plpgsql_error (const std::string &err, const std::string &Q)
- Public Member Functions inherited from pqxx::sql_error
 sql_error ()
 sql_error (const std::string &)
 sql_error (const std::string &, const std::string &Q)
virtual ~sql_error () throw ()
const std::string & query () const throw ()
 The query whose execution triggered the exception.
- Public Member Functions inherited from pqxx::failure
 failure (const std::string &)
- Public Member Functions inherited from pqxx::pqxx_exception
virtual ~pqxx_exception ()=0 throw ()
 Support run-time polymorphism, and keep this class abstract.
virtual const std::exception & base () const =0 throw ()
 Return std::exception base-class object.

Detailed Description

Exception raised in PL/pgSQL procedure.

Constructor & Destructor Documentation

pqxx::plpgsql_raise::plpgsql_raise ( const std::string &  err)
explicit
pqxx::plpgsql_raise::plpgsql_raise ( const std::string &  err,
const std::string &  Q 
)

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00208.html0000664000175000017500000004653412076703501015252 00000000000000 libpqxx: Member List
pqxx::basic_connection< CONNECTPOLICY > Member List

This is the complete list of members for pqxx::basic_connection< CONNECTPOLICY >, including all inherited members.

activate()pqxx::connection_base
adorn_name(const std::string &)pqxx::connection_base
await_notification()pqxx::connection_base
await_notification(long seconds, long microseconds)pqxx::connection_base
backendpid() const pqxx::connection_base
basic_connection()pqxx::basic_connection< CONNECTPOLICY >
basic_connection(const std::string &opt)pqxx::basic_connection< CONNECTPOLICY >explicit
basic_connection(const char opt[])pqxx::basic_connection< CONNECTPOLICY >explicit
cancel_query()pqxx::connection_base
cap_create_table_with_oids enum valuepqxx::connection_base
cap_cursor_fetch_0 enum valuepqxx::connection_base
cap_cursor_scroll enum valuepqxx::connection_base
cap_cursor_update enum valuepqxx::connection_base
cap_cursor_with_hold enum valuepqxx::connection_base
cap_end enum valuepqxx::connection_base
cap_nested_transactions enum valuepqxx::connection_base
cap_parameterized_statements enum valuepqxx::connection_base
cap_prepare_unnamed_statement enum valuepqxx::connection_base
cap_prepared_statements enum valuepqxx::connection_base
cap_read_only_transactions enum valuepqxx::connection_base
cap_statement_varargs enum valuepqxx::connection_base
cap_table_column enum valuepqxx::connection_base
capability enum namepqxx::connection_base
close()pqxx::connection_baseprotected
connection_base(connectionpolicy &)pqxx::connection_baseexplicitprotected
dbname()pqxx::connection_base
deactivate()pqxx::connection_base
disconnect()pqxx::connection_base
esc(const char str[])pqxx::connection_base
esc(const char str[], size_t maxlen)pqxx::connection_base
esc(const std::string &str)pqxx::connection_base
esc_raw(const unsigned char str[], size_t len)pqxx::connection_base
get_noticer() const pqxx::connection_base
get_notifs()pqxx::connection_base
get_variable(const std::string &)pqxx::connection_base
hostname()pqxx::connection_base
inhibit_reactivation(bool inhibit)pqxx::connection_base
init()pqxx::connection_baseprotected
is_open() const pqxx::connection_base
options() const pqxx::basic_connection< CONNECTPOLICY >
perform(const TRANSACTOR &T, int Attempts)pqxx::connection_base
perform(const TRANSACTOR &T)pqxx::connection_base
port()pqxx::connection_base
prepare(const std::string &name, const std::string &definition)pqxx::connection_base
prepare(const std::string &definition)pqxx::connection_base
prepare_now(const std::string &name)pqxx::connection_base
process_notice(const char[])pqxx::connection_base
process_notice(const std::string &)pqxx::connection_base
protocol_version() const pqxx::connection_base
quote(const T &t)pqxx::connection_base
server_version() const pqxx::connection_base
set_client_encoding(const std::string &Encoding)pqxx::connection_base
set_noticer(std::auto_ptr< noticer > N)pqxx::connection_base
set_variable(const std::string &Var, const std::string &Value)pqxx::connection_base
simulate_failure()pqxx::connection_base
sock() const pqxx::connection_base
supports(capability c) const pqxx::connection_base
trace(FILE *)pqxx::connection_base
unprepare(const std::string &name)pqxx::connection_base
username()pqxx::connection_base
wait_read() const pqxx::connection_baseprotected
wait_read(long seconds, long microseconds) const pqxx::connection_baseprotected
wait_write() const pqxx::connection_baseprotected
~basic_connection()pqxx::basic_connection< CONNECTPOLICY >
libpqxx-3.1.1/doc/html/Reference/a00102.html0000664000175000017500000004513012076703501015232 00000000000000 libpqxx: pqxx::tablestream Class Reference

Base class for streaming data to/from database tables. More...

#include <tablestream.hxx>

Inheritance diagram for pqxx::tablestream:
pqxx::internal::transactionfocus pqxx::internal::namedclass pqxx::tablereader pqxx::tablewriter

Public Member Functions

 tablestream (transaction_base &Trans, const std::string &Null=std::string())
virtual ~tablestream ()=0 throw ()
virtual void complete ()=0
 Finish stream action, check for errors, and detach from transaction.
- Public Member Functions inherited from pqxx::internal::transactionfocus
 transactionfocus (transaction_base &t)
- Public Member Functions inherited from pqxx::internal::namedclass
 namedclass (const std::string &Classname, const std::string &Name="")
const std::string & name () const throw ()
const std::string & classname () const throw ()
std::string description () const

Protected Member Functions

const std::string & NullStr () const
bool is_finished () const throw ()
void base_close ()
- Protected Member Functions inherited from pqxx::internal::transactionfocus
void register_me ()
void unregister_me () throw ()
void reg_pending_error (const std::string &) throw ()
bool registered () const throw ()

Static Protected Member Functions

template<typename ITER >
static std::string columnlist (ITER colbegin, ITER colend)
 Construct a comma-separated column list from given sequence.

Additional Inherited Members

- Protected Attributes inherited from pqxx::internal::transactionfocus
transaction_basem_Trans

Detailed Description

Base class for streaming data to/from database tables.

A Tablestream enables optimized batch read or write access to a database table using PostgreSQL's COPY TO STDOUT and COPY FROM STDIN commands, respectively. These capabilities are implemented by its subclasses tablereader and tablewriter.

A Tablestream exists in the context of a transaction, and no other streams or queries may be applied to that transaction as long as the stream remains open.

Constructor & Destructor Documentation

pqxx::tablestream::tablestream ( transaction_base Trans,
const std::string &  Null = std::string() 
)
explicit

References tablestream().

Referenced by tablestream().

pqxx::tablestream::~tablestream ( ) throw ()
pure virtual

Member Function Documentation

void pqxx::tablestream::base_close ( )
protected
template<typename ITER >
std::string pqxx::tablestream::columnlist ( ITER  colbegin,
ITER  colend 
)
staticprotected

Construct a comma-separated column list from given sequence.

References pqxx::separated_list().

Referenced by pqxx::tablereader::tablereader(), and pqxx::tablewriter::tablewriter().

virtual void pqxx::tablestream::complete ( )
pure virtual

Finish stream action, check for errors, and detach from transaction.

It is recommended that you call this function before the tablestream's destructor is run. This function will check for any final errors which may not become apparent until the transaction is committed otherwise.

As an added benefit, this will free up the transaction while the tablestream object itself still exists.

Implemented in pqxx::tablewriter, and pqxx::tablereader.

bool pqxx::tablestream::is_finished ( ) const throw ()
protected
const std::string& pqxx::tablestream::NullStr ( ) const
protected

The documentation for this class was generated from the following files:
libpqxx-3.1.1/doc/html/Reference/modules.html0000664000175000017500000001215112076703502016075 00000000000000 libpqxx: Modules
Modules
Here is a list of all modules:
oPerformance features
oPrepared statements
oString conversion
oUtility functions
oString escapingReveals "unescaped" version of PostgreSQL bytea string
oConnection classes
oError/warning output
oTransaction classesAbstract base class responsible for bracketing a backend transaction
oException classes
oNotifications and Listeners"Observer" base class for notifications
\Transactor frameworkWrapper for transactions that automatically restarts them on failure
libpqxx-3.1.1/doc/html/Reference/a00038.html0000664000175000017500000001352312076703501015243 00000000000000 libpqxx: pqxx::internal::Escaper< IT > Class Template Reference
pqxx::internal::Escaper< IT > Class Template Reference

#include <tablewriter.hxx>

Public Member Functions

 Escaper (const std::string &null)
std::string operator() (IT i) const

Constructor & Destructor Documentation

template<typename IT >
pqxx::internal::Escaper< IT >::Escaper ( const std::string &  null)
explicit

Member Function Documentation

template<typename IT >
std::string pqxx::internal::Escaper< IT >::operator() ( IT  i) const

The documentation for this class was generated from the following file:
libpqxx-3.1.1/doc/html/Reference/a00206.html0000664000175000017500000001255312076703501015242 00000000000000 libpqxx: Deprecated List
Deprecated List
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member escape_binary
Use the transaction's esc_raw() functions instead
Member pqxx::notify_listener::Conn () const
Use conn() instead.
Member pqxx::result::tuple::tuple (const result *r, result::size_type i)
Do not use this constructor. It will become private.
Member pqxx::trigger
The trigger class from libpqxx 1.x/2.x is now notify_listener.
libpqxx-3.1.1/doc/html/Reference/jquery.js0000664000175000017500000036534612076703500015433 00000000000000/*! jQuery v1.7.1 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")), f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c) {if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); /*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */ (function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery); /* * jQuery UI Resizable 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizables * * Depends: * jquery.ui.core.js * jquery.ui.mouse.js * jquery.ui.widget.js */ (function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e
');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),ea.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p &&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery); /* * jQuery hashchange event - v1.3 - 7/21/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ (function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('